説明

素数生成装置、素数生成方法、及び素数生成プログラム

【課題】RSA暗号に用いられる素数を効率よく生成可能な素数生成装置、素数生成方法、及び素数生成プログラムを提供する。
【解決手段】予め定められたビット数以下のデータに対して、少なくとも加算及び除算が可能な演算手段を有する素数生成装置において、予め定められたビット数よりも大きなビット数の素数候補を示す素数候補データを生成し、予め定められたビット数以下となるデータに分割することで複数の分割素数候補データを生成し、複数の分割素数候補データの各々同士を演算手段により加算することにより、素数候補データが示す素数候補が合成数であるか否かを判定するための判定データを生成し、判定データを、演算手段により少なくとも1つの素数で除算することで素数候補が少なくとも1つの素数の倍数でないと判定された場合に、素数候補データに対して素数判定を行ない、素数候補が素数と判定された場合に、素数候補データを素数として出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、素数生成装置、素数生成方法、及び素数生成プログラムに係り、特に、RSA暗号で用いられる素数を生成するための素数生成装置、素数生成方法、及び素数生成プログラムに関する。
【背景技術】
【0002】
近年、インターネットなどのコンピュータネットワークの発展、携帯電話などの普及に伴い、デジタル情報の交換や電子商取引が急速に拡大してきている。このため、情報を安全かつ確実に転送し、また、データの保全性、データの送信者、受信者の認証を行うための情報セキュリティ技術の重要性が高まっている。
【0003】
現在、このような情報セキュリティを実現するための技術として、公開鍵暗号技術が知られている。公開鍵暗号は、公開鍵と秘密鍵の2種類の鍵を用意し、公開鍵を公開、秘密鍵を秘密に保持する。公開鍵は暗号化、認証に使用し、秘密鍵は復号、署名に使用する。公開鍵と秘密鍵は相互に関係しているが、公開鍵から秘密鍵を求めることはできないように構成するため、公開鍵を公開しても安全性は保たれるような仕組みになっている。
【0004】
代表的な公開鍵暗号であるRSA暗号方式では、2つの大きな素数を用意し、これを秘密とし、その積を公開する。RSA暗号方式は、積が公開されていてもその素因数を求めることは極めて困難であるという性質に基づいている。
【0005】
公開鍵暗号の鍵を作り出すには、最初に大きな素数を用意しなければならない。素数を用意するには、一般に次のような手順で行われる。
【0006】
まず、乱数発生器により、奇数の乱数を生成し、素数候補とする。次に、この素数候補に対して素数判定を行い、合成数と判定された場合は、新たに素数候補を生成し、合成数と判定されなくなるまで素数判定を繰り返す。合成数と判定されなかった場合は、その素数候補を「素数」として出力する。
【0007】
ここで生成しようとしている素数を示すデータのビット長は、512ビット、1024ビットなどで表現される大きな値である。このサイズの乱数が素数である確率はそれほど高くはなく、素数が見つかるまで数十回から数百回素数判定を繰り返す必要がある。さらに素数判定の処理自身も計算量が大きく、素数生成には非常に大きな処理時間がかかる。
【0008】
素数判定には、確定的素数判定法、或いは確率的素数判定法が用いられるが、いずれも実用上かなりの計算量であることに変わりはない。
【0009】
従って、これらの確定的、或いは確率的素数判定を行う前に、予め素数候補を比較的計算量の少ないふるいにかけ、上記素数判定を行う回数を減らす工夫がなされている。
【0010】
ふるいとしては、予め用意したいくつかの小さな素数で素数候補を割り算して割り切れるかどうかを見る方法、上記の素数をすべて掛け合わせた値をあらかじめ計算しておき、ユークリッドの互除法などのアルゴリズムを使用して素数候補との最大公約数を求め、これが1であることを調べる方法、などがある。これらの計算には多倍長の計算が必要となる。
【0011】
このような過程を経て、暗号鍵が生成されるが、例えば特許文献1には、素数候補Pxを抽出した後、ふるい演算及び素数判定テストを経て、素数候補Pxを素数と認定したらその値を使用して暗号鍵を生成するという方法が開示されている。
【0012】
生成された暗号鍵は、その後、暗号化鍵を用いる装置に設定され、実際に暗号として使用されることとなる。
【0013】
このように、暗号鍵を生成する装置と暗号鍵を用いる装置とが異なる場合、例えばPCで暗号鍵を生成し、他の装置(以下、暗号鍵利用装置とする)で暗号鍵を用いるとき、暗号鍵が何らかの形で外部を経由するため、生成した暗号鍵が外部に漏洩する虞がある。なお、暗号鍵利用装置として、情報を暗号鍵を用いて暗号化する例えばICカードや決済装置などが挙げられる。
【0014】
暗号鍵の漏洩を防止するための方法として、暗号鍵生成自体を暗号鍵利用装置内で行うことが考えられる。これによれば、生成した暗号鍵が外部を経由することがないので、暗号鍵の漏洩を防止できることとなる。
【先行技術文献】
【特許文献】
【0015】
【特許文献1】特開2003−122251号公報
【発明の概要】
【発明が解決しようとする課題】
【0016】
しかしながら、暗号鍵利用装置は、情報を暗号化するための演算を行なう専用ハードウェアは搭載されているが、暗号鍵を生成するための専用ハードウェアは搭載されていないことが一般的である。
【0017】
具体的に、情報を暗号化するための演算を行なう専用ハードウェアは、べき剰余演算、乗算剰余演算が実行可能であるが、暗号鍵生成のために必要となる単純な除算等を行なうことができないため、暗号鍵を装置内で生成しようとした場合に、それらの演算を暗号鍵利用装置内のCPU(Central Processing Unit)が行なうこととなる。
【0018】
暗号鍵及び暗号鍵生成のために演算するデータのビット長は、CPUのビット長を大きく上回っているため、暗号鍵利用装置における暗号鍵生成は非常に時間を要するという問題点があった。
【0019】
本発明は上記問題点に鑑み、RSA暗号に用いられる素数を効率よく生成可能な素数生成装置、素数生成方法、及び素数生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【0020】
上記目的を達成するために、請求項1記載の素数生成装置は、予め定められたビット数以下のデータに対して、少なくとも加算、及び除算が可能な演算手段と、前記予め定められたビット数よりも大きなビット数の素数候補を示す素数候補データを生成する素数候補データ生成手段と、前記素数候補データ生成手段により生成された素数候補データを前記予め定められたビット数以下となるデータに分割することで複数の分割素数候補データを生成する分割素数候補データ生成手段と、前記分割素数候補データ生成手段により生成された複数の分割素数候補データの各々同士を前記演算手段により加算することにより、素数候補データが示す素数候補が合成数であるか否かを判定するための判定データを生成する判定データ生成手段と、前記判定データ生成手段により生成された判定データを、前記演算手段により少なくとも1つの素数で除算することにより前記素数候補が前記少なくとも1つの素数の倍数ではないと判定された場合に、前記素数候補データに対して素数判定を行なう素数判定手段と、前記素数判定手段により、前記素数候補が素数と判定された場合に、前記素数候補データを素数として出力する出力手段と、を有する。
【0021】
ここで、請求項1の発明では、演算手段は、予め定められたビット数m以下のデータに対して、少なくとも加算、及び除算が可能であり、素数候補データ生成手段は、前記予め定められたビット数mよりも大きなビット数Lの素数候補を示す素数候補データNを生成し、分割素数候補データ生成手段は、前記素数候補データ生成手段により生成された素数候補データNを前記予め定められたビット数m以下となるデータ(tビット)に分割することで複数の分割素数候補データF(k)を生成し、判定データ生成手段は、前記分割素数候補データ生成手段により生成された複数の分割素数候補データF(k)の各々同士を前記演算手段により加算することにより、素数候補データNが示す素数候補が合成数であるか否かを判定するための判定データSを生成し、素数判定手段は、前記判定データ生成手段により生成された判定データを、前記演算手段により少なくとも1つの素数で除算することにより前記素数候補が前記少なくとも1つの素数の倍数ではないと判定された場合に、前記素数候補データNに対して素数判定を行い、出力手段は、前記素数判定手段により、前記素数候補が素数と判定された場合に、前記素数候補データNを素数として出力することにより、RSA暗号に用いられる素数を効率よく生成することができる。
【0022】
また、請求項2の発明は、請求項1の発明において、前記演算手段は、剰余演算、シフト演算、及び符号変換演算の少なくとも1つの演算が可能であり、前記判定データ生成手段は、前記分割素数候補データに対して前記演算手段によりシフト演算、剰余演算、及び符号変換演算の少なくとも1つの演算で得られたデータの各々同士を前記演算手段により加算することで判定データを生成するようにしても良い。
【0023】
上記目的を達成するために、請求項3記載の素数生成方法は、予め定められたビット数以下のデータに対して、少なくとも加算、及び除算が可能な演算手段を有する素数生成装置における素数生成方法であって、前記予め定められたビット数よりも大きなビット数の素数候補を示す素数候補データを生成する素数候補データ生成段階と、前記素数候補データ生成段階により生成された素数候補データを前記予め定められたビット数以下となるデータに分割することで複数の分割素数候補データを生成する分割素数候補データ生成段階と、前記分割素数候補データ生成段階により生成された複数の分割素数候補データの各々同士を前記演算手段により加算することにより、素数候補データが示す素数候補が合成数であるか否かを判定するための判定データを生成する判定データ生成段階と、前記判定データ生成段階により生成された判定データを、前記演算手段により少なくとも1つの素数で除算することにより前記素数候補が前記少なくとも1つの素数の倍数ではないと判定された場合に、前記素数候補データに対して素数判定を行なう素数判定段階と、前記素数判定段階により、前記素数候補が素数と判定された場合に、前記素数候補データを素数として出力する出力段階と、を有する。
【0024】
ここで、請求項3の発明では、請求項1と同様に作用することにより、請求項1と同様の効果が得られる。
【0025】
上記目的を達成するために、請求項4記載の素数生成プログラムは、予め定められたビット数以下のデータに対して、少なくとも加算、及び除算が可能な演算手段を有する素数生成装置において実行される素数生成プログラムであって、前記予め定められたビット数よりも大きなビット数の素数候補を示す素数候補データを生成する素数候補データ生成ステップと、前記素数候補データ生成ステップにより生成された素数候補データを前記予め定められたビット数以下となるデータに分割することで複数の分割素数候補データを生成する分割素数候補データ生成ステップと、前記分割素数候補データ生成ステップにより生成された複数の分割素数候補データの各々同士を前記演算手段により加算することにより、素数候補データが示す素数候補が合成数であるか否かを判定するための判定データを生成する判定データ生成ステップと、前記判定データ生成ステップにより生成された判定データを、前記演算手段により少なくとも1つの素数で除算することにより前記素数候補が前記少なくとも1つの素数を約数にもつ合成数ではないと判定された場合に、前記素数候補データに対して素数判定を行なう素数判定ステップと、前記素数判定ステップにより、前記素数候補が素数と判定された場合に、前記素数候補データを素数として出力する出力ステップと、を有する。
【0026】
ここで、請求項4の発明では、請求項1と同様に作用することにより、請求項1と同様の効果が得られる。
【発明の効果】
【0027】
本発明によれば、RSA暗号に用いられる素数を効率よく生成可能な素数生成装置、素数生成方法、及び素数生成プログラムを提供することができる、という効果が得られる。
【図面の簡単な説明】
【0028】
【図1】実施形態に係るICカードのハードウェア構成を示す図である。
【図2】素数候補データ及び分割素数候補データを示す図である。
【図3】分割素数候補データを用いて素数生成処理を行なう処理概要を示す図である。
【図4】ふるい処理で用いられる分割候補ビット長、判定データ、判定データを除算する素数の対応を示す模式図である。
【図5】素数生成処理プログラムの流れを示すフローチャートである。
【図6】ふるい処理の流れを示すフローチャートである。
【発明を実施するための形態】
【0029】
以下、図面を参照して、本発明を実施するための最良の形態について詳細に説明する。本実施の形態では、RSA暗号の暗号鍵生成処理について記載するが、この説明に先立ち、RSA暗号を運用する際の一般的な暗号鍵生成手順の一例について説明する。
【0030】
まず乱数発生器を用いて、512ビット又は1024ビット等の乱数を発生させる。上述した512ビット又は1024ビット等は、現存するCPU(Central Processing Unit)のビット長を大きく上回るビット長である。以下の説明において、512ビット又は1024ビット等、CPUのビット長を上回るビット長を極長ビットと表現する。
【0031】
このような極長ビットのデータに対して、素数判定が行なわれるが、この素数判定では、処理負荷が大きい確定的、或いは確率的素数判定を行なう前に、ふるい処理が行なわれる。具体的に、このふるい処理は、発生した乱数がいくつかの素数(例えば、3、5、7、11等の一般的には3桁以下の素数)の倍数になっているか否かをユークリッドの互除法等を用いて検査するもので、このふるい処理により合成数と判定されなかったデータに対して、上記確定的、或いは確率的素数判定を行なうようになっている。そして、素数であることが判定されると、その素数を用いて暗号鍵が生成される。なお、確定的素数判定方法の例としては、AKS素数判定法が挙げられ、確率的素数判定方法の例としてはフェルマーテストやミラー・ラビン素数判定法が挙げられる。
【0032】
上述したふるい処理と、確定的、或いは確率的素数判定で行なわれる主要な演算は異なり、前者では除算が繰り返し行なわれ、後者では乗算剰余演算、べき剰余演算が行なわれるようになっている。具体的には、一般的なふるい処理で用いられるユークリッドの互除法は、aをbで割った余りをrとすると、aとbとの最大公約数はbとrとの最大公約数に等しいというアルゴリズムであるので、このアルゴリズムを実行した場合には、上述した除算が繰り返し行なわれることとなる。一方、乗算剰余演算はaとbとの積をmで割ったときの余りを求める演算であり、べき剰余演算はaのb乗をmで割ったときの余りを求める演算である。
【0033】
いずれも極長ビットのデータに対して行なわれる演算であるが、乗算剰余演算、べき剰余演算は、情報を暗号化する場合にも行なわれる演算であることから、パソコンほどのCPUを搭載することはできないが、暗号化を行なう装置(例えばICカードや決済端末)には、乗算剰余演算、べき剰余演算を行なうための専用チップが搭載されている。
【0034】
従って、ICカードや決済端末において、暗号鍵を生成する場合は、上述したふるい処理をいかに効率的に行なうかが重要な課題となる。
【0035】
以上の説明を踏まえ、以下本実施の形態について説明する。図1は本発明の素数生成装置を適用したICカードのハードウェア構成を示す図であるが、これに限らず決済端末等、携帯型で暗号化を行なう装置に適用することができる。また、耐タンパモジュール(TRM:Tamper Resistant Module)のようなチップ内部に強固で粘着力の高いコーティングを施し、表面を剥がすと内部の回路が完全に破壊されるようにした装置に適用しても良い。
【0036】
図1に示されるように、ICカード10は、CPU12、DSP(Digital Signal Processor)14、入出力部16、ROM(Read Only Memory)18、RAM(Random Access Memory)20、及び乱数発生器22を含んで構成される。
【0037】
このうち、CPU12は、予め定められたビット数(本実施の形態ではmビット)以下のデータに対して、少なくとも加算、及び除算が可能となっている。さらに、CPU12は、剰余演算、シフト演算、及び符号変換演算の少なくとも1つ演算が可能であっても良い。なお、いうまでもなく、剰余演算とはaをbで割った余りrを求める演算であり、シフト演算とは2進数のビットパターンを右または左にずらす演算であり、符号変換演算とは、aに対して−aを求める演算である。いずれの演算も、一般的なCPUであれば可能な演算である。なお、本実施の形態では、符号変換演算した後に加算されることから、符号変換演算が可能なことは、減算が可能であることを示している。
【0038】
また、演算手段であるCPU12は、予め定められたビット数より大きいビット数のデータに対しても、例えばそのデータを予め定められたビット数以下のデータに分割して演算させることで、処理速度は落ちるが演算自体は可能である。
【0039】
上述したビット数を示すmは、4、8、16等、一般的に2のべきである。また、ICカード10や上述した決済端末に搭載されたCPUは、パソコン等に搭載されるCPUと比較すると、やはり演算速度は非常に遅いことが多い。
【0040】
DSP14は、暗号化する際に必要な演算を行なうための専用チップであり、例えば暗号化したい情報、暗号鍵を設定することで、暗号化された情報を出力するようになっている。そして、その際に必要となる極長ビットのデータに対する乗算剰余演算、及びべき剰余演算が可能となっている。
【0041】
入出力部16は、ICカード10と他装置との間で無線通信を行なうためのものであり、特に本実施の形態では、ICカード10を動作させるための電源電力を供給するものでもある。具体的に入出力部16には、アンテナコイルや、電源電力を蓄電するコンデンサなどが組み込まれており、アンテナコイル内を通り抜ける磁力線の数が変化すると起電力が誘起されるようになっている。
【0042】
ROM18は、フラッシュメモリなどの不揮発性の記憶装置であり、後述するフローチャートに示される素数生成処理を行なうためのプログラムや、ICカードの仕様に応じたプログラム等が記憶される。RAM20は、各プログラム等により、処理に応じて一時的に使用される揮発性の記憶装置である。
【0043】
乱数発生器22は、CPU12の指示で極長ビットの奇数の乱数を発生させ、発生された乱数は、RAM20に出力され、保持される。
【0044】
次に、上述したICカード10において実行される素数生成処理の概要を図面を用いて説明する。図2には、RAM20に出力された素数候補データNと複数の分割素数候補データF(k)とが示されている。
【0045】
本実施の形態に係る素数生成処理において、素数候補データNは、上述した乱数発生器22により生成された極長ビット(Lビット)のデータである。分割素数候補データF(k)は、素数候補データNをCPUのビット長であるmビット数以下となるデータに分割したもので、この図の場合は、素数候補データNをt(t<m)ビットずつ分割することで、各々のF(k)のビット長をtビットとしている。複数の分割素数候補データF(k)は、同図の場合、M(=L/t)個のtビットのデータF(k)で構成される。
【0046】
図3に示されるように、本実施の形態に係る素数生成処理では、複数の分割素数候補データF(k)の各々同士をCPU12により加算することにより、素数候補データNが示す素数候補が合成数であるか否かを判定するための判定データSを生成する。
【0047】
さらにCPU12が、剰余演算、シフト演算、及び符号変換演算の少なくとも1つの演算が可能であれば、同図に示されるように、複数の分割素数候補データF(k)に対してシフト演算、剰余演算、及び符号変換演算の少なくとも1つの演算で得られたデータの各々同士を加算することで判定データSを生成する。
【0048】
生成された判定データSを、CPU12により少なくとも1つの素数で除算することにより素数候補が少なくとも1つの素数の倍数ではないと判定された場合に、素数候補データNに対して確定的、或いは確率的素数判定処理を行なう。
【0049】
次に、図4を用いて上記判定データSの生成方法について説明する。図4は、予め素数生成プログラムが参照する情報として、ROM18に記憶された情報を表す模式図であり、ふるい処理で用いられる分割候補ビット長、判定データS、判定データSを除算する素数の対応を示している。
【0050】
具体的には、例えば「分割素数候補ビット長」が1であれば、「判定データS」に記載された数式に従って演算し、後述するように演算結果を素数3で除算するようになっている。
【0051】
同図に示される「分割素数候補ビット長」は上述したビット長tに対応している。「判定データS」におけるΣは、k=0〜M−1までの総和を示している。また、記号「^」はべきを、記号「*」は乗算を、記号「%」は剰余演算を、記号「<<」は左シフト演算をそれぞれ示す。例えば、S=Σ(−1)^k*F(k)は、以下の式を示す。
S=F(0)−F(1)+F(2)−F(3)+…(−1)^(M−1)*F(M−1)
すなわち、分割素数候補ビット長が2で3の倍数か否かを判定する場合には、同図に示されるように、素数候補データNを1ビットごとに区切って、ビット単位で加算、減算する。下位のほうから、0ビット目、1ビット目、3ビット目、とビット番号を振った時に偶数ビット目は加算、奇数ビット目は減算する。計算結果が3で割り切れるかどうか判定し、割り切れた場合は、素数候補データNは3の倍数、割り切れない場合は、3の倍数ではない、と判定する。
【0052】
また、同図に示されるように、分割素数候補ビット長tが2の場合は、2つの判定データSの求め方が存在し、一方は素数候補データNが3の倍数であるか否かを判定でき、他方は素数候補データNが5の倍数であるか否かを判定できる。
【0053】
さらに、分割素数候補ビット長tが6の場合は、判定データSによって、素数候補データNが3、又は7の倍数であるか否かを判定できる。すなわち、一つの判定データSを求めることで、複数の素数の倍数であるか否かが判定できる。
【0054】
なお、同図に示される内容の一部を詳細に説明すると、素数候補データNが3の倍数か否かを判定するには素数候補データNを2ビットごとに区切って、各F(k)を0から3の間の数と考えて加算する。素数候補データNが1024ビット程度であれば、計算結果は32ビット以内に収まるので、判定データSが3で割り切れるか否か判定し、割り切れた場合は、素数候補は3の倍数、割り切れない場合は、3の倍数ではない、と判定する。
【0055】
また、素数候補データNが5の倍数か否かを判定するには素数候補データNを2ビットごとに区切って、各F(k)を0から3の間の数と考えて、加算、減算する。下位のF(k)から、0番目、1番目、3番目、と番号を振った時に、偶数番号のF(k)値は加算、奇数番号のF(k)値は減算する。計算結果が5で割り切れるか否か判定し、割り切れた場合は、素数候補データNは5の倍数、割り切れない場合は、5の倍数ではない、と判定する。
【0056】
また、素数候補データNが7の倍数か否かを判定するには、素数候補データNを4ビットごとに区切って、各F(k)を0から15の間の数と考えて、シフト及び加算をする。下位のF(k)から、0番目、1番目、2番目、と番号を振った時に、3の倍数番号のF(k)値はそのまま加算、(3の倍数+1)番号のF(k)値は1ビット左シフトしてから加算、(3の倍数+2)番号のF(k)値は2ビット左シフトしてから加算する。判定データSが7で割り切れるか否か判定し、割り切れた場合は、素数候補データNは7の倍数、割り切れない場合は、7の倍数ではない、と判定する。
【0057】
以上は、ひとつの素数の倍数か否かを判定する方法であったが、複数の素数の倍数か否かを判定する、同図に示される内容の一部を詳細に説明する。
【0058】
素数候補データNが3か5の倍数か否かを判定するには、素数候補データNを4ビットごとに区切って、各F(k)を0から15の間の数と考えて合計する。判定データSが3、又は5で割り切れるか否かで、素数候補データNがそれぞれ3、又は5の倍数か否かを判定する。
【0059】
素数候補データNが3、5、7、13、17、又は241の倍数か否かを判定するには、素数候補データNを24ビットごとに区切って、各F(k)を0から2の24乗−1の間の数と考えて合計する。計算結果が3、5、7、13、17、241で割り切れるか否かで、素数候補データNが3、5、7、13、17、又は241の倍数か否かを判定する。
【0060】
この他にも、極長ビットのデータの除算やユークリッドの互除法による演算を回避しつつ、素数候補データNがある小さな素数を約数としてもつか否かを判定する方法はいくつもあり、これらを適当に組み合わせることにより、素数候補データNが複数の素数を約数としてもつか否かの判定を行うことができる。
【0061】
また、素数候補データNのビット長Lが分割したいtの倍数ではない場合、すなわち、L=qt+r(r≠0)の場合、tの倍数となるように、素数候補データNの上位に(t−r)ビット分の0を付け足すことにより、素数候補データNのビット長LをL+t−rとすることで、素数候補データNのビット長をtの倍数とすることができる。
【0062】
なお、同図に示される模式図において、分割素数候補ビット長が、例えば5、7、9などについては記載されていないが、以下の方法を用いることで任意の分割素数候補ビット長tを選ぶことができる。
【0063】
mビット以下の任意の分割素数候補ビット長tに対し、まず2^t−1の素因数pを求めておき、次にS=ΣF(k)を求め(F(k)はtビット)、p|Sならばp|Nとなる(N=素数候補データ)ので、任意の分割素数候補ビット長を選ぶことができる。なお、a|bは、aがbの約数であることを示している。
【0064】
他の方法としては、mビット以下の任意の分割素数候補ビット長tに対し、まず2^t+1の素因数pを求めておき、次にS=Σ(−1)^k*F(k)を求め(F(k)はtビット)、p|Sならばp|Nとなる(N=素数候補データ)ので、この方法によっても任意の分割素数候補ビット長を選ぶことができる。
【0065】
上述した2つの方法以外にも方法があるが、ここでは省略する。例えば、t=5の場合、2^t−1=31で、これは素数であるので、素数候補データNが31の倍数かどうかを判定できる。この場合、ひとつの素数31しか判定できないが、判定を効率化するには、なるべく異なる多くの素因数からなる値を見つけることが重要である。例えば、t=10の場合、2^t−1=1023=3*11*31で、3つの素数の倍数か否か判定することができる。
【0066】
また、mビット以下の分割素数候補データF(k)を用いて、素数候補データNがある素数の倍数か否かを判定可能な素数は、図4に示される素数に限るものではない。さらに、図4に示される判定データSのいずれを用いて判定するかを、ICカード10の仕様等に応じて定めるようにすると、より効率的な判定が可能である。
【0067】
以上説明したふるい処理を用いた素数生成処理を、フローチャートを用いて説明する。図5は、素数生成プログラムの流れを示すフローチャートであり、CPU12により実行される。
【0068】
まず、ステップ101で、乱数発生器22により予め定められたビット数(本実施の形態ではmビット)よりも大きなビット数の素数候補を示す素数候補データNを生成させる。次のステップ102で上述したふるい処理を行なう。このふるい処理の詳細は、図6で説明する。
【0069】
次のステップ103で、素数候補データNは合成数であるか否かを判定する。ここでの合成数とは、ふるい処理で除算された素数を約数にもつ合成数を意味し、それ以外の合成数を含むものではない。
【0070】
ステップ103で肯定判定した場合には、ステップ101の処理に戻る。一方、ステップ103で素数候補データNが上述した意味での合成数ではないと判定した場合には、ステップ104で、確定的、或いは確率的素数判定処理を行なう。すなわち、素数候補が少なくとも1つの素数を約数にもつ合成数ではないと判定された場合に、素数候補データNに対して素数判定を行なう。
【0071】
次のステップ105で、素数候補データNが素数判定処理によって素数と判定されたか否かを判定する。ステップ105で否定判定した場合には、ステップ101の処理に戻る。一方、ステップ105で素数候補データNが素数と判定した場合に、ステップ106で、素数候補データNを素数として例えばROM18に出力して処理を終了する。
【0072】
なお、確率的素数判定の場合は、「合成数である」又は「どちらとも言えない」という結果しか得られないため、ステップ106では擬素数として出力されることとなるが、確率的素数判定法は精度を上げることが可能であり、例えば確率的素数判定法の一つであるミラー・ラビン素数判定法では、ある範囲全てで検査することで確定的素数判定法とすることができる。
【0073】
次に、上記ステップ102のふるい処理を、図6のフローチャートを用いて説明する。まず、ステップ201で、分割素数候補データF(0)、…、F(M−1)を生成する(図2参照)。次のステップ202でループカウンタk、及び判定データSを0で初期化する。
【0074】
次のステップ203で、変数BにF(k)に対して剰余演算、シフト演算、符号変換演算したデータを代入する。剰余演算(%)、シフト演算(<<)、符号変換演算(−)は、図4に示す模式図に従って行なわれるが、模式図に示される判定データSのうちのいずれの判定データSにより判定を行なうかは、予め定めておく。その場合、模式図のうちの一つの判定データSで判定しても良いし、複数の判定データSで判定しても良い。
【0075】
次のステップ204で、判定データSに変数Bを加えたものを改めて判定データSとし、ステップ205でループカウンタkを1だけ増分する。
【0076】
次のステップ206で、ループカウンタkがM−1より大きいか否か判定する。これは全てのF(k)に対する処理が終了したか否かの判定である。ステップ206で否定判定した場合には、ステップ203の処理に戻り、肯定判定した場合には、ステップ207で判定データSに対して素数で除算する。ここでの素数は、図4に示される素数である。従って、このステップ207の処理は、複数の素数に対して判定可能な場合は、複数の素数による除算が行なわれる。
【0077】
ステップ208で割り切れたか否か、すなわち、少なくとも1つの素数を約数にもつ合成数であるか否かを判定し、肯定判定した場合には、ステップ209で、素数候補データNは除算された素数を約数にもつ合成数と判定し、否定判定した場合には、素数候補データNは除算した素数を約数にもたないと判定して処理を終了する。
【0078】
以上説明したように、本実施の形態では、ふるい処理をCPU12のビット数以下のデータにより行なうため、効率よくふるい処理を行なうことができる。これにより、例えばICカードや決済端末のようなCPUの処理能力が比較的低い装置においても、自装置内で暗号鍵を生成することが可能となる。
【0079】
この場合、従来のように暗号鍵が何らかの形で外部を経由することを排除できる結果、暗号鍵の漏洩を防止することもできる。
【0080】
また、判定データSを求めるためのF(k)は、全てCPU12のビット数以下のデータであるため、極長ビットそのものを演算するよりも遙かに効率よく演算することが可能である。また、判定データSを求める際に用いられる演算(加算、乗算、シフト演算等)はCPU12が可能な基本的な演算であるため、処理負荷を低減することができる。これにより、使用する電力を低減できるため、携帯型の装置には非常に相性がよいふるい処理であるといえる。
【0081】
なお、本実施の形態ではICカード10を適用例として示したが、RSA暗号において対象となる極長ビット長は、パソコンのCPUのビット数よりも遙かに大きいため、パソコンに対しても適用できることは言うまでもない。
【0082】
また、図5、図6で説明したフローチャートの処理の流れは一例であり、本発明の主旨を逸脱しない範囲内で処理順序を入れ替えたり、新たなステップを追加したり、不要なステップを削除したりすることができることは言うまでもない。
【符号の説明】
【0083】
10 ICカード
12 CPU
14 DSP
16 入出力部
18 ROM
20 RAM
22 乱数発生器

