(57)【特許請求の範囲】
【請求項１】
記憶部、レジスタＡ、Ｂを有する算術演算部、通信部、これら各部を制御する制御部からなる暗号鍵生成装置であって、
ｌを正の整数とし、ｍを正の整数とし、ｎをｌ以下の正の整数で２ｎ＝ｌ＋ｍを満たすものとし、ｐLenを正の整数とし、ｋを正の整数とし、２ｎビットの長さを持つ記憶領域を記憶部に用意する場合において、
ｌビットのレジスタＡに１を代入して初期化し、レジスタＡを記憶部に保管する手段と、
ｍビットのレジスタＢに１を代入して初期化し、レジスタＢを記憶部に保管する手段と、
Ａの値を１増加させて、レジスタＡを記憶部に保管する手段と、
Ｂの値を１増加させて、レジスタＢを記憶部に保管する手段と、
レジスタＡを記憶部から読み出す手段と、
レジスタＢを記憶部から読み出す手段と、
レジスタＡとレジスタＢの情報を連結することをＡ||Ｂと表すとして、算術演算部を用いて、ＡとＢの情報をＡ||Ｂ||Ａの順番で連結し、それをＭとする手段と、
算術演算部を用いて、処理ブロック長がｎビットの共通鍵暗号を用いてＣＢＣモードでＭを暗号化し、その結果をＣとして、左側ｎ＋１ビットから３ｎビットまでを選択して、その結果をＤとする手段と、
算術演算部を用いて、このようなＤをＢの値を１増加させながら、長さｐLenに必要なだけ生成して連結し、長さｐLenのビット列Ｐ’を得て、このビット列をビット長ｐLenの整数Ｐ”とし、この値付近の素数Ｐを得る手段と、
算術演算部を用いてこのようなＰをＢの値を１増加させながらｋ個生成し、通信部を通して順にＰ1,Ｐ2,・・・,Ｐkとして出力する手段と、
装置の再起動など、何らかのイベントが発生した時にＡの値を１増加させ、Ｂを１に初期化する手段とからなる暗号鍵生成装置。
【請求項２】
ｌを正の整数とし、ｍを正の整数とし、ｎをｌ以下の正の整数で２ｎ＝ｌ＋ｍを満たすものとし、ｐLenを正の整数とし、ｋを正の整数とし、２ｎビットの長さを持つ記憶領域を記憶部に用意する場合において、
ｌビットのレジスタＡに１を代入して初期化レジスタＡを記憶部に保管する処理と、ｍビットのレジスタＢに１を代入して初期化レジスタＢを記憶部に保管する処理と、
レジスタＡとレジスタＢを記憶部から読み出す処理と、
レジスタＡとレジスタＢの情報を連結することをＡ||Ｂと表すとして、ＡとＢの情報をＡ||Ｂ||Ａの順番で連結し、それをＭとする処理と、
処理ブロック長がｎビットの共通鍵暗号を用いてＣＢＣモードでＭを暗号化し、その結果をＣとして、左側ｎ＋１ビットから３ｎビットまでを選択して、その結果をＤとする処理と、
このようなＤをＢの値を１増加させながら、長さｐLenに必要なだけ生成して連結し、長さｐLenのビット列Ｐ’を得て、このビット列をビット長ｐLenの整数Ｐ”とし、この値付近の素数Ｐを得る処理と、
このようなＰをＢの値を１増加させながらｋ個生成し、順にＰ1,Ｐ2,・・・,Ｐkとして出力する処理と、
再起動など、何らかのイベントが発生した時にＡの値を１増加させ、Ｂを１に初期化する処理と、をコンピュータに実行させる暗号鍵生成プログラム。
【請求項３】
ｌを正の整数とし、ｍを正の整数とし、ｎをｌ以下の正の整数で２ｎ＝ｌ＋ｍを満たすものとし、ｐLenを正の整数とし、ｋを正の整数とし、２ｎビットの長さを持つ記憶領域を記憶部に用意する場合において、
ｌビットのレジスタＡに１を代入して初期化レジスタＡを記憶部に保管する処理と、ｍビットのレジスタＢに１を代入して初期化レジスタＢを記憶部に保管する処理と、
レジスタＡとレジスタＢを記憶部から読み出す処理と、
レジスタＡとレジスタＢの情報を連結することをＡ||Ｂと表すとして、ＡとＢの情報をＡ||Ｂ||Ａの順番で連結し、それをＭとする処理と、
処理ブロック長がｎビットの共通鍵暗号を用いてＣＢＣモードでＭを暗号化し、その結果をＣとして、左側ｎ＋１ビットから３ｎビットまでを選択して、その結果をＤとする処理と、
このようなＤをＢの値を１増加させながら、長さｐLenに必要なだけ生成して連結し、長さｐLenのビット列Ｐ’を得て、このビット列をビット長ｐLenの整数Ｐ”とし、この値付近の素数Ｐを得る処理と、
このようなＰをＢの値を１増加させながらｋ個生成し、順にＰ1,Ｐ2,・・・,Ｐkとして出力する処理と、
再起動など、何らかのイベントが発生した時にＡの値を１増加させ、Ｂを１に初期化する処理と、をコンピュータに実行させる暗号鍵生成プログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、主に暗号技術で用いられる暗号鍵生成処理に関するものである。
【０００２】
【従来の技術】
データを秘匿するためには暗号化技術が有効である。データの暗号化には、共通鍵暗号と公開鍵暗号がある。公開鍵暗号ではデータを暗号化する鍵と復号化する鍵が異なっており、通常は暗号化に用いる鍵を一般に公開し、復号化に用いる鍵は利用者が秘密に保持する。公開される暗号化に用いる鍵から復号化に用いる鍵を求めることは、現在の数学的理論および計算機の計算能力をもってしても現実的な時間には完了しないものと信じられている。
【０００３】
上記性質をもつ公開鍵の具体的な実現にはいくつかの方法があるが、もっとも有名な方法としてＲＳＡ暗号がある。ＲＳＡ暗号は始めての公開鍵暗号として１９７７年に発表されたもので、素因数分解の困難性を安全性の根拠にしている（岡本、山本、「現代暗号」、産業図書、p.110、１９９７を参照。）。素因数分解の困難性とは、素数ｐとｑがあった場合、乗算ｎ＝ｐｑを行なう事は簡単であるが、逆にｎからｐとｑを求めることは難しいことをいう。ｎの桁数が大きくなるにつれて必要な計算時間は増大し、例えば６４桁と６５桁の素数の乗算結果である１２９桁の数を素因数分解するために、１９９４年に６００台の計算機を８カ月用いたことが報告されている（岡本、太田編、「暗号・ゼロ知識照明・数論」、共立出版、p.150、1995を参照。）。ＲＳＡ暗号では、素数ｐ,ｑを生成し、これを用いて秘密鍵ｄ、公開鍵ｅ,ｎが生成される（岡本、太田編、「暗号・ゼロ知識照明・数論」、共立出版、p.220、1995を参照。）。
他にも、素因数分解の困難性を用いた公開鍵暗号方式として、ＥＳＩＧＮ（イー・サイン）署名がある（岡本、太田編、「暗号・ゼロ知識照明・数論」、共立出版、p.221、1995を参照。）。ＥＳＩＧＮ署名では、素数ｐ,ｑを生成し、これを用いて秘密鍵ｐ,ｑ、公開鍵ｎが生成される。なお、公開鍵のうちｋは、ｐ,ｑと独立に決められるパラメータである（岡本、太田編、「暗号・ゼロ知識照明・数論」、共立出版、p.221、1995を参照。）。
いずれの方式でも、素数ｐ,ｑを生成すれば、秘密鍵および公開鍵が生成できる。以後、この素数ｐ,ｑを暗号鍵と呼ぶ。
【０００４】
ところでこのような素因数分解の困難性を基にした公開鍵暗号を利用する場合、次のような問題点があった。すなわち、あるネットワークシステムにおいて大量に暗号鍵を作成しなければならない場合、その暗号鍵の一意性の保証が必要となる。もし同じ素数が生成された場合、その後に生成される素数も同じである可能性があるため、結果として暗号鍵が同じになることが考えられる。このような事態において、鍵が暗号処理に利用された場合には他人に暗号文を復号される危険があること、また署名処理に利用された場合には他人へのなりすましが結果として可能となる。特に署名鍵がシステム内部で重複すると、本人性確認の手段として暗号処理を用いたとしても、その信頼性が満足されない。電子商取引などを行なうには確実な本人性確認が必要とされ、すなわち鍵の重複を避けることがシステムに求められる。
【０００５】
【発明が解決しようとする課題】
本発明はこのような背景のもとになされたものであり、大量に生成される素数の一意性を保証し、かつ記憶領域を多く必要としない暗号鍵生成装置である。一般に一意性を確保するためには、以前に生成させた素数などを記憶領域に保持しておき、過去に生成したものと比較させることにより一意性の判断を行う事ができるが、記憶する数が多くなるに従い、記憶装置の増大化、検索時間の増大化を招く。本発明は、周期が非常に長い数列と共通鍵暗号を組合せ、得られる数列を素数の一部とすることによって、過去に生成した素数を記憶することなく一意性を確保し、記憶装置や生成時間の増大を防いでいる。
【０００６】
【課題を解決するための手段】
ｌを正の整数とし、ｍを正の整数とし、ｎをｌ以下の正の整数で２ｎ＝ｌ＋ｍを満たすものとし、ｐLenを正の整数とし、ｋを正の整数とする。２ｎビットの長さを持つ記憶領域を用意する。
装置全体を初期化する段階では、ｌビットのレジスタＡに１を代入して初期化し、レジスタＡを記憶部に保管する。また、ｍビットのレジスタＢに１を代入して初期化レジスタＢを記憶部に保管する。
【０００７】
暗号鍵として、ｋ個の素数が必要となる場合、一つ一つのＰi（１≦ｉ≦ｋ）について、以下の処理を繰り返す。
Ｐiのビット長がｐLenであるとする。
【数１】
0003881273.tif 000002
Ａの値とＢの値を記憶部から読み出し、レジスタＡとレジスタＢの情報を連結することをＡ||Ｂと表すとして、ＡとＢの情報をＡ||Ｂ||Ａの順番で連結し、それをＭとする。（Ｍのビット長はｌ＋ｍ＋ｌ＝２ｌ＋ｍである。）処理部ブロック長がｎビットの共通鍵暗号を用いてＣＢＣ(Cipher Block Chining)モードでＭを暗号化し、その結果をＣとする。Ｃの左側からｎビットずつ区切り、順にＣ1,Ｃ2,・・・とし、Ｄ＝Ｃ2||Ｃ3とする。（Ｄのビット長は２ｎビットである。）得られたＤをＰiの左から順番に配置していく。そのたびに、Ｂの値は１つずつ増加させて処理を行う。
【０００８】
【数２】
0003881273.tif 000003
この値は、一般にｐLen以上なので、ｐLenビット分だけ選択し、それをビット列Ｐ’とする。このビット列を、ビット長ｐLenの整数Ｐ”とみなす。もし、Ｐ”が偶数ならば、１を加算して、それをあらためてＰ”とする、このＰ”について素数判定を行なう。もし素数判定により合成数と判断された場合、値に２を加算する。あるいは２を減算するなどの処理を行ない、Ｐ”付近の奇数から素数Ｐを探す。
【０００９】
得られたＰを、Ｐiとする。このような素数がｋ個出来たら、通信部を用いてＰ1,Ｐ2,・・・,Ｐkを出力する。
装置を一度停止するなどの処理を行なった場合、再起動時にはＡに１を加算する。同時に、Ｂは１に初期化しておく。
２ｎビットの値Ｄを次々に計算する際、Ｂの値は１つずつ増加している。また、装置の再起動時には、Ａに１が加算され、Ｂは１に初期化されている。
Ｍ＝Ａ||Ｂ||Ａとして、Ｍをｎビット共通鍵暗号を用いてＣＢＣモードで暗号化すると、まず１ブロック目はｌ≧ｎであるから、Ａの左からｎビットが暗号化される。この結果と２ブロック目、すなわちＡの左からｌ−ｎビットから右端までとＢすべてと排他的論理和をとり、ｎビット共通鍵暗号を用いて２ブロック目の暗号結果を得る。この２ブロック目の暗号結果には、Ａの一部の暗号結果と、Ｂが作用している。したがって、Ｂの値あるいはＡの値が変化した場合、暗号結果は変化する。
２ブロック目の暗号結果と、Ａの左からｎビットの排他的論理和をとり、ｎビット共通鍵暗号を用いて、３ブロック目の暗号結果を得る、２ブロック目の暗号結果は前述のように値が変化するので、やはり３ブロック目の暗号結果も変化する。
ｎビット共通鍵暗号を用いて、２ｎビットの長さの数からなる数列を構成する場合、Ａ||ＢやＢ||Ａのような並びは、左側に位置するＡあるいはＢが固定の値あるいは周期的な値をとるため、その暗号結果も同様の振舞いを示す。よって、暗号鍵に特定のパターンを持つことになり、暗号学的見知からこれは好ましくない。
【００１０】
【発明の実施の形態】
以下、図を用いて本発明に基づく実施例を説明する。
図１は本発明の実施例を示す暗号鍵生成装置の構成図である。
通信部は他装置との情報送受信に用いられ、暗号鍵取り出し要求を受け付けたり、結果（暗号鍵）を出力する箇所である。算術演算部は多倍長整数の乗算や剰余乗算などを行う箇所である。記憶部では、暗号鍵の保管を行う。制御部は、これら各部を制御する箇所である。
【００１１】
図２に暗号鍵生成装置の処理手順を示す。
(S0)ｌを正の整数とし、ｍを正の整数とし、ｎをｌ以下の正の整数で２ｎ＝ｌ＋ｍを満たすものとし、ｐLenを正の整数とし、ｋを正の整数とする。２ｎビットの長さを持つ記憶領域を記憶部に用意する。
(S1)装置全体を初期化する段階では、ｌビットのレジスタＡに１を代入して初期化し、レジスタＡを記憶部に保管する。また、ｍビットのレジスタＢに１を代入して初期化レジスタＢを記憶部に保管する。（図４、(１,１)参照）
(S2)暗号鍵として、ｋ個の素数が必要となる場合、一つ一つのＰi（１≦ｉ≦ｋ）について、以下の処理を繰り返す。
(S2-1)Ｐiのビット長がｐLenであるとする。
【数３】
0003881273.tif 000004
(S2-11)Ａの値とＢの値を記憶部から読み出し、レジスタＡとレジスタＢの情報を連結することをＡ||Ｂと表すとして、ＡとＢの情報をＡ||Ｂ||Ａの順番で連結し、それをＭとする。（Ｍのビット長はｌ＋ｍ＋ｌ＝２ｌ＋ｍである。）
(S2-12)処理ブロック長がｎビットの共通鍵暗号を用いてＣＢＣモードでＭを暗号化し、その結果をＣとする。（共通鍵暗号方式としてＦＥＡＬ（fast data encripherment algorithm)を用いてＣＢＣモードでＭを暗号化する例を図３に示す。）
(S2-13)Ｃの左側からｎビットずつ区切り、順にＣ1,Ｃ2,・・・とし、Ｄ＝Ｃ2||Ｃ3とする。（Ｄのビット長は２ｎビットである。）（図３参照）
(S2-14)得られたＤをＰiの左から順番に配置していく。そのたびに、Ｂの値は１つずつ増加させて処理を行う。（図４参照）
【数４】
0003881273.tif 000005
(S2-15)この値は、一般にｐLen以上なので、ｐLenビット分だけ選択し、それをビット列Ｐ’とする。このビット列を、ビット長ｐLenの整数Ｐ”とみなす。
(S2-16)もし、Ｐ”が偶数ならば、１を加算して、それをあらためてＰ”とする、(S2-17)このＰ”について素数判定を行なう。
(S2-18)もし素数判定により合成数と判断された場合、値に２を加算する。あるいは２を減算するなどの処理を行ない、Ｐ”付近の奇数から素数Ｐを探す。
(S2-19)得られたＰを、Ｐiとする。
(S3)このような素数がｋ個出来たら、通信部を用いてＰ1,Ｐ2,・・・,Ｐkを出力する。（素数Ｐ1,Ｐ2,・・・,Ｐkの生成処理は、算術演算部を用いて制御部により行う。）
【００１２】
具体例について説明する。
ｌ＝６４,ｍ＝６４,ｎ＝６４とする。６４ビットの共通鍵の具体例としてはＤＥＳやＦＥＡＬが挙げられる（岡本、「暗号理論入門」、共立出版、P.33、1993を参照。）。ここでは、ＦＥＡＬを使用することとする。１０２４ビットのＲＳＡ鍵を生成することにすると、ｐLen＝５１２,ｋ＝２であり、暗号鍵として５１２ビットの２つの素数Ｐ1,Ｐ2を生成することになる。
まずシステムは最初にＡ＝１,Ｂ＝１として記憶する。
おおまかな流れとして、システムが稼働し続けている間は、Ａの値は固定されており、Ｂの値は１つずつ増加していく。システムが一時停止した後、再起動する場合には、Ａの値が１増加し、Ｂの値は１に初期化される。
稼働し続けている間に、２ｎ＝１２８ビットの数は２64個生成することが出来る。ｐLen＝５１２ビットの数を埋めるには、１２８ビットの数が４個必要である。５１２ビットの素数が２つ必要なので、結局１２８ビットは８個必要である。したがって、２64／８＝２61個の鍵を生成することが出来る。これは１０18程度の大きさの数であり、現実にはほぼ無限の大きさと考えられる。
また、システムが再起動した時にはＡが１増加するが、ｌ＝６４なので、２64回の再起動に耐えられるものとなる。これも、現実的にはほぼ無限の大きさと考えられる。
【００１３】
さて、暗号鍵生成を行う場合、ビット長ｐLen＝５１２の素数Ｐ1,Ｐ2が必要となる。Ｐ1とＰ2を生成する作業の内容は同じなので、ここではＰ1の生成について記述する。
Ｐ1を生成するには、基になる数Ｐ1’を最初に構成する必要がある。まず、記憶しているＡ,Ｂを読み出し、１９２ビットのビット列Ｍ＝Ａ||Ｂ||ＡをＦＥＡＬアルゴリズムを用いて暗号化し、その結果をＣとする。この時、暗号化モードとしてはＣＢＣを用いる（岡本、「暗号理論入門」、共立出版、p.43、1993を参照。）。鍵Ｋ,初期ベクトルIV(Initial Value)は、システム固定としてよい。
【００１４】
このＣを、左から順番に６４ビットずつＣ1,Ｃ2,Ｃ3とする。余ったビットは以後使用しない。図３にあるように、ＣＢＣモードで行うことから、Ｃ2部分はＡおよびＢに依存しており、同様にＣ3部分もＡおよびＢに依存している。上記のように、稼働し続けている間で、このＣを連続して生成する場合、Ｂの値が変化していくので、Ｃ2,Ｃ3双方の値は毎回変化する。また、再起動後ではＢの値は１に戻るものの、Ａの値は１増加している。例えば、再起動後に（Ａ,Ｂ）＝（２,１）である場合、直前の再起動後では（Ａ,Ｂ）＝（１,１）であり、Ａの値が異なる。したがって、やはりＣ2,Ｃ3双方の値は毎回変化する。
【００１５】
得られたＣ2,Ｃ3を連結してＤとし、Ｐ1’の左から順に配置していく。図４には、例としてＡ＝１,Ｂ＝１におけるＰ1’の構成が示されている。また、図５には、例としてＡ＝２,Ｂ＝１におけるＰ1’の構成が示されている。５１２ビットの長さのビット列Ｐ1’が得られたら、Ｐ1’を５１２ビットの整数とみなす。これをＰ1”とする。この値に対して、素数判定を行なう。この判定にはRabin法が有名であるので、それを使っても良い（Bruce Schneier,「Applied Cryptography」,2nd edition,  John-Wiley and Sons, p.259,1996を参照。）。 素数でないとの判定がなされた場合、Ｐ1”:＝Ｐ1”＋２と値を加算させ、次の奇数として、再びRabin法を行う。素数定理により、５１２ビットの長さの整数における素数の頻度は、平均して約１７０〜１８０の奇数に１つとなっている（数学セミナーリーディングス、「数の世界」、日本評論社、p.97,１９８２を参照。）。そのため、この探索はかならずある有限の時間内で終わる。得られた素数をＰ1とする。
【００１６】
同様の手法に従って、素数Ｐ2を得る。なお、Ｐ2の基になるビット列Ｐ2’について、図４には例としてＡ＝１,Ｂ＝１におけるＰ2’の構成が示されている。また、図５には、例としてＡ＝２,Ｂ＝１におけるＰ2’の構成が示されている。いずれも、上記に示したＰ1’の生成直後にＰ2’が生成されると過程して図を構成している。（Ａ,Ｂ）の合計１２８ビットの値が異なれば、必ず（Ｃ2,Ｃ3）が異なる値になるので、この手順に従って生成されたＰ1,Ｐ2は、一意性を保つ。
【００１７】
なお、このような装置が突然停止した場合、一般には、どこまで（Ａ,Ｂ）を使用したかを保持しておかねばならない。本方式の場合、Ａは起動直後に１増加しておけば、あとは次の起動までは読み出しのみにしておけばよく、その後の停止まで安全に値を保持できる。Ｂは、記憶域に対し、次々に値を読み出したり書き込んだりしなけらばならないもので、突然停止した場合に直前のＢの値が保持されているかは確実ではない。このＢに関しては再起動時には再利用せず１に初期化することで、万が一の重複を防いでいる。
【００１８】
本発明の暗号鍵生成装置はＣＰＵやメモリ等を有するコンピュータと、ユーザが利用する端末と、記録媒体とから構成することができる。記録媒体は、ＣＤ−ＲＯＭ、磁気ディスク装置、半導体メモリ等の機械読み取り可能な記録媒体であり、ここに記録された暗号鍵生成プログラムは、コンピュータに読み取られ、コンピュータの動作を制御して前述した各処理を実現する。
【００１９】
【発明の効果】
以上のように本発明は、主に暗号技術で用いられる暗号鍵生成処理に関するものであって、生成された素数の一意性を用意に保証しつつ、ＩＣカード等の使用記憶領域を削減したものである。
【図面の簡単な説明】
【図１】本発明の実施例を示す暗号鍵生成装置の構成図。
【図２】図１の暗号鍵生成装置の処理手順を示す図。
【図３】Ｍ（＝Ａ||Ｂ||Ａ）から暗号化方式（ＦＥＡＬ）を用いてＣＢＣモードで暗号化する１２８ビットの値の生成を説明するための図。
【図４】レジスタＡ＝１,Ｂ＝１から始めるＰ1’およびＰ2’の生成を説明するための図。
【図５】レジスタＡ＝２,Ｂ＝１から始めるＰ1’およびＰ2’の生成を説明するための図。
【図１】
0003881273.tif 000006
【図２】
0003881273.tif 000007
【図３】
0003881273.tif 000008
【図４】
0003881273.tif 000009
【図５】
0003881273.tif 000010