(57)【特許請求の範囲】
【請求項１】
整数ｐ＋αi（ただしαiは整数、ｉ∈｛１，２，３，・・・，ｋ｝、ｋは正の整数。ただし、少なくとも一つのαｉが＋１以外かつ−１以外の整数である）が一つまたは複数の大きな素因数を持つような素数ｐを生成する素数生成装置において、
上記整数ｐ＋αiの因数ｓi（ただし、上記因数ｓiは一つまたは複数の大きな素数を因数として持ち、更にｒ≠ｔなるｒ，ｔ（ただしｒ，ｔ∈｛１，２，３，・・・，ｋ｝）に対してｓrとｓtとは互いに素であるように選択される）を生成する手段と、
上記素数ｐの候補ｐ’を、
ｐ’＝−（Σi=1,2,・・・,kαi（Πj=1,2,・・・,i-1,i+1,・・・,kｓj f(sj)）  ｍｏｄ  （Πi=1,2,・・・,kｓi））＋ｍΠi=1,2,・・・,kｓi  （ただしｍは整数、ｆ（ｓi）は上記因数ｓiに所定の演算を施した値。ｆ（ｓｉ）として、φ（ｓi）（ただしφはオイラーの関数）の定数倍となるものを用いる）
より生成する手段と、
上記整数ｍを選定しながら上記素数候補ｐ’が素数かどうかを判定する手段と、
素数と判定された素数候補ｐ’を出力する手段とを有することを特徴とする素数生成装置。
【請求項２】
上記因数ｓiに所定の演算を施して得られる値ｆ（ｓi）として、特にφ（ｓi）（ただしφはオイラーの関数）を用いる請求項１記載の素数生成装置。
【請求項３】
αi（ただしｉ＝１，２，３，・・・，ｋ）の中に特にαj＝１またはαj＝−１（ｊ∈｛１，２，３，・・・，ｋ｝）となるようなものが存在する請求項１または２記載の素数生成装置。
【請求項４】
αi＝１またはαi＝−１となるαiに対して、ｓiが２つの大きな素数の積から成る合成数である請求項１、２または３記載の素数生成装置。
【請求項５】
ｉ＝１とし、整数ｐ＋α１（αは＋１でも−１でもない整数）が２個以上の大きな素因数を持つような素数ｐを生成するために、上記整数ｐ＋α１の２個以上の大きな素因数をｔ1，ｔ2，ｔ3，・・・・・，ｔn（ｎは正の整数）とするとき、ｐ＝−α１＋２ａｔ1ｔ2ｔ3・・・・・ｔn（ただしａは整数）の形となる整数を素数候補とすることを特徴とする請求項１記載の素数生成装置。
【請求項６】
ｉ＝１または２とし、α１およびα２の少なくとも一方が＋１でも−１でもない整数であり、整数ｐ＋α１がｋ個の大きな素因数を持ちｐ＋α２がｍ個の大きな素因数を持つような素数ｐを生成するために、上記整数ｐ＋α１のｋ個の大きな素因数をｒ1，ｒ2，ｒ3，・・・・・，ｒk、上記整数ｐ＋α２のｍ個の大きな素因数をｓ1，ｓ2，ｓ3，・・・・・，ｓmとし、γ＝ｒ1ｒ2ｒ3・・・・・ｒk，σ＝ｓ1ｓ2ｓ3・・・・・ｓmとするときγとσとが互いに素となるようにｒ1，ｒ2，ｒ3，・・・・・，ｒkおよびｓ1，ｓ2，ｓ3，・・・・・，ｓmを決め、整数ＲをＲ≡γ-1  ｍｏｄ  σとしｂを整数としたとき、ｐ＝−α１＋（α２−α１）（ｂσ−Ｒ）γの形となる整数を素数候補とすることを特徴とする請求項１記載の素数生成装置。
【請求項７】
ｉ＝１または２とし、α１およびα２の少なくとも一方が＋１でも−１でもない整数であり、整数ｐ＋α１がｋ個の大きな素因数を持ちｐ＋α２がｍ個の大きな素因数を持つような素数ｐを生成するために、上記整数ｐ＋α１のｋ個の大きな素因数をｒ1，ｒ2，ｒ3，・・・・・，ｒk、上記整数ｐ＋α２のｍ個の大きな素因数をｓ1，ｓ2，ｓ3，・・・・・，ｓmとし、γ＝ｒ1ｒ2ｒ3・・・・・ｒk，σ＝ｓ1ｓ2ｓ3・・・・・ｓmとするときγとσとが互いに素となるようにｒ1，ｒ2，ｒ3，・・・・・，ｒkおよびｓ1，ｓ2，ｓ3，・・・・・，ｓmを決め、整数Ｕを
Ｕ＝−（２σγ−２  ｍｏｄ  γ）σ
となる整数Ｕと任意の整数ｍを用いて、ｐ＝Ｕ＋２ｍσγ−α１の形となる整数を素数候補とすることを特徴とする請求項１記載の素数生成装置。
【請求項８】
ｉ＝１または２とし、α１およびα２の少なくとも一方が＋１でも−１でもない整数であり、整数ｐ＋α１がｋ個の大きな素因数を持ちｐ＋α２のそれぞれがｍ個の大きな素因数を持つような素数ｐを生成する方法であって、上記整数ｐ＋α１のｋ個の大きな素因数をｒ1，ｒ2，ｒ3，・・・・・，ｒk、上記整数ｐ＋α２のｍ個の大きな素因数をｓ1，ｓ2，ｓ3，・・・・・，ｓmとし、γ＝ｒ1ｒ2ｒ3・・・・・ｒk，σ＝ｓ1ｓ2ｓ3・・・・・ｓmとするときγとσとが互いに素となるようにｒ1，ｒ2，ｒ3，・・・・・，ｒkおよびｓ1，ｓ2，ｓ3，・・・・・，ｓmを決め、γを法としたときのσの逆数Ｓと、σを法としたときのγの逆数Ｒと、Ｕ＝（−１＋ｉσ）＋（２＋ｊγ−ｉσ）  σＳ  ｍｏｄ  γσまたはＵ＝（１＋ｉσ）＋（−２＋ｉσ−ｊγ）  σＲ  ｍｏｄ  γσを満たす整数Ｕを用いて、ｐ＝Ｕ＋２ｍσγの形となる整数を素数候補とすることを特徴とする請求項１記載の素数生成装置。
【請求項９】
素数候補の素数性の判定するために、ふるい法または確率的素数判定法または確定的素数判定法を実行する請求項１から請求項８のいずれかに記載の素数生成装置。
【請求項１０】
素数候補の素数性の判定を行う方法としてふるい法を用い、その後確率的素数判定法または確定的素数判定法を用いる請求項１から請求項９のいずれかに記載の素数生成装置。
【請求項１１】
公開鍵暗号に用いる法数を合成するために上記素数候補を用いる請求項１から請求項１０のいずれかに記載の素数生成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は公開鍵暗号に用いる法数生成法に利用される素数判定・生成法に関するものであり、特に改良されたＰ−１法、Ｐ＋１法などの素因数分解攻撃等に対抗するための法数生成に用いることができる。
【０００２】
【従来の技術】
近年情報セキュリティを確保するための技術として、暗号技術とりわけ公開鍵暗号が注目を集めている。公開鍵暗号の一種であるＲＳＡ（Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｅｌｍａｎ）暗号は、データ保護、認証、電子署名を可能とし、その安全性の高さから公開鍵暗号の標準として確立されつつある。今後デジタル情報社会の発展と共にＲＳＡ暗号の利用機会は急速に拡大することが予想される。
【０００３】
一般にＲＳＡ暗号では、二つの大きな素数の積からなる合成数を法数として用いる。一般にこの素数の生成では、ふるい法と確率的素数判定法の二段階の素数判定が行われる。ふるい法は、素数性を判定する数を、予め用意された素数集合の要素で割ったときの剰余が零かどうか、つまり割り切れるかどうかで素数判定を行う方法である。確率的素数判定法は、調べたい数がある確率をもって合成数であることを判定する方法で、Ｆｅｒｍａｔ判定法、Ｓｏｌｏｖａｙ−Ｓｔｒａｓｓｅｎ法、Ｍｉｌｌｅｒ−Ｒａｂｉｎ法などが知られている。確率的素数判定法は計算負荷が大きいので、通常の素数生成では、ふるい法が併用されることが多い。
【０００４】
一般的な素数生成の手順は以下の通りである。まず乱数生成法によって奇数の乱数を生成する。乱数生成法には、非線形ＦＳＲ乱数発生方式などが知られている。この乱数に対してふるい法を実行する。これによって合成数と判定された場合は、この乱数を適当に増減するか、乱数を作り直すかして、再びふるい法による判定を行う。この処理をふるい法が合成数と判定しない素数候補値が得られるまで繰り返す。ふるい法が合成数と判定しない素数候補値が得られたら、この数をＦｅｒｍａｔ判定法などの確率的素数判定法にかける。確率的素数判定法によって、合成数と判定されない場合は、これを素数として出力する。合成数と判定される場合には、この値を適当に増減するか、乱数を作り直すかして、再びふるい法による判定にかける。以上のような手順により、素数を獲得する。
【０００５】
ＲＳＡ暗号の安全性は、上記法数の素因数分解の困難さに根拠を置いている。したがって、素因数分解法がそのままＲＳＡ暗号の攻撃法となる。この他、素因数分解攻撃法以外にもＲＳＡ暗号の周期性を利用した攻撃法が知られている。
【０００６】
代表的な素因数分解法として、Ｐ−１法、改良されたＰ−１法、Ｐ＋１法、改良されたＰ＋１法、Ｆｅｒｍａｔの素因数分解法が挙げられる。Ｐ−１法およびＰ＋１法はＲＳＡ暗号の法数の素因数の一つをｐとするとき、ｐ−１あるいはｐ＋１が小さな素数の積になっている場合に有効な方法である。このため、Ｐ−１法、Ｐ＋１の方法に対抗するためには、ｐ−１あるいはｐ＋１が大きな素因数を持つようにすればよい。また、改良されたＰ−１法および改良されたＰ＋１法は法数の素因数の一つをｐとするとき、ｐ−１あるいはｐ＋１が一つの素因数を除いて小さな素数の積になっている場合に有効な方法である。このため、改良されたＰ−１法、改良されたＰ＋１の方法に対抗するためには、ｐ−１あるいはｐ＋１が大きな素因数を少なくとも二つ持つようにすればよい。Ｆｅｒｍａｔの素因数分解法は法数の二つの素因数の大きさがほぼ同じときに有効な方法で、これに対しては素因数の大きさを十分異なるようにすればよく、簡単に対抗策を講じることができる。また、ＲＳＡ暗号の周期性を利用した攻撃法に対しては、ｐ−１の素因数の一つをｒとすると、ｒ−１が十分大きな素因数を持てばこの攻撃法の適用が困難なことが知られている。
【０００７】
上記のＰ−１法、Ｐ＋１法に対抗するため従来技術として、次のアルゴリズムＡに従って素因数を決める方法が知られている。
［アルゴリズムＡ］
（ステップＡ１）  適当に大きな素数ｔを生成する。
（ステップＡ２）  ｒ＝２ａｔ＋１の形の素数ｒを生成する。
（ステップＡ３）  適当に大きな素数ｓを生成する。
（ステップＡ４）  整数Ｒを法ｓでのｒの逆数として、Ｐ＝１＋２（ｂｓ−Ｒ）ｒの形の素数Ｐを生成する。
【０００８】
上記アルゴリズムＡにしたがって生成された素数を因数とする法数は、Ｐ−１法、Ｐ＋１法、そしてＲＳＡ暗号の周期性を利用した攻撃法に対抗できる法数となっている。しかし、上記の各ステップでふるい法と確率的素数判定法を繰り返すため、アルゴリズムＡに従って素数生成を行うには膨大な計算量を必要とする。
【０００９】
また上記アルゴリズムＡ以外にＰ−１法、Ｐ＋１法、そしてＲＳＡ暗号の周期性を利用した攻撃法に対して安全対策を施した法数を生成する従来技術として、Ｊ．Ｇｏｒｄｏｎによる方法がある。この方法は任意の素数ｓ，ｒに対してＵ＝ｓr-1−ｒs-1  ｍｏｄ  ｒｓとなる整数Ｕと任意の整数ｍを用いて、ｐ＝Ｕ＋２ｍｒｓの形となる整数を法数の素因数の候補とする。また同様にＰ−１法、Ｐ＋１法に対抗する方法として特開平２−３７３８３号公報による方法が発明されている。
【００１０】
しかし、これらの方法ではＰ−１法、Ｐ＋１法、そしてＲＳＡ暗号の周期性を利用した攻撃法に対して安全対策を施すことはできるが、改良されたＰ−１法、改良されたＰ＋１法に対して安全対策を施すことはできない。
【００１１】
また今後Ｐ−１法、Ｐ＋１法など以外にｐ＋αが十分小さな素数の積である場合に有効な新たな攻撃法が発見され、これに対抗するためにｐ＋αが一つまたは複数の大きな素因数を持つような素数ｐを発見することが要求される場合においては、上記の方法ではこの要求を満足することができない。
【００１２】
【発明が解決しようとする課題】
ＲＳＡ暗号の法数生成を行う際には、様々な攻撃に備えて、安全対策を施した素数の生成が必須となる。本発明の目的は、上記のＰ−１法やＰ＋１法、そしてＲＳＡ暗号の周期性を利用した攻撃法対策に加えて、改良されたＰ−１法や改良されたＰ＋１法対策を含む、任意の個数のαiに対してｐ＋αiが一つまたは複数の大きな素因数を持つような素数ｐを生成することを可能とする技術を提供することにある。
【００１３】
【課題を解決するための手段】
本発明はで上記の課題を解決するために、整数ｐ＋αi（ただしαiは整数、ｉ＝１，２，３，・・・，ｋ、ｋは正の整数）の因数をｓiとするとき、上記因数ｓiは一つまたは複数の大きな素数を因数として持つようにし、更に上記因数ｓi（ただしｉ＝１，２，３，・・・，ｋ）はｉ≠ｊなるｉ，ｊに対してｓiとｓjとは互いに素であるように選択し、更に上記因数ｓiに所定の演算を施した値をｆ（ｓi）とし、上記素数ｐを発見する際に上記素数ｐの候補ｐ’として
【００１４】
【数４】
0003750295.tif 000002
0003750295.tif 000003
（ただしｍは整数）
の形となる整数を用いることによって、整数ｐ＋αi（ただしαiは整数、ｉ＝１，２，３，・・・，ｋ、ｋは正の整数）が一つまたは複数の大きな素因数を持つような素数ｐを発見する。
【００１５】
以下、整数ｐ’＋αiがｍ個の大きな素因数を持つことを示す。整数ｐ’＋αiは
【００１６】
【数５】
0003750295.tif 000004
0003750295.tif 000005
0003750295.tif 000006
0003750295.tif 000007
0003750295.tif 000008
0003750295.tif 000009
ここで、
【００１７】
【数６】
0003750295.tif 000010
より、
【００１８】
【数７】
0003750295.tif 000011
が成立する。ただし、Ｑは適当な整数である。また、Ｒを適当な整数とすると、
【００１９】
【数８】
0003750295.tif 000012
0003750295.tif 000013
0003750295.tif 000014
0003750295.tif 000015
となるので、
【００２０】
【数９】
0003750295.tif 000016
0003750295.tif 000017
0003750295.tif 000018
0003750295.tif 000019
0003750295.tif 000020
0003750295.tif 000021
となり、ｐ’＋αiが因数ｓiを持つことがわかる。ｓi＝ｓ1’ｓ2’ｓ3’…ｓm’ならばｐ’＋αiがｍ個の大きな素因数を持つことがわかる。
【００２１】
【発明の実施の態様】
以下に本発明の実施例を説明する。
【００２２】
図１〜図３を用いて、本発明による実施例を説明する。本実施例では、ｋ個のαiに対して整数ｐ＋αiがそれぞれｃi個の適当に大きな素因数を持つような素数の生成について述べる。
【００２３】
まず図１を用いて本発明による素因数生成の基本構成を説明する。
図１のステップ１０１からステップ１０６に至る処理は以下のように行われる。
（ステップ１０１）  スタート。
（ステップ１０２）  整数ｓ1，ｓ2，・・・，ｓkを作成する。このステップの詳細は図２を参照して説明する。
（ステップ１０３）  ステップ１０２で生成されたｓ1，ｓ2，・・・，ｓkをもとにｐ1＝Πi=1,2,・・・,kｓiを計算する。
（ステップ１０４）  ステップ１０２で生成されたｓ1，ｓ2，・・・，ｓk、およびステップ１０３で生成されたｐ1をもとに
【００２４】
【数１０】
0003750295.tif 000022
0003750295.tif 000023
を計算する。
（ステップ１０５）  ステップ１０３で生成されたｐ1、およびステップ１０４で生成されたｐ2から、ｐ＝ｐ1＋ｍｐ2の形の素数ｐを作成する。ここでｍは正の整数である。
（ステップ１０６）  終了。ｐを出力する。
【００２５】
上記のステップ１０２で生成されるｓiはｐ＋αiの因数となる整数で、かつ互いに素な整数であり、ｃi個の適当に大きな素因数の積である。
【００２６】
次にステップ１０２における互いに素なｐ＋αiの因数ｓ1，ｓ2，・・・，ｓkの作成について詳細に説明する。図２を用いてステップ１０２の因数の生成処理を説明する。
（ステップ２０１）  スタート。
（ステップ２０２）  ｑ＝１，ｉ＝１，ｊ＝１，ｓ0＝１とする。
（ステップ２０３）  乱数ｒを生成する。
（ステップ２０４）  ｒが素数どうかを判定する。
素数であればステップ２０５へ進む。
素数でなければステップ２０３へ進む。
（ステップ２０５）  （ｓx，ｒ）＝１かどうかを判定する。ここで、ｘはｘ＝０，１，２・・・，ｉ−１。上式が成立するときステップ２０６へ進む。
上式が不成立のときステップ２０３へ進む。
（ステップ２０６）  （ｑ，ｒ）＝１かどうかを判定する。
上式が成立するときステップ２０７へ進む。
上式が不成立のときステップ２０３へ進む。
（ステップ２０７）  ｑ＝ｑ＊ｒとする。
（ステップ２０８）    ｊ＝ｃiかかどうかを判定する。
上式が成立するときステップ２１０へ進む。
上式が不成立のときステップ２０９へ進む。
（ステップ２０９）  ｊ＝ｊ＋１として、  ステップ２０３へ。
（ステップ２１０）  ｓi＝ｑとする。
（ステップ２１１）  ｉ＝ｋかどうかを判定する。
上式が成立するときステップ２１３へ進む。
上式が不成立のときステップ２１２へ進む。
（ステップ２１２）  ｉ＝ｉ＋１，ｊ＝１，ｑ＝１としてステップ２０３へ。
（ステップ２１３）  ｓ1，ｓ2，・・・，ｓkを出力する。
ステップ２０３では乱数生成器により乱数を生成する。乱数を生成する方法としてはＬＦＳＲなどの方法が知られている。またステップ２０４で素数を判定する方法としては、Ｆｅｒｍａｔ判定法が知られている。Ｆｅｒｍａｔ判定法は、Ｆｅｒｍａｔの小定理に基づく判定法で、ｖを正整数とするとき任意の素数ｘに対して
【００２７】
【数１１】
ｖx-1≡１  ｍｏｄ  ｘ
が成立することを利用している。上式が不成立のときは合成数と判定される。Ｆｅｒｍａｔ判定法以外にも、Ｓｏｌｏｖａｙ−Ｓｔｒａｓｓｅｎ法、Ｍｉｌｌｅｒ−Ｒａｂｉｎ法なども同様な効果を期待できる。
【００２８】
次にステップ１０５における素数生成法について詳細に説明する。図３はステップ１０５での処理を詳細に説明したものである。ステップ３０１から３０６までの処理は以下の通りである。
（ステップ３０１）  スタート。
（ステップ３０２）  ｍ＝１とする。
（ステップ３０３）  ｐ＝ｐ1＋ｍｐ2を計算する。
（ステップ３０４）  ｐは素数かどうか判定する。
素数であればステップ３０６へ進む。
素数でなければステップ３０５へ進む。
（ステップ３０５）  ｍ＝ｍ＋１として、ステップ３０３へ進む。
（ステップ３０６）  ｐを出力する。
【００２９】
ステップ３０４で素数を判定する方法としては、ステップ２０４と同様にＦｅｒｍａｔ判定法、Ｓｏｌｏｖａｙ−Ｓｔｒａｓｓｅｎ法、Ｍｉｌｌｅｒ−Ｒａｂｉｎ法などを用いることができる。
【００３０】
上記の手順により、ｋ個のαiに対して整数ｐ＋αiがそれぞれｃi個の適当に大きな素因数を持つような素数を獲得することができる。特にα1＝１，ｃ1＝２、およびα2＝−１，ｃ2＝２とすると、改良されたＰ−１法および改良されたＰ＋１法に対抗できる法数の素因数ｐを獲得することができる。
【００３１】
上述実施例の少なくとも一部はコンピュータ上のソフトウェアとして実現できる。もちろん、少なくとも一部をハードウェアとして実現することも可能である。図４は、上述の実施例のハードウェア実現態様（素数生成装置）を示す。図４において、素数生成装置は、乱数生成部４０１、因数（ｓi）生成部４０２、素数候補（ｐ’）計算部４０３、素数判定部４０４および素数出力部４０５を含んで構成されている。乱数生成部４０１は上述の乱数ｒを生成するものである。因数生成部４０２は図２に示す動作を実行して上述の因数ｓiを生成するものである。素数候補計算部４０３は因数生成部４０２で生成された因数ｓiを用いて素数候補ｐ’を生成するものである。素数判定部４０４は素数候補ｐ’について図３に示すような素数判定を行うものである。素数出力部４０５は素数判定部４０４により素数と判定された整数を出力するものである。図４の各構成要素の詳細は図１〜図３で説明したものと同様であり、詳細な説明は繰り返さない。
【００３２】
【発明の効果】
以上説明したように、本発明によれば、任意の個数のαiに対してｐ＋αiが一つまたは複数の大きな素因数を持つような素数ｐを生成することができる。
【図面の簡単な説明】
【図１】  本発明の実施例における素数候補の生成動作を説明するフローチャートである。
【図２】  図１のステップ１０２の詳細な動作を説明するフローチャートである。
【図３】  上述実施例の素数判定動作を説明するフローチャートである。
【図４】  上述実施例のハードウェア実現形態を示すブロック図である。
【符号の説明】
４０１  乱数生成部
４０２  因数生成部
４０３  素数候補計算部
４０４  素数判定部
４０５  素数出力部
【図１】
0003750295.tif 000024
【図２】
0003750295.tif 000025
【図３】
0003750295.tif 000026
【図４】
0003750295.tif 000027