【特許請求の範囲】
【請求項1】
予め定められたビット数以下のデータに対して、少なくとも加算、及び除算が可能な演算手段と、
前記予め定められたビット数よりも大きなビット数の素数候補を示す素数候補データを生成する素数候補データ生成手段と、
前記素数候補データ生成手段により生成された素数候補データを前記予め定められたビット数以下となるデータに分割することで複数の分割素数候補データを生成する分割素数候補データ生成手段と、
前記分割素数候補データ生成手段により生成された複数の分割素数候補データの各々同士を前記演算手段により加算することにより、素数候補データが示す素数候補が合成数であるか否かを判定するための判定データを生成する判定データ生成手段と、
前記判定データ生成手段により生成された判定データを、前記演算手段により少なくとも1つの素数で除算することにより前記素数候補が前記少なくとも1つの素数の倍数ではないと判定された場合に、前記素数候補データに対して素数判定を行なう素数判定手段と、
前記素数判定手段により、前記素数候補が素数と判定された場合に、前記素数候補データを素数として出力する出力手段と、
を有する素数生成装置。
【請求項2】
前記演算手段は、剰余演算、シフト演算、及び符号変換演算の少なくとも1つの演算が可能であり、
前記判定データ生成手段は、前記分割素数候補データに対して前記演算手段によりシフト演算、剰余演算、及び符号変換演算の少なくとも1つの演算で得られたデータの各々同士を前記演算手段により加算することで判定データを生成する請求項1に記載の素数生成装置。
【請求項3】
予め定められたビット数以下のデータに対して、少なくとも加算、及び除算が可能な演算手段を有する素数生成装置における素数生成方法であって、
前記予め定められたビット数よりも大きなビット数の素数候補を示す素数候補データを生成する素数候補データ生成段階と、
前記素数候補データ生成段階により生成された素数候補データを前記予め定められたビット数以下となるデータに分割することで複数の分割素数候補データを生成する分割素数候補データ生成段階と、
前記分割素数候補データ生成段階により生成された複数の分割素数候補データの各々同士を前記演算手段により加算することにより、素数候補データが示す素数候補が合成数であるか否かを判定するための判定データを生成する判定データ生成段階と、
前記判定データ生成段階により生成された判定データを、前記演算手段により少なくとも1つの素数で除算することにより前記素数候補が前記少なくとも1つの素数の倍数ではないと判定された場合に、前記素数候補データに対して素数判定を行なう素数判定段階と、
前記素数判定段階により、前記素数候補が素数と判定された場合に、前記素数候補データを素数として出力する出力段階と、
を有する素数生成方法。
【請求項4】
予め定められたビット数以下のデータに対して、少なくとも加算、及び除算が可能な演算手段を有する素数生成装置において実行される素数生成プログラムであって、
前記予め定められたビット数よりも大きなビット数の素数候補を示す素数候補データを生成する素数候補データ生成ステップと、
前記素数候補データ生成ステップにより生成された素数候補データを前記予め定められたビット数以下となるデータに分割することで複数の分割素数候補データを生成する分割素数候補データ生成ステップと、
前記分割素数候補データ生成ステップにより生成された複数の分割素数候補データの各々同士を前記演算手段により加算することにより、素数候補データが示す素数候補が合成数であるか否かを判定するための判定データを生成する判定データ生成ステップと、
前記判定データ生成ステップにより生成された判定データを、前記演算手段により少なくとも1つの素数で除算することにより前記素数候補が前記少なくとも1つの素数を約数にもつ合成数ではないと判定された場合に、前記素数候補データに対して素数判定を行なう素数判定ステップと、
前記素数判定ステップにより、前記素数候補が素数と判定された場合に、前記素数候補データを素数として出力する出力ステップと、
を有する素数生成プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2011−123356(P2011−123356A)
【公開日】平成23年6月23日(2011.6.23)
【国際特許分類】
【出願番号】特願2009−281716(P2009−281716)
【出願日】平成21年12月11日(2009.12.11)
【出願人】(308033711)OKIセミコンダクタ株式会社 (898)
【Fターム(参考)】