(57)【特許請求の範囲】
【請求項１】
データを保持する保持手段と、
前記保持手段に保持されたデータに対してハッシュ関数またはブロック暗号処理を施すことにより、該データを攪拌する攪拌手段と、
前記保持手段に保持されたデータの乱数としての品質を評価する品質評価手段と、
前記品質評価手段による評価結果が合格だった場合に該データを出力する出力制御手段とを備え、
前記品質評価手段は、品質評価の結果が不合格だった場合には、前記攪拌手段に対して前記保持手段に保持されたデータをｍ回（ｍ＞０）攪拌するよう指示することを特徴とする乱数生成装置。
【請求項２】
前記品質評価手段による乱数の検定項目が複数ある場合、前記品質評価手段は、更なる攪拌の後、該攪拌の前に十分な評価結果が得られなかった検定項目のみ品質評価を行なうことを特徴とする請求項１に記載の乱数生成装置。
【請求項３】
前記品質評価手段は、前記攪拌手段がｎ回（ｎ＞０）の攪拌を行なった後にデータの品質を評価するものであって、前記品質評価手段は、前記ｎ回に満たないｉ回目（ｉ＜ｊ＜ｎ）の攪拌後の評価結果と、ｊ回目の攪拌後の評価結果を保持し、これら評価結果に基づいて、攪拌回数ｍを決定することを特徴とする請求項１に記載の乱数生成装置。
【請求項４】
前記出力制御手段がデータを出力した場合に、前記データ保持部の少なくとも一部に固定値を書き込むことを特徴とする請求項１に記載の乱数生成装置。
【請求項５】
前記品質評価手段が前記乱数生成装置外部から品質評価の要求があるまで、前記データ保持部の少なくとも一部に固定値を書き込むことを特徴とする請求項４記載の乱数生成装置。
【請求項６】
前記品質評価手段は、前記攪拌手段がｎ（ｎ＞０）回の攪拌を行なった後にデータの品質を評価することを特徴とする請求項１記載の乱数生成装置。
【請求項７】
前記乱数生成装置は、品質評価に合格する攪拌回数を確率別に算出することによって前記攪拌回数を定めることを特徴とする請求項６に記載の乱数生成装置。
【請求項８】
前記出力制御手段は、前記乱数生成装置外部からのデータの要求に応じて、該装置外部へデータの出力を行なうことを特徴とする請求項１記載の乱数生成装置。
【請求項９】
前記品質評価手段は、前記乱数生成装置外部からの品質評価の要求に応じて、品質評価を行なうことを特徴とする請求項１に記載の乱数生成装置。
【請求項１０】
所定の保持手段に保持されたデータに対してハッシュ関数またはブロック暗号処理を施すことにより、該データを攪拌する攪拌工程と、
前記攪拌工程によって攪拌されたデータの乱数としての品質を評価する品質評価工程と、
前記品質評価工程による評価結果が合格だった場合に該データを出力する出力制御工程を備え、
前記品質評価工程は、品質評価の結果が不合格だった場合には、前記攪拌工程に対して前記保持手段に保持されたデータをｍ回（ｍ＞０）攪拌するよう指示することを特徴とする乱数生成方法。
【請求項１１】
前記品質評価工程は、前記攪拌工程がｎ（ｎ＞０）回の攪拌を行なった後にデータの品質を評価することを特徴とする請求項１０記載の乱数生成方法。
【請求項１２】
前記品質評価工程は、乱数の品質を評価する複数の検定を行なうことを特徴とする請求項１０記載の乱数生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は乱数を生成する乱数生成装置及び乱数生成方法に関するものである。
【背景技術】
【０００２】
従来、デジタルイメージング機器や遊戯機器等、様々な機器における各種信号処理に乱数が使われていた。また近年、各種機器類のネットワーク化が進むとともにセキュリティ機能が実装されるようになってきたのに伴って、より一層乱数が使われる場面が増えてきた。
【０００３】
特にセキュリティ機能を実装する際に使われる乱数の場合には、安全性向上の重要な要素として、良質な乱数を豊富にもつ必要があった。そしてこの場合、乱数に必要な要素として前後関係からの予測困難性、配列の不規則性、十分に長い周期性、一様性等が従来以上に求められるようになっている。
【０００４】
そこで例えば特許文献１では、乱数生成装置の内部の乱数発生器で発生した乱数を外部に出力しながら乱数生成装置に内蔵した検定回路により検定を行い、検定終了後に検定結果を追って出力する技術が開示されている。
【特許文献１】特開２００３−２９９６３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら上記従来例では乱数生成装置から外部へ出力された乱数の品質が十分であるか否かは、上記検定回路による検定が済むまでわからなかった。即ち、品質の保証が出来ていない乱数をも出力してしまう可能性が有った。
【０００６】
例えば、乱数を使用するアプリケーションが高品質の乱数を必須とする場合には、装置外部で所定量の乱数をバッファリングし、装置内部の検定回路による検定結果を確認してから、そのバッファリングした乱数を使うか否かの判定をする等の必要があった。
【０００７】
本発明はかかる事情に鑑みてなされたものであり、確実に品質の保証された乱数を出力することができる乱数出力装置とその方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記の目的を達成するために、本発明による乱数出力装置は、データを保持する保持手段と、前記保持手段に保持されたデータを攪拌する攪拌手段と、前記保持手段に保持されたデータの乱数としての品質を評価する品質評価手段と、前記品質評価手段による評価に応じて、データの出力を制御する出力制御手段とを備えることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、装置外部へ、品質が保証された乱数を確実に出力することができる。
【発明を実施するための最良の形態】
【００１０】
（第１の実施例）
図１は本発明を実施した乱数生成装置のブロック図を示したものである。同図において１は品質が保証された乱数を出力する乱数生成装置、２はデータ保持部内のデータの初期値を設定するための初期値設定部、３はデータを保持しておくためのデータ保持部、４はデータ保持部３に保持されたデータを取り出し撹拌するための撹拌部、５はデータ保持部３より得られるデータの品質を評価する品質評価部、６はデータ保持部３から得られるデータの出力を品質評価部５による品質評価結果に応じて制御する出力制御部である。
【００１１】
１０１は初期値設定部２から出力された初期値を示すデータ、１０２は撹拌部４によって撹拌されたデータ、１０３はデータ１０１とデータ１０２から選択されデータ保持部３に入力するデータ、１０４、１０５、１１２はデータ保持部３から取り出されたデータ、１０６は設定された攪拌回数を示すパラメータ、１０８は品質評価部５によって決定された更なる撹拌回数を示すパラメータ、１０７は撹拌回数パラメータ１０５、１０８から選択された撹拌回数を示すパラメータ、１０９は設定された撹拌回数終了を示す撹拌終了信号、１１０、１１３は品質評価部５によって決定された乱数出力を制御するための出力制御信号、１１１は品質が保証された乱数データである。
【００１２】
また、７は初期値データ１０１とデータ１０２のうち一方を選択するスイッチ、８は撹拌回数パラメータ１０６、１０８のうち一方を選択するスイッチである。
【００１３】
以下、図１を用いて本発明の乱数生成装置における乱数生成動作を詳細に説明する。
【００１４】
まず、初期値設定部２により初期値データ１０１が出力される。初期値データ１０１の生成方法には様々な方法があるが、ここでは擬似乱数発生器による初期値データの生成とする。なお生成方法はこれに限らず、物理乱数発生器でも可能である。
【００１５】
この段階ではデータの撹拌がまだ行なわれていないため、最初、スイッチ７は、初期値データ１０１とデータ１０２のうち、初期値データ１０１を選択する。選択された初期値データ１０１は、データ１０３としてデータ保持部３に一時的に保持される。
【００１６】
次にデータ保持部３から取り出されたデータ１０５は、撹拌部４で撹拌される。撹拌部４は、データ１０５をハッシュ関数、ブロック暗号化等を用いて必要なビット数毎に撹拌処理する。ハッシュ関数、ブロック暗号化等を用いて攪拌処理をすることにより、データ１０５は、そのビット間の不規則性が増加し、またエントロピーの高いデータ列となる。
【００１７】
攪拌処理とは、攪拌されるデータ中のビット配列の不規則性を増加させる処理であって、乱数としての品質を向上させる処理である。それを満たす処理ならば、前記ハッシュ関数、ブロック暗号化などの処理に限らない。
【００１８】
このようにして、撹拌部４はまず一度データ１０５を撹拌後データ１０２として出力する。このデータ１０２は、スイッチ７によりデータ保持部に書き込まれるデータ１０３として選択される。このようにして所定量のデータがデータ保持部３から読み出され、撹拌部４により撹拌された後、再びデータ保持部３に書き込まれる。
【００１９】
データ保持部３へのデータの書き込みは、上述したデータ保持部３からのデータの読み出しと同じ順序で、行なっていく。
【００２０】
撹拌部４には、所定の撹拌回数を示す撹拌回数パラメータ１０６及び、品質評価部５から出力され攪拌回数を示す撹拌回数パラメータ１０８から、選択された撹拌回数パラメータ１０７が与えられる。最初は撹拌回数パラメータ１０６が選択される。撹拌部４は、撹拌回数パラメータ１０６が示す回数だけ、データの撹拌を行なう。
【００２１】
ここで攪拌回数とは、データ保持部３からデータが取り出され、攪拌部４でデータがハッシュ関数、ブロック暗号化等を用いて攪拌され、その攪拌後、データ１０２をデータ保持部３に書き込むまでを、１回の攪拌回数としている。
【００２２】
このようにして所定回数分のデータの撹拌が終わると、撹拌部４は、撹拌終了信号１０９を出力する。
【００２３】
続いて品質評価部５は、攪拌された乱数１０４を、所定量毎に、処理することにより乱数の品質評価を行なう。
【００２４】
上記品質評価部５が行なう品質評価は様々な基準があるが、ここでは代表的なものとしてＦＩＰＳ  ＰＵＢ  １４０−２に記載されている乱数検定を行なう。
【００２５】
以下に乱数の品質評価（検定）の内容（検定項目）１〜４を示す。
１．Ｔｈｅ  ｍｏｎｏ  ｂｉｔ  ｔｅｓｔ
連続するランダムな２００００ビット中の‘１’の数をＸとしたとき
９７２５＜Ｘ＜１０２７５    ・・・（１）
２．Ｔｈｅ  ｌｏｎｇ  ｒｕｎｓ  ｔｅｓｔ
連続するランダムな２００００ビット中の‘１’ｏｒ‘０’の最長連続ビット数をＸとしたとき
Ｘ＜２６    ・・・（２）
３．Ｔｈｅ  ｒｕｎｓ  ｔｅｓｔ
連続するランダムな２００００ビット中の‘１’ｏｒ‘０’の連続ビット数をｉ、度数をＸｉとしたとき
２３１５＜Ｘ１＜２６８５  ・・・（３）
１１１４＜Ｘ２＜１３８６  ・・・（４）
５２７  ＜Ｘ３＜７２３    ・・・（５）
２４０  ＜Ｘ４＜３８４    ・・・（６）
１０３  ＜Ｘ５＜２０９    ・・・（７）
１０３  ＜Ｘ６＜２０９    ・・・（８）
４．Ｔｈｅ  ｐｏｋｅｒ  ｔｅｓｔ
連続するランダムな２００００ビットを４ビット毎に５０００に区切り、その値（０〜１５）の度数をｆ（ｉ）とし、
Ｘ＝（１６／５０００）＊（Σｉ［ｆ（ｉ）］＾２）−５０００としたとき
２．１６＜Ｘ＜４６．１７  ・・・（９）
乱数品質評価部５はこのような乱数検定を行い、上記検定項目の１〜４までの全てを合格した場合に、出力制御信号１１０、１１３により乱数の出力を許可する。
【００２６】
出力制御部６は、上記出力許可を得た後、攪拌されたデータ１１２を所望のデータ量だけ読み出し、乱数データ１１１として外部に出力することができる。なお、この出力制御部６は単純に攪拌データの塊を読み出すだけではなく、別の読み出しを行なうことも可能である。
【００２７】
特に、出力制御部６は、上記出力許可を得た後、攪拌されたデータ１１２をランダムに読み出して合成した後に、乱数データ１１１として出力することができる。こうすることにより、さらにビット間の不規則性が増加し、エントロピーの高いデータ列が得られる。
【００２８】
図４はこのようなデータ保持部３からのデータの読み出しを示したものである。ここでは４ＫＢのデータ保持部３が用意されており、１バイト単位でデータの読み出し及び書き込みができるようになっている。
【００２９】
このデータ保持部３から８バイト分のデータを読み出す場合、最初に、アドレス０ｘ１０３から１バイト分のデータがデータ保持部３から読み出される。続いて同様にアドレス０ｘｂ５９から１バイト分のデータが読み出される。このとき、データ保持部３からデータを読み出す際の１２ビットのアドレスはランダムに選ばれるが、各アドレスを一回ずつ読み出し、かつ、同じアドレスを二度は読み出さずに全アドレスを一巡するようになっている。このようなランダムなアドレス指定は、例えば公知のＭ系列の乱数生成器により乱数を発生させればよい。Ｍ系列の乱数は０ｘ０００のデータは使えないほか、乱数品質が低いが、ここでは１２ビット分のアドレスが一通り重複なく１度ずつ選ばれれば十分なので、機能としては特に問題無い。
【００３０】
なお、出力制御部６は、検定前に合成した乱数データを品質評価部５に出力してもよい。そうすることにより検定に合格する確率が高くなる。
【００３１】
検定項目１〜４までのうち、一項目でも検定に合格しなければ、品質評価部５は、出力制御信号１１０により乱数の出力を許可しない。更にこの場合は、データ１０５の撹拌を続けて行い、乱数の品質を向上させる。
【００３２】
ところでデータの撹拌回数と乱数の品質の関係は、上記検定項目１を例にとると図３に示されるようになっている。撹拌回数が増える毎にデータ１０４に‘１’が現れる数Ｘは実線で示されるように推移していく。Ｘの推移は、ばらつきがあるものの、概ね点線で示される範囲に９０％以上入っており、式（１）を満たすためには１５回程度の撹拌を続ければよい。そこで撹拌部に設定される撹拌回数パラメータ１０６には１５を設定すれば９０％以上の確率で検定項目１に合格する。
【００３３】
なお、攪拌部に設定される攪拌回数パラメータ１０６には、ほぼ１００％、検定項目１を合格するであろう攪拌回数を設定してもよい。
【００３４】
もし品質評価部５で基準を満たさない場合は、Ｘの値に応じて更なる撹拌回数パラメータ１０８を設定する。
【００３５】
設定方法の一つとしては、ほぼ１００％、検定項目１を合格するであろう攪拌回数と、品質評価部５で基準を満たさなかった攪拌回数との差分の回数を設定する。そして攪拌部４ではその差分の回数だけ攪拌を繰り返す。そして十分な乱数品質が得られた後、出力制御部６から、乱数データ１１１が出力されることになる。
【００３６】
このようにパラメータの設定をすることにより、２回の品質評価でほぼ確実に検定に合格することができる。
【００３７】
次に図２は、本発明を実施した乱数生成装置における乱数生成の動作を示すフローチャートである。同図に従って本発明の乱数生成装置における乱数生成フローを説明する。
【００３８】
ステップＳ２０１において、初期値設定部２は、データ保持部に保持するためのデータの初期値を設定する。
【００３９】
ステップＳ２０２において、攪拌部４は、データ保持部３から受け取ったデータを撹拌する。
【００４０】
ステップＳ２０３において、攪拌部４は撹拌回数をカウントし、設定された撹拌回数に達していない場合ステップＳ２０２に戻り、データを再攪拌する。攪拌回数が設定された撹拌回数に達している場合は、後述するステップＳ２０４に進む。
【００４１】
ステップＳ２０４において、品質評価部５は、攪拌されたデータの品質評価を行なう。
【００４２】
ステップＳ２０５において、品質評価の結果が基準に達していない場合、攪拌部４はデータ撹拌を続け、基準に達していれば後述するＳ２０６へ進む。
【００４３】
ステップＳ２０６において、出力制御部６は、ステップＳ２０５において品質評価の結果が基準に達した乱数データを出力する。
【００４４】
ステップＳ２０７において、品質評価部５は、あと何回撹拌すれば良いかを算出し、更なるデータ撹拌回数を決定する。
【００４５】
また、本実施例では初期値が設定され攪拌部４で攪拌を行なうが、攪拌を行なう前に初期値データを品質評価部５で品質の評価を行なってもよい。
【００４６】
また、品質評価部５による品質評価は多量の乱数を扱わなければならないため、処理に時間がかかる。よって、所望の乱数品質を得られればできるだけ少ない処理で済んだ方がよい。品質評価部５がＦＩＰＳ  ＰＵＢ  １４０−２に記載されている複数の乱数の品質評価を行なう場合、基本的にデータ撹拌の回数を増やすと乱数の品質は単調に向上していくものと考えられる。よって、品質評価部５は前回不合格だった項目の検定のみ行なう。
【００４７】
以上説明したようにデータ保持部に保持されたデータの品質評価を行い、あらかじめ設定された基準を満たした場合のみ乱数出力を許可することで、誤って品質の低い乱数が出力されることがなくなる。
【００４８】
（第２の実施例）
本発明の第２の実施例においては、品質評価部５が、十分な品質が得られるのに必要な攪拌回数をあらかじめ設定された確率に応じて決定することで、データ撹拌及び品質評価のオーバーヘッドを最適化する。
【００４９】
まずデータの撹拌について説明する。データの撹拌にかかる時間は、データ保持部３のサイズ、撹拌使用する関数等、様々な要因に依存する。よって、攪拌回数は所望の乱数品質を得られればできるだけ少ない方がよい。
【００５０】
検定項目１を例にとって説明すると式（１）は以下のように変形できる。
Ｘ’＜２７５（ただしＸ’＝｜Ｘ−１００００｜）・・・（１０）
データの撹拌回数とこのＸ’の推移は図５に示される。図５によると、データの撹拌回数を増やすことによって概ね単調に乱数品質が向上していくものと考えられる。しかし乱数品質の向上スピードは、初期値の設定方法や使用するハッシュ関数のアルゴリズムによってばらつきがある。図５に示すように撹拌回数とＸ’の減少していくカーブがＡ，Ｂのように幅をもつとすると、基準値を満たすまでに必要なデータの撹拌回数はＡでは２６回、Ｂでは１８回となり８回程度差がある。
【００５１】
そこで品質評価部５では過去の攪拌回数の記録を保持しており、その結果から各検定項目について基準を満たすのに必要なデータの撹拌回数を確率別に算出する。そして、品質評価部５は、所望の確率で検定を合格する撹拌回数を出力するようにする。例えば、最初に品質評価部５は、６０％の確率で検定を合格する撹拌回数を撹拌回数パラメータ１０６として設定する。次に、攪拌部４による所定の撹拌回数が終わった後、品質評価部５は、基準の品質に満たないと判定した場合、ほぼ１００％検定を合格する撹拌回数を撹拌回数パラメータ１０８として設定する。こうすることにより、データの撹拌回数を最適化できる。
【００５２】
図６は本発明の第２の実施例における乱数生成のフローチャートを示すものである。
【００５３】
同図に従って本発明の第２の実施例における乱数生成装置による乱数生成フローを説明する。
【００５４】
ステップＳ６０１において、初期値設定部２は、データ保持部に保持するためのデータの初期値を設定する。
【００５５】
ステップＳ６０２において、品質評価部５は、初期値データと攪拌に使用するハッシュ関数やブロック暗号化のアルゴリズムから、品質評価に合格することができる攪拌回数を確率別に算出する。
【００５６】
ステップＳ６０３において、攪拌部４は、確率別に算出された回数分データの撹拌を行なう。
【００５７】
ステップＳ６０４において、攪拌部４は、撹拌回数をカウントし、品質評価部５によって設定された撹拌回数に達していない場合、ステップＳ６０３に戻り、データの再撹拌を行なう。攪拌回数が設定された撹拌回数に達している場合、後述するステップＳ６０５に進む。
【００５８】
ステップＳ６０５において、品質評価部５は、攪拌された乱数の品質評価を行なう。
【００５９】
ステップＳ６０６において、攪拌部４は、品質評価の結果が基準に達していない場合、データの撹拌を続け、基準に達していれば後述するＳ６０７へ進む。
【００６０】
ステップＳ６０７において、出力制御部６は、ステップＳ６０６において品質評価の結果が基準に達した乱数データを出力する。
【００６１】
ステップＳ６０８において、品質評価の結果が基準に達していないとき品質評価部５は、あと何回撹拌すれば良いかを算出し、更なるデータ撹拌回数を決定する。
【００６２】
また、ハッシュ関数やブロック暗号化など、データ撹拌に使う関数が複数ある場合、通常はデータ撹拌の度にランダムに関数を選択し、乱数の耐タンパー性を向上させる。しかし緊急にデータを撹拌する必要がある場合には、処理時間の短い撹拌手段としてハッシュ関数を選択するようにしてもよい。こうすることによって、データ撹拌のオーバーヘッドを状況に合わせて対応させることができる。
【００６３】
また、出力制御部６では、データ保持部３から所定ビットのデータを取り出し、合成した乱数データ１１２を品質評価部５に出力してもよい。
【００６４】
また、実施例１同様に、品質評価部５は、ＦＩＰＳ  ＰＵＢ  １４０−２に記載されている複数の乱数の品質評価を行なう場合、前回不合格だった検定項目のみ行なうようにする。
【００６５】
以上説明したように、品質評価部５はあらかじめ設定されたパラメータやデータ撹拌の緊急性の自動的な判断等からデータ撹拌の手段、回数及び品質評価の頻度、項目等を対応させることができるので、データ撹拌処理のシステムのパフォーマンスに与えるオーバーヘッド削減に効果がある。
【００６６】
（第３の実施例）
第３の実施例では、乱数データを乱数生成装置外部に出力した後の動作制御についても述べる。本実施例では、乱数データを乱数生成装置外部に出力した直後、初期値設定部はデータ保持部の少なくとも一部に固定値を書き込む。データ保持部から取り出したデータの品質を意図的に低下させることによりデータ保持部に保持されたデータの撹拌を強制的に行なわせる。
【００６７】
図７は本実施例を実施した乱数生成装置のブロック図を示したものである。同図において第１の実施例と同様なものは説明を省略する。１１４は初期値設定部２の初期値を固定値にするか変動値にするかを選択する初期値選択信号、１１５は外部からの乱数出力読み出し信号である。
【００６８】
図７を使って本実施例の乱数生成装置における乱数生成動作を詳細に説明する。本実施例では、攪拌部４によって十分な乱数の品質を得るまでは第１の実施例と同様であるので、省略する。
【００６９】
本実施例では、品質評価部５で十分な乱数品質が得られた後、出力制御部６は外部からの乱数出力読み出し信号１１５により乱数データ１１１の出力が開始される。出力制御部６は乱数データ１１１を出力した後、あらかじめ設定された一定量の乱数を出力するまで初期値設定部２に対して初期値選択信号１１４を出力する。初期値設定部２は、初期値選択信号１１４に応じて、初期値を擬似乱数発生器から生成された変動値から、固定値に変更し、この初期値を表す初期値データ１０１を出力する。
【００７０】
スイッチ７は、乱数の出力を開始した後は、データ保持部３に書き込むデータ１０３として、初期値設定部２からの出力される初期値データ１０１を選択する。このようにして乱数データ１１１を出力した後はデータ保持部３に固定値が書き込まれていく。この初期値選択信号１１４の出力に応じた固定値の書き込み動作は、出力制御部６から出力される乱数データ１１１が設定量を超えるまで行われる。
【００７１】
次に出力制御部６から出力される乱数データ１１１が設定量を超えた場合、品質評価部５は、データ保持部にあるデータ１０４を再度評価する。乱数データ１１１を外部に出力した後はデータ保持部３には固定値が書き込まれているため、データ保持部３から取り出したデータ１０４の品質は低下している。そして品質評価の基準を下回れば更なる撹拌回数パラメータ１０６により、データの撹拌の回数が設定される。そして攪拌部４は、設定された回数のデータ撹拌を行なう。その後、再度、品質評価部５は攪拌部４で攪拌されたデータ１０４を評価する。
【００７２】
このようにして再び乱数データの品質の確保され、乱数データが出力可能な状態になる。
【００７３】
図８は本実施例を実施した乱数生成装置における乱数生成のフローチャートを示すものである。同図に従って本実施例の乱数生成装置における乱数生成フローを説明する。
【００７４】
ステップＳ８０１において、初期値設定部２は、データ保持部に保持するためのデータの初期値を設定する。
【００７５】
ステップＳ８０２において、品質評価部５は、初期値データと攪拌に使用するハッシュ関数やブロック暗号化のアルゴリズムから、品質評価に合格することができる攪拌回数を確率別に算出する。
【００７６】
ステップＳ８０３において、攪拌部４は、確率別に算出された回数分データの撹拌を行なう。
【００７７】
ステップＳ８０４において、攪拌部４は、撹拌回数をカウントし、品質評価部５によって設定された撹拌回数に達していない場合、ステップＳ８０３に戻り、データの再撹拌を行なう。攪拌回数が設定された撹拌回数に達している場合、後述するステップＳ８０５に進む。
【００７８】
ステップＳ８０５において、品質評価部５は、攪拌された乱数の品質評価を行なう。
【００７９】
ステップＳ８０６において、攪拌部４は、品質評価の結果が基準に達していない場合、データの撹拌を続け、基準に達していれば後述するＳ８０８へ進む。
【００８０】
ステップＳ８０７において、品質評価の結果が基準に達していない場合、品質評価部５はあと何回撹拌すれば良いかを算出し、更なるデータ撹拌回数を決定する。
【００８１】
ステップＳ８０８において、品質評価の結果が基準に達している場合、出力制御部６は外部からの要請による乱数データの出力開始を待つ。
【００８２】
ステップＳ８０９において、乱数データの出力を開始した直後、出力制御部６は、あらかじめ設定された量の乱数データを出力したかを判断する。
【００８３】
ステップＳ８１０において、ステップＳ８０９で出力制御部６から出力される乱数データが設定量に達するまでは、初期値設定部はデータ撹拌の初期値を固定値に設定し、固定値をデータ保持部に書き込む。出力した乱数データが設定量を超えた場合、ステップＳ８０５に戻る。
【００８４】
以上説明したように乱数データを乱数生成装置外部に出力後はデータ保持部に固定値を書き込み、データ保持部から取り出したデータの品質を意図的に低下させることによりデータ保持部に保持されたデータの再撹拌を行なうことができ、常に品質が高く耐タンパー性の高い乱数データを出力できるようになる。
【００８５】
（第４の実施例）
図９は本発明の第４の実施例における乱数生成装置のブロック図を示したものである。同図において第３の実施例と同様なものは説明を省略する。第３の実施例では、データ攪拌の初期値を設定量だけ固定値としていたが、本実施例では装置外部から品質評価の要求が有るまで初期値を固定値とするものである。
【００８６】
１１６は外部から乱数生成装置１に入力する、品質評価を要求する信号である。品質評価要求信号１１６は品質評価部６に入力する。
【００８７】
図９を使って本発明の第４の実施例における乱数生成装置における乱数生成動作を詳細に説明する。なお、第３の実施例と同様の動作は省略する。
【００８８】
出力制御部６が乱数データ１１１の出力を開始した後、乱数生成装置１の外部から入力する品質評価要求信号１１６により品質評価の要求があれば、品質評価部６で品質評価を行なう。品質評価の要求があるまでは、第３の実施例と同様に、初期値設定部２は、初期値を固定値に設定し、初期値データ１０１として固定値を出力する。
【００８９】
以下第１の実施例と同様に品質評価部５の評価結果に応じて更なる撹拌回数パラメータ１０６を生成し、撹拌部４が所定の回数分データの撹拌を行なう。品質評価部５は品質評価を行い、十分な品質が得られるまでデータの撹拌を行なう。
【００９０】
このようにして再び乱数データの品質の確保され、乱数データが出力可能な状態になる。
【００９１】
図１０は本発明の第４の実施例における乱数生成装置における乱数生成の動作を示すフローチャートである。同図においてＳ１００９以外は第３の実施例と同様なので説明を省略する。
【００９２】
ステップＳ１００９において、乱数データの出力を開始した直後、外部から品質評価の要求がきたかを判定する。乱数データの出力を開始した直後から品質評価の要求が来るまではデータ撹拌の初期値を固定値に設定し、固定値をデータ保持部に書き込み続ける。そして品質評価の要求が来た場合はステップＳ１００５に戻り、再び品質評価を行い、品質が低下して基準を下回っていれば再び更なる撹拌回数を決定し、データの撹拌を行なう。
【００９３】
以上説明したように、乱数データを乱数生成装置外部に出力した後は、データ保持部に固定値を書き込み、データ保持部から取り出したデータの品質を意図的に低下させておく。品質評価部は、外部からの品質評価の要求が来たら品質評価を行なうことにより、外部アプリケーションが乱数を必要としない時にデータ撹拌を行なうことができるので、データ撹拌、品質評価のオーバーヘッドをシステムのパフォーマンスに影響を与えず、常に品質が高く耐タンパー性の高い乱数データを出力できる。
【００９４】
なお、上記各実施例における品質評価部５による評価として、ＦＩＰＳ  ＰＵＢ  １４０−２に適合させる為に１〜４の検定項目を利用することを説明したが、本発明ではこれに限らず、例えば検定項目３のみを検定項目とする場合等に適用しても良い。また、検定項目を任意に選択、設定できるようにしても良い。
【図面の簡単な説明】
【００９５】
【図１】本発明第１の実施例における乱数生成装置の機能ブロックを示した図である。
【図２】本発明第１の実施例の乱数生成アルゴリズムを示したフローチャートを示した図である。
【図３】本発明の実施形態における乱数撹拌回数と検定項目１の評価値の推移を示した図である。
【図４】本発明の実施形態におけるデータ保持部からのデータ読み出しの様子を示した図である。
【図５】本発明の実施形態におけるデータ撹拌回数と乱数評価値の推移のばらつきを示した図である。
【図６】本発明第２の実施例の乱数生成アルゴリズムを示したフローチャートを示した図である。
【図７】本発明第３の実施例における乱数生成装置の機能ブロックを示した図である。
【図８】本発明第３の実施例の乱数生成アルゴリズムを示したフローチャートを示した図である。
【図９】本発明第４の実施例における乱数生成装置の機能ブロックを示した図である。
【図１０】本発明第４の実施例の乱数生成アルゴリズムを示したフローチャートを示した図である。
【符号の説明】
【００９６】
１  乱数生成装置
２  初期値設定部
３  データ保持部
４  データ攪拌部
５  品質評価部
６  出力制御部
【図１】
0004546339.tif 000002
【図２】
0004546339.tif 000003
【図３】
0004546339.tif 000004
【図４】
0004546339.tif 000005
【図５】
0004546339.tif 000006
【図６】
0004546339.tif 000007
【図７】
0004546339.tif 000008
【図８】
0004546339.tif 000009
【図９】
0004546339.tif 000010
【図１０】
0004546339.tif 000011