説明

情報処理装置、情報処理方法、及びコンピュータプログラム

【課題】乱数生成能力と素数判定能力とを有する情報処理装置において、より効率的に素数を生成する。
【解決手段】入力された数値が素数であるか否かを判定しかつ素数である場合に該数値を出力する複数の判定手段を備える。複数の乱数シードを取得し、1以上の判定手段が所属するそれぞれの判定グループに複数の乱数シードの何れかを対応付ける。乱数シードを用いて生成した乱数を、該乱数シードに対応付けられた判定グループに入力する。ここで、着目乱数シードを用いて、乱数を生成する乱数生成系列を初期化する。乱数生成系列を用いて乱数を生成する。乱数のビット列を所定ビット数のビット列へと分割する。分割によって得られたそれぞれのビット列が示す数値を、着目乱数シードに対応付けられた判定グループを構成する判定手段の何れかへと出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、素数を生成する情報処理装置、情報処理方法、及びコンピュータプログラムに関する。
【背景技術】
【0002】
近年の情報通信において、情報を保護するための暗号技術は必要不可欠である。この暗号技術の一つとして、デジタル署名などに用いられる公開鍵暗号がある。一般的に公開鍵暗号の鍵ペアを生成するためには、桁の大きな素数p,qの生成を必要とする。一般的に素数は、乱数生成器にて乱数を生成し、生成された乱数が素数かどうかを判定することにより生成される。
【0003】
安全性の観点から、素数には高品質な一様性及び予測困難性などが求められる。この要求を満たすために、乱数を生成するために物理的な雑音(熱雑音など)が蓄積されるエントロピーソースを用いることが推奨されている。エントロピーソースから取得したデータ(エントロピー)を乱数の種(シード)として乱数生成器に入力することにより、高品質な乱数が得られる(非特許文献1)。
【0004】
生成する素数のビット長が大きいほど、素数が見つかる確率は小さくなる。大きな素数を発見するためには、乱数の生成と素数判定とを何度も繰り返す必要があるため、多くのコンピュータリソース及び時間を必要とする。この問題を解決するために、特許文献1においては、負荷の大きな鍵ペア生成処理を分散処理を用いて実現する。こうして特許文献1の方法によれば、ICカードのような処理リソースの小さなデバイスで鍵ペアを生成することができる。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2000−56680号公報
【非特許文献】
【0006】
【非特許文献1】NIST, “Recommendation for Random Number Generation Using Deterministic Random Bit Generators (Revised)”, NIST SP800-90
【発明の概要】
【発明が解決しようとする課題】
【0007】
並列処理環境が一般的になったため、処理負荷の大きな鍵ペア生成処理を並列化して高速化することが考えられる。しかしながら、エントロピーは物理現象の観測によって生成され、高速化が難しいため、素数生成においてはシード生成がボトルネックになる。一方で高速化のために単一シードを複数回利用して素数を生成し、この素数を用いて鍵ペアを生成する場合、生成した鍵ペアの一様性及び予測困難性が低くなるため、通信の安全性が低下する。
【0008】
本発明は、乱数生成能力と素数判定能力とを有する情報処理装置において、より効率的に素数を生成することを目的とする。
【課題を解決するための手段】
【0009】
本発明の目的を達成するために、例えば、本発明の情報処理装置は以下の構成を備える。すなわち、
所定ビット数の素数を並列に複数生成する情報処理装置であって、
入力された数値が素数であるか否かを判定しかつ素数である場合に該数値を出力する複数の判定手段と、
複数の乱数シードを取得し、1以上の前記判定手段が所属するそれぞれの判定グループに当該複数の乱数シードの何れかを対応付ける対応付け手段と、
前記乱数シードを用いて生成した乱数を、該乱数シードに対応付けられた判定グループに入力する制御手段と、を備え、
前記制御手段は、
着目乱数シードを用いて、乱数を生成する乱数生成系列を初期化する初期化手段と、
前記乱数生成系列を用いて乱数を生成する乱数生成手段と、
前記乱数のビット列を前記所定ビット数のビット列へと分割する分割手段と、
前記分割によって得られたそれぞれのビット列が示す数値を、前記着目乱数シードに対応付けられた前記判定グループを構成する前記判定手段の何れかへと出力する出力手段と、を備える
ことを特徴とする。
【発明の効果】
【0010】
乱数生成能力と素数判定能力とを有する情報処理装置において、より効率的に素数を生成することができる。
【図面の簡単な説明】
【0011】
【図1】鍵ペア生成システムの一例を示す図。
【図2】実施例1における鍵ペア生成の一例を示すフローチャート。
【図3】擬似乱数系列の生成の一例を示すフローチャート。
【図4】擬似乱数とGPUコアの対応の一例を示す図。
【図5】実施例2における鍵ペア生成の一例を示すフローチャート。
【図6】実施例1及び2における情報処理装置100の機能構成の一例を示す図。
【発明を実施するための形態】
【0012】
以下、本発明の実施形態の一例を図面に基づいて説明する。ただし、本発明の範囲は以下の実施形態に限定されるものではない。
【0013】
[実施例1]
<システム全体構成>
図1(A)は、実施例1に係る情報処理装置100の例を示す。本実施例に係る情報処理装置100は、所定ビット数の素数を並列に複数生成することができる。情報処理装置100は、CPU101、グラフィックボード102、主メモリ105、メモリコントローラハブ106、入出力コントローラハブ107、NIC108、記憶装置109、及び外部接続ポート110を含む。
【0014】
CPU101は、主メモリ105又は記憶装置109に記録されたプログラム(コンピュータプログラム)に従って、情報処理装置100の動作の少なくとも一部を制御する中央演算装置である。CPU101は、CPUコアと呼ばれる演算処理部を複数有していてもよい。さらに、CPU101は物理的な雑音をビット列(エントロピー)として取得することができる。物理的な雑音は任意のものでありうるが、例えば記憶装置109のシークタイム、タイミング、主メモリ105の状態、その他物理センサ(不図示)の出力などが挙げられる。
【0015】
グラフィックボード102は、GPU103とビデオメモリ104とを含む。グラフィックボード102は通常、画像処理に特化した拡張ボードである。例えばグラフィックボード102は、映像信号を取得し、モニタ112に映像を出力することができる。グラフィックボード102についての詳細は後述する。
【0016】
主メモリ105は、CPU101を制御するプログラムを格納することができる。主メモリ105はまた、CPU101の動作中にデータを一時的に記憶することができる。主メモリ105は、例えばRAMでありうる。
【0017】
メモリコントローラハブ106は、リンク113、114、115及び116を介してそれぞれCPU101、主メモリ105、グラフィックボード102及び入出力コントローラハブ107と接続されている。メモリコントローラハブ106は、主メモリ105、グラフィックボード102及び入出力コントローラハブ107の間のデータ転送を制御する。
【0018】
入出力コントローラハブ107は、リンク117、118及び119を介してそれぞれNIC108、記憶装置109及び外部接続ポート110と接続されている。入出力コントローラハブ107は、メモリコントローラハブ106、NIC108、記憶装置109及び外部接続ポート110の間のデータ転送を制御する。
【0019】
NIC108は、ネットワークに接続するための通信インターフェイスである。NIC108は例えば、有線LAN、無線LAN、又はBluetooth用の通信カードなどでありうる。
【0020】
記憶装置109は、CPU101が実行するプログラム、CPU101が処理に用いるデータ、及び外部から取得したデータなどを格納する。記憶装置は例えば、ハードディスクのような磁気記憶装置、又はSSDのようなフラッシュメモリでありうる。情報処理装置100は、複数の記憶装置109を有していてもよい。また記憶装置109を介して、記憶媒体からプログラムを含むデータを読み出すこと、及び記憶媒体にデータを書き出すことが可能であってもよい。プログラムコードを供給するための記憶媒体としては、例えば、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、並びにCFカード及びSDカードなどのフラッシュメモリ、などを用いることができる。
【0021】
外部接続ポート110は、外部機器を情報処理装置100に接続するためのポートである。外部接続ポート110は、例えばUSBポート、IEEE1394ポート、HDMIポートなどでありうる。この外部接続ポート110に入力装置/出力装置111を接続することで、情報処理装置100は入力装置/出力装置111との間でデータを送受信することができる。情報処理装置100は、複数の外部接続ポート110を有していてもよい。
【0022】
入力装置/出力装置111は、外部接続ポート110を介して情報処理装置100にデータを入力する、又は出力する機器である。入力装置111は例えば、キーボード、マウス、イメージスキャナなどでありうる。出力装置111は例えば、プリンタなどでありうる。モニタ112は、情報処理装置100が出力するデータを視覚的に表示する装置である。モニタ112は、グラフィックボード102が有する外部出力ポート、例えばアナログRGBポート又はDVIポートなどに接続されることができる。またモニタ112は、外部接続ポート110に接続されてもよい。モニタ112の例としては、例えば液晶モニタなどが挙げられる。
【0023】
リンク113、114、115、116、117、118、及び119は内部バスである。リンク113、114、115、116、117、118、及び119は例えば、PCI又はPCIエクスプレスなどのバスでありうる。
【0024】
以上、本実施例に係る情報処理装置100として利用可能なハードウェア構成の一例を示した。以上説明された情報処理装置100は、例えば、パーソナルコンピュータなどを用いて実現することができる。しかしながら、本実施例に係る情報処理装置100は上述の構成に限定されるものではない。例えば変形例において、情報処理装置100はグラフィックボード102を含まずにGPU103を含んでいてもよい。この場合、GPU103が主メモリ105に対してデータを読み書きできるように、情報処理装置100を構成すればよい。
【0025】
また、CPU101にGPU103を統合してもよい。さらには、GPU103はメモリコントローラハブ106に統合されていてもよいし、ビデオメモリ104は主メモリ105に統合されていてもよい。このような場合、情報処理装置100はグラフィックボード102を有さなくてもよい。もっともこのような場合にも、GPU103やビデオメモリ104の機能は通常、情報処理装置100のいずれかの構成要素に含まれる。
【0026】
他の実施例として、CPUとGPUとの少なくとも一方として、暗号処理に特化したハードウェアである暗号アクセラレータを用いてもよい。また、CPUとGPUとの少なくとも一方として、演算処理が可能なIPコアを用いてもよい。
【0027】
<グラフィックボード102の構成>
次に、図1(B)を参照して、グラフィックボード102について詳細に説明する。図1(B)は、本実施例に係るグラフィックボード102の構成の一例を示す。グラフィックボード102は、GPU103及びビデオメモリ104で構成される。ビデオメモリ104は、表示する映像情報を保持するためのフレームバッファとして利用されるメモリ領域である。
【0028】
GPU103は、リンク118を介してビデオメモリ104に接続される。GPU103はCPU101及びメモリコントローラハブ106を介して映像信号を取得し、描画処理を行う。GPU103は、1つ以上のGPUコア201・202と1つ以上のキャッシュメモリ203・204とから構成される。図1(B)の例においてグラフィックボード102は、2つのGPUコア201・202と、2つのキャッシュメモリ203・204とを含むが、これには限定されない。
【0029】
描画処理はGPUコア201・202がそれぞれ行う。GPUコア201・202が並列して処理を行うことにより、描画処理が高速化される。並列して動作するGPUコア201・202の数を増やすことにより、より高速な描画処理が実現されうる。近年では、数百個のGPUコア201・202の並列動作による、高速な描画処理が実現されている。
【0030】
このようにGPUコア201・202は、描画処理を目的とした構成を有する。したがってGPUコア201・202は通常、物理的なセンサを持たないため、物理的な雑音をビット列(エントロピー)として取得することができない。
【0031】
<素数・鍵ペアの生成方法>
図2及び図6を参照して、本実施例における情報処理装置100の動作を説明する。図2は、本実施例における処理の一例を示すフローチャートである。図2は特に、素数生成処理と、生成した素数を利用して鍵ペアを生成する処理を示している。また、情報処理装置100の機能構成を図6に示す。図6に示す各部の機能は、例えばCPU101が主メモリ105又は記憶装置109に格納されるプログラムを実行することと、CPU101の制御の下でGPU103がプログラムの一部を実行することと、によって実現されうる。
【0032】
ステップS201においてCPU101は並列度を決定する。この処理は、分配部650が行うことができる。本明細書において並列度とは、並列に生成される鍵ペアの数(又は素数の数)を意味する。通常は、生成しようとする素数又は鍵ペアの数を並列度とすればよい。例えば、鍵ペアを5つ生成しようとする場合、並列度を5とすればよい。しかしながら、並列度の決定方法はこれに限定されない。例えば、CPU101が有するコア数とGPUコア201・202の数との少なくとも一方を用いて、並列度を決定してもよい。このとき、並列度を生成しようとする鍵ペア数以上にすることにより、所望の数の鍵ペアを高速に作成することができる。
【0033】
例えば、生成しようとする鍵ペア数が3であり、CPU101のコア数が2であり、GPUコア201・202の数が36である場合について考える。後述のように、GPUコアは並列度の数のグループに分けられる。それぞれのグループを同じ数のGPUコアによって構成することにより、各グループの処理速度を平準化することができる。このことは、GPUコアの数を割り切ることができるように並列度を決定することによって実現できる。また、それぞれのGPUグループを別々のCPUによって制御することにより、処理効率を向上させることができる。このことは、並列度をCPUコア数で割り切ることができるように、並列度を決定することによって実現することができる。これらの観点から、この例においては並列度を6に設定することができる。
【0034】
ステップS202でCPU101は、並列度の数だけの疑似乱数系列を初期化する。疑似乱数系列の初期化方法の詳細は後述する。
【0035】
ステップS203でCPU101は、GPUコア201・202(判定手段)を並列度の数だけのグループ(判定グループ)に分割する。この処理は、分配部650が行うことができる。そして、それぞれのグループをステップS202で生成した疑似乱数系列のいずれか、すなわち乱数シードのいずれか(着目乱数シード)に対応付ける。この処理は、対応付け部640が行うことができる。GPUコア201・202の数がグループ数より小さい場合、1以上のGPUコア201・202が複数のグループに所属するように、グループを形成してもよい。それぞれのグループに所属するGPUコアの数は等しくなくてもよい。しかしながら、各グループのトータル処理能力が均一となるようにグループ化することにより、ステップS205における素数判定処理に要する時間を各グループの間で平準化し、より高速に所定個数の鍵ペアを生成することができる。
【0036】
ステップS204でCPU101は、ステップS202で生成した疑似乱数系列のそれぞれを用いて乱数を生成する。
【0037】
ステップS205でGPU103は、ステップS204で生成された乱数ビット列の少なくとも一部を取得し、取得した数値が素数であるか否かを判定する。より詳細には、それぞれのGPUコアのグループに属するGPUコア201・202は、着目乱数シードに対応付けられた擬似乱数系列を用いて生成された乱数ビット列の少なくとも一部を取得し、取得した数値が素数であるか否かを判定する。取得した数値が素数ではない場合には、GPUコア201・202はさらなるビット列をCPU101から取得する。ステップS205における処理の詳細は後述する。
【0038】
ステップS206でCPU101は、素数と判定された数値を、それぞれのGPUコアのグループから取得し、この素数を用いて鍵ペア670を生成する。この処理は、鍵生成部660が行うことができる。素数から鍵ペアを生成する方法は任意であり、公開鍵暗号アルゴリズムごとに定められた方法を用いればよい。素数から鍵ペアを生成する方法は公知であるから、本明細書においてはその説明を省略する。また本実施例において、ステップS206を省略してもよい。この場合、本実施例に係る情報処理装置100は、素数を生成して出力することができる。
【0039】
以上のステップS204からS206をそれぞれの擬似乱数系列について繰り返すことにより、所望の数の鍵ペアを生成することができる。ステップS204からS206はシーケンシャルに実行してもよい。すなわち、1つの擬似乱数系列から得られた乱数を用いて対応するGPUコアのグループが素数判定を行い、素数を出力する。そして、別の擬似乱数系列から得られた乱数を用いて対応するGPUコアのグループが素数判定を行い、素数を出力してもよい。
【0040】
しかしながら、ステップS204からS206の処理は、それぞれの擬似乱数系列について並列に実行されてもよい。並列処理は、例えば以下のように実現できる。すなわち、主メモリ105又はビデオメモリ104に、それぞれの疑似乱数系列を用いて生成した疑似乱数を一時的に保持する領域を設ける(乱数プール)。同様に、主メモリ105又はビデオメモリ104に、それぞれの疑似乱数系列を用いて生成した素数を一時的に保持する領域を設ける(素数プール)。
【0041】
ステップS204においてCPU101は、ステップS205及びS206とは非同期に、それぞれの擬似乱数系列についての疑似乱数を生成して乱数プールに書き込む。ステップS205においてそれぞれのGPUグループに属するGPUコア201・202は、ステップS204及びS206とは非同期に、対応する擬似乱数系列を用いて生成された疑似乱数が乱数プールに保持されているか否かを判定する。対応する擬似乱数が保持されている場合には、GPUコア201・202は対応する疑似乱数の少なくとも一部を読み出し、素数判定を行う。そしてGPUコア201・202は、素数であると判定された数値を素数プールに書き込む。ステップ206においてCPU101は、ステップS204及びS205とは非同期に、素数プールに素数が保持されているか否かを判定する。素数プールに素数が保持されている場合には、CPU101は素数プールから素数を読み出し、鍵ペアを生成する。
【0042】
<疑似乱数系列の生成方法>
図3を参照して、ステップS202における処理の詳細を説明する。図3は、ステップS202における処理の一例を示すフローチャートである。CPU101は、図3のフローチャートを並列度の数だけ繰り返すことにより、並列度の数だけの擬似乱数系列を初期化する。
【0043】
ステップS301においてCPU101は、エントロピーソースからエントロピーを取得する。前述の通り、記憶装置109のシークタイム、タイミング、主メモリ105の物理状態、その他物理センサの測定値、及びこれらの組み合わせなどを、エントロピーソースとして用いることができる。
【0044】
ステップS302においてCPU101は、十分なエントロピーを取得したか否かを判断する。エントロピーが十分であるか否かの判断は、生成する鍵ペア(又は素数)のビット長に従って決定できる。例えば、1024ビットのRSA暗号用の鍵ペアを生成する場合、エントロピーは80ビット以上であればよい。また、2048ビットのRSA暗号用の鍵ペアを生成する場合、エントロピーは112ビット以上であればよい。生成する鍵ペアのビット長に従う必要なエントロピーは公知であるから、本明細書においては説明を省略する。
【0045】
十分なエントロピーを取得できた場合は、処理はステップS303へ進む。十分なエントロピーを取得できなかった場合は、処理はステップS301へ戻る。処理がステップS301へ戻る場合、再度エントロピーの取得を試みても十分なエントロピーを取得できない可能性がある。したがって、ステップS302からS301へ戻る際には、所定時間だけ処理を停止し、すなわちウェイトを置き、エントロピーソースにエントロピーが溜まるのを待ってもよい。
【0046】
ステップS303においてCPU101は、ステップS302で取得したエントロピーを疑似乱数の乱数シードとして、疑似乱数系列を初期化する。この処理は、制御部630の初期化部632が行うことができる。また、取得部620はシード610を取得することができる。擬似乱数系列の初期化は、使用する擬似乱数生成アルゴリズムに応じて行えばよい。例えば、FIPS186−2 Appendix 3.1に規定されている疑似乱数生成アルゴリズムを用いる場合、XKEYにエントロピーを入力することにより疑似乱数系列を初期化すればよい。本実施例において使用される擬似乱数生成アルゴリズムは特に限定されず、例えばANSI X9.42−2001 Annex C.1に規定されているような方法を用いることもできる。
【0047】
<疑似乱数及び素数生成方法>
図4を参照して、ステップS205の処理の詳細について説明する。図4は、ある1つの擬似乱数系列に対応付けられたGPUコアグループの処理を示す図である。他の擬似乱数系列に対応付けられたGPUコアグループも、以下の説明と同様に処理を行うことができる。
【0048】
ステップS204においてCPU101は、それぞれの擬似乱数系列を用いて擬似乱数を生成する。この処理は、制御部630の乱数生成部634が行うことができる。擬似乱数401は、1つの擬似乱数系列Aを用いて生成された擬似乱数である。ステップS205においてCPU101は、擬似乱数401を、生成しようとする素数のビット長毎に分割する。この処理は、制御部630の分割部636が行うことができる。そしてCPU101は、分割することによって得られた数値のそれぞれを、擬似乱数系列Aに対応するグループに属するGPUコアのそれぞれに入力する。この処理は、制御部630の出力部638が行うことができる。同じ数値が異なるGPUコアに入力されないようにすることで、素数判定処理を効率化することができる。
【0049】
そしてGPUコアは、入力された数値が素数であるか否かを判定する。素数判定アルゴリズムとしては、公知の任意のものを用いることができる。例えばGPUコアは、FIPS186−2 Appendix2に規定されている素数判定アルゴリズムを用いることができる。しかしながら、本実施例で用いられる素数判定アルゴリズムはこれに限定されない。
【0050】
GPUコア201・202が、入力された数値が素数であると判定した場合、GPUコア201・202は素数をCPU101又は素数プールなどのメモリに送出する。一方でGPUコア201・202が、入力された数値は素数ではないと判定した場合、GPUコア201・202はさらなるビット列をCPU101から取得する。ここで擬似乱数系列Aに対応付けられたグループに属するGPUコア201・202は、擬似乱数401を分割することによって得られた数値のうち、まだGPUコアに入力されていない数値を取得すればよい。擬似乱数401を分割することによって得られた数値のうち、まだGPUコアに入力されていない数値が存在しない場合、CPU101は擬似乱数系列Aを用いて新たな擬似乱数を生成する。CPU101は、擬似乱数401を分割することによって得られた全ての数値を何れかのGPUコアに入力した際に、新たな擬似乱数を生成してもよい。
【0051】
一方でCPU101は、擬似乱数系列Aに対応付けられたグループに属するGPUコアのいずれかが、入力された数値が素数であると判定した場合、擬似乱数系列Aに対応付けられたグループに属する全てのGPUコアの処理を中断させることができる。
【0052】
以上に説明したように、本実施例においては、CPU101で疑似乱数を生成し、GPU103で疑似乱数から得られた数値が素数であるか否かを判定することによって、素数を生成することができる。特に、生成する素数の数又は鍵ペアの数に対応する数の疑似乱数系列を初期化することにより、一様性が高く、かつ予測困難性が低い素数を、高速に生成することができる。
【0053】
1つの擬似乱数系列(すなわちエントロピー)からは1つの素数のみを生成することにより、より予測困難性が低い素数を生成することができる。したがって、いくつかのGPUコアが並列して1つの擬似乱数系列に基づく乱数が素数であるか否かを判定する場合、1つのGPUコアが素数を発見した場合、他のGPUコアの処理は中断される。すなわち、他のGPUコアの処理は無駄になる。
【0054】
並列度、すなわちGPUコアグループの数をmとし、1つのGPUコアグループに属するGPUコアの数をnとする。本実施例の方法によれば、乱数が素数であることをあるGPUコアが発見した場合、CPU101が処理を中断させるGPUコアの数はn−1個である。一方、GPU103が有する全てのGPUコアに、同一の疑似乱数系列に基づく乱数が素数であるか否かを判定させる場合、乱数が素数であることをあるGPUコアが発見した場合にCPU101が処理を中断させるGPUコアの数はn×m−1個となる。このように、GPUコアをグループ化し、それぞれのグループに異なる擬似乱数系列に基づく乱数が素数であるか否かを判定させる本実施例は、無駄になる処理が少ないため、より効率的な処理を実現できる。
【0055】
[実施例2]
実施例1では、あらかじめ決定した並列度に基づいて疑似乱数生成及び素数判定を行った。実施例2では、並列度を動的に変化させながら疑似乱数生成及び素数判定を行う。実施例2に係る情報処理装置100の構成は、実施例1と同様である。以下では、実施例2における処理のうち、実施例1とは異なる処理について説明する。したがって、実施例1と同様の処理については説明を省略する。
【0056】
<素数・鍵ペアの生成方法>
図5を参照して、本実施例における情報処理装置100の動作を説明する。図5は、本実施例における処理の一例を示すフローチャートである。図5には、素数生成処理と、生成した素数を利用した鍵ペア生成処理とが示されている。なお、図5のフローチャートの処理は、CPU101が記憶装置109に格納されているプログラムを実行すること、及びCPU101の制御の下でGPU103がプログラムの一部を実行することによって実現されうる。
【0057】
ステップS501においてCPU101は、エントロピーソースからエントロピーを取得し、取得したエントロピーのビット数を算出する。さらに、エントロピーのビット数を、生成しようとする鍵ペアに応じたビット数で割り、得られた値を並列度の初期値とする。生成しようとする鍵ペアに応じた必要なエントロピー数については前述したとおりである。ここで並列度は、取得したエントロピーから生成可能な素数又は鍵ペアの数を意味する。エントロピーのビット数を、生成しようとする鍵ペアに応じたビット数で割ると、初期化可能な乱数生成系列の数を得ることができる。このようにして、並列度(判定グループの数)を、初期化された乱数生成系列の数以下とすることができる。
【0058】
なお、並列度の決定方法はこの方法に限定されず、CPU101のコア数、GPUコア201・202の数、又はこれらの組み合わせに従って、実施例1と同様に決定してもよい。例えば、エントロピーのビット数を、生成しようとする鍵ペアに応じたビット数で割ることによって得られた値が並列度の上限となるように、並列度を適宜決定してもよい。また、CPU101のコア数又はGPUコア201・202の数に応じた値が並列度の下限となるように、並列度を決定してもよい。
【0059】
ステップS502でCPU101は、実施例1と同様に、並列度と同数の疑似乱数系列を初期化する。また、鍵ペア生成が完了して利用が終わった疑似乱数系列を削除する。ステップS503でCPU101は、実施例1と同様に、GPUコア201・202を並列度と同数のグループに分け、それぞれのグループに別々の疑似乱数系列を対応付ける。
【0060】
ステップS504でCPU101は、実施例1と同様に、ステップS502で初期化した疑似乱数系列のそれぞれを用いて乱数を生成する。ステップS505でGPUコアのグループのそれぞれは、実施例1と同様に、対応づけられた疑似乱数系列が生成した疑似乱数が素数であるか否かを判定する。ステップS506でCPU101は、実施例1と同様に、生成した素数を用いて鍵ペアを生成する。実施例1と同様に、ステップS506は省略されてもよい。
【0061】
実施例1のステップS205においてそれぞれのGPUコア201・202は、CPU101から、乱数を分割することによって得られた数値を繰り返し取得した。しかしながら本実施例のステップS505においてそれぞれのGPUコア201・202は、CPU101から、乱数を分割することによって得られた数値を1回だけ取得してもよい。またステップS505においてそれぞれのGPUコア201・202は、対応付けられた擬似乱数系列を用いて生成された乱数を分割することによって得られた数値のうち、まだGPUコアに入力されていない数値がなくなるまで、数値を取得してもよい。
【0062】
ステップS507でCPU101は、所望の数の鍵ペア(又は素数)が生成されたか否かを判定する。所望の数の鍵ペアが生成されている場合、処理は終了する。所望の数の鍵ペアが生成されていない場合、処理はステップS508に進む。
【0063】
ステップS508でCPU101は並列度を更新する。CPU101は、ステップS501と同様に並列度を更新することができる。その後、処理はステップS502に戻る。以上のようにして、所望の数の素数又は鍵ペアを生成することができる。
【0064】
本実施例ではステップS508において並列度が更新されたが、並列度の更新は図5のフローチャートとは独立に行われてもよい。例えば、所定の時間間隔で並列度の更新が行われてもよい。また、いずれかのGPUコア201・202が、取得した数値が素数であると判定した際に、並列度の更新が行われてもよい。この場合、生成する残りの素数の数に従ってGPUコアのグループ分けを変更(再決定)することができる。すなわち、生成する残りの素数の数以下となるように並列度を決定することができる。生成する残りの素数の数は、生成しようとする素数の総数と、GPUコア201・202のいずれかが既に出力した素数の数との差として求めることができ、並列度をこの差以下となるように決定すればよい。生成しようとする素数の総数は、例えば、入力部680がユーザ入力を介して取得することができる。
【0065】
本実施例においては、ステップS508において並列度を更新した後で、ステップS503において再びGPUコアのグループ分けを行う。ステップS503においてCPU101は、素数が発見された疑似乱数系列に対応するグループ(着目判定グループ)に属するGPUコア201・202のみを、グループ分けの対象としてもよい。すなわち、着目判定グループに属するGPUコアを、着目判定グループ以外のグループのいずれかに所属されてもよい。一方でCPU101は、全てのGPUコア201・202をグループ分けの対象としてもよい。
【0066】
素数が発見された疑似乱数系列に対応するグループに属するGPUコア201・202だけをグループ分けの対象とする場合は、再割り当てするGPUコア201・202が限定されるので、各グループのトータル処理能力を均一化することが困難になる。一方で、現在処理中のGPUコア201・202と独立してグループ化処理ができるので、GPUコアの制御を容易に行うことができる。後者のように全てのGPUコア201・202をグループ分けの対象とする場合は、各グループのトータル処理能力を均一化することは容易となる。しかしながら、現在処理中のGPUコア201・202を同期しなければいけないため、GPUコアの制御が複雑になる。
【0067】
ステップS502からS507は、シーケンシャルに実行されてもよい。しかしながら、これらは並列に実行されてもよい。並列処理は、例えば以下のように実現できる。すなわち、主メモリ105又はビデオメモリ104に、それぞれの疑似乱数系列を用いて生成した疑似乱数を一時的に保持する領域を設ける(乱数プール)。同様に、主メモリ105又はビデオメモリ104に、それぞれの疑似乱数系列を用いて生成した素数を一時的に保持する領域を設ける(素数プール)。
【0068】
ステップS504においてCPU101は、他のステップとは非同期に、それぞれの擬似乱数系列についての疑似乱数を生成して乱数プールに書き込む。ステップS505においてそれぞれのGPUグループに属するGPUコア201・202は、他のステップとは非同期に、対応する擬似乱数系列を用いて生成された疑似乱数が乱数プールに保持されているか否かを判定する。対応する擬似乱数が保持されている場合には、GPUコア201・202は対応する疑似乱数の少なくとも一部を読み出し、素数判定を行う。そしてGPUコア201・202は、素数であると判定された数値を素数プールに書き込む。ステップ506においてCPU101は、他のステップとは非同期に、素数プールに素数が保持されているか否かを判定する。素数プールに素数が保持されている場合には、CPU101は素数プールから素数を読み出し、鍵ペアを生成する。
【0069】
並列実行時におけるステップS502及びS503では、他の並列処理で利用中の疑似乱数系列やGPUコア201・202を除外して処理を実施してもよい。すなわち、ステップS502においては、前のサイクルにおいて既に初期化されており、まだ素数が発見されていない擬似乱数系列については、初期化を行わなくてもよい。この場合ステップS508においては、続くステップS502で初期化する必要のない擬似乱数系列の数と、エントロピーのビット数を、生成しようとする鍵ペアに応じたビット数で割ることによって得られる値との和を、並列度の上限としてもよい。
【0070】
以上説明したように、本実施例によれば、CPU101で疑似乱数を生成し、GPU103で疑似乱数を素数判定することによって、素数を生成することができる。特に、取得可能なエントロピーのビット数及び鍵ペアのビット数などに応じて、並列に生成する鍵ペアの数を動的に変更することにより、一様性が高く、予測困難性が低い素数を効率的に生成することができる。
【0071】
また、実施例1の場合、GPUコア201・202のグループ分けは固定されている。したがって、処理が完了したグループに属するGPUコア201・202はスリープしてしまう。一方、本実施例では、全ての処理が完了するまでGPUコア201・202のグループ分けを変更する。したがって、処理が完了したグループに属するGPUコア201・202をさらなる素数判定処理に用いることができる。このように実施例2によれば、より効率的に素数を生成することができる。
【0072】
(他の実施形態)
本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体などとしての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに本発明を適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【0073】
このプログラムの形態は、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータなど、様々な形態をとることができる。プログラムを供給するための記憶媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RW、磁気テープ、不揮発性のメモリカード、ROM、及びDVDなどを用いることができる。
【0074】
また、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、プログラムをハードディスクなどの記憶媒体にダウンロードすることによっても、プログラムを供給することができる。自動インストール機能を含む圧縮されたファイルをハードディスクなどの記憶媒体にダウンロードすることによっても、プログラムを供給できる。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても、プログラムを供給できる。つまり、プログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバやFTPサーバなども、本発明の範囲に含まれる。
【0075】
プログラムを暗号化し、CD−ROMなどの記憶媒体に格納してユーザに配布することもできる。さらに、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせることもできる。ユーザはこの鍵情報を使用することにより、暗号化されたプログラムを復号してコンピュータにインストールすることもできる。
【0076】
また、コンピュータ上で稼働しているOS(オペレーティングシステム)などに処理の一部又は全部を行わせ、その処理によって前述した実施例の機能が実現されるプログラムも、本発明の範囲に含まれる。さらには、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれたプログラムコードに従って、この機能拡張ボードや機能拡張ユニットに備わるCPUなどが、処理の一部又は全部を行ってもよい。
【0077】
本発明は上記実施例に限定されるものではなく、本発明の趣旨に基づき種々の変形(各実施例の有機的な組合せを含む)が可能であり、それらを本発明の範囲から排除するものではない。本発明の様々な例と実施例を示して説明したが、当業者であれば、本発明の趣旨と範囲は、本明細書内の特定の説明に限定されないことを理解するだろう。なお、上述した実施例の各変形例を組み合わせた構成も全て本発明に含まれる。
【0078】
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)をネットワーク又は各種記憶媒体を介してシステム或いは装置に供給する。そして、そのシステム或いは装置のコンピュータ(又はCPUやMPUなど)がプログラムコードを読み出して実行する。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。

