説明

乱数検定方法及び乱数検定装置

本発明は、実質的に真正な乱数を生成する乱数生成装置が、故障や不正操作等によって真正な乱数を生成し得なくなったときに迅速にそのことを検出することができる乱数検定方法及び乱数検定装置を提供する。乱数検定1に係る乱数検定方法は、n種類の値がランダムに生成される乱数を検定する場合には、m個の値を取り出す乱数取得工程と、p回(0≦p<m)出現する値がn種類のうち何個あるかを数える計数工程と、計数工程で得られた個数を、予め決めてある第一の閾値と比較する比較工程と、比較工程の結果、第一の閾値を越えたときは、前記乱数に問題があると判定する判定工程とを含んでいる。

【発明の詳細な説明】
【技術分野】
本発明は、乱数生成装置から生成された値に基づいて、当該乱数生成装置の故障又は当該乱数生成装置に対する不正操作の可能性を検出する乱数検定方法及び乱数検定装置に関する。
【背景技術】
乱数を生成する方法としては、例えばコンピュータを利用してソフトウェア的に乱数を発生させたり、カウンタ等を利用して擬似的に乱数を生成させるという方法が従来から知られている。したがって、このような方法で生成された乱数は真性な乱数とはいえず、このようにして生成されたものがどの程度真の乱数に近いかを評価することができるだけであった。このような評価方法として、大型のコンピュータを利用して乱数として出力される多数の値を取得し、取得したそれぞれの値の出現分布を調べ、それに基づいて各値がどの程度均一に出現しているかを調べるという方法が知られている。しかしながら、このような評価方法を実行するためには、膨大な数の値を取得してその出現分布を調べなければならないため、評価結果が得られるまでに長時間を要する。
一方、各種のシミュレーション、例えば金融派生商品(デリバティブ)分野、建造物の強度シミュレーション分野、天気予報の分野、シミュレーションを利用した高度な遊技機などの分野において、乱数が広く利用され始めており、そして、これらの分野に利用される乱数生成装置には、極めて真性度の高い乱数を高速に発生することが要求される。このような要求を満たす乱数生成装置として、ランダムな自然現象を利用した乱数生成方法が提案された。
近年、このような自然現象を利用して乱数を生成する方法を実現する手段として、抵抗体、導体、半導体などの内部で起こる熱雑音に基づいて乱数を生成する乱数生成装置が知られるようになった。このような乱数生成装置は回路構成が比較的簡単なため、実質的に真性な乱数を種々の分野において簡便に利用できるようになることが期待されている。
ところで、このような乱数生成装置を工場で生産して出荷する場合には、出荷前にその装置が正常に動作しているかどうかを何らかの方法で検査する必要がある。また、このような乱数装置が種々の装置に搭載されたり、或いはICチップ化されてICカード等に組み込まれる場合には、出荷された後に故障が生じた場合、あるいは特定の値の出現頻度を意図的に上げたり下げたりという不正操作が行われた場合に、そのことを迅速に検出する方法あるいは手段が必要となる。しかしながら、生成される乱数が実質的に真性なものである場合に、故障や不正操作等の問題が起こったことを簡易かつ確実に検出する方法はこれまでのところ確立されていない。
本発明は、このような技術的背景のもとでなされたものであり、その目的は、実質的に真正な乱数を生成する乱数生成装置が、故障や不正操作等によって真正な乱数を生成し得なくなったときに、迅速かつ確実にそのことを検出することができる乱数検定方法及び乱数検定装置を提供することである。
【発明の開示】
乱数検定1では、n種類の値がランダムに生成される乱数を検定する場合において、まず、乱数生成装置等からm個の値を取り出し、このm個の値から、p回(0≦p<m)出現する値がn種類のうち何個あるかを数え、その結果得られた個数を、予め決めてある第一の閾値又は第二の閾値と比較し、この比較の結果第一の閾値を越えたとき又は第二の閾値を下回ったときに前記乱数に問題があると判定する。
乱数検定2では、n種類の値がランダムに生成される乱数を検定する場合において、所定数の値の取り出しを1ラウンドとし、1ラウンド当たりに同じ値が何回出現するかという出現回数ごとに、1ラウンドにおいて発生する個数の確からしい分布を予め用意しておき、実際に前記所定数のサンプリングを行ったときに、前記分布からはずれていたときは前記乱数に問題があると判定する。
乱数検定3では、一定時間内に生成する乱数値の個数が既知である乱数生成装置において、前記個数の前後における適切な個数を上限値及び下限値として設定し、前記乱数生成装置が前記一定時間に生成する乱数値の個数をモニターし、その個数が設定した上限値又は下限値を超えたときに乱数生成装置に問題が生じたと判定する。
【図面の簡単な説明】
図1(a)〜(d)は、乱数生成装置が実際に生成した8ビットの値(10進数では0から255までの256種類の値)を1024個連続してサンプリングして横軸に示した各値の出現回数をカウントし、そのカウント結果(出現回数)を縦軸にとって示したグラフであり、図1(e)は、乱数生成装置に対する1ラウンドのサンプリングを1000回実行して各値の出現回数を累積しその累積結果を1000で割って得られた、各値の1ラウンド当たりの平均出現回数である。
図2は、図1のグラフにおいて縦軸にとった出現回数を横軸にとり、その横軸のそれぞれの出現回数に対応する値の個数(256個のうち何個あるかという個数)を縦軸にとったグラフである。
図3は、1ラウンドのサンプリング(1024回のサンプリング)を10万回実行して、256種類の値のうちで1回も出現しない値の数(横軸)が10万ラウンドのうち何ラウンドだったか(縦軸)を示した分布である。
図4は、図3のグラフを、横軸のある値からそれよりも大きな値についてすべてを横軸方向に足し合わせて得られるグラフである。
図5は、「乱数検定1」に基づく乱数検定装置の主要部を示した回路図である。
図6は、「乱数検定1」に基づく乱数検定方法を、コンピュータにソフトウェア的に実行させるためのフローチャートの一例である。
図7は、1ラウンド1024回のサンプリングのうちで、256種類の値のうちのいずれかについて、同じ値が横軸に該当する回数だけ出現するラウンドが10万ラウンドについて何ラウンド(縦軸)あるかを示した分布である。
図8は、「乱数検定2」に基づく乱数検定装置の主要部を示した回路図である。
図9は、「乱数検定2」に基づく乱数検定方法を、コンピュータにソフトウェア的に実行させるための考え方を示したフローチャートの一例である。
図10は、「乱数検定3」を実現するための回路を示した回路図である。
【発明を実施するための最良の形態】
以下に、本発明に係る乱数検定方法及び乱数検定装置の実施の形態について説明する。本出願人は、2003年2月4日に日本国特許庁に提出した国際出願PCT/JP03/01100において、簡易な回路構成で実質的に真正な乱数を生成することができる乱数生成装置を提案した。このように実質的に真正な乱数を生成する乱数生成装置は、本発明に係る乱数検定方法及び乱数検定装置によって乱数検定を行う対象として好適である。ただし、本発明の方法及び装置の検定対象となる乱数生成装置は上記出願に記載されたものには限定されない。
つづいて本実施形態に係る乱数検定方法について説明する。以下では、2進数8ビットの値(10進数では0から255までの256種類の値)をランダムに生成する乱数生成装置に本発明を適用する場合について説明する。ただし、これはあくまでも一例であり、任意のビット数の値を生成する乱数生成装置について適用できることは言うまでもない。
図1(a)〜(d)の各グラフは、乱数生成装置が実際に生成した8ビットの値(10進数では0から255までの256種類の値)を1024個連続してサンプリングして横軸に示した各値の出現回数をカウントし、そのカウント結果(出現回数)を縦軸にとって示したグラフである。1024は256の4倍であるから、乱数生成装置の出力が正確な乱数であれば、0〜255の各値は平均4回出現するであろうことは直ちに分かる。以下では、乱数生成装置からこのように1024個の値を連続してサンプリングすることを「1ラウンド」とする。
図1(e)は、乱数生成装置に対する1ラウンドのサンプリングを1000回実行して各値の出現回数を累積しその累積結果を1000で割って得られた、各値の1ラウンド当たりの平均出現回数である。なお、実際には、1000回のサンプリング動作及び累積動作は、コンピュータに自動的に行わせている。
図1(e)の結果を見ると明らかなように、各値は1ラウンドあたり平均してほぼ4回出現していることが確かめられる。換言すると、平均の出現回数がこのように極めて4に近いことより、ここでサンプリングした乱数生成装置の出力が正確な乱数であるということができる。
[乱数検定1]
図2は、図1のグラフにおいて縦軸にとった出現回数を横軸にとり、その横軸のそれぞれの出現回数に対応する値の個数(256個のうち何個あるかという個数)を縦軸にとったグラフである(なお、縦軸に対数目盛りを用いている点に注意を要する)。言い換えると、図1(a)〜(d)のようなグラフにおいて、縦軸上の各値を横軸方向に加算していったときの結果を示している。すなわち、一回も出なかった値が何個か(図1の縦軸がゼロ、すなわち横軸上の黒丸の数が何個か)、1回出現した値が何個か、2回出現した値が何個か、3回出現した値が何個か、…、を数えて得られた分布である。ただし、実際には、1ラウンドのサンプリングを10万回繰り返して実行し(実際にはコンピュータに自動的にサンプリング動作を実行させる)、それらを累積し、それを10万で割って平均した値に基づいてプロットしている。
図2のグラフを具体的に見ると、例えば横軸が「0」のところでは、その縦軸の値は約「4.9」である。これは、一回も出現しない値の数が1ラウンドにつき平均して約4.9個であることを示している。実際に図1(a)〜(d)の各ラウンドについて一度も出現しない値の数を数えると、(a)では5個、(b)では6個、(c)では7個、(d)では4個となっており、これらを平均すると、一回も出現しない値の数は5.5個である。母集団が(a)〜(d)の四つと少ないにもかかわらず、この値は上記の「4.9」に非常に近い。
また、例えば曲線がピークとなる横軸「4」のところを見ると、その縦軸は約「50」である。これは、256種類の値のうち4回出現する値の数が1ラウンドにつき平均して約50個であることを示している。横軸「4」のところがピークであるという事実は、図1(e)の平均値が「4」であることに対応する。また、横軸が「10」のところを見ると、その縦軸の値は約1.4である。これは、10回出現する値の数が1ラウンドにつき平均して約1.4個であることを示している。一方、図2の横軸の各値についてその縦軸の値をすべて足し合わせると256となる。これは乱数として出力される値の種類が256種類であることに対応する。
図2に示した結果は、乱数生成装置が正確に乱数を出力しているときの分布である。乱数生成装置が故障したり、誰かが乱数生成装置に対して不正操作を行うなどして特定の値が出やすくなったり、出現頻度に偏りが生じるなどの問題が発生すると、その乱数生成装置の出力は図2に示した分布から外れる。すなわち、ある1ラウンドにおいて、256種類の値のうちのある特定の値の出現頻度だけが突出して高くなると、他の値の出現頻度は低くなる。したがって、特定の値に着目して図2の分布から外れたかどうかを監視することによって、乱数生成装置が適正に動作しているかどうかの検査、いわゆる乱数検定を行うことができる。これが、「乱数検定1」の基本原理である。
次に、この乱数検定についてより詳しく説明する。ここでは一例として、図2の横軸の値が「0」の場合に着目する。横軸が「0」とは、1ラウンド当たりのある値の出現回数がゼロ回ということであり、そのときの縦軸は、出現回数がゼロ回である値の最も確からしい個数(約4.9個)を表している。仮に、乱数生成装置に問題が生じ、特定の値の出現頻度が突出して高くなったとすると、出現回数がゼロ回である値の個数は、この4.9個を越えて大幅に増えるはずである。そこで、例えば1ラウンドのサンプリングを行って、一度も出現しない値の数を数え、それが「4.9」よりも大きい予め定めた値と比較し、これを越えていれば、その乱数生成装置に問題が発生したと判定することができる。
その一方で、乱数はいろいろな値がランダムに発生するものであるから、統計的なばらつきは常に存在し、乱数生成装置が正常に動作していても、ある特定の1ラウンドだけをみた時に、一度も出現しない値の数が4.9よりも大きくなることは当然にありうる。そのような場合に、4.9からあまり大きくない値を設定してしまうと、一度も出現しない値の数がこれを越えたからといって問題があると判定したとすると、正常に動作しているものまで問題ありと判定してしまう可能性が高くなる。
そこで、どのくらい大きくなったときに不都合が生じたと判定するかを決める理論的な指針について説明する。図3は、1ラウンドのサンプリング(1024回のサンプリング)を10万回実行して、256種類の値のうちで1回も出現しない値の数(横軸)が10万ラウンドのうち何ラウンドだったか(縦軸)を示した分布である。たとえば、横軸の値が「4」のところをみると、縦軸の値は約19000であるが、これは、1回も出現しない値の数が4個である場合の頻度が10万回につき約19000回であることを示している。この分布のピークは、横軸がほぼ4.9のところにあり、この事実は図2の横軸がゼロのときの縦軸の値が約4.9であることに対応する。これは、前述のように、図3のグラフが図2のグラフにおいて、横軸が「0」、すなわち図2のグラフの縦軸のところに着目しているためである。
なお、図2のグラフにおいて横軸が「0」でないところに着目しても、図3と同様のグラフを描くことができ、その場合であっても以下の議論が当てはまる点に注意すべきである。例えば、図2のグラフの横軸が「10」、すなわち「10回」のところに着目して図3のようなグラフを描いたとすると、そのグラフは、256種類の値のうちで10回出現する値の数の出現頻度分布となる。その分布を示すグラフの形は、図2のグラフから予想することができ、横軸が約「1.5」のあたりがピークとなる曲線になる。
さらに、図2のグラフの横軸「8」に着目すると、8回出願する値の数の出現頻度分布が得られ、そのグラフは横軸が「7.5」のあたりがピークとなる曲線となる。ちなみに、図1(a)のグラフでは、8回出現する値の数は9個、(b)のグラフでは6個、(c)のグラフでは9個、(d)のグラフでは5個となっている。このことからも、平均が7.5個くらいという事実の妥当性が直感的に理解できる。
図4は、図3のグラフを、横軸のある値からそれよりも大きな値についてすべてを横軸方向に足し合わせて得られるグラフである。すなわち、このグラフは、10万ラウンドのうちで、256種類の値のうち1サンプルも出現しなかった値の数が横軸の個数以上となるラウンドの数を示している。
例えば、横軸が「0」のところをみると、その縦軸は10万である。これは、すべてのラウンドにおいて1サンプルも出現しなかった値の数は0個以上であるという当然の結果を示している。また、横軸が「5」のところをみると、その縦軸は約「50000」である。これは、1サンプルも出現しなかった値の数が256種類の値のうち5個以上であるラウンドが、10万ラウンド中約「50000」ラウンドの割合であることを示している。さらに、図4の横軸が「15」のところをみると、その縦軸は「2」である。これは、1サンプルも出現しなかった値の数が256種類の値のうち15個以上であるラウンドが、10万ラウンド中「2」ラウンドの割合であることを示している。
このことは、検定の結果1サンプルも出現しなかった値の数が256種類の値のうち例えば15個以上だったのでその乱数生成装置に問題があると判定した場合に、その乱数生成装置には実際には問題が発生していない場合の確率が10万分の2であることを意味する。すなわち、乱数生成装置の製造工場において乱数生成装置(例えばIC化された乱数生成装置)を10万個製造し、ひとつひとつについて1ラウンド分の値(1024個)をサンプリングして、256種類の値のうち1サンプルも出現しなかった値の数が「15」以上の場合にそれを不良品と判定することにした場合には、実際には良品であるものを不良品と判定する危険率が10万分の2となる。これは、このように小さい値であるから、1サンプルも出なかった値の数が15個以上出たからそれを不良品とすることは極めて妥当であることを示しているとも言える。
この場合に、もし、不良品検出についてより高い精度を必要とする場合には、不良品と判定する閾値を「15」よりも小さくし、例えば「10」とすれば、良品を多少犠牲にする確率は高まるが、不良品を出荷する危険性をより低くすることができる。このように、本実施形態によれば、不良品とする閾値をどのくらいの値とするのが適切であるかを理論的に決定することができる。
さらに、上述の検定方法を同じ乱数生成ICに対して例えば2回続けて行ったとすると、その2回について、1サンプルも出なかった値の数が「15」個以上となる確率は10万分の2のさらに2乗という極めてゼロに近い確率となり、現実にはほとんどあり得ない。したがって、1サンプルも出現しなかった値の数が「15」個以上だったものについてもう一度同じ検定を行い、やはり同じく15個以上だったとすれば、それはほぼ間違いなく問題ありと言うことができ、判定の確実性をより高めることができる。
また、上記では、一度も出現しなかった値の個数に着目した場合について説明したが、乱数検定1はこのような場合には限られず、任意の回数(例えばp回)出現する値の個数に着目し、その個数について適切な閾値を設定し、これを越えた場合、あるいはこれを下回った場合に乱数に問題があると判定するという構成とすることも可能である。
この乱数検定1は、真正な乱数の基本的性質に着目した点を特徴とする。したがって、この検定方法は、前述の国際出願PCT/JP03/01100に記載されているような、実質的に真正な乱数を生成することのできる乱数生成装置に適用することで、より有益な結果が得られる。
図5は、上で述べた「乱数検定1」の考え方に基づいて、ハードウェア的に構成した乱数検定装置の主要部を示した回路図である。図5において、乱数発生器10はここでの乱数検定の対象となるもので、ここでは2進数8ビットの乱数を出力するものとする。
乱数発生器10は、8ビットの乱数を出力するとともに、一つの乱数を発生するたびにストローブ信号を出力する。このストローブ信号はカウンタ30へ供給され、これをインクリメントする。カウンタ30は1ラウンド分の1024回のサンプリング動作をカウントするためのもので、1024カウントまでインクリメントされると、次に入来するストローブ信号によってリセットされ、それと同時にキャリィ号を出力する。
乱数発生器10から出力された8ビットのランダムな2進数はデコーダ11に供給され、ここで256種類の整数値(0から255まで)のうちのいずれかにデコードされる。デコーダ11の256個の出力ラインは、同じく256個設けられている8ビットのカウンタ12〜12255のうち対応するものの入力に接続されている。デコーダ11においてデコードされた値は、その値に対応する出力ラインから論理値「1」として出力され、対応するカウンタへ供給されて当該カウンタをインクリメントする。
各カウンタ12〜12255からの8ビット出力は、対応する8入力論理和回路(OR回路)13〜13255に供給される。この8入力論理和回路13〜13255は、その8ビットすべてが論理値「0」の場合のみ、その出力が論理値「0」となり、それ以外の場合、すなわち8ビットの入力のうち1つでも論理値「1」がある場合は、その出力が論理値「1」となる。その結果、256種類のうちで一度も出現しなかった値に対応する8入力論理和回路の出力のみが、論理値「0」となる。8入力論理和回路13〜13255の論理出力は、対応するインバータ14〜14255によって反転され、256ビットシフトレジスタに供給される。したがって、256ビットシフトレジスタの256個の入力のうち、一度も出現しなかった値に対応した入力だけに論理値「1」が立つ。この論理値「1」が立った入力の数は、1ラウンド1024回のサンプリングのうち一度も出現しなかった値の数に対応する。
1ラウンド分のサンプリングが終了して前述のキャリィ信号が発せられると、この信号はデータロード信号としてシフトレジスタ15に供給される。この信号に同期して、シフトレジスタ15はそのときのすべての入力の値を取り込む。
なお、このキャリィ信号は、遅延回路16を経てカウンタリセット信号となり、各カウンタ12〜12255へも供給される。これにより、これらのカウンタはカウント値ゼロにリセットされる。遅延回路16を設けたのは、シフトレジスタ15がカウンタ12〜12255のカウント値を取り込む前にリセットされるのを防ぐためである。
続いて、シフトレジスタ15のシフト動作を実行する。このシフト動作は、前述のキャリィ信号が遅延回路16を経てスタート信号となり、これがカウンタのスタート/ストップ回路18に供給されることによって開始される。すなわち、スタート信号がスタート/ストップ回路18に供給されると、256カウントのカウンタ21が、クロック19から供給されるクロック信号をカウントする。
シフトレジスタ15は、クロック19からのクロック信号がインバータ20によって反転されたシフトクロックが入来するたびに、保持している256ビットのデータを1ビットずつ右側にシフトさせるとともに、最も右側のデータ(最初はインバータ14255の論理値)をシフトレジスタ出力から論理積回路23の一方の入力へ供給する。論理積回路23のもう一方の入力には、クロック19からのクロック信号(論理値「1」)が供給される。したがって、論理積回路23の出力には、シフトレジスタ15の出力がそのまま現れる。カウンタ24は、この論理積回路23の出力が論理値「1」となったときにインクリメントされる。256回のシフト動作が終了した時点におけるカウンタ24のカウント値は、前述のデータロード信号がシフトレジスタ15に供給された時点で取り込まれた256ビットのデータの中に含まれる論理値「1」の数に対応し、これは1ラウンド1024回のサンプリングのうちで、一度も出現しなかった値の個数を表している。
カウンタ21は、クロック19からのクロック信号を256までカウントするとキャリィ信号を出力する。このキャリィ信号は、カウンタスタート/ストップ回路18に供給されるとともに、遅延回路22を介してカウンタ24に供給される。カウンタスタート/ストップ回路18は、このキャリィ信号を受け取るとストップ信号を出力する。このストップ信号がカウンタ21に供給されると、カウンタ21はカウント動作を停止する。また、遅延回路22を経たキャリィ信号がカウンタ24に供給されると、カウンタ24はリセットされる。これより、一度も出現しなかった値の数のカウント動作は終了する。
閾値レジスタ25には、一例として「15」という閾値が設定されている。コンパレータ26は、カウンタ24のカウント値を閾値レジスタ25に設定されている値と比較しており、カウント値がこの設定値「15」に達すると、その時点で、ウォーニング(警告)信号を発する。
このウォーニングを常時モニターし、ウォーニング信号が発せられたときは、これを検出することによって乱数発生器10に何らかの問題が生じた可能性が極めて高いことを知ることができる。図5に示した回路は、以上説明した動作を繰り返し実行し、乱数生成器10から出力される乱数を常時検定している。
図6は、上で述べた「乱数検定1」の方法をコンピュータにソフトウェア的に実行させるためのフローチャートの一例である。ここでも、検定の対象となる乱数生成装置は、8ビットの乱数を生成するものとして説明するが、これはあくまでも一例であることは言うまでもない。
まず、予め用意されているカウンタをリセットする(ステップ10)。続いて、乱数として出力される8ビットの値を取得し(ステップ11)、0から255までの256種類の値に対応して設けられた256個のカウンタのうち、取得した乱数値に対応するカウンタをインクリメントする(ステップ12)。このような動作を1ラウンド1024サンプル分実行する(ステップ13、14)。そして、この時点で256個のカウンタのうちで、カウント値が「0」であるものの個数を、別のカウンタをインクリメントしながら数える(ステップ15)。そして、最終的なこのカウンタのカウント値を「15」と比較し(ステップ16)、15よりも小さければ乱数生成装置は問題なしと判定し、15以上であれば、乱数生成装置に何らかの問題があると判定して、NG信号(警告信号)を発する(ステップ17)。
[乱数検定2]
次に、乱数検定2について説明する。図7は、1ラウンド1024回のサンプリングのうちで、256種類の値のうちのいずれかについて、同じ値が横軸に該当する回数だけ出現するラウンドが10万ラウンドについて何ラウンド(縦軸)あるかを示した分布である。ただし、横軸が10以上の部分のみを示してある。例えば、図7で横軸が「10」のところ(すなわち縦軸上)を見ると、そのときの縦軸の値は約「75000」となっている。これは、1ラウンド1024回のサンプリングのうちで同じ値が10回出現するラウンドが、10万ラウンド当たり約75000ラウンド現れることを示している。ちなみに、図1(a)〜(d)に示した4ラウンドを見ると、(a)では10サンプルが同じ値となる値が3個あり、(b)ではゼロ個であり、(c)では1個あり、(d)では1個ある。したがって、同じ値が10回出現するラウンドは、4ラウンド中3ラウンドである。
これは言い換えると、1ラウンドだけを見たときに、そのラウンドで同じ値が10回出現する確率が約4分の3であることを示している。
また、図7で横軸が「11」のところを見ると、そのときの縦軸の値は約「40000」となっている。これは、同じ値が11回出現するラウンドが、10万ラウンド当たり約40000ラウンド現れることを示している。したがって、1ラウンドでは同じ値が11回出現する確率は約5分の2である。ちなみに、図1(a)〜(d)の4ラウンドでは、(a)では11サンプルが同じ値となる値がゼロ個であり、(b)では1個あり、(c)ではゼロ個であり、(d)では3個あり、11サンプルが同じ値となる場合のあるラウンドは、4ラウンド中2ラウンドであった。
更に、図7で横軸が「19」のところを見ると、そのときの縦軸の値は「2」となっている。これは、同じ値が19回出現するラウンドが、10万ラウンド当たり2ラウンド現れることを示している。言い換えると、1ラウンドについて同じ値が19回出現する確率は10万分の2、すなわち0.002%と非常に少ない。ちなみに、図1(a)〜(d)に示した4ラウンドを見ると、同じ値が19回出現するラウンドは一つもない。
以上のことから、1ラウンド中に同じ値が出現する確率は、その出現回数が多くなるに従って急激に低下することが分かる。このため、例えば1ラウンド分のサンプリングを行った結果、特定の値の出現回数が突出して多かったとすれば、乱数生成装置に不正操作或いは故障等による何らかの問題が生じた可能性が高いと言えるので、このことを利用して乱数検定を行うことができる。すなわち、予め回数についてある閾値を設定しておき、256種類のうちのいずれかの値がこの閾値を越える回数出現したら、その乱数生成装置に問題が生じていると判定する。
ただし、乱数生成装置が正常に動作していても、統計的なばらつきがあるため、ある特定の1ラウンドだけをみた時に特定の値が多数回出現することも可能性としてありうる。したがって、この閾値が低すぎると、問題のある乱数生成装置を排除する確実性は高まるが、問題のない乱数生成装置まで排除してしまう可能性が高くなる。一方、この閾値が高すぎると、問題のない乱数生成装置を排除する可能性は低くなるが、問題のある乱数生成装置を排除する確実性は低下する。このため、その乱数生成装置の用途などを考慮し、問題のある乱数生成装置をどの程度の確実性で排除したいかによって、設定すべき閾値を決める必要がある。
一例として、「19回」(図7の横軸「19」のところ)を閾値として設定したとすると、乱数が正常に生成されている場合に1ラウンド中に同じ値が19サンプル以上出現する確率は、前述のように10万分の2である。これは、この判定方法を用いて乱数生成装置の検定を行ったときに、乱数生成装置10万個当たりにつき2個の割合で、問題のない乱数生成装置を問題ありと判定する可能性があることを意味する。
この場合、この検定方法を同じ乱数生成装置に対して例えば2回続けて行ったとすれば、続けて同じ数が19回出る確率は10万分の2の2乗という極めてゼロに近い値であり、現実にはこのようなことはあり得ないと考えることができる。したがって、いずれかの値が19回以上出現したものについて、もう一度同じ検定を行って、やっぱりいずれかの値が19回以上出現したとすれば、それは問題が生じていると判定することができる。
この判定方法は、乱数生成装置の工場出荷時における検定(工場検定)に適用することができる他、この乱数検定の方法をソフトウェア的又はハードウェア的に実現した回路を乱数生成装置に付加し、その乱数生成装置を動作させているときに常に乱数検定を実行するという用途に適用することができる。
この乱数検定2も、真正な乱数の基本的性質に着目した点を特徴としている。したがって、前述の国際出願PCT/JP03/01100に記載されているような、実質的に真正な乱数を生成することのできる乱数生成装置に適用することで、より有益な結果が得られる。
図8は、上で述べた「乱数検定2」の考え方に基づいて、ハードウェア的に構成した乱数検定装置の主要部を示した回路図である。図8において、乱数発生器40はここでの乱数検定の対象となるもので、ここでも図5の乱数発生器10と同様に2進数8ビットの乱数を出力するものとする。
乱数発生器40は、8ビットの乱数を出力するとともに、一つの乱数を発生するたびにストローブ信号を出力する。このストローブ信号はカウンタ50へ供給され、これをインクリメントする。カウンタ50は1ラウンド分の1024サンプルをカウントするためのもので、1024カウントまでインクリメントされると、次に入来するストローブ信号によってリセットされ、それと同時にキャリィ信号を出力する。
乱数発生器40から出力された8ビットのランダムな2進数はデコーダ41に供給され、ここで256種類の整数値(0から255まで)のうちのいずれかにデコードされる。デコーダ41の256個の出力ラインは、同じく256個設けられている8ビットのカウンタ42〜42255のうちで対応するものの入力に接続されている。デコーダ41においてデコードされた値は、その値に対応する出力から論理値「1」として出力され、対応するカウンタへ供給されて当該カウンタをインクリメントする。したがって、1ラウンドのサンプル動作が終了した時点におけるこれらのカウンタのカウント値は、0から255までのうち対応する値が何回出現したか示している。
各カウンタ42〜42255からの8ビットの出力は、コンパレータ43〜43255のうち対応するものに供給される。各コンパレータ43〜43255は、対応するカウンタから供給された値を、レジスタ44に予め設定されている閾値と比較する。ここでは、レジスタ44には予め閾値「19」が設定されているとする。この閾値は、前述のように、ランダムに生成される256種類の値のうちのいずれかがこれ以上の回数出現したときに検査対象の乱数生成装置に問題が生じたと判定するためのものである。
コンパレータ42〜42255の出力は通常は論理値「0」であるが、対応するカウンタから出力される値がレジスタ44に設定されている「19」以上のときに「1」となる。コンパレータ42〜42255の出力は256入力の論理和回路45の対応する入力に供給される。したがって、256個のコンパレータのうち論理値が「1」となるものが一つでもあれば、論理和回路45の出力は論理値「1」となり、これをウォーニング(警告)信号とする。
前述のウォーニング信号を常時モニターし、ウォーニング信号が発せられたときは、これを検出することによって乱数発生器40に何らかの問題が生じた可能性が高いことを知ることができる。図8に示した回路は、以上説明した動作を繰り返し実行し、乱数生成器10から出力される乱数を常時検定している。なお、1ラウンド分のサンプリングが終了して前述のキャリィ信号が発せられると、この信号は各カウンタ42〜42255へ供給される。これにより、これらのカウンタはカウント値ゼロにリセットされる。
図9は、上で述べた「乱数検定2」の方法をソフトウェア的に実現するための考え方を示したフローチャートである。ここでも、検定の対象となる乱数生成装置は、8ビットの乱数を生成するものとして説明するが、これはあくまでも一例である。
まず、予め用意されているカウンタをリセットする(ステップ20)。続いて、乱数として出力される8ビットの値を取得し(ステップ21)、0から255までの256種類の値に対応して設けられた256個のカウンタのうち、取得した乱数値に対応するカウンタをインクリメントする(ステップ22)。このような動作を1ラウンド1024サンプル分実行する(ステップ23、24)。そして、この時点で256個のカウンタのカウント値のうちで最大のものをサーチし(ステップ25)、その最大カウント値を予め設定してある値「19」と比較し(ステップ26)、この最大カウント値が「19」よりも小さければ乱数生成装置は問題なしと判定し、「19」以上であれば、乱数生成装置に何らかの問題があると判定して、NG信号(警告信号)を発する(ステップ27)。
[乱数検定3]
次に乱数検定3について説明する。乱数生成装置、その中でも特に熱雑音素子からの熱雑音に基づいて乱数を生成する乱数生成装置は、その回路定数や、波形成形回路の閾値の設定の仕方によって、単位時間当たりに生成する乱数値の個数は、平均値を中心として一定の分散値を持ったガウス分布を示す。すなわち、一定時間当たりに生成される乱数値の個数は必ずしも一定ではないが、大体において一定の幅の中に収まることが分かっている。
しかしながら、もしも乱数生成装置に対して不正操作が行われたり、或いは故障等が発生するといった何らかの問題が生じたとすると、単位時間当たりに生成される乱数値の個数が大きく変動する可能性が高い。例えば、1秒間に生成する乱数値が平均1万個で、かつ、どのような場合でも1秒間に10000±1000個の範囲にほとんど収まることが分かっている乱数生成装置において、1秒間に20000個の乱数値が生成されたり、あるいは5000個しか生成されなかったりすれば、その乱数生成装置に何らかの問題が生じた可能性が極めて高い。
そこで、予め正常な乱数生成装置が一定時間(例えば1秒間)に生成する乱数値の個数を調べておき、その前後における適切な個数を上限値及び下限値として設定し、その乱数生成装置が上記一定時間に生成する乱数値の個数を常時モニターし、その個数が設定した上限値又は下限値を超えた場合に乱数生成装置に何らかの問題が生じたと判定することができる。これが「乱数検定3」の基本原理である。
図10は、この乱数検定3を実現するための回路を示した回路図である。乱数発生器60は、8ビットの乱数値を出力するとともに、一つの乱数値を発生するたびにストローブ信号を出力する。このストローブ信号はカウンタ61へ供給され、カウンタ61のカウント値をインクリメントする。カウンタ61に接続されているタイマ62は、クロック信号をカウントして一定の時間間隔を生成し、この時間間隔ごとにカウンタ61に対して信号を送出する。この信号がタイマ62からカウンタ61に送出されると、カウンタ61のその時点でのカウント値がカウンタ値転送レジスタ63に転送され、格納される。
一方、上限値レジスタ64及び下限値レジスタ65には、予め、乱数生成器60の特性を考慮し決められた上限値及び下限値が設定してある。これらのうち上限値はコンパレータ661の一方の入力に供給され、下限値はコンパレータ662の一方の入力に供給される。また、カウンタ値転送レジスタ63に格納されたカウント値は、コンパレータ66及び66にそれぞれに入力される。コンパレータ66は、入力されたカウント値が上限値を上回ったときに論理値「1」を出力し、コンパレータ66はカウント値が下限値を下回ったときに論理値「1」を出力する。各コンパレータの出力はそれぞれが2入力論理和回路67の入力となって、その出力はウォーニング(警告)信号となる。したがって、二つのコンパレータ66、66の何れかの出力が「1」となったときにウォーニングが発せられ、これより、乱数生成器に問題が生じた可能性が高いことを知ることができる。
以上、乱数検定1、2、3について説明したが、これらを個別に乱数生成装置に適用できることは勿論、これらのうちの二つ又は三つを組み合わせて乱数生成装置に適用することも可能である。
【産業上の利用可能性】
本発明に係る乱数検定方法によれば、実質的に真正な乱数を生成する乱数生成装置が故障や不正操作等によって真正な乱数を生成し得なくなったときに、迅速かつ確実にそのことを検出することができる。また、この方法に基づいた本発明に係る乱数検定装置は、比較的簡易な回路構成で実現することができる。このため、本発明に係る乱数検定方法及び乱数検定装置を、乱数生成装置を製造する工場における出荷時の検査等に適用できるほか、例えば集積回路化された乱数生成装置に本発明に係る乱数検定装置を付随させ、あるいはこれに組み込んでおき、乱数生成装置を出荷したあと実際に稼働させる際に、常時乱数検定を実行するといった利用も可能となる。このため、これまでにない広い範囲で乱数検定を実行することが可能となる。
【図1】

