(57)【特許請求の範囲】
【請求項１】
所定のビット長の素数Ｎを出力可能な素数生成装置であって、
前記素数Ｎのビット長より短いビット長の第１の素数Ｆに対し、前記第１の素数Ｆとは異なる第２の素数αを乗じる素数乗算手段と、
前記素数乗算手段による乗算結果Ｆαに対し、乗算及び加算処理を行ない、この処理結果として前記素数Ｎと第３の素数α’との積Ｎα’を生成する素数生成手段と、
前記素数生成手段により得られた積Ｎα’を前記第３の素数α’で除して前記素数Ｎを取出す素数取出し手段と、
を備えたことを特徴とする素数生成装置。
【請求項２】
所定のビット長の素数Ｎを出力可能な素数生成装置であって、
所定のビット数以下の素数｛α，α’，…｝が予め記憶された素数記憶手段と、
前記素数記憶手段内の素数を選択する選択手段と、
予め生成又は与えられた素数Ｆを隠蔽するように、前記選択手段により選択された素数αを乗じて積Ｈ＝Ｆαを算出する素数隠蔽手段と、
前記素数隠蔽手段により算出された積Ｈに基づいて、乱数Ｒを生成する乱数生成手段と、
前記乱数生成手段により生成された乱数Ｒ、前記素数隠蔽手段により算出された積Ｈ、及び前記選択手段により選択された他の素数α’に基づいて、素数候補Ｎ（＝２ＲＦ＋１）を隠蔽するように、この素数候補Ｎと素数α’の積Ｎα’を生成する素数候補隠蔽手段と、
前記素数候補隠蔽手段により生成された積Ｎα’及びポクリントンの定理に基づいて、前記素数候補Ｎが素数か否かを判定する素数判定手段と、
前記素数判定手段による判定結果が素数を示すとき、当該積Ｎα’から前記他の素数α’を除して素数Ｎを生成する素数生成手段と、
を備えたことを特徴とする素数生成装置。
【請求項３】
請求項２に記載の素数生成装置において、
前記素数記憶手段内の各素数｛α，α’，…｝は、ｎ＋１ビット以上のサイズであり、
前記予め生成又は与えられた素数Ｆに代えて、予め生成又は与えられた２ｎビット以下の奇数Ｆ0を用い、
前記素数隠蔽手段は、前記選択手段により選択された素数αを乗じて積Ｈ0＝Ｆ0αを算出し、この積Ｈ0をｎビット以下の全ての素数で個別に除算し、全ての除算結果が余りを持つとき、この積Ｈ0を前記積Ｈとして前記積Ｈ＝Ｆαの算出を完了することを特徴とする素数生成装置。
【請求項４】
請求項２に記載の素数生成装置において、
前記素数記憶手段内の各素数｛α，α’，…｝は、ｎ＋１ビット以上のサイズであり、
前記素数判定手段は、前記素数候補隠蔽手段により生成された積Ｎα’をｎビット以下の全ての素数で個別に除算し、全ての除算結果が余りを持つとき、前記ポクリントンの定理に基づいた判定を行なうことを特徴とする素数生成装置。
【請求項５】
与えられた正の整数ｍに対し、ｍビットの素数ｐを出力可能な素数生成装置であって、所定のビット数以下の素数｛α，β，γ，δ…｝が予め記憶された素数記憶手段と、
前記素数記憶手段内の素数を選択する選択手段と、
予め生成した０.４ｍビットの２つの素数Ｆs，Ｆtを隠蔽するように、前記選択手段により選択された２つの素数α，βを個別に乗じて２つの積Ｆsα，Ｆtβを算出する第１の素数隠蔽手段と、
前記第１の素数隠蔽手段により算出された積Ｆtβに基づいて乱数Ｒaを生成し、前記第１の素数隠蔽手段により算出された積Ｆsαに基づいて乱数Ｒbを生成する乱数生成手段と、
前記乱数生成手段により生成された乱数Ｒa、前記第１の素数隠蔽手段により算出された積Ｆtβ、及び前記選択手段により選択された素数β，γに基づいて、０.５ｍビットの素数Ｎr（＝２ＲaＦt＋１）を隠蔽するように、この素数Ｎrと素数γとの積Ｎrγ（＝（２ＲaＦtβγ）／β＋γ）を生成する第２の素数隠蔽手段と、
前記第２の素数隠蔽手段により生成された積Ｎrγ、前記第１の素数隠蔽手段により算出された積Ｆsα、前記乱数生成手段により生成された乱数Ｒb、前記選択手段により選択された素数γ，δに基づいて、ｍビットの素数候補ｐを隠蔽するように、この素数候補ｐと素数δの積ｐδ｛＝(１＋２(ＲbＦs−(Ｎr-1ｍｏｄ(Ｆsα)))Ｎr)δ｝を生成する素数候補隠蔽手段と、
この素数候補隠蔽手段により生成された積ｐδ及びポクリントンの定理に基づいて、前記素数候補ｐが素数か否かを判定する素数判定手段と、
前記素数判定手段による判定結果が素数を示すとき、当該積ｐδから前記素数δを除してｍビットの素数ｐを生成する素数生成手段と、
を備えたことを特徴とする素数生成装置。
【請求項６】
請求項５に記載の素数生成装置において、
前記素数記憶手段内の各素数｛α，β，γ，δ…｝は、ｎ＋１ビット以上のサイズであり、
前記素数判定手段は、前記素数候補隠蔽手段により生成された積ｐδをｎビット以下の全ての素数で個別に除算し、全ての除算結果が余りを持つとき、前記ポクリントンの定理に基づいた判定を行なうことを特徴とする素数生成装置。
【請求項７】
所定のビット長の素数Ｎを出力可能な素数生成装置に用いられる素数生成プログラムであって、
前記素数生成装置のコンピュータを、
前記素数Ｎのビット長より短いビット長の第１の素数Ｆに対し、前記第１の素数Ｆとは異なる第２の素数αを乗じる素数乗算手段、
前記素数乗算手段による乗算結果Ｆαに対し、乗算及び加算処理を行ない、この処理結果として前記素数Ｎと第３の素数α’との積Ｎα’を生成する素数生成手段、
前記素数生成手段により得られた積Ｎα’を前記第３の素数α’で除して前記素数Ｎを取出す素数取出し手段、
として機能させるための素数生成プログラム。
【請求項８】
所定のビット長の素数Ｎを出力可能な素数生成装置に用いられる素数生成プログラムであって、
前記素数生成装置のコンピュータを、
所定のビット数以下の素数｛α，α’，…｝が予め記憶された素数記憶手段、
前記素数記憶手段内の素数を選択する選択手段、予め生成又は与えられた素数Ｆを隠蔽するように、前記選択手段により選択された素数αを乗じて積Ｈ＝Ｆαを算出する素数隠蔽手段、前記素数隠蔽手段により算出された積Ｈに基づいて、乱数Ｒを生成する乱数生成手段、前記乱数生成手段により生成された乱数Ｒ、前記素数隠蔽手段により算出された積Ｈ、及び前記選択手段により選択された他の素数α’に基づいて、素数候補Ｎ（＝２ＲＦ＋１）を隠蔽するように、この素数候補Ｎと素数α’の積Ｎα’を生成する素数候補隠蔽手段、
前記素数候補隠蔽手段により生成された積Ｎα’及びポクリントンの定理に基づいて、前記素数候補Ｎが素数か否かを判定する素数判定手段、
前記素数判定手段による判定結果が素数を示すとき、当該積Ｎα’から前記他の素数α’を除して素数Ｎを生成する素数生成手段、
として機能させるための素数生成プログラム。
【請求項９】
与えられた正の整数ｍに対し、ｍビットの素数ｐを出力可能な素数生成装置に用いられる素数生成プログラムであって、
前記素数生成装置のコンピュータを、
所定のビット数以下の素数｛α，β，γ，δ…｝が予め記憶された素数記憶手段、
前記素数記憶手段内の素数を選択する選択手段、
予め生成した０.４ｍビットの２つの素数Ｆs，Ｆtを隠蔽するように、前記選択手段により選択された２つの素数α，βを個別に乗じて２つの積Ｆsα，Ｆtβを算出する第１の素数隠蔽手段、
前記第１の素数隠蔽手段により算出された積Ｆtβに基づいて乱数Ｒaを生成し、前記第１の素数隠蔽手段により算出された積Ｆsαに基づいて乱数Ｒbを生成する乱数生成手段、
前記乱数生成手段により生成された乱数Ｒa、前記第１の素数隠蔽手段により算出された積Ｆtβ、及び前記選択手段により選択された素数β，γに基づいて、０.５ｍビットの素数Ｎr（＝２ＲaＦt＋１）を隠蔽するように、この素数Ｎrと素数γとの積Ｎrγ（＝（２ＲaＦtβγ）／β＋γ）を生成する第２の素数隠蔽手段、
前記第２の素数隠蔽手段により生成された積Ｎrγ、前記第１の素数隠蔽手段により算出された積Ｆsα、前記乱数生成手段により生成された乱数Ｒb、前記選択手段により選択された素数γ，δに基づいて、ｍビットの素数候補ｐを隠蔽するように、この素数候補ｐと素数δの積ｐδ｛＝(１＋２(ＲbＦs−(Ｎr-1ｍｏｄ(Ｆsα)))Ｎr)δ｝を生成する素数候補隠蔽手段、
この素数候補隠蔽手段により生成された積ｐδ及びポクリントンの定理に基づいて、前記素数候補ｐが素数か否かを判定する素数判定手段、
前記素数判定手段による判定結果が素数を示すとき、当該積ｐδから前記素数δを除してｍビットの素数ｐを生成する素数生成手段、
として機能させるための素数生成プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、素数生成装置及びプログラムに係り、特に、暗号鍵として用いるための素数の生成中、外部からの解析に対し、生成した素数及び生成中の情報の漏洩を困難にする素数生成装置及びプログラムに関する。
【０００２】
【従来の技術】
社会における急速な情報関連技術の発展に伴い、電子情報の秘匿手段、認証手段として暗号技術の重要性が高まっている。係る暗号技術は、ＤＥＳ（Data Encryption Standard）方式に代表される秘密鍵方式と、ＲＳＡ（Rivest-Shamir-Adleman）方式に代表される公開鍵方式とが広く用いられている。
【０００３】
秘密鍵方式では、乱数を生成するだけで共通鍵を容易に生成可能である。一方、公開鍵方式では公開鍵及び秘密鍵の生成には、大きなビット長の素数を生成する必要がある。例えば、ＲＳＡ方式では秘密鍵として２つの素数ｐ，ｑを用い、ＤＳＡ（Digital signature Algorithm）方式では公開鍵として２つの素数ｐ，ｑを用いている。
【０００４】
これらの素数は、暗号解読を困難にする観点から十分大きい必要があり、現時点では１０進表記で約３００桁が推奨されている。
素数の生成方法は、一般に、適当に生成した正の整数に素数判定アルゴリズムを適用し、素数と判定された場合にその正の整数を素数として出力する方式が用いられている。
【０００５】
ここでは、素数判定アルゴリズムとしてポクリントン（Pocklington）の定理（岡本龍明、太田和夫、"暗号・ゼロ知識証明・数論"、共立出版、P.133-132, 1995）を利用した、マウアー（Maurer）の方法（U. M. Maurer, “Fast Generation of Prime Numbers and Secure Public-key Cryptographic Parameters"、Journal of Criptology、vol.8, p.123-155, 1995）について説明する。
【０００６】
ポクリントンの定理は、与えられた整数が素数であるか否かを判定可能な定理であり、以下のように記述される。
【０００７】
整数Ｎは、Ｎ＝ＦＧ＋１，ｇｃｄ（Ｆ，Ｇ）＝１という形をしていると仮定する。ここで、ｇｃｄ（Ｆ，Ｇ）はＦとＧの最大公約数を意味する。さらに、整数Ｆは、Ｆ＝ｑ1e1ｑ2e2…ｑkek（ｑiは相異なる素数）として完全に素因数分解されているとする。
【０００８】
このとき、次の２条件をみたす整数ａが存在すれば、整数Ｎの任意の素因数ｒに対し、整数Ｆはｒ−１を割り切る。
条件１）ａN-1＝１ ｍｏｄ Ｎ
条件２）任意のｉに対してｇｃｄ（ａ(N-1)/qi−１，Ｎ）＝１
以上がポクリントンの定理である。マウアーの素数生成方法は、以下のように、ポクリントンの定理の特別な場合を利用している。
【０００９】
整数ＮがＮ＝ＦＧ＋１であり、整数Ｆは、Ｆ＞Ｎ1/2を満たす素数、という形をしていると仮定する。
このとき、次の２条件を満たす整数ａが存在すれば、整数Ｎは素数である。
【００１０】
条件１）ａN-1＝１ ｍｏｄ Ｎ
条件２）ｇｃｄ（ａ(N-1)/F−１，Ｎ）＝１
以上がマウアーの素数生成方法である。次に、このマウアーの素数生成方法を図５を用いて説明する。
まず小さな素数Ｆ0を生成する（ＳＴ１）。例えば１６ビット程度の奇数をランダムに生成し、その奇数が８ビット以下の全ての素数で割り切れないとき、その奇数を素数Ｆ0として採用すればよい。
【００１１】
次に、再帰的に素数Ｎiを生成するループ処理を行う。ループのインデックスをｉとし、初期値を０とする（ＳＴ２）。ｉ回目のループについて説明する。まず、素数Ｆi未満の乱数Ｒiを生成する（ＳＴ３）。この乱数Ｒiと素数Ｆiと用いて、素数候補Ｎi＝２ＲiＦi＋１を算出する（ＳＴ４）。この素数候補Ｎiに関し、上述したポクリントンの定理の特別な場合を用いて素数判定を行う（ＳＴ５）。なお、素数候補Ｎiは、Ｒi＜Ｆiであることから、ポクリントンの定理の特別な場合（Ｆi＞Ｎi1/2）に該当している。
【００１２】
すなわち、ステップＳＴ５により素数候補Ｎiについて素数か否かが判定され（ＳＴ６）、素数候補Ｎiが素数でないと判定されたとき、ステップＳＴ３に戻って乱数Ｒiの生成からやり直す。
【００１３】
一方、ステップＳＴ６により、素数候補Ｎiが素数と判定されたとき、この素数Ｎiを次の素数候補Ｎi+1の算出のために、Ｆi+1＝Ｎiとおき（ＳＴ７）、ｉ＋１回目のループ処理に入る（ＳＴ８）。
【００１４】
ループ終了条件ｉ＜ｋのｋは、生成したい素数のビット数に応じて適当に決める。また、ループが終了したとき、素数候補Ｎiを素数として出力する（ＳＴ９）。
【００１５】
一方、堀らは、マウアーの素数生成方法の変形例を特開平１０−２４０１２８号に開示している。堀らの方法は、マウアーの方法に比べて次の２点で改良されている。
【００１６】
第１の改良点は、図６に示すように、ステップＳＴ４にて算出された素数候補Ｎiに対し、ステップＳＴ５によるポクリントンの定理による素数判定の前に、素数候補Ｎiを数ビットの素数で割る試行割算を入れた点と（ＳＴ・Ｄ−１）、試行割算の結果、割り切れたか否かにより素数か否かを判定し（ＳＴ・Ｄ−２）、割り切れた場合はステップＳＴ３の乱数Ｒiの生成に戻るようにした点である。
【００１７】
この第１の改良点によれば、処理量の多いべき乗剰余算を必要とするポクリントンの定理による素数判定の前に、試行割算によって割り切れる簡単な合成数が排除されるので、素数判定全体の処理速度が向上されるという利点を奏する。
【００１８】
第２の改良点は、生成した素数Ｎiのビット数をｍビットとするとき、ｐ−１に０.５ｍビットの素因数、ｐ＋１に０.４ｍビットの素因数を持たせた点である。
【００１９】
第２の改良点によれば、素因数分解手法であるｐ−１法及びｐ＋１法に強い素数が生成されるという利点を奏する。
【００２０】
さて、以上のようなマウアーあるいは堀らの素数生成方法では、ポクリントンの定理の条件１，２及び／又は試行割算の演算の際に、素数候補Ｎiをそのまま演算データとして用いている。
【００２１】
一方、近年では、ＩＣカードの如き、スマートカードにおける演算中の状態を観察し、データの値と演算の内容とを解析する方法が提案され始めている。係る解析方法としては、例えば、コチャー（Kocher）らにより提案された電力解析及びタイミング解析などが強力な方式として知られている。
【００２２】
電力解析は、スマートカードにおける演算中の消費電力を計測し、電力波形の解析に基づき、演算のデータを推測する手法である（P. Kocher, J. Jaffe, B. Jun、"Differential Power Analysis", Advances in Cryptology : Proceeding of CRYPTO’99, Springer-Verlag, 1999, pp.388-397）。
【００２３】
また、タイミング解析は、演算の処理時間がデータ依存であることに基づき、演算のデータを推測する手法である（P. C. Kocher, “Timing Attacks on Implementations of Diffie-Hellman, RSA, DSS, and Other Systems", Advances in Cryptology : Proceedings of CRYPTO’96, Springer-Verlag, 1996, PP.104-113）。
【００２４】
これらの解析方法によれば、特に乗算、除算では、演算に使われたデータに依存して消費電力や処理時間が変わるため、多くの情報を外部に漏らすことが知られている。なお、外部とは、権限の無い第三者又は第三者装置などを意味している。また、解析対象は、スマートカードに限らず、外部から解析可能な装置であればよい。
【００２５】
このような電力解析やタイミング解析によれば、前述したマウアー又は堀らの素数生成方法では、生成した素数の情報が外部に漏れる可能性がある。
【００２６】
しかしながら、例えばＲＳＡ方式では、素数を秘密鍵として用いるため、素数が外部に漏れると、暗号文が解読可能となってしまう。さらに、素数の一部の情報（ある特定のビットの値など）が漏れることも、例えば鍵の全数探索を行うときに探索対象の整数の個数を減らし、鍵の解析の糸口を与えるため、望ましくない。
【００２７】
このため、素数生成中及び生成後において、外部からの解析に対し、情報を漏らさない必要がある。
【００２８】
【発明が解決しようとする課題】
以上説明したように、演算中の状態を外部から解析可能な装置にて素数を生成する際には、素数生成中及び生成後の情報を外部に漏らさない必要がある。
【００２９】
本発明は上記実情を考慮してなされたもので、素数生成時に電力解析やタイミング解析を施されても、情報の漏洩を阻止し得る素数生成装置及びプログラムを提供することを目的とする。
【００３０】
【課題を解決するための手段】
本発明の骨子は、素数候補Ｎ，ｐをそのまま素数判定せずに、素数候補Ｎ，ｐを含む見掛け上の素数候補Ｎα’，ｐδを素数判定する構成により、素数生成中における外部からの解析に対し、素数候補Ｎ，ｐの漏洩を阻止することにある。
【００３１】
ここで、本発明は、演算中の情報の漏洩を阻止するものであるから、素数判定の方法には限定されず、例えば、前述したポクリントンの定理の他には、ミラー法、アドルマン−ルメリ法、コーエン−レンストラ法、ルーカス法、又はルーカス−レーマー法といった確定的素数判定法や、フェルマー法、ソロベイ−ストラッセン法、又はラビン法といった確率的素数判定法のように、任意の素数判定方法が使用可能となっている。
【００３２】
さて以上のような本発明の骨子に基づき、本発明を次のように表現してもよい。例えば装置で表現する場合、本発明は、所定のビット長の素数Ｎを出力可能な素数生成装置であって、前記素数Ｎを算出するための演算データを、他の素数を乗じて隠蔽する演算データ隠蔽手段を含んでいる素数生成装置である。
【００３３】
このように、素数Ｎを算出するための演算データを他の素数により隠蔽するので、素数生成時に電力解析やタイミング解析を施されても、情報の漏洩を阻止することができる。
【００３４】
また、本発明は、所定のビット長の素数Ｎを出力可能な素数生成装置であって、前記素数Ｎのビット長より短いビット長の第１の素数Ｆに対し、前記第１の素数Ｆとは異なる第２の素数αを乗じる素数乗算手段と、前記素数乗算手段による乗算結果Ｆαに対し、乗算及び加算処理を行ない、この処理結果として前記素数Ｎと第３の素数α’との積Ｎα’を生成する素数生成手段と、前記素数生成手段により得られた積Ｎα’を前記第３の素数α’で除して前記素数Ｎを取出す素数取出し手段と、を含んでいる素数生成装置としてもよい。また、第１の素数Ｆは、ビット長を限定せずに、素数Ｎより小さい素数と表現してもよい。
【００３５】
このような本発明は、具体的には以下のような手段が講じられる。なお、以下の各発明は、重複した記載を避ける観点から、装置として表現された場合のみを示すが、方法、システム又はプログラム等の他のカテゴリーで表現してもよいことは言うまでもない。
【００３６】
第１の発明は、所定のビット長の素数Ｎを出力可能な素数生成装置であって、所定のビット数以下の素数｛α,α’,…｝が予め記憶された素数記憶手段と、前記素数記憶手段内の素数を選択する選択手段と、予め生成又は与えられた素数Ｆを隠蔽するように、前記選択手段により選択された素数αを乗じて積Ｈ＝Ｆαを算出する素数隠蔽手段と、前記素数隠蔽手段により算出された積Ｈに基づいて、乱数Ｒを生成する乱数生成手段と、前記乱数生成手段により生成された乱数Ｒ、前記素数隠蔽手段により算出された積Ｈ、及び前記選択手段により選択された他の素数α’に基づいて、素数候補Ｎ（＝２ＲＦ＋１）を隠蔽するように、この素数候補Ｎと素数α’の積Ｎα’を生成する素数候補隠蔽手段と、前記素数候補隠蔽手段により生成された積Ｎα’及びポクリントンの定理に基づいて、前記素数候補Ｎが素数か否かを判定する素数判定手段と、前記素数判定手段による判定結果が素数を示すとき、当該積Ｎα’から前記他の素数α’を除して素数Ｎを生成する素数生成手段と、を備えた素数生成装置である。
【００３７】
これにより、マウアーの素数生成方法を利用して素数を生成するとき、生成中の素数候補Ｎに素数α’を乗じた積Ｎα’を実際の演算に用いるので、演算の消費電力波形又は処理時間から生成中の素数候補又は素数の解析を困難にすることができる。
従って、素数生成時に電力解析やタイミング解析を施されても、情報の漏洩を阻止することができる。
【００３８】
第２の発明は、第１の発明において、前記素数記憶手段内の各素数｛α，α’，…｝がｎ＋１ビット以上のサイズであり、前記予め生成又は与えられた素数Ｆに代えて、予め生成又は与えられた２ｎビット以下の奇数Ｆ0を用い、前記素数隠蔽手段としては、前記選択手段により選択された素数αを乗じて積Ｈ0＝Ｆ0αを算出し、この積Ｈ0をｎビット以下の全ての素数で個別に除算し、全ての除算結果が余りを持つとき、この積Ｈ0を前記積Ｈとして前記積Ｈ＝Ｆαの算出を完了する素数生成装置である。
これにより、第１の発明と同様の作用に加え、始めの素数Ｆ0を外部からの解析から隠蔽しながら簡単に生成することができる。
【００３９】
第３の発明は、第１の発明において、前記素数記憶手段内の各素数｛α，α’，…｝がｎ＋１ビット以上のサイズであり、前記素数判定手段としては、前記素数候補隠蔽手段により生成された積Ｎα’をｎビット以下の全ての素数で個別に除算し、全ての除算結果が余りを持つとき、前記ポクリントンの定理に基づいた判定を行なう素数生成装置である。
【００４０】
これにより、第１の発明の作用に加え、堀らの素数生成方法と同様に、ポクリントンの定理に基づく素数判定の前に、試行割算によって割り切れる簡単な合成数が排除されるので、素数判定全体の処理速度を向上させることができる。
【００４１】
第４の発明は、与えられた正の整数ｍに対し、ｍビットの素数ｐを出力可能な素数生成装置であって、所定のビット数以下の素数｛α，β，γ，δ…｝が予め記憶された素数記憶手段と、前記素数記憶手段内の素数を選択する選択手段と、予め生成した０.４ｍビットの２つの素数Ｆs，Ｆtを隠蔽するように、前記選択手段により選択された２つの素数α，βを個別に乗じて２つの積Ｆsα，Ｆtβを算出する第１の素数隠蔽手段と、前記第１の素数隠蔽手段により算出された積Ｆtβに基づいて乱数Ｒaを生成し、前記第１の素数隠蔽手段により算出された積Ｆsαに基づいて乱数Ｒbを生成する乱数生成手段と、前記乱数生成手段により生成された乱数Ｒa、前記第１の素数隠蔽手段により算出された積Ｆtβ、及び前記選択手段により選択された素数β，γに基づいて、０.５ｍビットの素数Ｎr（＝２ＲaＦt＋１）を隠蔽するように、この素数Ｎrと素数γとの積Ｎrγ（＝（２ＲaＦtβγ）／β＋γ）を生成する第２の素数隠蔽手段と、前記第２の素数隠蔽手段により生成された積Ｎrγ、前記第１の素数隠蔽手段により算出された積Ｆsα、前記乱数生成手段により生成された乱数Ｒb、前記選択手段により選択された素数γ，δに基づいて、ｍビットの素数候補ｐを隠蔽するように、この素数候補ｐと素数δの積ｐδ｛＝(１＋２(ＲbＦs−(Ｎr-１ｍｏｄ(Ｆsα)))Ｎr)δ｝を生成する素数候補隠蔽手段と、この素数候補隠蔽手段により生成された積ｐδ及びポクリントンの定理に基づいて、前記素数候補ｐが素数か否かを判定する素数判定手段と、前記素数判定手段による判定結果が素数を示すとき、当該積ｐδから前記素数δを除してｍビットの素数ｐを生成する素数生成手段と、を備えた素数生成装置である。
【００４２】
これにより、第１の発明と同様に、演算中の素数Ｆs，Ｆt，Ｎrに素数α，β，γを乗じた積Ｎrγや、生成中の素数候補ｐに素数δを乗じた積ｐδを実際の演算に用いるので、素数生成時に電力解析やタイミング解析を施されても、情報の漏洩を阻止することができる。
【００４３】
これに加え、生成した素数ｐのビット数をｍビットとするとき、ｐ−１に０.５ｍビットの素因数Ｎr、ｐ＋１に０.４ｍビットの素因数Ｆs，Ｆtを持たせたので、素因数分解手法であるｐ−１法及びｐ＋１法に強い素数ｐを生成することができる。
【００４４】
第５の発明は、第４の発明において、前記素数記憶手段内の各素数｛α，β，γ，δ…｝がｎ＋１ビット以上のサイズであり、前記素数判定手段としては、前記素数候補隠蔽手段により生成された積ｐδをｎビット以下の全ての素数で個別に除算し、全ての除算結果が余りを持つとき、前記ポクリントンの定理に基づいた判定を行なう素数生成装置である。
【００４５】
これにより、第４の発明の作用に加え、第３の発明と同様に、素数判定全体の処理速度を向上させることができる。
【００４６】
【発明の実施の形態】
以下、本発明の各実施形態について図面を用いて詳細に説明する。なお、以下の説明中、素数、素数候補、整数、積などの語を用いるが、これらは、素数データ、素数候補データ、整数データ、積データ等のように、「データ」の語を追記して読み替えてもよい。
【００４７】
（第１の実施形態）
図１は本発明の第１の実施形態に係る素数生成装置の構成を示す模式図である。この素数生成装置１０は、スマートカードなどの演算機の素数生成部として構成され、ハードウェア及びソフトウェアの組合せにより素数生成処理を行うものである。
【００４８】
具体的には、プログラム記憶部１、不揮発性ＲＡＭ２、不揮発性メモリ３、ＣＰＵ（中央処理装置）４、乱数生成部５、選択部６及び演算部７が互いに、アドレスバス、コマンドバス並びにデータバスからなるバス８を介して接続されている。
【００４９】
プログラム記憶部１は、ＣＰＵ４に実行されるプログラムが記憶されるメモリであり、例えばＲＯＭ（リードオンリーメモリ）が使用可能となっている。ここで、プログラムは、例えば公開鍵暗号用のメインプログラムに加え、図２に示す素数生成機能を実現させるためのサブプログラムを少なくとも含んでいる。係るプログラムは、外部の記憶媒体又はネットワークから予めプログラム記憶部１にインストールされてもよい。
【００５０】
不揮発性ＲＡＭ２は、ＣＰＵ４から読出／書込可能なメモリであり、具体的には、所定のビット数以下の素数からなるテーブルＴが予め記憶されており、さらにＣＰＵ４により、演算に必要なデータや演算途中のデータ等が記憶されるＲＡＭ（ランダムアクセスメモリ）である。なお、テーブルＴは、予めプログラム記憶部１内のプログラムに含まれていてもよい。
【００５１】
不揮発性メモリ３は、例えば生成された素数などがＣＰＵ４から読出／書込可能に記憶されるメモリであり、例えば、ＥＥＰＲＯＭ（Electric Erasable Programmable ＲＯＭ）が使用可能となっている。
【００５２】
ＣＰＵ４は、プログラム記憶部１内のプログラムを実行することにより、例えば図２に示す手順で各部２〜７を制御し、素数生成処理を実行する機能を有するものである。
【００５３】
乱数生成部５は、ＣＰＵ４により制御されて乱数Ｒiを生成し、この乱数Ｒiをバス８に送出するものであり、ここでは、ＣＰＵ４から入力された積Ｈi及び素数αiに基づいて、素数Ｆi未満（Ｒi＜Ｆi）の乱数Ｒiを生成し、この乱数Ｒiをバス８に送出する機能をもっている。ここで、乱数生成部５により生成される乱数Ｒiは、真の乱数又は疑似乱数のいずれでもよい。
【００５４】
なお、乱数生成部５は、独立のハードウェアで実現してもよいし、ＣＰＵ４とプログラムで実現してもよい。また、乱数生成部５を省略し、乱数Ｒiを外部から入力させる構成としてもよい。
【００５５】
選択部６は、ＣＰＵ４に起動され、不揮発性ＲＡＭ２内のテーブルＴからどの素数α（元）を選択するかを決定し、選択した素数αをＣＰＵ４及び演算部７に送出する機能をもっている。なお、選択部６は、独立のハードウェアで実現してもよいし、ＣＰＵ４とプログラムで実現してもよい。
【００５６】
演算部７は、ＣＰＵ４により制御され、例えばＣＰＵ４から入力されたデータに基づいて演算を実行し、演算結果をバス８に出力するものである。なお、演算部７は、処理速度を向上させる観点から独立のハードウェア回路として設けられており、例えばコプロセッサ等の如き、多倍長の演算を行うものであるが、ハードウェア回路に限らず、ＣＰＵ４とプログラムで実現してもよい。
【００５７】
なお、このような素数生成装置１０は、ハードウェア及びソフトウェアの組合せに限らず、ハードウェア又はソフトウェアのいずれか一方により構成されてもよい。
【００５８】
次に、以上のように構成された素数生成装置による素数生成方法について図２のフローチャートを用いて説明する。
【００５９】
処理１１：例えば１６ビット程度の小さな素数Ｆ0が図示しない外部インタフェースから素数生成装置１０に入力される（ＳＴ１１）。
【００６０】
処理１２：素数生成装置１０では、ＣＰＵ４が素数Ｆ0を演算部７に入力する一方、選択部６を起動する。選択部６は、不揮発性ＲＡＭ２内のテーブルＴから一つの素数α0を選択してＣＰＵ４及び演算部７に送出する（ＳＴ１２-１）。演算部７は、両者の積Ｈ0＝Ｆ0α0を演算し（ＳＴ１２-２）、得られた積Ｈ0をＣＰＵ４に送出する。なお、この積Ｈ0は、乗じられた素数α0により、素数Ｆ0を外部からの解析から隠蔽する機能を有する。
【００６１】
処理１３：ＣＰＵ４は、以下の処理ループのためのパラメータｉをｉ＝０に初期化する（ＳＴ１３）。ループの終了条件は、パラメータｉが終了回数ｋ未満のとき（ｉ＜ｋ）であり、終了回数ｋは、生成したい素数Ｎiのビット数に応じて決定される。
【００６２】
処理１４：ＣＰＵ４は、積Ｈ0及び素数α0を乱数生成部５に入力する。乱数生成部５は、積Ｈi及び素数αiに基づいて、素数Ｆi未満（Ｒi＜Ｆi）の乱数Ｒiを生成し（ＳＴ１４）、得られた乱数ＲiをＣＰＵ４に向けてバス８に送出する。ここで、生成される乱数Ｒiは、素数Ｆi未満の条件を満たすため、例えば生成直後の乱数Ｒi’からＲi＝（Ｒi’ｍｏｄ Ｈi）／αiとして算出される。
【００６３】
処理１５：判定前の素数候補ＮiをＮi＝２ＲiＦi＋１としたとき、選択部６は・不揮発性ＲＡＭ２内のテーブルＴから一つの素数αi+1を選択し（ＳＴ１５-１）、得られた素数αi+1を演算部７に送出する。
【００６４】
演算部７は、素数候補Ｎiと素数αi+1との積Ｍi＝Ｎiαi+1が次式のように算出される（ＳＴ１５-２）。
【００６５】
Ｍi＝（２ＲiＨiαi+1）/αi＋αi+1
なお、この式は、先に（かっこ）内を演算することで、素数Ｆiを出さずに積Ｍiを求める利点をもっている。また、この積Ｍiは、乗じられた素数αi+1により、素数候補Ｎiを外部からの解析から隠蔽する機能を有する。
【００６６】
なお、素数候補Ｎiと素数αi+1とは互いに素である必要があるため、この確認を積Ｍiが(αi+1)2で割り切れるか否かにより実行し、割り切れたら別の素数αi+1を選択して積Ｍiを算出し直す処理が必要である。
【００６７】
処理１６：素数候補Ｎiの第１の素数判定のため、演算部７は、素数候補Ｎiを含む積Ｍiに関し、所定の正の整数ａi毎に式（１）を満たすか否かを演算するフェルマーテストを行なう（ＳＴ１６-１）。
【００６８】
ａi(Ni−１)(αi+1−１)＝１ ｍｏｄ Ｍi      …（１）
なお、整数ａiは、ａi＝２を用いることが望ましい。
【００６９】
また、式（１）中、整数ａiのべき指数（Ｎi−１）（αi+1−１）は、次式のように算出される。
【００７０】
(Ｎi−１)(αi+1−１)＝（Ｍi(αi+1−１))／αi+1−(αi+1−１)
ステップＳＴ１６-１の結果、式（１）を満たすか否かにより素数候補Ｎiを未だ素数の候補であるか否かを判定する（ＳＴ１６-２）。ここで、式（１）を満たさないときは素数候補Ｎiを未だ素数候補であると判定して第２の素数判定に進む。一方、式（１）を満たさないときは素数候補Ｎiを素数でない（合成数）と判定し、乱数Ｒiを生成し直すため、処理１４に戻る。
【００７１】
処理１７：素数候補Ｎiの第２の素数判定のため、演算部７は、素数候補Ｎiを含む積Ｍiに関し、正の整数ａi毎に式（２）を満たすか否かを演算する（ＳＴ１７-１）。
【００７２】
ｇｃｄ（ａi(Ni−１)(αi+1−１)/Fi−１，Ｍi）＝αi+1      …（２）
なお、整数ａiは、前述同様にａi＝２を用いることが望ましい。
【００７３】
また、式（２）中、整数ａiのべき指数(Ｎi−１)(αi+1−１)／Ｆiは、次式のように算出される。
【００７４】
(Ｎi−１)(αi+1−１)／Ｆi＝２Ｒi（αi+1−１）
ステップＳＴ１７-１の結果、式（２）を満たすか否かにより素数候補Ｎiを素数であるか否かを判定する（ＳＴ１７-２）。ここで、式（２）を満たすときは素数Ｎiを素数であると判定して処理１８に進む。一方、式（２）を満たさないときは素数でないと判定して前述同様に処理１４に戻る。
【００７５】
処理１８：ステップＳＴ１７−２により、素数候補Ｎiが素数と判定されたとき、この素数Ｎiを次の素数候補Ｎi+1の算出のために、Ｆi+1＝Ｎi、Ｈi+1＝Ｍiとおき（ＳＴ１８-１）、パラメータｉを“＋１”して更新する。
【００７６】
また、ループの終了条件ｉ＜ｋを判定し、終了でなければ処理１４に戻って、ｉ＋１回目のループ処理に入る（ＳＴ１８-２）。なお、ループの終了条件は、素数候補Ｎiが所定のビット長に達するように、乱数Ｒiのビット数を増減させて調整する。
【００７７】
処理１９：以上のようなループ処理により、素数候補Ｎiが所定のビット長に達したとき、ループ処理に用いた値として、積Ｍiが得られている。積Ｍiは素数ＮiにテーブルＴの素数αi+1を乗じた値であるので、演算部７は、Ｍi／αi+1を演算し（ＳＴ１９-１）、得られた素数Ｎiをデータバスに出力する（ＳＴ１９-２）。
【００７８】
上述したように本実施形態によれば、演算のどのステップにおいても素数候補Ｎi（ｉ＝０，１，…，ｋ−１）をそのまま演算データとして用いずに、素数候補Ｎiに素数αiを乗じた積Ｍiを実際の演算に用いるので、演算の消費電力波形又は処理時間から生成中の素数候補又は素数の解析を困難にすることができる。従って、素数生成時に電力解析やタイミング解析を施されても、情報の漏洩を阻止することができる。
【００７９】
また、最終の素数候補（又は素数）Ｎk-1だけでなく、途中の素数候補（又は素数）Ｎiの解析も困難なことから、Ｎk-1−１が含む素因数Ｎk-2も解析が困難である。これにより素因数分解の一手法であるｐ−１法を回避することができる。
【００８０】
（第２の実施形態）
次に、本発明の第２の実施形態に係る素数生成装置について図１及び図３を用いて説明する。
【００８１】
すなわち、本実施形態は、第１の実施形態の変形例であり、本発明の情報の漏洩を阻止する技術を、試行割算を用いる堀らの素数生成方式に適用したものであって、具体的には、試行割算による素数判定用の素数を格納したテーブルＡが不揮発性ＲＡＭ２に記憶されており、且つプログラム記憶部１には、図１に示すプログラムに代えて、図３に示す素数生成機能を実現させるためのプログラムが記憶されている。なお、テーブルＡは、予めプログラム記憶部１内のプログラムに含まれていてもよい。
【００８２】
ここで、不揮発性ＲＡＭ２内のテーブルＡは、ＣＰＵ４から読出可能であり、予めワードサイズ以下の素数が記憶されたものとする。ここで、「ワードサイズ以下」の制限は、処理手順として、始めにワードサイズの２倍のビット長の素数が生成され、その素数に基づいてその素数より大きい所定サイズの素数が生成されることが前提となっている。
【００８３】
例えばワードサイズが８ビットである場合、テーブルＡには、予め２５６（＝２8）以下の全ての素数が記憶される。一方、テーブルＴ内の素数αは、９ビット以上であるとする。
これにより、テーブルＴ内の素数αは、テーブルＡ内のどの素数でも割り切れないことが保証される。
【００８４】
次に、以上のように構成された素数生成装置による素数生成方法について図３のフローチャートを用いて説明するが、図２と同一部分には同一符号を付し、ほぼ同一部分にはアルファベットの添字を付してその詳しい説明を省略し、ここでは異なる部分について主に述べる。
【００８５】
処理１１a：乱数生成部５は、ワードサイズの２倍のビット長の奇数Ｆ0をランダムに生成し（ＳＴ１１ａ）、この奇数Ｆ0をＣＰＵ４に送出する。
【００８６】
処理１２：前述した通り、ステップＳＴ１２−１及びＳＴ１２−２が実行される。すなわち、演算部７は、ＣＰＵ４から入力された奇数Ｆ0と、選択部６によりテーブルＴから選択された素数α0とに基づいて（ＳＴ１２−１）、両者の積Ｈ0＝Ｆ0α0を演算し（ＳＴ１２−２）、得られた積Ｈ0をＣＰＵ４に送出する。なお、積Ｈ0は、乗じられた素数α0により、奇数Ｆ0を外部からの解析から隠蔽する機能を有する。
【００８７】
処理Ｄ１：演算部７は、ＣＰＵ４から積Ｈ0を受けると、テーブルＡ内のワードサイズ以下の素数で積Ｈ0を割算する試行割算を行ない（ＳＴ・Ｄ１−１）、試行割算の結果、余りの有無に基づいて奇数Ｆ0が素数であるか否かを判定する（ＳＴ・Ｄ１−２）。
【００８８】
ステップＳＴ・Ｄ１−２の結果、余りが無いときには奇数Ｆ0を素数でないと判定して、奇数Ｆ0を生成し直すため、処理１１ａに戻る。一方、余りが有るときには奇数Ｆ0を素数であると判定して、処理１３に進む。
【００８９】
処理１３〜処理１５：前述した通り、ステップ１３〜ＳＴ１５−２が実行される。すなわち、処理１３としては、処理ループのパラメータｉ，ｋが設定され（ＳＴ１３）、ｉ回目のループが開始される。
【００９０】
続いて、処理１４としては、素数Ｆiを拡張するための乱数Ｒiが生成される（ＳＴ１４）。
【００９１】
また、処理１５としては、乱数Ｒiで拡張された素数候補Ｎi（＝２ＲiＦi＋１）を外部の解析から隠蔽するための素数αi+1が選択され（ＳＴ１５−１）、素数候補Ｎiと素数αi+1とを乗じて積Ｍiを算出することにより（ＳＴ１５−２）、素数候補Ｎiが積Ｍi内に隠蔽される。
【００９２】
処理Ｄ２：演算部７は、ＣＰＵ４から積Ｍiを受けると、テーブルＡ内のワードサイズ以下の素数で積Ｍiを割算する試行割算を行ない（ＳＴ・Ｄ２−１）、試行割算の結果、余りの有無に基づいて素数候補Ｎiが未だに素数の候補であるか否かを判定する（ＳＴ・Ｄ２−２）。
【００９３】
ステップＳＴ・Ｄ２−２の結果、余りが無いときには素数候補Ｎiを素数でない（合成数）と判定して、乱数Ｒiを生成し直すため、処理１４に戻る。なお、戻った処理１４では、素数Ｆi，αiの値はそのままで、乱数生成部５にて乱数Ｒiを生成し直すことにより、新しい素数候補Ｎiが生成される。一方、余りが有るときには素数候補Ｎiを未だ素数候補であると判定して、処理１６に進む。
【００９４】
以下、前述した通り、処理１６〜処理１９として、ステップＳＴ１６−１〜ＳＴ１９−２が実行される。
上述したように本実施形態によれば、第１の実施形態の効果に加え、ポクリントンの定理による素数判定の前に、小さな素数による試行割算を行うことで、多くの合成数を排除することができる。よって素数判定にかける素数候補が絞られることにより、効率よく素数判定を行うことができる。
【００９５】
また、同様の試行割算により、始めの素数Ｆ0を外部からの解析から隠蔽しつつ簡単に生成することができる。
【００９６】
（第３の実施形態）
次に、本発明の第３の実施形態に係る素数生成装置について図１〜図４を用いて説明する。
【００９７】
すなわち、本実施形態は、第２の実施形態の応用例であり、生成する素数に、素因数分解の一手法であるｐ＋１法に対する耐性を持たせたものであって、具体的には、プログラム記憶部１に、図３に示すプログラムに代えて、図４に示す素数生成機能を実現させるためのプログラムが記憶されている。
【００９８】
なお、生成する素数ｐのビット数をｍビットとし、ビット数ｍは、所定の値でもよく、入力されて指定されてもよい。
【００９９】
また、本実施形態に用いる符号は、以下のように第２の実施形態に用いた符号に対応している。
テーブルＴ内の素数α，β，γ，γ’，δは、前述したテーブルＴ内の素数｛α1，α2，…，αi，αi+1，…，αk-1｝のうち、任意の素数に対応している。
素数Ｆs，Ｆtは、前述した素数Ｆ0のうち、添字０をｓ又はｔとして互いに別の素数としたものに対応している。
【０１００】
乱数生成部５により生成される乱数Ｒa，Ｒbは、前述した乱数生成部５により生成される乱数Ｒiにおいて、添字ｉをａ又はｂとして互いに別の乱数としたものに対応している。
素数Ｎrは、前述した素数Ｎiに対応している。
【０１０１】
次に、以上のように構成された素数生成装置における素数生成方法について図４のフローチャートを用いて説明する。
【０１０２】
処理２１：ＣＰＵ４は、図３に示したステップＳＴ１１ａ〜ＳＴ１２−２に従って乱数生成部５〜演算部７を制御し、０.４ｍビットの２つの素数Ｆs，ＦtとテーブルＴからランダムに選択された素数α，βとの積Ｆsα，Ｆtβを生成する（ＳＴ２１−１，ＳＴ２１−２）。なお、積Ｆsα，Ｆtβは、乗じられた素数α，βにより、素数Ｆs，Ｆtを外部からの解析から隠蔽する機能を有する。
【０１０３】
処理２２：ＣＰＵ４は、図２に示したステップＳＴ１４〜ＳＴ１７−２に従って乱数生成部５〜演算部７を制御し、乱数生成部５により生成された乱数Ｒaと、選択部６によりテーブルＴからランダムに選択された素数γとを用い、０.５ｍビットの素数Ｎr（＝２ＲaＦt＋１）を次式のように素数γとの積Ｎrγという形式で生成する（ＳＴ２２）。
【０１０４】
Ｎrγ＝(２ＲaＦtβγ)／β＋γ
なお、積Ｎrγは、乗じられた素数γにより、素数Ｎrを外部からの解析から隠蔽する機能を有する。
【０１０５】
処理２３：続いて、ＣＰＵ４は、乱数生成部５〜演算部７を制御し、乱数生成部５により生成された乱数Ｒbと、制御部６によりテーブルＴからランダムに選択された素数δを用い、ｍビットの素数候補ｐ｛＝１＋２(ＲbＦs−（Ｎr-1ｍｏｄ(Ｆsα)))Ｎr｝を次式のように素数δとの積ｐδという形式で生成する（ＳＴ２３）。
【０１０６】
ｐδ＝(１＋２(ＲbＦs−(Ｎr-1ｍｏｄ(Ｆsα)))Ｎr)δ
ここで、Ｆsα、Ｎrγからｐδを生成するには、次のような演算を行う。まず、ＣＰＵ４は、αとγが相異なること（α≠γ）を確認する。同じ場合はαと異なるγ’を選択し、（Ｎrαγ’）／αによりＮrγをＮrγ’に取り替える。
【０１０７】
次に、(Ｎrγ)-1 ｍｏｄ(Ｆsα)を演算する。α≠γよりこの演算結果は存在する。この演算結果にγ ｍｏｄ（Ｆsα）を乗じ、Ｎr-１ ｍｏｄ（Ｆsα）を求める。一方、（ＲbＦsα）／αによりＲbＦsを求める。
【０１０８】
これらをまとめ、ｐδ＝(２(ＲbＦs−(Ｎr-１ｍｏｄ(Ｆsα)))Ｎrγ)δ／γ＋δを演算する。
【０１０９】
処理２４：ＣＰＵ４は、このｐδに対し、図３に示したステップＳＴ・Ｄ２−１〜ＳＴ１７−２と同様に、素数判定を行う（ＳＴ２４−１〜ＳＴ２４−６）。但し、堀らの方法に基づく試行割算（ステップＳＴ・Ｄ２−１，ＳＴ・Ｄ２−２）のステップＳＴ２４-１，ＳＴ２４−２は、省略してもよい。なお、省略した場合、本実施形態はマウアーの方法（改良前）に基づく素数生成方式となる。
【０１１０】
処理２５：ステップＳＴ２４−６により素数候補ｐが素数と判定されたとき、積ｐδが得られている。積ｐδは、素数ｐにテーブルＴの素数δを乗じた値であるので、演算部７は、ｐδ／δを演算し（ＳＴ２５−１）、得られた素数ｐをデータバスに出力する（ＳＴ２５−２）。
【０１１１】
上述したように本実施形態によれば、第１の実施形態と同様に、演算中の素数Ｆs，Ｆt，Ｎrに素数α，β，γを乗じた積Ｎrγや、生成中の素数候補ｐに素数δを乗じた積ｐδを実際の演算に用いるので、素数生成時に電力解析やタイミング解析を施されても、情報の漏洩を阻止することができる。
【０１１２】
また、最終の素数ｐだけでなく、途中の素数Ｎi，Ｆs，Ｆt，Ｎrの解析も困難なことから、ｐ−１が含む素因数Ｎrも解析が困難である。これにより素因数分解の一手法であるｐ−１法を回避することができる。
また、ｐ＋１が含む素因数Ｆsも解析が困難であることから、素因数分解の一手法であるｐ＋１法を回避することができる。
また、生成した素数ｐのビット数をｍビットとするとき、ｐ−１に０.５ｍビットの素因数Ｎr、ｐ＋１に０.４ｍビットの素因数Ｆsを持たせたので、素因数分解手法であるｐ−１法及びｐ＋１法に強い素数ｐを生成することができる。
【０１１３】
さらに、第２の実施形態と同様に、ポクリントンの定理を用いた素数判定の前に、試行割算を行なう場合には、素数判定全体の処理速度を向上させることができる。
【０１１４】
なお、上記各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク（フロッピーディスク、ハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤなど）、光磁気ディスク（ＭＯ）、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【０１１５】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【０１１６】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているＯＳ（オペレーティングシステム）や、データベース管理ソフト、ネットワークソフト等のＭＷ（ミドルウェア）等が本実施形態を実現するための各処理の一部を実行しても良い。
【０１１７】
さらに、本発明における記憶媒体は、コンピュータと独立した媒体に限らず、ＬＡＮやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【０１１８】
また、記憶媒体は１つに限らず、複数の媒体から本実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【０１１９】
尚、本発明におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、本実施形態における各処理を実行するものであって、パソコン等の１つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【０１２０】
また、本発明におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【０１２１】
なお、本願発明は、上記各実施形態に限定されるものでなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、各実施形態は可能な限り適宜組み合わせて実施してもよく、その場合、組み合わされた効果が得られる。さらに、上記各実施形態には種々の段階の発明が含まれており、開示される複数の構成用件における適宜な組み合わせにより種々の発明が抽出され得る。例えば実施形態に示される全構成要件から幾つかの構成要件が省略されることで発明が抽出された場合には、その抽出された発明を実施する場合には省略部分が周知慣用技術で適宜補われるものである。
【０１２２】
その他、本発明はその要旨を逸脱しない範囲で種々変形して実施できる。
【０１２３】
【発明の効果】
以上説明したように本発明によれば、素数生成時に電力解析やタイミング解析を施されても、情報の漏洩を阻止できる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係る素数生成装置の構成を示す模式図
【図２】同実施形態における素数生成方法を説明するためのフローチャート
【図３】本発明の第２の実施形態に係る素数生成方法を説明するためのフローチャート
【図４】本発明の第３の実施形態に係る素数生成方法を説明するためのフローチャート
【図５】従来の素数生成方法を説明するためのフローチャート
【図６】従来の素数生成方法を説明するためのフローチャート
【符号の説明】
１…プログラム記憶部
２…不揮発性ＲＡＭ
３…不揮発性メモリ
４…ＣＰＵ（中央処理装置）
５…乱数生成部
６…選択部
７…演算部
８…バス
１０…素数生成装置
【図１】
0004664514.tif 000002
【図２】
0004664514.tif 000003
【図３】
0004664514.tif 000004
【図４】
0004664514.tif 000005
【図５】
0004664514.tif 000006
【図６】
0004664514.tif 000007