(57)【要約】【課題】  暗号技術や認証技術等で必須となる乱数（特に真正乱数）を多量に、安定的、かつ高速に生成する。【解決手段】  複数個のランダムパルス発生器に対応して設けられた複数個のカウンタによって、その複数個のランダムパルス発生器にパルスが発生した後の経過時間をそれぞれカウントし、前記複数個のランダムパルス発生器の少なくとも一つにパルスが発生したとき、対応するカウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタのカウント値を読み取り、かつ、読み取った複数個のカウント値に基づいて乱数を出力する  別の方式は、所要ビット数に応じて設けた複数個のランダムパルス発生器から入力されたパルスに応じてレジスタの複数ビットの値を反転させ、このレジスタの各ビットの値を所定のタイミングで読み取り、読み取ったデータに基づいて乱数を出力する。【選択図】  図１
2009054075.tif 000002
【特許請求の範囲】
【請求項１】
複数個のランダムパルス発生器と、
前記複数個のランダムパルス発生器に対応して設けられ、その複数個のランダムパルス発生器にパルスが発生した後の経過時間をそれぞれカウントする複数個のカウンタと、
前記複数個のカウンタを制御する制御手段とを有し、
前記制御手段は、前記複数個のランダムパルス発生器の少なくとも一つにパルスが発生したとき、対応するカウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタのカウント値を読み取り、かつ、読み取った複数個のカウント値に基づいて乱数を出力する、乱数生成システム。
【請求項２】
請求項１に記載の乱数生成システムにおいて、前記制御手段は、ランダムパルス発生器から対応するカウンタにパルスが到来する度に、当該カウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタのカウント値を同時に読み取ることを特徴とする、乱数生成システム。
【請求項３】
請求項１に記載の乱数生成システムにおいて、前記カウンタは、ランダム発生器からパルスが到来したときにリセットされ、その後の経過時間をカウントすることを特徴とする乱数生成システム。
【請求項４】
複数個のランダムパルス発生器に対応して設けられた複数個のカウンタによって、その複数個のランダムパルス発生器にパルスが発生した後の経過時間をそれぞれカウントするカウント・ステップと、
前記複数個のランダムパルス発生器の少なくとも一つにパルスが発生したとき、対応するカウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタのカウント値を読み取るステップと、
前記読み取った複数個のカウント値に基づいて乱数を出力するステップとを含む、乱数生成方法。
【請求項５】
請求項４に記載の乱数生成方法において、前記読み取りステップは、ランダムパルス発生器から対応するカウンタにパルスが到来する度に、当該カウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタのカウント値を同時に読み取ることを特徴とする、乱数生成方法。
【請求項６】
請求項４に記載の乱数生成方法において、前記カウント・ステップは、ランダム発生器からパルスが到来したときにカウンタをリセットし、その後の経過時間をカウントすることを特徴とする乱数生成方法。
【請求項７】
所要のビット数に応じて設けた複数個のランダムパルス発生器と、
前記複数個のランダム発生器に対応させて設けられ、その複数個のランダムパルス発生器から入力されたそれぞれのパルスに応じて値を反転させる複数ビットのレジスタと、
該レジスタの各ビットの値を所定のタイミングで読み取る読み取り手段と、
前記読み取り手段で読み取ったデータに基づいて乱数を出力する乱数出力手段とからなる乱数生成システム。
【請求項８】
前記読み取り手段は、前記複数ビットのレジスタの値を、一定の周期でサンプリングして読み取ることを特徴とする請求項７に記載の乱数生成システム。
【請求項９】
前記読み取り手段は、前記複数ビットのレジスタの値を、前記ランダムパルス発生器からパルスが前記レジスタの何れかのビットに入力するのに応じてサンプリングして読み取ることを特徴とする請求項７に記載の乱数生成システム。
【請求項１０】
複数個のランダムパルス発生器から入力されたそれぞれのパルスに応じてレジスタの複数ビットの値を反転させるステップと、
前記レジスタの各ビットの値を所定のタイミングで読み取るステップと、
前記読み取りステップで読み取ったデータに基づいて乱数を出力するステップとからなる乱数生成方法。
【請求項１１】
前記読み取りステップは、前記複数ビットのレジスタの値を、一定の周期でサンプリングして読み取ることを特徴とする請求項１０に記載の乱数生成方法。
【請求項１２】
前記読み取りステップは、前記複数ビットのレジスタの値を、前記ランダムパルス発生器からパルスが前記レジスタの何れかのビットに入力するのに応じてサンプリングして読み取ることを特徴とする請求項１０に記載の乱数生成方法。
【請求項１３】
ランダムパルスを放出するコア部とそのコア部から放出されたパルスを感知するセンサ部を有するランダムパルス発生デバイスであって、前記センサ部は複数個のセンサ素子を有し、その複数個のセンサ素子は、マトリクス状に配列されかつ互いが論理和となるように接続されたランダムパルス発生デバイス。
【請求項１４】
前記コア部と、前記複数個のセンサ素子からなるセンサ部とは、互いが一つのユニットとなるようにモジュール化されていることを特徴とする、請求項13に記載のランダムパルス発生デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号技術や認証技術等で必須となる乱数（特に真正乱数）の生成システム／方法に関し、特に多量の真正乱数を安定的にかつ高速に生成することのできるシステム／方法に関する。
【背景技術】
【０００２】
電子商取引や情報通信での情報に対するセキュリティを向上させるため乱数（特に真正乱数）による暗号化の技術が利用されている。真正乱数の生成方法は、例えば、ＲＰＧ（ランダムパルス発生器、モジュール化されているので以下において、ＲＰＧモジュールと称することもある）が利用される。ＲＰＧは、ＲＰＧ素子部分と電子回路部分とから成り、前者は、例えば、原子核の自然崩壊にα粒子を放出する放射体を含んだ溶液を適所（例えば専用のプレート）に滴下したコア部と、放出されたα粒子を受け止め電気信号に変化するセンサ（例えばフォトダイオード）部とが一体に組み合わされている。後者の電子回路はセンサの出力を波形整形及び／又は増幅等する。
【０００３】
このようなＲＰＧモジュールにおいては、α粒子が放出される確率は全く規則性がないから、ある瞬間にパルスが発生する可能性は常に不定である。つまり、あるパルスから次のパルスが発生するまでの経過時間を監視することによって乱数（この例では真正乱数）が得られる（パルスを監視するものとしてカウンタを利用するものは、例えば引用文献１に記載されている）。
【０００４】
ランダムパルス発生器によって発生されるランダムパルスは、例えば図５に示すように、パルスの発生間隔（ｒ１乃至ｒ８）が不定であるため、あるパルスの発生した瞬間からその次のパルスの発生までの経過時間を計測して数値化すれば乱数を得ることができる。以下、このような乱数生成方式をパルス間隔カウント方式と称する（実際のパルス間隔カウント方式は、一様な分布の乱数値を得るために、以下で説明するように対数変換を実施する）。
【０００５】
ランダムパルスの発生確率は、図６に示すように、ある瞬間（t0）から見て、より短い間隔では高く、経過時間が長くなるにつれ（tn）０％へ限りなく近づいていく傾向がある。そのため経過時間をそのまま乱数とした場合、その乱数の値は指数分布に沿った偏りが存在する（指数分布乱数）。
【０００６】
偏りの無い一様分布な乱数を得るには、指数分布乱数値に対数変換を施せばよい。対数計算は複雑だが、変換するだけであれば、予め対応表を用意して参照する方法で済むため、実際の変換は高速に処理できる。
【０００７】
予め用意しておく対応表（変換表）は次のようにして作成する。例えば、０乃至２５５までの一様分布乱数値を取得したい場合は、指数分布乱数値の範囲を０乃至６５５３５として、それを256階調で区切った表を作成する。このとき、図７に示すように、区切り幅を、指数分布乱数値の０に近いほうを狭く、６５５３５に近いほうを広くなるように対数で求めれば、最終的に０乃至２５５までの値が満遍なく登場する一様分布乱数の取得可能な対応表（変換表）を作成できる。
【０００８】
パルス間隔カウント方式は、ランダムパルスの発生時に１バイトの真正乱数が確実に求められるが、それは逆に一秒間で求められる乱数の量が、そのパルスの秒間平均発生回数以上にはならないことを意味している。
【０００９】
上述の例で、指数分布乱数が取り得る範囲を６５５３６階調よりも広く取れば、最終的な一様分布乱数も２５６階調以上にすることも可能だが、変換精度（より０に近いほうが狭くなる）のバランスが保てなくなるおそれがある。実際の検証においても、２５６：６５５３６の比率が最も安定した効果を得られることが分かっている。
【特許文献１】特開２００４−１２７２８３
【発明の開示】
【発明が解決しようとする課題】
【００１０】
ところで、このようなＲＰＧモジュール（一秒間に平均50回程度パルスを発生するものが一般的）は、単独では一度に生成できる乱数の量が少ないので、例えば認証用ＵＳＢトークンに利用される。しかし、例えば暗号化処理では、一度に大量の乱数が必要になるので、(1)複数個のＲＰＧモジュールをパラレルに並置するか、又は(2)よりパルスの発生頻度の高いＲＰＧモジュール（たとえ秒間数百回乃至１０００回以上のパルスを発生するもの）を使用することが考えられる。
【００１１】
大量の乱数を得るため、前述したように、複数個のＲＰＧモジュールをパラレルに並置した場合は、各ＲＰＧモジュールのパルス生成数にバラツキがある（現状±１７％程度有る）ため、そのバラツキを吸収し一様性を確保するためにはそれぞれのＲＰＧモジュール毎に補正する必要がある、またパルスの発生頻度の高いＲＰＧモジュールを使用する場合は、パルス同士の間隔を計測するマイコンチップ側のタイマー（カウンタ）機能の精度（分解能）に限界があるため、一定のパルス発生回数を超えると追随できず、一様な乱数を生成できない問題があった。
【００１２】
また、乱数の生成量はＲＰＧモジュールにおけるパルスの発生数に依存するが、ＲＰＧ素子から四方に放出される粒子等は、その全部がセンサによって受け取られるのではなく、たまたまセンサ（フォトダイオード）に衝突した分が受け取られ電気信号に変換されるにすぎない。従って、乱数の量を多くするため、できるだけ多くの粒子等を受け取るためには、センサ（フォトダイオード）のサイズを大きくする必要があるが、そうすれば、ＲＰＧモジュール全体のサイズが大きくなって、これを配置する基板におけるレイアウトが難しくなったり、また製品のデザイン上の制約となる。
【課題を解決するための手段】
【００１３】
本件出願人は、多量の乱数を得るために複数個のＲＰＧモジュールを使用する場合に、上述したような従来の問題点を解決するため、パルス間隔カウント差分方式及びパルス・ゲート方式と称する二つの方式を提供する。
【００１４】
本発明に係るパルス間隔カウント差分方式／方法は、複数個のランダムパルス発生器に対応して設けられた複数個のカウンタによって、その複数個のランダムパルス発生器にパルスが発生した後の経過時間をそれぞれカウントし、前記複数個のランダムパルス発生器の少なくとも一つにパルスが発生したとき、対応するカウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタのカウント値を読み取り、かつ、読み取った複数個のカウント値に基づいて乱数を出力することを特徴とする。
【００１５】
また同方式に係る乱数生成システムの別の実施形態では、ランダムパルス発生器から対応するカウンタにパルスが到来する度に、当該カウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタのカウント値を同時に読み取る。
【００１６】
また同方式に係る乱数生成システムの更に別の実施形態では、前記カウンタが、ランダム発生器からパルスが到来したときにリセットされ、その後の経過時間をカウントする。
【００１７】
本発明に係るパルス・ゲート方式に係る乱数生成システム／方法は、所要ビット数に応じて設けた複数個のランダムパルス発生器から入力されたパルスに応じてレジスタの複数ビットの値を反転させ、このレジスタの各ビットの値を所定のタイミングで読み取り、読み取ったデータに基づいて乱数を出力することを特徴とする。
【００１８】
また、同方式に係る乱数生成システム／方法の別の実施形態では、前記複数ビットのレジスタの値を、一定の周期でサンプリングして読み取る。
【００１９】
また、同方式に係る乱数生成システム／方の更に別の実施形態では、の値を、前記ランダムパルス発生器からパルスが前記レジスタの何れかのビットに入力するのに応じてサンプリングして読み取る。
【００２０】
本発明は、更に、ＲＰＧ素子から四方に放出される粒子等を、無駄なくできるだけ多く受け取るために、ランダムパルスを放出するコア部とそのコア部からのパルスを感知するセンサ部を有するランダムパルス発生デバイスであって、前記センサ部は複数個のセンサ素子を有し、その複数個のセンサ素子は、マトリクス状に配列されかつ互いが論理和となるように接続されたランダムパルス発生デバイスを提供する。
【００２１】
また、このランダムパルス発生デバイスでは、前記コア部と、前記複数個のセンサ素子からなるセンサ部とが、互いが一つのユニットとなるようにモジュール化されている。
【発明の効果】
【００２２】
本発明におけるパルス間隔カウント差分方式による乱数生成システム／方法では、複数個の乱数発生器の中の少なくとも一つにパルスが発生したとき、対応するカウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタのカウント値を読み取り、かつ、読み取った複数個のカウント値に基づいて乱数を出力する。このように、本発明では、いずれかのランダムパルス発生器にパルスが発生したとき、対応するカウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタがそれまでにカウントした値も含めて乱数としてしまうので、多量の乱数の生成が可能である。
【００２３】
また、あるランダムパルス発生器から対応するカウンタに次のパルスが到来するまでの期間に、他のカウンタがカウントするカウント値（具体的には、その間に発生したクロック・パルスの数）など予測が付かない。そのため、当該ランダムパルス発生器からのパルスがカウンタに到来したときにそのカウンタと他のカウンタとのカウント値に基づいて生成するパルスにおいても不規則性は維持される。
【００２４】
本発明に係るパルス・ゲート方式よる乱数生成システム／方法では、パルスの発生間隔が不定にさえなっていれば、間隔そのものを計測（カウント）しないので、従来の方法のように、タイマー（カウンタ）の機能の限界を考慮する必要はなく、多量にパルスを発生するＲＰＧモジュールでも追随できるため、結果的に多量の乱数を生成できる。また、多数のＲＰＧモジュールを使うことにより多量の乱数を得ようとする従来の方法の場合では、ＲＰＧモジュール間のバラツキを補正する必要があったが、本発明では、原理的にそのような補正を行う必要がない。
【００２５】
また本発明では、ＲＰＧモジュール等のコア部からの信号を感知するセンサ部が複数個のセンサ素子（フォトダイオード）を有し、その複数個のセンサ素子は、マトリクス状に配列されかつ互いが論理和となるように接続されているから、基板上の占有面積が小さくなるとともに、センサ素子（フォトダイオード）の表面積が拡大したのと同等の効果がえられ、コア部から放出されたパルスを効率よく感知することができるから、多量の乱数を得ることができる。また消費電力も小さくて済む。
【発明を実施するための最良の形態】
【００２６】
図１は、本発明の一実施形態に従う乱数生成システムを示すブロック図である。図示において、ランダムパルス発生器（ＲＰＧモジュール）（１ａ乃至１ｎ）は複数個あり、それぞれのランダムパルス発生器に対応してカウンタ（２ａ乃至２ｎ）も複数個設けられている。各カウンタは、対応するランダムパルス発生器にランダムパルスが発生した後の経過時間（クロック・パルス）をカウントする。より具体的には、ランダムパルス発生器で発生したパルスがカウンタに到来する度にカウンタをリセットさせ、リセットされた後の経過時間をカウントする。プロセッサ３は、これら複数個のカウンタを制御する機能を有し、複数個のカウンタ中の少なくとも一つにパルスが発生したとき、対応するカウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタのカウント値を読み取り、かつ、読み取った複数個のカウント値に基づいて乱数を出力する。より具体的には、制御手段は、ランダムパルス発生器から対応するカウンタにパルスが到来する度に、当該カウンタのカウント値を含め又は含めずにその対応するカウンタとは別の複数のカウンタのカウント値を同時に読み取り、かつ、読み取った複数個のカウンタのカウント値に基づいて乱数を出力する。以下、本発明による乱数の生成方式を、前述したパルス間隔カウント方式と区別するために、パルス間隔カウント差分方式と称する。
【００２７】
本発明のパルス間隔カウント差分方式による乱数生成システムおいては、前述したパルス間隔カウント方式と同様に、パルスからパルスまでの経過時間を計測するためのカウンタ機構を実装している。そのカウンタ機構の基本的な状態遷移は図２に示す通りである。即ち、待機状態（電源投入時、初期化時など）にあるカウンタにランダムパルスが到来するとリセットされ、クロック・パルスをカウントし始める（カウンタ加算）、そして次のランダムパルスが到来すると、またリセットされ、次のランダムパルスが来るまでクロックパスルをカウントする。本発明に係るシステムでは、カウンタをリセットする際に、その直前までのカウンタ値を乱数値と確定する。
【００２８】
本発明に係るパルス間隔カウント差分方式の乱数生成システムは、図１に示すようにＲＰＧモジュールを複数搭載し、同時に前述したカウンタ機構も対応するＲＰＧモジュールと一対となるよう複数搭載する。このままでは、単に従来のパルス間隔カウント方式を複数設けただけに過ぎないが、本発明では、独立して機能しているカウンタ機構において、互いのカウンタ値を参照する機能を与えることで、複数の乱数値を同時に得ることが可能となる。つまり、あるＲＰＧモジュールでランダムパルスが発生すると対応するカウンタをリセットするが、その際に、当該カウンタ機構のカウンタ値を含め又は含めずに当該カウンタとは別の複数のカウンタ機構が保持しているカウンタ値も取得して、これらを同時に発生した乱数値として確定する。
【００２９】
あるＲＰＧモジュールにおいて次のランダムパルスが発生するまでの期間内に、他のＲＰＧジュールにおいてカウントしたクロック・パルスのカウント数がいくつになるかは予測不能である。そのため、たとえカウンタの加算クロックの周期が全てのＲＰＧモジュールにおいて共通であったとしても、それぞれのカウンタにランダムパルスが到来してリセットされるタイミングは異なる。そのため、上記の方式で得たカウント値に基づき確定された数も、不規則性を持った乱数となる。
【００３０】
別言すれば、カウンタ用のクロックは、ＲＰＧモジュールに対応して設けられた複数のカウンタのいずれに対しても同じ周期で供給されるが、対応するＲＰＧモジュールから届く不定期なパルス（ランダムパルス）によって、それぞれのカウンタは不規則なタイミングでゼロクリア（リセット）される。そのため、それぞれのカウンタのカウント値はバラバラの値（乱数）を取ることになる。しかも、一つのＲＰＧモジュールからのパルスが対応するカウンタの到達したときは、他のモジュールの対応するカウンタ（複数）は進行中（計数中）であるため、その瞬間におけるカウンタ（複数）の値を取得すれば、それらは乱数値となる。
【００３１】
次に、本発明に係る乱数生成システムについて、図３のタイミングチャートを参照してその動作を説明する。この実施形態では、４個のＲＰＧモジュール（ＰＡ乃至ＰＤ）と４個のカウンタ機構（ＣＡ乃至ＣＤ）とがそれぞれ対となって搭載されている例を挙げる。
【００３２】
図３の時間ｔ０は、モジュールＰＡのランダムパルスが発生した瞬間の一つであって、このときカウンタＣＡは、前回のランダムパルスの到来からクロック・パルスを５個カウントしているので、カウント値６を呈する。即ち、従来のパルス間隔カウント方式に従って、カウンタＣＡから６という乱数を確定できる。同時にカウンタＣＢ、ＣＣ、ＣＤのそれぞれからも、２、１、３という乱数が確定できる。カウンタＣＡにランダムパルスが到来した時点でカウンタＣＡはリセットされ再びカウントが始まるが、カウンタＣＢ、ＣＣ、ＣＤにはランダムが発生したわけではないので、そのままカウントが継続される。
【００３３】
なお、上述の例では、ランダムパルスの到来したカウンタＣＡのカウント値を使用しているが、これを読み取らずに（使用しないで）乱数を生成することも可能である。実用的なアルゴリズムではこちらの方が簡単であるので採用されることが多いであろう。なお、図３のチャートにおいて、「使用しない」とあるのは、このような読み取らないパルス間を示す。
【００３４】
図３の時間ｔ１は、モジュールＰＤのランダムパルスが発生した瞬間の一つである。このときも、時間ｔ０のときと同様に各カウンタのカウント値を拾ってみると、カウンタＣＡ、ＣＢ、ＣＣ、ＣＤから順に３、５、４、６という乱数が確定できる。なおカウンタＣＤのカウント値は読み取らなくてもよい。
【００３５】
図３の時間ｔ２は、モジュールＰＣのランダムパルスが発生した瞬間の一つである。このときも、同様に各カウンタのカウント値を拾ってみると、カウンタＣＡ、ＣＢ、ＣＣ、ＣＤから順に２、４、３、５という乱数が確定できる。なおカウンタＣＣのカウント値は読み取らなくてもよい。
【００３６】
図３の時間ｔ３は、モジュールＰＢのランダムパルスが発生した瞬間の一つである。このときも、同様に各カウンタのカウント値を拾ってみると、カウンタＣＡ、ＣＢ、ＣＣ、ＣＤから順に１、３、３、２という乱数が確定できる。なおカウンタＣＢのカウント値は読み取らなくてもよい。
【００３７】
このように、本発明に係るパルス間隔カウント差分方式の乱数生成システムでは、いずれかのＲＰＧモジュールにおいてランダムパルスが発生したとき、そのモジュールに対応するカウンタのカウント値を含め又は含めずにそのモジュールとは別のモジュールに対応する複数のカウンタのカウント途中のカウント値も乱数として確定する。つまり、ある一つのＲＰＧモジュールにランダムパルスが発生するごとに、そのモジュールを含め又は含めずにその他のＲＰＧモジュールの数を合計した個数（この実施形態では４個又は３個）の乱数が得られる。そして、このような個数の乱数を得る機会は、搭載する各モジュールとカウンタの対の全てに存在する。
【００３８】
ところで、ＲＰＧモジュールにおけるパルスの秒間平均発生回数は決まっているので、それを仮に１０００ｃｐｓであったとすると、上述の実施形態（リセットされるカウンタのカウント値を使用しない場合）における「一秒間に得られる乱数の数は、「１パルスごとに得られる乱数の数（３）」×「搭載モジュール数（４）」×「平均パルス数（１０００）」＝１２０００バイト／秒となる。
【００３９】
以下に、同じ条件でＲＰＧモジュールの搭載数を４、８，１６，３２としたときの得られる乱数の数を表にすると、
【表１】
2009054075.tif 000003
【００４０】
なお、図示のタイミングチャートにおけるクロック・パルス周期は、図からパルスの数をカウントできる程度にしてあるが、実際には１０００ｃｐｓ平均の１パルス毎に６５５３６以上カウントできる周期が必要である。そこで、多少の余裕を考慮して１／１０００秒に６５５３６カウント以上、即ち１３３ＭＨｚ（７．５ｎｓ）が妥当である。
【００４１】
上記実施形態では、モジュールを追加すれば、平均パルス数も１０００ｃｐｓのままで、生成量を更に増加させることができる。表から明らかなように、搭載モジュールの数が２倍に増えれば、乱数の量は４倍以上に増える計算となる。
【００４２】
一時間は３６００秒であるから、モジュールの数が３２個の場合は一時間でおよそ３．５ギガバイト強の乱数が生成できる計算となる（夕方の５時から翌朝の９時までの１６時間かけて乱数を貯めたとすれば、５７ギガバイト強になる）。
【００４３】
このアルゴリズムの結果、通常は指数分布を示し乱数を得るのに指数変換が必要だが、今回のアルゴリズムは何らの変換及びその他の作業は必要とせずカウンタ値そのままの数字で一様性を確保できる。またこの傾向はＲＰＧの数量が増加すればするほど見られる傾向である。理由はＲＰＧが増加すればするほど各ＲＰＧのカウントの組み合わせの場合の数が∞に広がるためである。また実際のアルゴリズムは６５５３６(１６ｂｉｔ)を２５６（８ｂｉｔ）まで落としているが１６ｂｉｔの上位８ｂｉｔと下位８ｂｉｔを足して乱数を生成している。このことにより完璧に予測不可能な高速な真正乱数が生成される。
【００４４】
図４は、本発明に係る乱数生成システムの動作を示すフローチャートである。このシステムの動作は、所定のプログラムに従いプロセッサ３（図１）が制御する。
【００４５】
図示において、ＲＰＧｎのｎは、搭載するＲＰＧモジュールを区別する番号を示す。例えばＲＰＧモジュールを８個搭載しているのであれば、それぞれのＲＰＧモジュールはＲＰＧ０からＲＰＧ７によって表される。
【００４６】
ステップＳ１において、カウンタ用クロック（クロック・パルス）が発生していれば、ステップＳ２に進み、ＲＰＧｎに対応するカウンタがそのクロック・パルスをカウントアップしてステップＳ３に進む。ステップＳ１において、カウンタ用クロックが発生していなければ、ステップＳ２をスキップしてステップＳ３に進む。
【００４７】
ステップＳ３において、モジュールＲＰＧｎにランダムパルスが発生していれば、ステップＳ４に進み、対応するカウンタのカウント値を含め又は含めずにそのＲＰＧモジュールとは別の複数のＲＰＧモジュールに対応するカウンタのカウント値を取得し、これらの値を乱数として確定し、次いでステップＳ５でモジュールＲＰＧｎに対応するカウンタをリセットしカウント値を０にする。例えば、８個のモジュールＲＰＧ０乃至ＲＰＧ７を搭載していて、ＲＰＧ０にランダムパルスが発生したのであれば、ＲＰＧ０に対応するカウンタのカウント値を含め又は含めずにその対応するモジュールＲＰＧ０とは別の複数のモジュールＲＰＧ１乃至ＲＰＧ７の対応するカウンタ（７個）のカウント中のカウント値を取得して、これらの値を乱数として出力する。
【００４８】
ステップＳ３においてモジュールＲＰＧｎにランダムパルスが発生していなければ、ステップＳ１に戻り、対応するカウンタはクロック・パルスをカウントし続ける。
【００４９】
図８は、本発明に係る乱数生成システムの基本原理（以下、パルスゲート方式と称する）を説明する説明図である。この原理は、一個のＲＰＧモジュールの出力パルスの変化を乱数の１ビットの変化に見立て、複数のＲＰＧモジュールの出力パルスの変化の様子を周期的にサンプリングすることで乱数を得るものである。この方式／方法によれば、パルス発生頻度の多いＲＰＧモジュールでも、これに追随して真正乱数を生成することができる。
【００５０】
図示の例では、８個のＲＰＧモジュール１ａ乃至１ｈを、８ビットのゲート・レジスタのそれぞれのビットに一体一で割り当ててある。このゲート・レジスタの各ビット「＃０」乃至「＃７」は、ＲＰＧモジュールからパルスが到来するたびに０と１を反転させる。このようなゲート・レジスタは、フリップフロップ・ロジックで簡単に構築することができる。図示のゲート・レジスタには、常に８ビットのデータが存在していて、その内容が、到来するパルス次第で変化する。この８ビットのゲート・レジスタ（フリップフロップ）を周期的にサンプリングすることにより、ゲートの内容が読み出され、読み出されたデータが乱数を形成する。
【００５１】
このような原理に基づくシステムでは、フリップフロップをサンプリングした後から次のサンプリングをするまでの間に、８個あるＲＰＧモジュールのいずれか一つがパルスを発生していれば、前記二回のサンプリング結果は異なる。パルスの平均発生回数が多ければ多いほど、前回のサンプリングの結果から値が変化している可能性が高くなるので、サンプリングの周期を速くすることができ、その結果より多くの乱数が得られることになる。
【００５２】
また、乱数の１ビット当りのパルス発生間隔が指数関数的に変化するものであったとしても、本発明による乱数生成システムでは、８ビット全体としてみた場合、ただ変化しているか、いないかが乱数の源となっているから、このシステムで得られる乱数は最初から一様な乱数である。言い換えれば、従来方式では、パルス発生回数のバラツキを吸収し一様性を確保するために、ＲＰＧモジュールごとに補正を行う必要があったが、本発明のシステム／方法では、そのような補正をすることなく、一様性を確保した真正乱数の生成が可能である。
【００５３】
図９は、図８の例において、８ビットのゲート・レジスタ（フリップフロップ）の初期値が０であったと仮定し、ゲート・レジスタの各ビットに、当該ビットに割り当てられたＲＰＧモジュールからパルスが到来するたびに、そのビットの内容が反転する様子をシミュレートしたものである。各ビットに到来するパルスは、対応するＲＰＧモジュールで規則性なくバラバラに発生したものである。なお、図の最上段（初期）から、縦方向に時間が経過している。
【００５４】
図示において、「＃０」乃至「＃７」はゲート・レジスタの各ビットを示し、「ＲＰＧ＃１パルス」乃至「ＲＰＧ＃７パルス」は、それぞれのビットに対応するＲＰＧモジュールから到来するパルスを示す。各ビットの内容は、ＲＰＧモジュールからパルスが到来する度に反転する。この例では、ゲート・レジスタは４クロック周期でサンプリングされ、読み出された各ビットの内容が、ビット数分まとめて図の右側に示されている。パルスの発生タイミングが不定であるので、読み出されたデータは充分乱数となって、６バイト分の乱数が出力されている。パルスの発生回数が増加すれば、各ビットの変化量も増加する。
【００５５】
図９において、レジスタの各ビットの値は、一定の周期でサンプリングして読み取られているが、ランダムパルス発生器からパルスがレジスタの何れかのビットに入力するのに応じてサンプリングして読み取ってもよい。図示の例において、最上段から、パルスの発生タイミングを確認して、８ビットのレジスタのいずれか一つのビットにＲＰＧモジュールからパルスが到来していれば、そのときの横軸に該当する各ビットの値をサンプリングすると、その数は２０回確認できる。それ故、図示の例では、最大でバイトの乱数を得る可能性がある。
【００５６】
このように、本発明の場合のサンプリング周期は、従来方式が採用しているタイマーの周期よりも遥かに余裕があるため、パルスの発生回数の増加に比例して、より速い周期でサンプリングが可能であり、その結果、乱数の生成量をより増加させることができる。即ち、パルスの発生回数が２倍に増えれば、各ビットの変化量も２倍となるため、例示のもの半分の２クロック周期でサンプリングすることができ、結果として乱数の生成量も２倍となる。
【００５７】
図１０は、図９に示したシミュレーションのタイムチャートを示す。図の左側に、ゲートのビット「＃０」乃至「＃７」のそれぞれに到来するパルスを時系列で示し、右側には、パルスが到来するたびに各ビットの内容（値０か値１、パルスで示す）が反転する様子を示す。右図の最上段は、クロック・パルスＣＬＫで、この４クロック毎に、ビットの内容が読みだされ、読み出された内容が、右図の最下段に示す。これは、図９の右側に示すものと同じである。
【００５８】
図１１は、本発明にかかる乱数生成器をＰＣのＰＣＩ基板に適用した例である。
図示において、ＲＰＧユニット１は８個のＲＰＧ（ランダムパルス発生器）で構成され、ＲＰＧの各々で発生したパルスは、ビットパターン生成ユニット２に出力される。この実施形態では、ＲＰＧを８個使用するが、その数は乱数の桁の数に対応し、限定的ではない。
【００５９】
ビットパターン生成ユニット２は、この実施形態では、例えばフリップフロップ・ロジックで構成されたゲート・レジスタを含む。図１０に示すように、レジスタの各ビット「＃０」乃至「＃７」の内容は、ＲＰＧからパルスが到来する度に反転を繰り返す、即ち値１（Ｈｉｇｈレベル）から値０（Ｌｏｗレベル）に、またはその反対に変化する。このビットパターン生成ユニット２は、ランダムに生成するパルス列を、ランダムにＨｉｇｈレベルとＬｏｗレベルを変化させる矩形パルスに変換（波形整形）する手段として機能する。ゲート・レジスタは、サンプリングクロック生成ユニット３で生成されたクロック信号によってサンプリングされ（図示の例では、４クロック周期でサンプリングされる）、ビット「＃０」乃至「＃７」の値（０又は１）がデータ・バッファ４に蓄えられる。データ・バッファが一杯になったら、バス（ここではＰＣＩバス）５を介してＰＣ本体側に送られる。
【００６０】
図１２ａ、１２ｂは、こうした本発明の乱数生成器の動作を示すフローチャートである。ここでの動作は、ビットパターン生成ユニット２（ゲート・レジスタ）のビット毎に独立して行われる。図１２ａのステップＳ１において、対応するＲＰＧユニットでパルスが発生しているか否かが判断され、ＹＥＳであるならステップＳ２に進み、対応するゲート・レジスタのビット値の０／１を反転する。サンプリングクロック生成ユニット３では、図１２ｂのステップＳ３でクロック信号を生成し、ステップＳ４において、ゲート・レジスタを、クロック信号の所定のタイミングで（即ち、所定クロック数毎に）サンプリングし、取得したビット「＃０」乃至「＃７」の値（０又は１）をデータ・バッファ４に蓄える。次いで、データ・バッファが一杯になったら、ステップＳ５で、データ・バッファの内容（乱数となっている）がバス（ここではＰＣＩバス）を介してＰＣ本体側に送られる。なお、こうした一連の動作は、ＰＣ本体側にロードされた所定のプログラムに従い実行される。
【００６１】
図１３は、本発明にかかる乱数生成器をＵＳＢユニットに適用した例である。
基本的な構成は図１２ａ、１２ｂの例と同様であるが、データ・バッファ４に蓄積されたデータが、パラレル・シリアル変換ユニット６、ＵＳＢコントローラ７及びＵＳＢバス８を介しＰＣ本体側に送られる点が相違する。
【００６２】
次に、乱数の量を増大させる乱数生成システムに使用されるランダムパルス発生デバイスの実施形態を図１４に示す。この実施形態では、ＲＰＧで生成したランダムパルスをできるだけロスなく受け取るために、コア部から放出されたパルスを感知するセンサ部（フォトダイオード）を複数個のセンサ素子１０で構成し、その複数個のセンサ素子をマトリクス状に配列し、かつ互いが論理和となるように接続する。
【００６３】
また、コア部はＲＰＧ素子を含む溶液であって、この溶液を、複数個のセンサ素子をマトリクス状に配列したセンサ部の上を覆うように滴下し、コア部とセンサ部とを互いが一つのユニットとなるようにモジュール化する。こうすれば、ＲＰＧモジュールを配置する基板上の占有面積が小さくなるとともに、センサ素子（フォトダイオード）の表面積が拡大したのと同等の効果がえられ、コア部から放出された信号を効率よく感知することができるから、多量の乱数を得ることができ、また消費電力も小さくて済む。なお、図１４の左側は、コア部の溶液を滴下する前を示し、右側は溶液を滴下した後を示す。
【図面の簡単な説明】
【００６４】
【図１】本発明の一実施形態に従う乱数生成システムを示すブロック図である。
【図２】本発明に係る乱数生成システムで使用するカウンタの基本的な状態遷移を示す図である。
【図３】本発明に係る乱数生成システムの各部におけるタイミングを示す図である。
【図４】本発明に係る乱数生成システムの動作を示すフローチャートである。
【図５】一般的なランダムパルス発生器によって発生されるランダムパルスの例を示す図である。
【図６】一般的なランダムパルスの、経過時間に対する発生確率を示すグラフである。
【図７】対数変換のための変換表を作成する方法を示す参考図である。
【図８】本発明に係るパルス・ゲート方式による乱数生成システムの基本原理を説明する説明図である。
【図９】図８において、ゲート・レジスタの動作をシミュレーションするための図である。
【図１０】図９に示すシミュレーションのタイムチャートである。
【図１１】本発明にかかる乱数生成器をＰＣのＰＣＩ基板に適用した場合のブロック図である。
【図１２ａ】本発明に係る乱数生成器の動作を示すフローチャートである。
【図１２ｂ】本発明に係る乱数生成器の動作を示すフローチャートである。
【図１３】本発明にかかる乱数生成器をＰＣのＵＳＢユニットに適用した場合のブロック図である。
【図１４】乱数の量を増大させるためのランダムパルス発生デバイスの一実施形態を示す説明図である。
【図１】
2009054075.tif 000004
【図２】
2009054075.tif 000005
【図３】
2009054075.tif 000006
【図４】
2009054075.tif 000007
【図５】
2009054075.tif 000008
【図６】
2009054075.tif 000009
【図７】
2009054075.tif 000010
【図８】
2009054075.tif 000011
【図９】
2009054075.tif 000012
【図１０】
2009054075.tif 000013
【図１１】
2009054075.tif 000014
【図１２ａ】
2009054075.tif 000015
【図１２ｂ】
2009054075.tif 000016
【図１３】
2009054075.tif 000017
【図１４】
2009054075.tif 000018