説明

素数生成プログラム

【課題】 各素数候補の試行割算後の本格的素数判定に関し、高速化を図る。
【解決手段】 本格的素数判定に用いられる「ミラー-ラビンテスト」は、1つの底における素数判定が合格の場合、素数である可能性が高い。言い換えると、不合格の場合には、1つの底における素数判定で不合格となる傾向がある。従って、1つの底における「ミラー-ラビンテスト」、一般的には「pの本格的素数判定(途中まで)」を先に行う構成にすることにより、「ミラー-ラビンテスト(1つの底におけるテスト)(ST4)」、一般的には「pの本格的素数判定(途中まで)(ST4’)」が不合格となる場合に、以後の処理(ステップST5〜ST9または、ステップST5’〜ST9’)を実行せずに済む。このため、各素数候補の試行割算後の本格的素数判定に関し、以後の処理(ST5〜ST9または、ステップST5’〜ST9’)の分だけ高速化を図ることができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、素数生成プログラムに係り、例えば、セーフプライム形の素数に限定されず、本格的素数判定を高速化し得る素数生成プログラムに関する。
【背景技術】
【0002】
暗号分野においては、pを素数としたとき、2p+1という形の素数が、暗号の安全性を高めるために用いられている。この形の素数はセーフプライム(safe Prime)と呼ばれる。セーフプライムは、ディフィー・ヘルマン(Diffie-Hellman)鍵交換を始めとして、多くの暗号通信プロトコルに用いられている。
【0003】
このセーフプライムを生成するための効率的な方法は、今のところ知られていない。一般的な生成方法においては、素数候補の乱数pを素数判定し、素数であれば、さらにセーフプライム候補の2p+1を素数判定することにより、セーフプライム形の素数2p+1を生成している。
【0004】
しかしながら、この一般的な方法では、乱数pの値が大きくなるにつれ、セーフプライム形の素数2p+1を生成するための時間が、非常に増大するという問題がある。このため、セーフプライム形の素数を生成する素数生成装置を備えた情報システムにおいては、素数生成装置の計算負荷を増大させることにより、システム稼働率が低下してしまう問題がある。
【0005】
この問題を避ける観点から、セーフプライムを予め生成して保持する方式が知られている。しかしながら、この方式は、情報システムのセキュリティレベルを低下させる場合があるので、根本的な解決にはなっていない。
【0006】
以上の背景の下で本発明者は、各素数候補の試行割算を予め実行する素数生成方法を提案している(例えば、特許文献1参照)。
【特許文献1】特願2006−036779号明細書(未公開先行出願)
【非特許文献1】Alfred J. Menezes, Paul C. van Oorschot, and Scott A. Vanstone: ”Handbook of Applied Cryptography”, CRC Press, 1996. p.138 4.2.3 Miller-Rabin test.又は下記URL参照。 http://www.cacr.math.uwaterloo.ca/hac/
【非特許文献2】G.H.Hardy and E.M.Wright: “An Introduction to THE THEORY OF NUMBERS”, Oxford University Press, London, p.80 Theorem103. 又は下記URL参照。 http://primes.utm.edu/notes/proofs/MerDiv2.html
【非特許文献3】ANSI X 9.80, “American National Standard for Financial Services - Prime Number Generation, Primality Testing and Primality Certificates”, American National Standard Institute, 2001.
【発明の開示】
【発明が解決しようとする課題】
【0007】
しかしながら、特許文献1記載の素数生成方法は、本発明者の検討によれば、各素数候補の試行割算後の本格的素数判定に関し、高速化を図る余地があると考えられる。
【0008】
本発明は上記実情を考慮してなされたもので、各素数候補の試行割算後の本格的素数判定に関し、高速化を図り得る素数生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【0009】
第1の発明は、Lビットの素数2p+1を生成する素数生成装置に用いられる素数生成プログラムであって、前記素数生成装置のコンピュータを、予め複数個の除数が記憶された除数記憶手段、L−1ビットの第1素数候補pとして乱数を生成する乱数生成手段、前記第1素数候補pに基づいて、Lビットの第2素数候補2p+1を算出する第2素数候補算出手段、前記除数記憶手段内の除数毎に、前記各素数候補p,2p+1の試行割算を個別に実行する試行割算実行手段、前記試行割算実行手段による全ての試行割算の結果が剰余を持つとき、前記第1素数候補pに対し、2である底を用いたミラー-ラビンテストを実行する第1のミラー-ラビンテスト実行手段、前記第1のミラー-ラビンテスト実行手段によるテストの結果が合格のとき、前記第2素数候補2p+1に対し、「拡張されたオイラー-ラグランジュの定理」に基づいて素数判定を実行する素数判定手段、前記素数判定手段による素数判定の結果が合格のとき、前記第1素数候補pに対し、2でない底を用いたミラー-ラビンテストを実行する第2のミラー-ラビンテスト実行手段、前記第2のミラー-ラビンテスト実行手段によるテストの結果が合格のとき、前記第2素数候補2p+1を素数として出力する素数出力手段、として機能させるための素数生成プログラムである。
【0010】
第2の発明は、定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)から算出可能な第2素数f(p)(∈Z)を生成する素数生成装置に用いられる素数生成プログラムであって、前記素数生成装置のコンピュータを、予め複数個の除数が記憶された除数記憶手段、前記第1素数候補pとして乱数を生成する乱数生成手段、前記第1素数候補pに基づいて、前記第2素数候補f(p)を算出する第2素数候補算出手段、前記除数記憶手段内の除数毎に、前記各素数候補p,f(p)の試行割算を個別に実行する試行割算実行手段、前記試行割算実行手段による全ての試行割算の結果が剰余を持つとき、前記第1素数候補pに対し、2である底を用いたミラー-ラビンテストを実行する第1のミラー-ラビンテスト実行手段、前記第1のミラー-ラビンテスト実行手段によるテストの結果が合格のとき、前記第2素数候補f(p)に対し、確率的素数判定法又は確定的素数判定法を実行する素数判定手段、前記素数判定手段による素数判定の結果が合格のとき、前記第1素数候補pに対し、2でない底を用いたミラー-ラビンテストを実行する第2のミラー-ラビンテスト実行手段、前記第2のミラー-ラビンテスト実行手段によるテストの結果が合格のとき、前記第2素数候補f(p)を素数として出力する素数出力手段、として機能させるための素数生成プログラムである。
【0011】
第3の発明は、Lビットの素数2p+1を生成する素数生成装置に用いられる素数生成プログラムであって、前記素数生成装置のコンピュータを、予め複数個の除数が記憶された除数記憶手段、「マウアー法」に基づいて、L/2ビット程度の素数Fを生成する素数生成手段、ポクリントンの定理に基づく式p=2rF+1に基づいて、前記L/2ビット程度の素数Fに応じてL−1ビットの第1素数候補pを得られるように、乱数rを生成する乱数生成手段、前記乱数r、前記素数F及び前記式p=2rF+1に基づいて、L−1ビットの第1素数候補pを算出する第1素数候補算出手段、前記第1素数候補pに基づいて、Lビットの第2素数候補2p+1を算出する第2素数候補算出手段、前記除数記憶手段内の除数毎に、前記各素数候補p,2p+1の試行割算を個別に実行する試行割算実行手段、前記試行割算実行手段による全ての試行割算の結果が剰余を持つとき、前記第2素数候補2p+1に対し、「拡張されたオイラー-ラグランジュの定理」に基づいて素数判定を実行する第1の素数判定手段、前記第1の素数判定手段による素数判定の結果が合格のとき、前記第1素数候補pに対し、ポクリントンの定理に基づいて素数判定を実行する第2の素数判定手段、前記第2の素数判定手段による判定結果が合格のとき、前記第2素数候補2p+1を素数として出力する素数出力手段、として機能させるための素数生成プログラムである。
【0012】
第4の発明は、定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)から算出可能な第2素数f(p)(∈Z)を生成する素数生成装置に用いられる素数生成プログラムであって、前記素数生成装置のコンピュータを、予め複数個の除数が記憶された除数記憶手段、「マウアー法」に基づいて、L/2ビット程度の素数Fを生成する素数生成手段、ポクリントンの定理に基づく式p=2rF+1に基づいて、前記L/2ビット程度の素数Fに応じてLビットの第1素数候補pを得られるように、乱数rを生成する乱数生成手段、前記乱数r、前記素数F及び前記式p=2rF+1に基づいて、Lビットの第1素数候補pを算出する第1素数候補算出手段、前記第1素数候補pに基づいて、第2素数候補f(p)を算出する第2素数候補算出手段、前記除数記憶手段内の除数毎に、前記各素数候補p,f(p)の試行割算を個別に実行する試行割算実行手段、前記試行割算実行手段による全ての試行割算の結果が剰余を持つとき、前記第2素数候補f(p)に対し、確率的素数判定法又は確定的素数判定法に基づいて素数判定を実行する第1の素数判定手段、前記第1の素数判定手段による素数判定の結果が合格のとき、前記第1素数候補pに対し、ポクリントンの定理に基づいて素数判定を実行する第2の素数判定手段、前記第2の素数判定手段による判定結果が合格のとき、前記第2素数候補2p+1を素数として出力する素数出力手段、として機能させるための素数生成プログラムである。
【0013】
なお、第1及び第2の各発明は、「ミラー-ラビンテスト」に代えて、当該「ミラー-ラビンテスト」とは異なる確率的素数判定法又は確定的素数判定法を実行してもよい。また、第1及び第2の各発明は、素数判定の対象としての各素数候補p,2p+1を互いに入れ替えて素数判定を実行してもよい。また、第1及び第3の各発明は、「拡張されたオイラー-ラグランジュの定理」に代えて、当該「拡張されたオイラー-ラグランジュの定理」とは異なる確率的素数判定法又は確定的素数判定法を実行してもよい。また、第3及び第4の各発明は、素数判定の対象としての各素数候補p,f(p)を互いに入れ替えて素数判定を実行してもよい。
【0014】
また、以上の第1〜第4の各発明は、「プログラム」として表現したが、これに限らず、「装置」、「方法」又は「コンピュータ読取り可能な記憶媒体」として表現してもよいことはいうまでもない。
【0015】
(作用)
第1の発明においては、第1素数候補pについて「ミラー-ラビンテスト」を途中まで実行し、第2素数候補2p+1について「拡張されたオイラー-ラグランジュの定理」を実行し、第1素数候補pについて「ミラー-ラビンテスト」を再開している。
【0016】
ここで、「ミラー-ラビンテスト」は、1つの底における素数判定が合格の場合、他の底における素数判定も合格する傾向がある。言い換えると、「ミラー-ラビンテスト」は、不合格の場合には、1つの底における素数判定で不合格となる傾向がある。
【0017】
従って、第1の発明においては、「ミラー-ラビンテスト」を分割して実行し、1つの底における「ミラー-ラビンテスト」が不合格となる場合に、以後の「拡張されたオイラー-ラグランジュの定理」及び他の底における「ミラー-ラビンテスト」を実行せずに済む構成のため、各素数候補の試行割算後の本格的素数判定に関し、以後の「拡張されたオイラー-ラグランジュの定理」による素数判定及び他の底における「ミラー-ラビンテスト」の分だけ高速化を図ることができる。
【0018】
一方、第3の発明においては、「マウアー法」における「ポクリントンの定理」による素数判定を、「拡張されたオイラー-ラグランジュの定理」の後に実行している。
【0019】
ここで、「ポクリントンの定理」による素数判定は、2に限らない底のベキ乗算を用いるため、2を底としたベキ乗算を用いる「拡張されたオイラー-ラグランジュの定理」の演算時間よりも長い演算時間を必要とする。
【0020】
言い換えると、第3の発明においては、短い演算時間の「拡張されたオイラー-ラグランジュの定理」により素数判定が不合格となる場合に、長い演算時間の「ポクリントンの定理」による素数判定を実行せずに済む構成のため、各素数候補の試行割算後の本格的素数判定に関し、ポクリントンの定理による素数判定の分だけ、高速化を図ることができる。
【0021】
他方、第2又は第4の発明は、第1又は第3の発明における第2素数候補2p+1に代えて、第2素数候補f(p)を用い、「拡張されたオイラー-ラグランジュの定理」に代えて、「確率的素数判定法又は確定的素数判定法」を用いた構成により、第1又は第3の発明と同様の作用効果を得ることができる。
【発明の効果】
【0022】
以上説明したように本発明によれば、各素数候補の試行割算後の本格的素数判定に関し、高速化を図ることができる。
【発明を実施するための最良の形態】
【0023】
以下、本発明の各実施形態を図面を用いて説明する。なお、以下の説明中、乱数、素数、素数候補、定数項、整数係数、多項式、除数、剰余などの語を用いるが、これらは、乱数データ、素数データ、素数候補データ、定数項データ、整数係数データ、多項式データ、除数データ、剰余データ等のように、「データ」の語を追記して読み替えてもよい。
【0024】
(第1の実施形態)
図1は本発明の第1の実施形態に係る素数生成装置の構成を示す模式図である。この素数生成装置10は、具体的には携帯電話又はスマートカードなどの演算機の素数生成部として構成され、ハードウェア及びソフトウェアの組合せにより素数生成処理を行うものである。
【0025】
例えば素数生成装置10においては、プログラム記憶部11、テーブル記憶部12、不揮発性メモリ13、入出力I/F14、CPU(中央処理装置)15、乱数生成部16及び演算部17が互いにバスを介して接続されている。
【0026】
プログラム記憶部11は、CPU15に実行されるプログラムが記憶されるハードウェア資源としてのメモリであり、例えばROM(リードオンリーメモリ)が使用可能となっている。ここで、プログラムは、例えば図2に示す素数生成機能を実現させるためのものである。この素数生成機能としては、例えば以下の機能(f11-1)〜(f11-9)を含んでいる。
【0027】
(f11-1) 複数個の除数が記述された除数テーブルTをテーブル記憶部12に予め記憶させる機能。
(f11-2) 乱数生成部16の制御により、L−1ビットの第1素数候補pとして乱数を生成する機能。
(f11-3) 演算部17の制御により、第1素数候補pに基づいて、Lビットの第2素数候補2p+1を算出する第2素数候補算出機能。
(f11-4) 演算部17の制御により、除数テーブルT内の除数毎に、各素数候補p,2p+1の試行割算を個別に実行する試行割算実行機能。
(f11-5) 試行割算実行機能による全ての試行割算の結果が剰余を持つとき、演算部17の制御により、第1素数候補pに対し、2である底を用いたミラー-ラビン(Miller - Rabin)テストを実行する第1のミラー-ラビンテスト実行機能。
【0028】
ここで、「ミラー-ラビンテスト」について説明する。「ミラー-ラビンテスト」は、ミラー-ラビン法とも呼ばれており、一般的な確率的素数判定法であって、計算効率・誤り確率の両面で優れた素数判定法である。ここで、誤り確率とは、合成数を素数と判定する確率をいう。「ミラー-ラビンテスト」では、素数を合成数と判定する誤りはない。
【0029】
「ミラー-ラビンテスト」では、判定対象の素数候補に対して、相異なる数個の底(base)に関する素数判定を行う。例えばANSI X9.80によれば、512ビットの素数判定では、8個の底を用いることが推奨されている。また、「ミラー-ラビンテスト」については、例えば非特許文献1にも記載されている。以下に、ミラー-ラビンテストのステップ(MR-i)〜(MR-iv)を示す。
【0030】
「ミラー-ラビンテスト」
入力:判定対象の整数n、base(底)
出力:判定結果(「nはおそらく素数」、または、「nは合成数」)
ステップ:
(MR-i) n−1=2^s*t、tは奇数、と分解する(なお、^はベキ乗を表す)。
(MR-ii) b=base^t(mod n)を計算する。
→もしもb≡±1(mod n)ならば、「nはおそらく素数」を返す。
(MR-iii) 以下の処理をs−1回繰り返す。
b=b^2(mod n)を計算する。
→もしもb≡−1(mod n)ならば、「nはおそらく素数」を返す。
(MR-iv) 「nは合成数」を返す。
なお、第1のミラー-ラビンテストは、以上のミラー-ラビンテストのうち、baseが2の場合のテストに該当する。また、後述する第2のミラー-ラビンテストは、baseが2でない場合のテストに該当する。
【0031】
(f11-6) 第1のミラー-ラビンテスト実行機能によるテストの結果が合格のとき、演算部17の制御により、第2素数候補2p+1に対し、「拡張されたオイラー-ラグランジュ(Euler - Lagrange)の定理」に基づいて素数判定を実行する素数判定機能。
【0032】
ここで、「拡張されたオイラー-ラグランジュの定理」について説明する。
「拡張されたオイラー-ラグランジュの定理」
pを素数とする。この時、次の2つの主張(EL-i),(EL-ii)が成り立つ。
【0033】
(EL-i) p≡1(mod 4)ならば、
2p+1は素数である ⇔ 2p+1は2^p+1を割り切る。
(A⇔B:Aである場合にはBが成り立つという意味を表す。以下同様)
(EL-ii) p≡3(mod 4)ならば、
2p+1は素数である ⇔ 2p+1は2^p−1を割り切る。
【0034】
すなわち、pがbase=2のミラー-ラビンテストを通ったなら、他の底に関するミラー-ラビンテストを行う前に、一旦、p(mod 4)の値により、(EL-i)、または、(EL-ii)の方法で、pが素数である場合の2p+1の素数判定を行い、合格した場合は、他の底を用いてpを素数判定する。
【0035】
なお、「オイラー-ラグランジュの定理」は、「拡張したオイラー-ラグランジュの定理」における2つの主張(EL-i)(EL-ii)のうち、(EL-i)の主張をいう。また、「オイラー-ラグランジュの定理」については、例えば非特許文献2に記載されている。
【0036】
(f11-7) 素数判定機能による素数判定の結果が合格のとき、演算部17の制御により、第1素数候補pに対し、2でない底を用いたミラー-ラビンテストを実行する第2のミラー-ラビンテスト実行機能。
【0037】
(f11-8) 第2のミラー-ラビンテスト実行機能によるテストの結果が合格のとき、第1素数候補pに対してルーカス-レーマーテスト(Lucas - Lehmer)を実行する機能。ここで、ルーカス-レーマーテストは、ミラー-ラビンテストと組み合わせることにより、誤り確率を低減可能な素数判定法である。このため、ルーカス-レーマーテストの対象(例、第1素数候補p)と、ミラー-ラビンテストの対象(第1素数候補p)とは同じものとなる。
【0038】
(f11-9) ルーカス-レーマーテストの結果が合格のとき、第2素数候補2p+1を素数として出力する素数出力機能。
【0039】
係るプログラムは、外部の記憶媒体又はネットワークから予めプログラム記憶部11にインストールされてもよい。
【0040】
テーブル記憶部12は、CPU15から読出/書込可能なハードウェア資源としてのRAM(ランダムアクセスメモリ)である。テーブル記憶部12は、予め除数テーブルTが記憶されており、さらにCPU15により、演算に必要なデータや演算途中のデータ等が記憶される。除数テーブルTは、試行割算に用いる除数が予め記述されたテーブルである。除数としては、2,3,5,…の如き、素数が小さい順から任意の個数だけ用いられる。このような除数の数列に関する説明は、文献(D. E. Knuth 著(中川圭介訳),“KNUTH 第4分冊 準数値算法/算術演算”,サイエンス社,p.205, 1986.)に記載されている。なお、ここでは、除数テーブルTにおける除数の最大値を“65521”としている。また、除数テーブルTは、予めプログラム記憶部11内のプログラムに含まれていてもよい。
【0041】
不揮発性メモリ13は、例えば生成された素数p,2p+1などがCPU15から読出/書込可能に記憶されるハードウェア資源としてのメモリであり、例えば、EEPROM(Electric Erasable Programmable ROM)が使用可能となっている。但し、不揮発性メモリ13は、必須ではなく省略してもよい。
【0042】
入出力I/F14は、素数生成装置10と、この素数生成装置10を保持する情報機器との間のインターフェイス機器であり、例えば、素数生成指令を入力し、得られた素数p,2p+1を出力する際に用いられる。
【0043】
ここでいう情報機器としては、何らかの暗号処理を実行するものであれば任意のデバイスが適用可能である。何らかの暗号処理とは、例えば公開鍵暗号方式における暗号処理、復号処理、署名生成処理又は署名検証処理などである。情報機器の例としては、スマートカード又は携帯電話等の如き、ユーザ毎に携帯可能なデバイスが挙げられる。情報機器の用途は任意であり、例えば、非匿名又は匿名のユーザ認証などが挙げられる。
【0044】
CPU15は、プログラム記憶部11内のプログラムを実行することにより、例えば図3に示す手順で各部12〜17を制御し、素数生成処理を実行する機能を有するものである。
【0045】
乱数生成部16は、CPU15により制御されて乱数pを生成し、この乱数pをバスに送出するハードウェア資源としての乱数生成回路である。ここで、乱数生成部16により生成される乱数pは、真の乱数又は疑似乱数のいずれでもよい。
【0046】
なお、乱数生成部16は、独立のハードウェア資源で実現する場合に限らず、CPU15とプログラムで実現してもよい。また、乱数生成部16を省略し、乱数pを外部から入力させる構成としてもよい。
【0047】
演算部17は、CPU15により制御され、例えばCPU15から入力されたデータに基づいて演算を実行し、演算結果をバスに出力するハードウェア資源としての演算回路である。なお、演算部17は、処理速度を向上させる観点から独立のハードウェア回路として設けられており、例えばコプロセッサ等の如き、多倍長の演算が可能なものであるが、ハードウェア回路に限らず、CPU15とプログラムで実現してもよい。
【0048】
なお、このような素数生成装置10は、ハードウェア及びソフトウェアの組合せに限らず、ハードウェア又はソフトウェアのいずれか一方により構成されてもよい。
【0049】
次に、以上のように構成された素数生成装置による素数生成方法について図2のフローチャートを参照しながら説明する。
【0050】
始めに、図示しない情報機器では、何らかの暗号処理中に、第1素数p及び第2素数2p+1を生成する必要が生じたとする。ここで、情報機器においては、保持する素数生成装置10に入出力I/F14を介して素数生成指令を入力する。
【0051】
素数生成装置10においては、素数生成指令を受けると、CPU15が乱数生成部16を制御し、乱数生成部16が、L−1ビットの第1素数候補pとしての乱数を生成する(ST1)。
【0052】
次に、素数生成装置10においては、演算部17が第1素数候補pに基づいて、Lビットの第2素数候補2p+1を算出する(ST2)。
【0053】
続いて、素数生成装置10においては、演算部17が、各素数候補p,2p+1に対し、除数テーブルT内の除数毎に、個別に試行割算を実行する(ST3)。
【0054】
具体的には、CPU15は、第1素数候補pと、除数テーブルT内の除数とをバスを介して演算部17に入力する。演算部17は、第1素数候補pを除数で割り算し、得られた剰余をバスに出力する。
【0055】
CPU15は、第1素数候補pを除数で割り算した剰余が0のとき、又は全ての除数による割り算を終えたとき、第1素数候補pに対するステップST3の試行割算を終了する。なお、CPU15は第2素数候補2p+1についても同様にステップST3を実行する。
【0056】
このステップST3の実行中、CPU15は、ステップST3の試行割算を終了したときの剰余が0である場合(試行割算に失敗した場合)にはステップST1に戻る。
【0057】
一方、ステップST3の終了時に、全ての試行割算の結果が剰余を持つ場合(試行割算に成功した場合)には、CPU15は演算部17を制御し、第1素数候補pに対し、2である底を用いたミラー-ラビンテスト(1回目)を実行する(ST4)。
【0058】
具体的には、CPU15がミラー-ラビンテストのアルゴリズムに従って演算部17を制御することにより、2である底を用いた場合のミラー-ラビンテストを実行する。
【0059】
さてステップST4のテストの結果、第1素数候補pが素数ではない場合(NGの場合)には、素数生成装置10はステップST1に戻る。
【0060】
ステップST4の素数判定の結果、第1素数候補pが素数である場合(OKの場合)には、素数生成装置10においては、CPU15が演算部17を制御することにより、第2素数候補2p+1に対し、「拡張されたオイラー-ラグランジュ(Euler - Lagrange)の定理」に基づいて素数判定を実行する。
【0061】
具体的には、CPU15が「拡張されたオイラー-ラグランジュ(Euler - Lagrange)の定理」のアルゴリズムに従って演算部17を制御することにより、素数判定を実行する。
【0062】
始めに、素数判定装置10は、p≡1(mod 4)を計算し(ST5)、p≡1(mod 4)であれば、2^p≡−1(mod 2p+1)か否かを判定する(ST6:主張(EL-i)対応)。ステップST6の判定の結果、否の場合(=主張(EL-i)から2p+1が素数でない場合)には、素数判定装置10はステップST1に戻る。また、ステップST6の判定の結果、2^p≡−1(mod 2p+1)である場合(=主張(EL-i)から2p+1が素数である場合)には、素数判定装置10はステップST8−1に進む。
【0063】
一方、ステップ5の判定の結果、p≡3(mod 4)であれば、2^p≡1(mod 2p+1)か否かを判定する(ST7:主張(EL-ii)対応)。ステップST7の判定の結果、否の場合(=主張(EL-ii)から2p+1が素数でない場合)には、素数判定装置10はステップST1に戻る。また、ステップST7の判定の結果、2^p≡1(mod 2p+1)である場合(=主張(EL-ii)から2p+1が素数である場合)には、素数判定装置10はステップST8−1に進む。
【0064】
次に、ステップST6又はST7の判定結果から2p+1が素数である場合には、素数判定装置10は、CPU15が演算部17を制御することにより、第1素数候補pに対し、他の7個の底を順次用いてミラー-ラビンテスト(2〜8回目)を実行する(ST8−1〜ST8−7)。
【0065】
ステップST8−1〜ST8−7においては、それぞれミラー-ラビンテストの結果が不合格であればステップST1に戻り、ミラー-ラビンテストの結果が合格であれば次の回のミラー-ラビンテストに進む。
【0066】
このようにして、ステップST8−7のミラー-ラビンテストの結果が合格であれば、素数生成装置10は、CPU15が演算部17を制御することにより、第1素数候補pに対し、ルーカス-レーマーテストを実行し(ST9)、テストの結果が不合格のときにはステップST1へ戻る。
【0067】
一方、ステップST9のテストの結果が合格のとき(第1素数候補pが素数である場合には、素数生成装置10は、第2素数候補2p+1と、第1素数候補pとをそれぞれ素数2p+1,pとして入出力I/F14から出力する。
【0068】
上述したように本実施形態によれば、第1素数候補pについて「ミラー-ラビンテスト」を途中まで実行し、第2素数候補2p+1について「拡張されたオイラー-ラグランジュの定理」を実行し、第1素数候補pについて「ミラー-ラビンテスト」を再開している。ここで、「ミラー-ラビンテスト」は、1つの底における素数判定が合格の場合、他の底における素数判定も合格する傾向がある。言い換えると、「ミラー-ラビンテスト」は、不合格の場合には、1つの底における素数判定で不合格となる傾向がある。
【0069】
従って、本実施形態においては、「ミラー-ラビンテスト」を分割して実行し、1つの底における「ミラー-ラビンテスト(ST4)」が不合格となる場合に、以後の処理(ステップST5〜ST9)を実行せずに済む構成のため、各素数候補の試行割算後の本格的素数判定に関し、以後の処理(ST5〜ST9)の分だけ高速化を図ることができる。
【0070】
すなわち、本実施形態は、「ミラー-ラビンテスト」を分割して実行する構成により、「ステップST4の不合格回数」×「ステップST5〜ST9の演算時間」だけ、素数判定処理の時間的高速化を図ることができる(補足すると、特許文献1記載の技術は、試行割算後、「pの素数判定」、「2p+1の素数判定」の順に処理を実行していた。これに対し、本実施形態は、試行割算後、「pの素数判定の一部(ST4)」、「2p+1の素数判定(ST5〜ST7)」、「pの素数判定の残り(ST8−1〜ST8−7,ST9)」の順に処理を実行している)。
【0071】
また、2p+1の素数判定において、「拡張されたオイラー-ラグランジュの定理」を用いるので、2p+1の本格的素数判定を確定的かつ高速に実行することができる。
【0072】
(第2の実施形態)
次に、本発明の第2の実施形態について図1及び図3を参照しながら説明する。
本実施形態は、第1の実施形態を拡張した例であり、具体的には、第1の実施形態のミラー-ラビンテストの分割実行方式を、2p+1、pは素数という形の素数に限定することなく、定数項が0ではない一般的な整数係数の多項式f(X)に対し、f(X)、Xは素数という形の素数を生成する場合に拡張したものである。
【0073】
すなわち、本実施形態の素数生成装置10は、定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、Zは整数Xを要素とする集合)、第1素数p(∈Z)と、この第1素数pから算出可能な第2素数f(p)(∈Z)とを生成するものである。ここで、第2素数f(p)は、例えば多項式の次数をnとし、次数毎の整数係数をan,an-1,…,a2,a1とし、定数項をa0としたとき、次式に示すように計算される。
【0074】
f(p)=an・pn + an-1・pn-1 + … + a2・p2 + a1・p + a0
このような第2素数f(p)は、次数n=1、整数係数a1=2、定数項a0=1の場合、セーフプライム2p+1となる。但し、第2素数f(p)は、セーフプライム2p+1に限定されない。
【0075】
これに伴い、本実施形態では、「拡張されたオイラー-ラグランジェの定理」に基づく素数判定に代えて、「拡張されたオイラー-ラグランジュの定理」とは異なる確率的素数判定法又は確定的素数判定法を用いている。
【0076】
具体的には、プログラム記憶部11に記憶され且つCPU15に実行されるプログラムは、図2に示した素数生成機能に代えて、図3に示す素数生成機能を実現させるためのものとなっている。この素数生成機能としては、例えば以下の機能(f11a-1)〜(f11a-9)を含んでいる。
【0077】
(f11a-1) 複数個の除数が記述された除数テーブルTをテーブル記憶部12に予め記憶させる機能。
(f11a-2) 乱数生成部16の制御により、第1素数候補pとして乱数を生成する機能。
(f11a-3) 演算部17の制御により、第1素数候補pに基づいて、第2素数候補f(p)を算出する第2素数候補算出機能。
(f11a-4) 演算部17の制御により、除数テーブルT内の除数毎に、各素数候補p,f(p)の試行割算を個別に実行する試行割算実行機能。
(f11a-5) 試行割算実行機能による全ての試行割算の結果が剰余を持つとき、演算部17の制御により、第1素数候補pに対し、2である底を用いたミラー-ラビン(Miller - Rabin)テストを実行する第1のミラー-ラビンテスト実行機能。
【0078】
(f11a-6) 第1のミラー-ラビンテスト実行機能によるテストの結果が合格のとき、演算部17の制御により、第2素数候補f(p)に対し、確率的素数判定法又は確定的素数判定法を実行する素数判定機能。
【0079】
ここで、確率的素数判定法又は確定的素数判定法としては、前述した確率的素数判定法(例、フェルマー法、ソロベイ-ストラッセン法、ラビン法など)や確定的素数判定法(例、ミラー法、アドルマン−ルメリ法、コーエン−レンストラ法など)が挙げられる。
【0080】
(f11a-7) 上記(f11a-6)の素数判定機能による素数判定の結果が合格のとき、演算部17の制御により、第1素数候補pに対し、2でない底を用いたミラー-ラビンテストを実行する第2のミラー-ラビンテスト実行機能。
【0081】
(f11a-8) 第2のミラー-ラビンテスト実行機能によるテストの結果が合格のとき、第1素数候補pに対してルーカス-レーマーテスト(Lucas - Lehmer)を実行する機能。
【0082】
(f11a-9) ルーカス-レーマーテストの結果が合格のとき、第2素数候補f(p)を素数として出力する素数出力機能。
【0083】
係るプログラムは、外部の記憶媒体又はネットワークから予めプログラム記憶部11にインストールされてもよいことは前述した通りである。
次に、以上のように構成された素数生成装置による素数生成方法について図3のフローチャートを用いて説明する。
【0084】
始めに、図示しない情報機器では、何らかの暗号処理中に、第1素数p及び第2素数f(p)を生成する必要が生じたとする。ここで、情報機器においては、保持する素数生成装置10に入出力I/F14を介して素数生成指令を入力する。
【0085】
素数生成装置10においては、素数生成指令を受けると、CPU15が乱数生成部16を制御し、乱数生成部16が、第1素数候補pとしての乱数を生成する(ST11)。
【0086】
次に、素数生成装置10においては、CPU15が演算部17を制御し、演算部17が第1素数候補pに基づいて、第2素数候補f(p)を算出する(ST12)。具体的には、CPU15は、第1素数候補pと、所定の多項式f(X)の形とに基づいて、次数n,n-1,…,2,1及び次数毎の整数係数an,an-1,…,a2,a1を順次、バスを介して演算部17に入力する。演算部17は、第1素数候補pと、多項式f(X)の次数及び次数毎の整数係数とに基づいて、第1素数候補pに対する次数のベキ乗を計算し、得られたベキ乗結果と整数係数とを乗算し、得られた多項式の変数項をバスを介してRAM(テーブル記憶部12)に書き込む。また、CPU15は、n次から1次までの変数項an・pn,an-1・pn-1,…,a2・p2,a1・pと、定数項a0とをバスを介して演算部17に入力する。演算部17は、これら変数項と、定数項とを加算し、得られた多項式f(p)をバスを介してRAM(テーブル記憶部12)に書き込む。
【0087】
続いて、素数生成装置10においては、演算部17が、各素数候補p,f(p)に対し、除数テーブルT内の除数毎に、個別に試行割算を実行する(ST13)。
【0088】
具体的には、CPU15は、第1素数候補pと、除数テーブルT内の除数とをバスを介して演算部17に入力する。演算部17は、第1素数候補pを除数で割り算し、得られた剰余をバスに出力する。
【0089】
CPU15は、第1素数候補pを除数で割り算した剰余が0のとき、又は全ての除数による割り算を終えたとき、第1素数候補pに対するステップST13の試行割算を終了する。なお、CPU15は第2素数候補f(p)についても同様にステップST13を実行する。
【0090】
このステップST13の実行中、CPU15は、ステップST13の試行割算を終了したときの剰余が0である場合(試行割算に失敗した場合)にはステップST11に戻る。
【0091】
一方、ステップST13の終了時に、全ての試行割算の結果が剰余を持つ場合(試行割算に成功した場合)には、CPU15は演算部17を制御し、第1素数候補pに対し、2である底を用いたミラー-ラビンテスト(1回目)を実行する(ST14)。
【0092】
具体的には、CPU15がミラー-ラビンテストのアルゴリズムに従って演算部17を制御することにより、2である底を用いた場合のミラー-ラビンテストを実行する。
【0093】
さてステップST14のテストの結果、第1素数候補pが素数ではない場合(NGの場合)には、素数生成装置10はステップST11に戻る。
【0094】
ステップST14の素数判定の結果、第1素数候補pが素数である場合(OKの場合)には、素数生成装置10においては、CPU15が演算部17を制御することにより、第2素数候補f(p)に対し、確率的素数判定法又は確定的素数判定法に基づいて素数判定を実行する。
【0095】
具体的には、CPU15が「確率的素数判定法又は確定的素数判定法」のアルゴリズムに従って演算部17を制御することにより、素数判定を実行する(ST15)。
【0096】
ステップST15の判定の結果、素数でない場合には、素数判定装置10はステップST11に戻る。また、ステップST15の判定結果からf(p)が素数である場合には、素数判定装置10は、CPU15が演算部17を制御することにより、第1素数候補pに対し、他の7個の底を順次用いてミラー-ラビンテスト(2〜8回目)を実行する(ST16−1〜ST16−7)。
【0097】
ステップST16−1〜ST16−7においては、それぞれミラー-ラビンテストの結果が不合格であればステップST11に戻り、ミラー-ラビンテストの結果が合格であれば次の回のミラー-ラビンテストに進む。
【0098】
このようにして、ステップST16−7のミラー-ラビンテストの結果が合格であれば、素数生成装置10は、CPU15が演算部17を制御することにより、第1素数候補pに対し、ルーカス-レーマーテストを実行し(ST17)、テストの結果が不合格のときにはステップST11へ戻る。
【0099】
一方、ステップST17のテストの結果が合格のとき(第1素数候補pが素数である場合には、素数生成装置10は、第2素数候補f(p)と、第1素数候補pとをそれぞれ素数f(p),pとして入出力I/F14から出力する。
【0100】
上述したように本実施形態によれば、第1の実施形態と同様に、「ミラー-ラビンテスト」を分割して実行し、1つの底における「ミラー-ラビンテスト(ST14)」が不合格となる場合に、以後の処理(ステップST15〜ST17)を実行せずに済む構成のため、各素数候補p,f(p)の試行割算後の本格的素数判定に関し、以後の処理(ST15〜ST17)の分だけ高速化を図ることができる。
【0101】
すなわち、本実施形態は、「ミラー-ラビンテスト」を分割して実行する構成により、「ステップST14の不合格回数」×「ステップST15〜ST17の演算時間」だけ、素数判定処理の時間的高速化を図ることができる(補足すると、特許文献1記載の技術は、試行割算後、「pの素数判定」、「2p+1の素数判定」の順に処理を実行していた。これに対し、本実施形態は、試行割算後、「pの素数判定の一部(ST14)」、「2p+1の素数判定(ST15)」、「pの素数判定の残り(ST16−1〜ST16−7,ST17)」の順に処理を実行している)。
【0102】
また、本実施形態によれば、セーフプライムの形の素数に限らず、第1素数pから算出可能で定数項(a0)が0ではない多項式f(p)(=an・pn + an-1・pn-1 + … + a2・p2 + a1・p + a0)の形をもつ第2素数f(p)に対しても、各素数候補の試行割算後の本格的素数判定に関し、高速化を図ることができる。
【0103】
(第3の実施形態)
次に、本発明の第3の実施形態について図1及び図4を参照しながら説明する。
本実施形態は、第1の実施形態とは異なり、マウアー法を用いた素数生成法の高速化を図るものである。
【0104】
これに伴い、プログラム記憶部11に記憶され且つCPU15に実行されるプログラムは、図2に示した素数生成機能に代えて、図4に示す素数生成機能を実現させるためのものとなっている。この素数生成機能としては、例えば以下の機能(f11b-1)〜(f11b-9)を含んでいる。
【0105】
(f11b-1) 複数個の除数が記述された除数テーブルTをテーブル記憶部12に予め記憶させる機能。
(f11b-2) 演算部17の制御により、「マウアー法」に基づいて、L/2ビット程度の素数Fを生成する素数生成機能。
【0106】
ここで、「マウアー法」について説明する。「マウアー法」とはポクリントン(Pocklington(又はポックリントン))の定理を繰り返し用いて確定的に素数を生成する方法である。より詳しくは、「マウアー法」は、以下に示すポクリントンの定理中の(1)式について、試行割算で求めた小さな素数Fからポクリントンの定理により素数F’を生成し、その素数F’を素数Fに代入して、再びポクリントンの定理を用いて新たにF’を生成するという演算を、必要なビット数の素数が得られるまで繰り返し行う素数生成方法である。
【0107】
「ポクリントンの定理」は、以下の内容である。
F’=2rF+1 ・・・(1)
2r<F、但しrは乱数、Fは素数。
【0108】
この時、ある整数aが存在して、
a^(F’−1)≡1(mod F’)、
g.c.d.(a^{(F’−1)/F}−1,F’)=1
が成り立つならば、F’は素数である。
【0109】
(f11b-3) 乱数生成部16の制御により、ポクリントンの定理に基づく式p=2rF+1に基づいて、L/2ビット程度の素数Fに応じてL−1ビットの第1素数候補pを得られるように、乱数rを生成する乱数生成機能。
(f11b-4) 演算部17の制御により、乱数r、素数F及び式p=2rF+1に基づいて、L−1ビットの第1素数候補pを算出する第1素数候補算出機能。
【0110】
(f11b-5) 演算部17の制御により、第1素数候補pに基づいて、Lビットの第2素数候補2p+1を算出する第2素数候補算出機能。
【0111】
(f11b-6) 演算部17の制御により、除数テーブルT内の除数毎に、各素数候補p,2p+1の試行割算を個別に実行する試行割算実行機能。
(f11b-7) 試行割算実行機能による全ての試行割算の結果が剰余を持つとき、演算部17の制御により、第2素数候補2p+1に対し、「拡張されたオイラー-ラグランジュ(Euler - Lagrange)の定理」に基づいて素数判定を実行する第1の素数判定機能。
【0112】
(f11b-8) 第1の素数判定機能による素数判定の結果が合格のとき、演算部17の制御により、第1素数候補pに対し、ポクリントンの定理に基づいて素数判定を実行する第2の素数判定機能。
【0113】
(f11b-9) 第2の素数判定機能による素数判定の結果が合格のとき、第2素数候補2p+1を素数として出力する素数出力機能。
【0114】
係るプログラムは、外部の記憶媒体又はネットワークから予めプログラム記憶部11にインストールされてもよい。
【0115】
次に、以上のように構成された素数生成装置による素数生成法について図4のフローチャートを用いて説明する。
【0116】
始めに、図示しない情報機器では、何らかの暗号処理中に、第1素数p及び第2素数2p+1を生成する必要が生じたとする。ここで、情報機器においては、保持する素数生成装置10に入出力I/F14を介して素数生成指令を入力する。
【0117】
素数生成装置10においては、素数生成指令を受けると、CPU15が演算部17を制御し、演算部17が、「マウアー法」に基づいて、L/2ビット程度の素数Fを生成する(ST21)。
【0118】
続いて、素数生成装置10においては、CPU15が乱数生成部16を制御し、乱数生成部16が、ポクリントンの定理に基づく式p=2rF+1に基づいて、L/2ビット程度の素数Fに応じてL−1ビットの第1素数候補pを得られるように、乱数rを生成する(ST22)。
【0119】
次に、素数生成装置10においては、演算部17が乱数r、素数F及び式p=2rF+1に基づいて、L−1ビットの第1素数候補pを算出する(ST23)。
【0120】
また、素数生成装置10においては、演算部17が第1素数候補pに基づいて、Lビットの第2素数候補2p+1を算出する(ST24)。
【0121】
続いて、素数生成装置10においては、演算部17が、各素数候補p,2p+1に対し、除数テーブルT内の除数毎に、個別に試行割算を実行する(ST25)。
【0122】
具体的には、CPU15は、第1素数候補pと、除数テーブルT内の除数とをバスを介して演算部17に入力する。演算部17は、第1素数候補pを除数で割り算し、得られた剰余をバスに出力する。
【0123】
CPU15は、第1素数候補pを除数で割り算した剰余が0のとき、又は全ての除数による割り算を終えたとき、第1素数候補pに対するステップST25の試行割算を終了する。なお、CPU15は第2素数候補2p+1についても同様にステップST25を実行する。
【0124】
このステップST25の実行中、CPU15は、ステップST25の試行割算を終了したときの剰余が0である場合(試行割算に失敗した場合)にはステップST21に戻る。
【0125】
一方、ステップST25の終了時に、全ての試行割算の結果が剰余を持つ場合(試行割算に成功した場合)には、CPU15は演算部17を制御することにより、第2素数候補2p+1に対し、「拡張されたオイラー-ラグランジュ(Euler - Lagrange)の定理」に基づいて素数判定を実行する。
【0126】
具体的には、CPU15が「拡張されたオイラー-ラグランジュ(Euler - Lagrange)の定理」のアルゴリズムに従って演算部17を制御することにより、素数判定を実行する。
【0127】
始めに、素数判定装置10は、p≡1(mod 4)を計算し(ST26)、p≡1(mod 4)であれば、2^p≡−1(mod 2p+1)か否かを判定する(ST27:主張(EL-i)対応)。ステップST27の判定の結果、否の場合(=主張(EL-i)から2p+1が素数でない場合)には、素数判定装置10はステップST22に戻る。また、ステップST27の判定の結果、2^p≡−1(mod 2p+1)である場合(=主張(EL-i)から2p+1が素数である場合)には、素数判定装置10はステップST29に進む。
【0128】
一方、ステップ26の判定の結果、p≡3(mod 4)であれば、2^p≡1(mod 2p+1)か否かを判定する(ST28:主張(EL-ii)対応)。ステップST28の判定の結果、否の場合(=主張(EL-ii)から2p+1が素数でない場合)には、素数判定装置10はステップST22に戻る。また、ステップST28の判定の結果、2^p≡1(mod 2p+1)である場合(=主張(EL-ii)から2p+1が素数である場合)には、素数判定装置10はステップST29に進む。
【0129】
次に、ステップST27又はST28の判定結果から2p+1が素数である場合には、素数判定装置10は、CPU15が演算部17を制御することにより、第1素数候補pに対し、ポクリントンの定理に基づいて素数判定を実行する(ST29)。ステップST29の判定の結果、不合格の場合(=第1素数候補pが素数でない場合)には、素数判定装置10はステップST22に戻る。
【0130】
一方、ステップST29の素数判定の結果が合格のとき(第1素数候補pが素数である場合)には、素数生成装置10は、第2素数候補2p+1と、第1素数候補pとをそれぞれ素数2p+1,pとして入出力I/F14から出力する。
【0131】
上述したように本実施形態によれば、「マウアー法」における「ポクリントンの定理」による素数判定を、「拡張されたオイラー-ラグランジュの定理」の後に実行している。
【0132】
ここで、「ポクリントンの定理」による素数判定は、2に限らない底のベキ乗算を用いるため、2を底としたベキ乗算を用いる「拡張されたオイラー-ラグランジュの定理」の演算時間よりも長い演算時間を必要とする。
【0133】
言い換えると、本実施形態においては、短い演算時間の「拡張されたオイラー-ラグランジュの定理」により素数判定が不合格となる場合に、長い演算時間の「ポクリントンの定理」による素数判定を実行せずに済む構成のため、各素数候補の試行割算後の本格的素数判定に関し、ポクリントンの定理による素数判定(ステップST29)の分だけ、高速化を図ることができる。
【0134】
補足すると、従来、マウアー法においては、多数の乱数rを発生させ、複数回ポクリントンの定理が成り立つかを確かめることで、第1素数pを生成させ、その後に第2素数候補2p+1を素数判定する。しかしながら、従来のマウアー法では、第2素数候補2p+1の素数判定が不合格の場合には、第1素数候補pを素数と確定させる演算が無駄になってしまう。そこで、本実施形態では、ポクリントンの定理による第1素数候補pの素数判定を行う前に、拡張されたオイラー-ラグランジュの定理を用いた第2素数候補2p+1の素数判定を先に実行し、第2素数候補2p+1の素数判定が合格の場合に、ポクリントンの定理を用いて、第2素数候補2p+1を素数判定している。
【0135】
また、本実施形態では、「マウアー法」を用いた構成により、確定的にセーフプライムを生成することができる。
【0136】
(第4の実施形態)
次に、本発明の第4の実施形態について図1及び図5を参照しながら説明する。
本実施形態は、第2及び第3の実施形態を組み合わせた例であり、具体的には、第3の実施形態のマウアー法の分割実行方式を、2p+1、pは素数という形の素数に限定することなく、第2の実施形態に述べた多項式f(X)、Xは素数という形の素数を生成する場合に拡張したものである。
【0137】
これに伴い、本実施形態では、「拡張されたオイラー-ラグランジェの定理」に基づく素数判定に代えて、「拡張されたオイラー-ラグランジュの定理」とは異なる確率的素数判定法又は確定的素数判定法を用いている。
【0138】
具体的には、プログラム記憶部11に記憶され且つCPU15に実行されるプログラムは、図3又は図4に示した素数生成機能に代えて、図5に示す素数生成機能を実現させるためのものとなっている。この素数生成機能としては、例えば以下の機能(f11c-1)〜(f11c-9)を含んでいる。
【0139】
(f11c-1) 複数個の除数が記述された除数テーブルTをテーブル記憶部12に予め記憶させる機能。
(f11c-2) 演算部17の制御により、「マウアー法」に基づいて、L/2ビット程度の素数Fを生成する素数生成機能。
【0140】
(f11c-3) 乱数生成部16の制御により、ポクリントンの定理に基づく式p=2rF+1に基づいて、L/2ビット程度の素数Fに応じてLビットの第1素数候補pを得られるように、乱数rを生成する乱数生成機能。
(f11c-4) 演算部17の制御により、乱数r、素数F及び式p=2rF+1に基づいて、Lビットの第1素数候補pを算出する第1素数候補算出機能。
【0141】
(f11c-5) 演算部17の制御により、第1素数候補pに基づいて、第2素数候補f(p)を算出する第2素数候補算出機能。
【0142】
(f11c-6) 演算部17の制御により、除数テーブルT内の除数毎に、各素数候補p,f(p)の試行割算を個別に実行する試行割算実行機能。
(f11c-7) 試行割算実行機能による全ての試行割算の結果が剰余を持つとき、演算部17の制御により、第2素数候補f(p)に対し、確率的素数判定法又は確定的素数判定法に基づいて素数判定を実行する第1の素数判定機能。
【0143】
(f11c-8) 第1の素数判定機能による素数判定の結果が合格のとき、演算部17の制御により、第1素数候補pに対し、ポクリントンの定理に基づいて素数判定を実行する第2の素数判定機能。
【0144】
(f11c-9) 第2の素数判定機能による素数判定の結果が合格のとき、第2素数候補f(p)を素数として出力する素数出力機能。
【0145】
係るプログラムは、外部の記憶媒体又はネットワークから予めプログラム記憶部11にインストールされてもよいことは前述した通りである。
【0146】
次に、以上のように構成された素数生成装置による素数生成法について図5のフローチャートを用いて説明する。
【0147】
始めに、図示しない情報機器では、何らかの暗号処理中に、第1素数p及び第2素数f(p)を生成する必要が生じたとする。ここで、情報機器においては、保持する素数生成装置10に入出力I/F14を介して素数生成指令を入力する。
【0148】
素数生成装置10においては、素数生成指令を受けると、CPU15が演算部17を制御し、演算部17が、「マウアー法」に基づいて、L/2ビット程度の素数Fを生成する(ST31)。
【0149】
続いて、素数生成装置10においては、CPU15が乱数生成部16を制御し、乱数生成部16が、ポクリントンの定理に基づく式p=2rF+1に基づいて、L/2ビット程度の素数Fに応じてLビットの第1素数候補pを得られるように、乱数rを生成する(ST32)。
【0150】
次に、素数生成装置10においては、演算部17が乱数r、素数F及び式p=2rF+1に基づいて、Lビットの第1素数候補pを算出する(ST33)。
【0151】
また、素数生成装置10においては、演算部17が第1素数候補pに基づいて、第2素数候補f(p)を算出する(ST34)。
【0152】
続いて、素数生成装置10においては、演算部17が、各素数候補p,f(p)に対し、除数テーブルT内の除数毎に、個別に試行割算を実行する(ST35)。
【0153】
具体的には、CPU15は、第1素数候補pと、除数テーブルT内の除数とをバスを介して演算部17に入力する。演算部17は、第1素数候補pを除数で割り算し、得られた剰余をバスに出力する。
【0154】
CPU15は、第1素数候補pを除数で割り算した剰余が0のとき、又は全ての除数による割り算を終えたとき、第1素数候補pに対するステップST35の試行割算を終了する。なお、CPU15は第2素数候補f(p)についても同様にステップST35を実行する。
【0155】
このステップST35の実行中、CPU15は、ステップST35の試行割算を終了したときの剰余が0である場合(試行割算に失敗した場合)にはステップST32に戻る。
【0156】
一方、ステップST35の終了時に、全ての試行割算の結果が剰余を持つ場合(試行割算に成功した場合)には、CPU15は演算部17を制御することにより、第2素数候補f(p)に対し、確率的素数判定法又は確定的素数判定法に基づいて素数判定を実行する(ST36)。具体的には、CPU15が確率的素数判定法又は確定的素数判定法のアルゴリズムに従って演算部17を制御することにより、素数判定を実行する。
【0157】
ステップST36の判定の結果、不合格の場合(=第2素数候補f(p)が素数でない場合)には、素数判定装置10はステップST32に戻る。
【0158】
一方、ステップST36の判定結果から第2素数候補f(p)が素数である場合には、素数判定装置10は、CPU15が演算部17を制御することにより、第1素数候補pに対し、ポクリントンの定理に基づいて素数判定を実行する(ST37)。ステップST37の判定の結果、不合格の場合(=第1素数候補pが素数でない場合)には、素数判定装置10はステップST32に戻る。
【0159】
一方、ステップST37の素数判定の結果が合格のとき(第1素数候補pが素数である場合)には、素数生成装置10は、第2素数候補f(p)と、第1素数候補pとをそれぞれ素数f(p),pとして入出力I/F14から出力する。
【0160】
上述したように本実施形態によれば、第3の実施形態と同様に、「マウアー法」における「ポクリントンの定理」による素数判定を、確率的素数判定法又は確定的素数判定法の後に実行している。
【0161】
ここで、「ポクリントンの定理」による素数判定は、2に限らない底のベキ乗算を用いるため、2を底としたベキ乗算を用いる「確率的素数判定法又は確定的素数判定法」の演算時間よりも長い演算時間を必要とする。
【0162】
言い換えると、本実施形態においては、短い演算時間の「確率的素数判定法又は確定的素数判定法」により素数判定が不合格となる場合に、長い演算時間の「ポクリントンの定理」による素数判定を実行せずに済む構成のため、各素数候補の試行割算後の本格的素数判定に関し、ポクリントンの定理による素数判定(ステップST37)の分だけ、高速化を図ることができる。
【0163】
(他の変形例)
(1)第1及び第3の実施形態は、「ミラー-ラビンテスト(ミラー-ラビン法)」や「マウアー法」に代えて、図6に示すように、数ステップからなる他の確率的素数判定法又は確定的素数判定法を分割した構成の素数生成を行なうように変形してもよい。同様に、第1及び第3の実施形態は、「拡張されたオイラー-ラグランジュの定理」に代えて、他の確率的素数判定法又は確定的素数判定法を用いるように変形してもよい。
【0164】
ここで、確率的素数判定法の例としては、フェルマー(Fermat)法、ソロベイ(Solovay)ーストラッセン(Strassen)法、ラビン法などが挙げられる。確定的素数判定法の例としては、ミラー法、アドルマン(Adleman)−ルメリ(Rumely)法、コーエン(Cohen)−レンストラ(Lenstra)法を用いる方法などが挙げられる。これらの例は、文献(池野信一、小山謙二共著、“現代暗号理論”、(社)電子情報通信学会、コロナ社、p240−241、1986)に記載されている。また、ポクリントンの定理を用いる素数生成法である、シャウ(Shawe)−テイラー(Taylor)の方法は、非特許文献3に記載されている。
【0165】
また、変形例(1)においては、第1の実施形態を変形した場合、第1素数候補pに対し、「ミラー-ラビンテスト」とは異なる第1の確率的素数判定法又は確定的素数判定法を途中まで実行し、この第1の素数判定法による素数判定の結果が合格のとき、第2素数候補2p+1に対し、第2の確率的素数判定法又は確定的素数判定法を実行し、この第2の素数判定法による素数判定の結果が合格のとき、第1素数候補pに対し、第1の素数判定法による素数判定を再開し、この素数判定を最後まで実行して素数判定の結果が合格のとき、各素数候補p,2p+1を素数として出力する。
【0166】
また、変形例(1)においては、第3の実施形態を変形した場合、第1素数候補pに対し、「マウアー法」とは異なる第1の確率的素数判定法又は確定的素数判定法を途中まで実行し、この第1の素数判定法による素数判定の結果が合格のとき、第2素数候補2p+1に対し、第2の確率的素数判定法又は確定的素数判定法を実行し、この第2の素数判定法による素数判定の結果が合格のとき、第1素数候補pに対し、第1の素数判定法による素数判定を再開し、この素数判定を最後まで実行して素数判定の結果が合格のとき、各素数候補p,2p+1を素数として出力する。
【0167】
以上のように変形しても、適用した第1又は第3の実施形態と同様の作用効果を得ることができる。
【0168】
(2)第2及び第4の実施形態は、「ミラー-ラビンテスト(ミラー-ラビン法)」や「マウアー法」に代えて、図7に示すように、数ステップからなる他の確率的素数判定法又は確定的素数判定法を分割した構成の素数生成を行なうように変形してもよい。このように変形しても、適用した第2又は第4の実施形態と同様の作用効果を得ることができる。
【0169】
詳しくは、変形例(2)においては、第2の実施形態を変形した場合、第1素数候補pに対し、「ミラー-ラビンテスト」とは異なる第1の確率的素数判定法又は確定的素数判定法を途中まで実行し、この第1の素数判定法による素数判定の結果が合格のとき、第2素数候補f(p)に対し、第2の確率的素数判定法又は確定的素数判定法を実行し、この第2の素数判定法による素数判定の結果が合格のとき、第1素数候補pに対し、第1の素数判定法による素数判定を再開し、この素数判定を最後まで実行して素数判定の結果が合格のとき、各素数候補p,f(p)を素数として出力する。
【0170】
また、変形例(2)においては、第4の実施形態を変形した場合、第1素数候補pに対し、「マウアー法」とは異なる第1の確率的素数判定法又は確定的素数判定法を途中まで実行し、この第1の素数判定法による素数判定の結果が合格のとき、第2素数候補f(p)に対し、第2の確率的素数判定法又は確定的素数判定法を実行し、この第2の素数判定法による素数判定の結果が合格のとき、第1素数候補pに対し、第1の素数判定法による素数判定を再開し、この素数判定を最後まで実行して素数判定の結果が合格のとき、各素数候補p,f(p)を素数として出力する。
【0171】
(3)上記変形例(1)は、図8に示すように、第1素数候補pと、第2素数候補2p+1との素数判定の順番を逆にするように変形してもよい。このように変形しても、適用した変形例(1)と同様の作用効果を得ることができる。また、第2素数候補2p+1を最後まで素数判定し、その後、第1素数候補pを素数判定してもよい。
【0172】
(4)上記変形例(2)は、図9に示すように、第1素数候補pと、第2素数候補f(p)との素数判定の順番を逆にするように変形してもよい。このように変形しても、適用した変形例(2)と同様の作用効果を得ることができる。また、第2素数候補f(p)を最後まで素数判定し、その後、第1素数候補pを素数判定してもよい。
【0173】
変形例(2)、(4)については、次のように処理を効率化することができる。素数pをマウアー法で生成し、偶数kについて、f(p)=kp+1とし、f(p)をポクリントンの定理で判定する際に、kがp及びf(p)へ行う試行割算の最大数のビット数以下程度にとる。このとき、次のステップ(a)-(e)により、確定的にp及びf(p)を素数判定することが出来る。
【0174】
(a)素数p=2rF+1となるFをマウアー法で生成する。
【0175】
(b)乱数rを生成する。
【0176】
(c)pとf(p)へ試行割算を行う。
【0177】
(d)f(p)が素数であるかポクリントンの定理で判定するため、下記を検証。
2^{f(p)-1} ≡ 1 (mod f(p))
(e)pを通常のマウアー法で、素数判定する。
【0178】
ここで、(d)において、通常のポクリントンの定理に従うならば、
G.C.D.( 2^{(f(p)-1)/F}−1, f(p)) = 1
についても検証しなくてはならないが、これについては(c)の試行割算を通過した時点で、検証を行っているため、この処理を省くことが出来る。
【0179】
(5)上記変形例(1)から(4)において、いずれかの素数をポクリントンの定理を用いて素数判定する際に、第1の判定条件を次のように変形してもよい。すなわち、整数nを素数判定する際に、ある整数aが存在して、
a^{n-1} ≡ 1 (mod n)
が成立することを確かめるフェルマー(Fermat)法の代わりに、整数nに対して底aに関するミラー-ラビンテストが成り立つことを確かめる。このように変形しても、検証の誤判定率を低減させることなく、変形例(1)から(4)と同様の作用効果を得ることができる。更には一般にミラー-ラビンテストに要する時間は、フェルマー(Fermat)法に要する時間より短いため、判定時間を低減させることが可能となる。
【0180】
なお、上記実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、光磁気ディスク(MO)、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【0181】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【0182】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のMW(ミドルウェア)等が上記実施形態を実現するための各処理の一部を実行しても良い。
【0183】
さらに、本発明における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0184】
また、記憶媒体は1つに限らず、複数の媒体から上記実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【0185】
尚、本発明におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【0186】
また、本発明におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【0187】
なお、本願発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
【図面の簡単な説明】
【0188】
【図1】本発明の第1の実施形態に係る素数生成装置の構成を示す模式図である。
【図2】同実施形態における素数生成方法を説明するためのフローチャートである。
【図3】本発明の第2の実施形態における素数生成方法を説明するためのフローチャートである。
【図4】本発明の第3の実施形態における素数生成方法を説明するためのフローチャートである。
【図5】本発明の第4の実施形態における素数生成方法を説明するためのフローチャートである。
【図6】本発明の変形例を説明するためのフローチャートである。
【図7】本発明の変形例を説明するためのフローチャートである。
【図8】本発明の変形例を説明するためのフローチャートである。
【図9】本発明の変形例を説明するためのフローチャートである。
【符号の説明】
【0189】
10…素数生成装置、11…プログラム記憶部、12…テーブル記憶部、13…不揮発性メモリ、14…入出力I/F、15…CPU、16…乱数生成部、17…演算部、T…除算テーブル。

【特許請求の範囲】
【請求項1】
Lビットの素数2p+1を生成する素数生成装置に用いられる素数生成プログラムであって、
前記素数生成装置のコンピュータを、
予め複数個の除数が記憶された除数記憶手段、
L−1ビットの第1素数候補pとして乱数を生成する乱数生成手段、
前記第1素数候補pに基づいて、Lビットの第2素数候補2p+1を算出する第2素数候補算出手段、
前記除数記憶手段内の除数毎に、前記各素数候補p,2p+1の試行割算を個別に実行する試行割算実行手段、
前記試行割算実行手段による全ての試行割算の結果が剰余を持つとき、前記第1素数候補pに対し、2である底を用いたミラー-ラビンテストを実行する第1のミラー-ラビンテスト実行手段、
前記第1のミラー-ラビンテスト実行手段によるテストの結果が合格のとき、前記第2素数候補2p+1に対し、「拡張されたオイラー-ラグランジュの定理」に基づいて素数判定を実行する素数判定手段、
前記素数判定手段による素数判定の結果が合格のとき、前記第1素数候補pに対し、2でない底を用いたミラー-ラビンテストを実行する第2のミラー-ラビンテスト実行手段、
前記第2のミラー-ラビンテスト実行手段によるテストの結果が合格のとき、前記第2素数候補2p+1を素数として出力する素数出力手段、
として機能させるための素数生成プログラム。
【請求項2】
定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)から算出可能な第2素数f(p)(∈Z)を生成する素数生成装置に用いられる素数生成プログラムであって、
前記素数生成装置のコンピュータを、
予め複数個の除数が記憶された除数記憶手段、
前記第1素数候補pとして乱数を生成する乱数生成手段、
前記第1素数候補pに基づいて、前記第2素数候補f(p)を算出する第2素数候補算出手段、
前記除数記憶手段内の除数毎に、前記各素数候補p,f(p)の試行割算を個別に実行する試行割算実行手段、
前記試行割算実行手段による全ての試行割算の結果が剰余を持つとき、前記第1素数候補pに対し、2である底を用いたミラー-ラビンテストを実行する第1のミラー-ラビンテスト実行手段、
前記第1のミラー-ラビンテスト実行手段によるテストの結果が合格のとき、前記第2素数候補f(p)に対し、確率的素数判定法又は確定的素数判定法を実行する素数判定手段、
前記素数判定手段による素数判定の結果が合格のとき、前記第1素数候補pに対し、2でない底を用いたミラー-ラビンテストを実行する第2のミラー-ラビンテスト実行手段、
前記第2のミラー-ラビンテスト実行手段によるテストの結果が合格のとき、前記第2素数候補f(p)を素数として出力する素数出力手段、
として機能させるための素数生成プログラム。
【請求項3】
Lビットの素数2p+1を生成する素数生成装置に用いられる素数生成プログラムであって、
前記素数生成装置のコンピュータを、
予め複数個の除数が記憶された除数記憶手段、
「マウアー法」に基づいて、L/2ビット程度の素数Fを生成する素数生成手段、
ポクリントンの定理に基づく式p=2rF+1に基づいて、前記L/2ビット程度の素数Fに応じてL−1ビットの第1素数候補pを得られるように、乱数rを生成する乱数生成手段、
前記乱数r、前記素数F及び前記式p=2rF+1に基づいて、L−1ビットの第1素数候補pを算出する第1素数候補算出手段、
前記第1素数候補pに基づいて、Lビットの第2素数候補2p+1を算出する第2素数候補算出手段、
前記除数記憶手段内の除数毎に、前記各素数候補p,2p+1の試行割算を個別に実行する試行割算実行手段、
前記試行割算実行手段による全ての試行割算の結果が剰余を持つとき、前記第2素数候補2p+1に対し、「拡張されたオイラー-ラグランジュの定理」に基づいて素数判定を実行する第1の素数判定手段、
前記第1の素数判定手段による素数判定の結果が合格のとき、前記第1素数候補pに対し、ポクリントンの定理に基づいて素数判定を実行する第2の素数判定手段、
前記第2の素数判定手段による判定結果が合格のとき、前記第2素数候補2p+1を素数として出力する素数出力手段、
として機能させるための素数生成プログラム。
【請求項4】
定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)から算出可能な第2素数f(p)(∈Z)を生成する素数生成装置に用いられる素数生成プログラムであって、
前記素数生成装置のコンピュータを、
予め複数個の除数が記憶された除数記憶手段、
「マウアー法」に基づいて、L/2ビット程度の素数Fを生成する素数生成手段、
ポクリントンの定理に基づく式p=2rF+1に基づいて、前記L/2ビット程度の素数Fに応じてLビットの第1素数候補pを得られるように、乱数rを生成する乱数生成手段、
前記乱数r、前記素数F及び前記式p=2rF+1に基づいて、Lビットの第1素数候補pを算出する第1素数候補算出手段、
前記第1素数候補pに基づいて、第2素数候補f(p)を算出する第2素数候補算出手段、
前記除数記憶手段内の除数毎に、前記各素数候補p,f(p)の試行割算を個別に実行する試行割算実行手段、
前記試行割算実行手段による全ての試行割算の結果が剰余を持つとき、前記第2素数候補f(p)に対し、確率的素数判定法又は確定的素数判定法に基づいて素数判定を実行する第1の素数判定手段、
前記第1の素数判定手段による素数判定の結果が合格のとき、前記第1素数候補pに対し、ポクリントンの定理に基づいて素数判定を実行する第2の素数判定手段、
前記第2の素数判定手段による判定結果が合格のとき、前記第2素数候補2p+1を素数として出力する素数出力手段、
として機能させるための素数生成プログラム。
【請求項5】
Lビットの素数2p+1を生成する素数生成装置に用いられる素数生成プログラムであって、
前記素数生成装置のコンピュータを、
予め複数個の除数が記憶された除数記憶手段、
L−1ビットの第1素数候補pとして乱数を生成する乱数生成手段、
前記第1素数候補pに基づいて、Lビットの第2素数候補2p+1を算出する第2素数候補算出手段、
前記除数記憶手段内の除数毎に、前記各素数候補p,2p+1の試行割算を個別に実行する試行割算実行手段、
前記試行割算実行手段による全ての試行割算の結果が剰余を持つとき、前記第2素数候補2p+1に対し、「ミラー-ラビンテスト」とは異なる確率的素数判定法又は確定的素数判定法を途中まで実行する第1の素数判定手段、
前記第1の素数判定手段による素数判定の結果が合格のとき、前記第1素数候補pに対し、「拡張されたオイラー-ラグランジュの定理」を用いない確率的素数判定法又は確定的素数判定法に基づいて第2の素数判定を実行する第2の素数判定手段、
前記第2の素数判定手段による素数判定の結果が合格のとき、前記第2素数候補2p+1に対し、前記第1の素数判定手段による素数判定を再開し、この素数判定を最後まで実行する第3の素数判定手段、
前記第3の素数判定手段による素数判定の結果が合格のとき、前記第2素数候補2p+1を素数として出力する素数出力手段、
として機能させるための素数生成プログラム。
【請求項6】
定数項が0ではない、整数係数の多項式f(X)∈Z[X]に対し(但し、Xは任意の整数、ZはXを要素とする集合)、第1素数p(∈Z)から算出可能な第2素数f(p)(∈Z)を生成する素数生成装置に用いられる素数生成プログラムであって、
前記素数生成装置のコンピュータを、
予め複数個の除数が記憶された除数記憶手段、
前記第1素数候補pとして乱数を生成する乱数生成手段、
前記第1素数候補pに基づいて、前記第2素数候補f(p)を算出する第2素数候補算出手段、
前記除数記憶手段内の除数毎に、前記各素数候補p,f(p)の試行割算を個別に実行する試行割算実行手段、
前記試行割算実行手段による全ての試行割算の結果が剰余を持つとき、前記第2素数候補f(p)に対し、「ミラー-ラビンテスト」とは異なる確率的素数判定法又は確定的素数判定法を途中まで実行する第1の素数判定手段、
前記第1の素数判定手段による素数判定の結果が合格のとき、前記第1素数候補pに対し、確率的素数判定法又は確定的素数判定法を実行する第2の素数判定手段、
前記第2の素数判定手段による素数判定の結果が合格のとき、前記第2素数候補f(p)に対し、前記第1の素数判定手段による素数判定を再開し、この素数判定を最後まで実行する第3の素数判定手段、
前記第3の素数判定手段による素数判定の結果が合格のとき、前記第2素数候補f(p)を素数として出力する素数出力手段、
として機能させるための素数生成プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2007−334038(P2007−334038A)
【公開日】平成19年12月27日(2007.12.27)
【国際特許分類】
【出願番号】特願2006−166240(P2006−166240)
【出願日】平成18年6月15日(2006.6.15)
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
【Fターム(参考)】