【図2】

【図3】

【図4】

【図5】

【図6】

【図7】

【図8】

【図9】

【図10】


【特許請求の範囲】
【請求項1】
n種類の値がランダムに生成される乱数を検定する乱数検定方法であって、
m個の値を取り出す乱数取得工程と、
p回(0≦p<m)出現する値がn種類のうち何個あるかを数える計数工程と、
計数工程で得られた個数を、予め決めてある第一の閾値と比較する比較工程と、
比較工程の結果、第一の閾値を越えたときは、前記乱数に問題があると判定する判定工程と、
を含んでなることを特徴とする乱数検定方法。
【請求項2】
n種類の値がランダムに生成される乱数を検定する乱数検定方法であって、
m個の値を取り出す乱数取得工程と、
p回(0≦p<m)出現する値がn種類のうち何個あるかを数える計数工程と、
計数工程で得られた個数を、予め決めてある第二の閾値と比較する比較工程と、
比較工程の結果、第二の閾値を下回ったときは、前記乱数に問題があると判定する判定工程と、
を含んでなることを特徴とする乱数検定方法。
【請求項3】
n種類の値をランダムに生成する乱数生成装置のための乱数検定装置であって、
m個の値を取り出す乱数取得部と、
m個の値をn種類の値に分類し、各値ごとにその値が何個出現したかをカウントする個別値カウント部と、
前記個別カウント部のカウント結果に基づいて、p回(0≦p<m)出現する値がn種類の値のうち何個あるかを数える特定回数出現値カウント部と、
特定回数出現値カウント部で得られた個数を予め決められた第一の閾値と比較し、当該第一の閾値を越えたときは前記乱数生成装置に問題があると判定する判定部と、
を含んでなることを特徴とする乱数検定装置。
【請求項4】
n種類の値をランダムに生成する乱数生成装置のための乱数検定装置であって、
m個の値を取り出す乱数取得部と、
m個の値をn種類の値に分類し、各値ごとにその値が何個出現したかをカウントする個別値カウント部と、
前記個別カウント部のカウント結果に基づいて、p回(0≦p<m)出現する値がn種類の値のうち何個あるかを数える特定回数出現値カウント部と、
特定回数出現値カウント部で得られた個数を予め決められた第二の閾値と比較し、当該第二の閾値を下回ったときは前記乱数生成装置に問題があると判定する判定部と、
を含んでなることを特徴とする乱数検定装置。
【請求項5】
前記乱数生成装置は2進数qビット(2=n)のn種類の値を生成するものであり、
前記乱数取得部は、前記乱数生成装置からのqビットの信号として得られた2進数をn種類にデコードするデコーダからなり、
前記個別値カウント部は、前記デコーダによってデコードされたデコード信号をカウントするn個のカウンタからなり、
前記特定回数出現値カウント部はnビットシフトレジスタと、当該nビットシフトレジスタの出力信号に接続されたカウンタとを含んで構成され、
前記判定部は、前記第一又は第二の閾値が格納されたレジスタと、前記特定回数出現カウント部のカウンタ出力と前記閾値とを比較するコンパレータを含んでなる請求項3又は4に記載の乱数検定装置。
【請求項6】
n種類の値がランダムに生成される乱数を検定する乱数検定方法であって、所定数の値の取り出しを1ラウンドとし、1ラウンド当たりに同じ値が何回出現するかという出現回数ごとに、1ラウンドにおいて発生する個数の確からしい分布を予め用意しておき、実際に前記所定数のサンプリングを行ったときに、前記分布からはずれていたときは前記乱数に問題があると判定することを特徴とする乱数検定方法。
【請求項7】
前記分布のうち予め特定の出現回数に着目し、その出現回数について1ラウンドにおいて発生する値の個数が、前記分布に基づいて定めた第一の閾値を越えたか、又は第2の閾値を下回ったかに基づいて、前記分布から外れたと判定するものである請求項6に記載の乱数検定方法。
【請求項8】
n種類の値をランダムに生成する乱数生成装置のための乱数検定装置であって、
m個の値を取り出す乱数取得部と、
m個の値をn種類の値に分類し、各値ごとにその値の出現回数をカウントする個別値カウント部と、
前記個別値カウント部における各値の出現回数を、予め決められた閾値と比較し、当該閾値を上回ったときは、前記乱数生成装置に問題があると判定する判定部と、
を含んでなることを特徴とする乱数検定装置。
【請求項9】
前記乱数生成装置は2進数qビット(2=n)のn種類の値を生成するものであり、
前記乱数取得部は、前記乱数生成装置からのqビットの信号として得られた2進数をn種類にデコードするデコーダからなり、
前記個別値カウント部は、前記デコーダによってデコードされたデコード信号をカウントするn個のカウンタからなり、
前記判定部は、前記個別値カウント部のn個のカウンタの出力値と前記閾値とを比較するコンパレータを含んでなる請求項8に記載の乱数検定装置。
【請求項10】
一定時間内に生成する乱数値の個数が既知である乱数生成装置のための乱数検定方法であって、前記個数の前後における適切な個数を上限値及び下限値として設定し、前記乱数生成装置が前記一定時間に生成する乱数値の個数をモニターし、その個数が設定した上限値又は下限値を超えたときに乱数生成装置に問題が生じたと判定することを特徴とする乱数検定方法。
【請求項11】
一定時間内に生成する乱数値の個数が既知である乱数生成装置のための乱数検定装置であって、
前記乱数生成装置から生成される乱数値をカウントするカウント部と、
前記カウント部がカウント動作を行う前記一定時間を生成する計時部と、
前記計時部よって生成される前記一定時間内に前記カウント手段がカウントした前記乱数生成装置から生成される乱数値の個数を予め設定されている上限値及び下限値と比較し、当該上限値又は下限値を超えたときにその旨の信号を出力する判定部と、
を含んでなることを特徴とする乱数検定装置。

【国際公開番号】WO2004/081786
【国際公開日】平成16年9月23日(2004.9.23)
【発行日】平成18年6月15日(2006.6.15)
【国際特許分類】
【出願番号】特願2004−569350(P2004−569350)
【国際出願番号】PCT/JP2003/002992
【国際出願日】平成15年3月13日(2003.3.13)
【出願人】(591107481)株式会社エルイーテック (37)
【出願人】(505325475)