【特許請求の範囲】
【請求項1】
所定ビット数の素数を並列に複数生成する情報処理装置であって、
入力された数値が素数であるか否かを判定しかつ素数である場合に該数値を出力する複数の判定手段と、
複数の乱数シードを取得し、1以上の前記判定手段が所属するそれぞれの判定グループに当該複数の乱数シードの何れかを対応付ける対応付け手段と、
前記乱数シードを用いて生成した乱数を、該乱数シードに対応付けられた判定グループに入力する制御手段と、を備え、
前記制御手段は、
着目乱数シードを用いて、乱数を生成する乱数生成系列を初期化する初期化手段と、
前記乱数生成系列を用いて乱数を生成する乱数生成手段と、
前記乱数のビット列を前記所定ビット数のビット列へと分割する分割手段と、
前記分割によって得られたそれぞれのビット列が示す数値を、前記着目乱数シードに対応付けられた前記判定グループを構成する前記判定手段の何れかへと出力する出力手段と、を備える
ことを特徴とする情報処理装置。
【請求項2】
生成しようとする素数の数を示す入力を受け付ける入力手段と、
前記生成しようとする素数の数と、前記判定手段のいずれかが既に出力した素数の数との差以下となるように前記判定グループの数を定め、前記判定手段のそれぞれについて所属する前記判定グループを決定する分配手段と、
を備えることを特徴とする、請求項1に記載の情報処理装置。
【請求項3】
前記分配手段は、いずれかの前記判定手段が素数を出力した際に、前記判定グループの数を再び定め、前記判定手段のそれぞれについて所属する前記判定グループを再決定することを特徴とする、請求項2に記載の情報処理装置。
【請求項4】
前記分配手段は、着目判定グループに属する前記判定手段が素数を出力した際に、前記生成しようとする素数の数と、前記判定手段のいずれかが既に出力した素数の数との差が、前記判定グループの数よりも多い場合、当該着目判定グループに属する前記判定手段のそれぞれを、当該着目判定グループ以外の判定グループのいずれかに所属させることを特徴とする、請求項3に記載の情報処理装置。
【請求項5】
前記分配手段は、前記判定グループの数が、初期化された前記乱数生成系列の数以下となるように、前記判定グループの数を定めることを特徴とする、請求項2乃至4の何れか1項に記載の情報処理装置。
【請求項6】
前記判定手段が出力した素数を用いて鍵ペアを生成する鍵生成手段をさらに備えることを特徴とする、請求項1乃至5の何れか1項に記載の情報処理装置。
【請求項7】
所定ビット数の素数を並列に複数生成する情報処理装置が行う情報処理方法であって、
前記情報処理装置は、入力された数値が素数であるか否かを判定しかつ素数である場合に該数値を出力する複数の判定手段を備え、
前記情報処理方法は、
複数の乱数シードを取得し、1以上の前記判定手段が所属するそれぞれの判定グループに当該複数の乱数シードの何れかを対応付ける対応付け工程と、
前記乱数シードを用いて生成した乱数を、該乱数シードに対応付けられた判定グループに入力する制御工程と、を含み、
前記制御工程は、
着目乱数シードを用いて、乱数を生成する乱数生成系列を初期化する初期化工程と、
前記乱数生成系列を用いて乱数を生成する乱数生成工程と、
前記乱数のビット列を前記所定ビット数のビット列へと分割する分割工程と、
前記分割によって得られたそれぞれのビット列が示す数値を、前記着目乱数シードに対応付けられた前記判定グループを構成する前記判定手段の何れかへと出力する出力工程と、を含む
ことを特徴とする情報処理方法。
【請求項8】
コンピュータを、請求項1乃至6の何れか1項に記載の情報処理装置の各手段として機能させるための、コンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2013−37291(P2013−37291A)
【公開日】平成25年2月21日(2013.2.21)
【国際特許分類】
【出願番号】特願2011−175291(P2011−175291)
【出願日】平成23年8月10日(2011.8.10)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Bluetooth
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】