(57)【要約】【課題】簡単な構成で高品質の乱数を発生する乱数発生器および擬似乱数発生器を実現する。【解決手段】  回路３と回路４との間の信号を送受信する複数のバス線２Ａから構成されたバス２と、信号の受信条件を動的に調整するキャリブレーション部５と、キャリブレーション部５の調整情報にもとづいて乱数を発生する乱数発生部１０と、を有する。【選択図】図１
2010140419.tif 000002
【特許請求の範囲】
【請求項１】
回路間の信号を送受信する複数のバス線から構成されたバスと、
前記信号の受信条件を動的に調整するキャリブレーション部と、
前記キャリブレーション部の調整情報にもとづいて乱数を発生する乱数発生部と、を有することを特徴とする乱数発生器。
【請求項２】
前記キャリブレーション部が調整する前記受信条件が受信タイミングであり、
前記乱数発生部が、それぞれの前記バス線の前記受信タイミングの変化にもとづいて、「０」または「１」の１ビットデータを発生するキャリブレーション情報変換部を有することを特徴とする請求項１に記載の乱数発生器。
【請求項３】
前記乱数発生部が、
前記キャリブレーション情報変換部が発生する１ビットデータを順に記憶するメモリ部と、
前記メモリ部に記憶された前記１ビットデータを順にサンプリングし、前記乱数のビット長の数列を得るサンプリング処理を行うサンプリング部と、
前記サンプリング部の前記サンプリング処理毎に前記数列をローテートシフト処理し、前記乱数を発生するシフト部と、を有することを特徴とする請求項２に記載の乱数発生器。
【請求項４】
前記キャリブレーション情報変換部が、前記バス線の前記受信タイミングが変化しなかった場合、当該バス線にもとづく前記１ビットデータが前記メモリ部に記憶されるエントリ順番を減ずることを特徴とする請求項３に記載の乱数発生器。
【請求項５】
請求項１から４のいずれか１項に記載の乱数発生器と、
前記乱数発生器が発生した乱数をシードとして擬似乱数を発生する擬似乱数発生部と、を有することを特徴とする擬似乱数発生器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数発生器および擬似乱数発生器に関し、特にバスを介して受信される信号の受信条件の変動にもとづいて乱数を発生する乱数発生器および前記乱数をシードとする擬似乱数発生器に関する。
【背景技術】
【０００２】
セキュリティ意識の高まりにより暗号化技術が広く用いられるようになっている。多くの暗号化技術は乱数を必要とする。簡単に乱数を得る方法として、擬似乱数生成器を用いることが一般的に行われている。擬似乱数は、確定的な計算によって求めている数列に含まれる数であるため、実行される時に入力される値、すなわちシードが同じであれば同じ乱数が発生する。このため、擬似乱数生成器では、シードとして、どのような値を用いるかが重要である。例えば、Linuxにおける/dev/randomファイルのように、コンピュータシステムへのキーボードまたはマウスからの入力情報などをプールしておき、必要に際して取り出してシードとして用いるということが行われている。しかし、この方法では、必要な量の乱数を得るまでに時間がかかることがあり、さらに、サーバーシステムなど外側からの入力頻度が低いシステムにおいては利用が容易ではなかった。
【０００３】
一方、擬似乱数に対して、規則性も再現性もないために予測が不可能な物理乱数を発生する物理乱数発生器も、統計科学、金融シミュレーション、大規模な物理シミュレーション、セキュリティなどの分野で使用されている。物理乱数とは、自然現象を利用して発生させたでたらめに並んだ数列のことである。例えば、特開２００７−３０４７３０号公報には、半導体素子内部の熱電子のランダムな信号を、高速デジタル処理することにより、物理乱数を発生する物理乱数発生器が開示されている。
【０００４】
物理乱数は自然現象を利用しているため、予測不可能な品質の高い乱数であるが、物理乱数発生器は温度センサなど専用のハードウエアを必要とする。このため、物理乱数発生器は複雑化および大型化することため小規模のシステムにおいての利用は容易ではなかった。
【特許文献１】特開２００７−３０４７３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記事情に鑑みて、本発明はなされたものであり、本発明は、簡単な構成で高品質の乱数を発生する乱数発生器および擬似乱数発生器を実現することを目的とする。
【課題を解決するための手段】
【０００６】
本願発明の一態様の乱数発生器は、回路間の信号を送受信する複数のバス線から構成されたバスと、信号の受信条件を動的に調整するキャリブレーション部と、キャリブレーション部の調整情報にもとづいて乱数を発生する乱数発生部と、を有することを特徴とする乱数発生器である。
【０００７】
また、本発明の別の一態様の擬似乱数発生器は、回路間の信号を送受信する複数のバス線から構成されたバスと、信号の受信条件を動的に調整するキャリブレーション部と、キャリブレーション部の調整情報にもとづいて乱数を発生する乱数発生部と、を有することを特徴とする乱数発生器と、乱数発生器が発生した乱数をシードとして擬似乱数を発生する擬似乱数発生部と、を有することを特徴とする擬似乱数発生器である。
【発明の効果】
【０００８】
本発明によれば、簡単な構成で高品質の乱数を発生する乱数発生器および擬似乱数発生器を実現することができる。
【発明を実施するための最良の形態】
【０００９】
＜第１の実施の形態＞  
以下、図面を参照して本発明の第１の実施の形態の乱数発生器１について説明する。  
最初に、図１を用いて本実施の形態の乱数発生器１の構成を説明する。図１は、本実施の形態の乱数発生器の概略の構成を示す構成図である。  
図１に示すように、本実施の形態の乱数発生器１は、第１の回路である回路３と第２の回路である回路４との回路間の信号を、インターフェイス３Ａおよびインターフェイス４Ａを介して送受信するｎ本のバス線２Ａ１〜２Ａｎから構成されたバス２と、回路４が信号を受信するための受信条件である受信タイミングを動的に調整するキャリブレーション部５と、キャリブレーション部５の調整情報にもとづいて乱数を発生する乱数発生部１０とを有する。なお、ここでは、ｎ＝１０を例に説明する。キャリブレーション部５は、システム初期化時に最初のキャリブレーションを行うほか、システム稼動時にも動的にキャリブレーションを繰り返す。例えば、回路３はＣＰＵであり、回路４はＣＰＵと同じチップ上に作成された補助動作素子である。なお、回路４および回路１０は、回路Ａ側に配置されていてもよい
バス線を介しての信号の送受信のタイミングは、例えば回路４に配設されたクロック部４Ｂが発生するクロック信号をもとに決定される。しかし、クロック部４Ｂが発生したクロック信号が回路３に到達し、回路３が信号を送信し、そして回路４が受信するまでのディレイ時間は、温度等の周辺環境の状態により変動する。また、その変動の大小はそれぞれのバス線毎に様々である。このため、クロック部４Ｂが発生したクロック信号の位相を調整して、回路４が信号を受信する受信条件である受信タイミング等を最適化するキャリブレーションが不可欠であり、このキャリブレーションを行うのが、キャリブレーション部５である。
【００１０】
キャリブレーション部５は動的に、すなわち、ある単位時間毎に、それぞれのバス線毎に、キャリブレーション処理を行う。例えば、数十ＭＨｚの動作周波数で動作しているバスの場合には、１秒間に数十Ｍ回のキャリブレーションが、バス線の数だけ行われている。そして、前述のように、キャリブレーション条件に最も大きな影響を及ぼす因子が温度である。
【００１１】
図１に示すように、本実施の形態の乱数発生器１は、キャリブレーション部５が調整した、調整情報である、それぞれのバス線２Ａの受信タイミングの変化にもとづいて、「０」または「１」の１ビットデータ１を発生するキャリブレーション情報変換部１１と、キャリブレーション情報変換部１１が生成した１ビットデータを、順に記憶するメモリ部１３と、メモリ部１３に記憶された１ビットデータを順にサンプリング処理し所定ビット長、例えば８ビット長の数列を得るサンプリング部１４と、乱数発生回数をカウントするカウント部１６と、所定のビット長の数列をカウント部１６の情報にもとづいてローテートシフトし乱数を発生するシフト部１５と、を有する。メモリ部１３は、ＬＲＵ（Least Recently Used）メモリ部である。
【００１２】
以上の説明のように、回路３と回路４との間で信号を送受信するバス２、およびキャリブレーション部５は、本発明の乱数発生器１にとり重要な構成要素ではあるが、その本来の目的は別であり、乱数発生器１も利用する構成要素である。
【００１３】
次に図２および図３を用いて本実施の形態の乱数発生器１の動作の流れについて説明する、図２は、本実施の形態の乱数発生器の動作の流れについて説明するためのフローチャートであり、図３は、本実施の形態の乱数発生器の処理を説明するための説明図である。以下、図２のフローチャートに従い説明する。
【００１４】
＜ステップＳ１０＞  カウンタＭ初期化  
最初に、乱数発生回数をカウントするカウント部１６のカウンタＭを「１」に初期化する。
【００１５】
＜ステップＳ１１＞  キャリブレーション  
キャリブレーション部５は、ｎ本のバス線のそれぞれについてキャリブレーション処理を行い、受信状態を最適の状態に調整する。ここで、図３（Ａ）は、最適化されたタイミングである調整情報を示している。ここでは、クロックが最良のタイミング（信号が立ち上がりきった、もしくは立ち下がり切った状態）で入った場合を１００％、それに対して最悪タイミング（信号が意味をなさない状態）の場合を０％として規格化されている例を示している。
【００１６】
＜ステップＳ１２＞  カウンタＫ初期化  
ｎ本のバスのキャリブレーションの調整情報を順に処理するため、カウント部１６のカウンタＫを「１」に初期化する。なお、ループ変数Kについてのループは、並列処理、すなわち、各バスについて同時に処理してもよい。
【００１７】
＜ステップＳ１３、ステップＳ１４、ステップＳ１８＞  キャリブレーション情報変換１  
図３に示すように、キャリブレーション情報変換部１１はバス線ＮｏがＫのバス線のキャリブレーションの調整情報が、前回の調整情報と比較して、タイミングが増加している場合（バス線Ｎｏ．１、３、４等）、メモリ部１３のエントリＮｏ．Ｋに、「１」が出力される。
【００１８】
＜ステップＳ１５、ステップＳ１６、ステップＳ１８＞  キャリブレーション情報変換２  
図３に示すように、キャリブレーション情報変換部１１はバス線ＮｏがＫのバス線の調整情報が、前回の調整情報と比較して、タイミングが減少している場合（バス線Ｎｏ．２、６、７等）、メモリ部１３のエントリＮｏ．Ｋに、「０」が出力される。
【００１９】
＜ステップＳ１７、ステップＳ１８＞  キャリブレーション情報変換３  
キャリブレーション情報変換部１１はバス線ＮｏがＫのバス線の調整情報が、前回の調整情報と比較して、タイミングが同じ場合、メモリ部１３のエントリＮｏ．Ｋには、前回と同じ値が出力される。
【００２０】
＜ステップＳ１９、ステップＳ２０＞  ｎ本のバス線処理  
カウンタＫがバス線の本数ｎ、例えば１０になるまで、キャリブレーション情報変換部１１は処理を行う。
【００２１】
＜ステップＳ２１＞  サンプリング  
図３（Ｄ）に示すように、サンプリング部１４は、メモリ部１３に記憶されているｎビットのデータ列の上位から所定のビット数、例えば８ビットの数列をサンプリングする。
【００２２】
なお、ステップＳ２１で得られる数列は乱数であるが、本実施の形態の乱数発生器１は、より高品質の乱数を発生するためにステップＳ２２以降の処理を行う。
【００２３】
＜ステップＳ２２＞  ローテートシフト  
シフト部１５は、サンプリング部１４がサンプリングしたｎビット長のデータ列を、カウント部１６のカウントＭの数値分だけローテートシフト処理する。
【００２４】
ここで、ローテートシフト処理とは、図３（Ｅ）に示すように、所定位置の１ビットデータを最上位にし、順に位置を変化する処理である。図３（Ｅ）ではＭ＝４の場合を示しており、サンプリングされた８ビット長のデータ列の４番目のビットを最上位ビットとしてシフトしている。
【００２５】
＜ステップＳ２３＞  乱数出力  
乱数生成部１２は、シフト部１５がローテートシフト処理した８ビット長のデータ列を乱数として出力する。
【００２６】
＜ステップＳ２４、ステップＳ２５＞  乱数出力継続  
シフト部１５がローテートシフトする値Ｍを１ずつ増加し、乱数発生を継続して行う。Ｍがデータ長ｎになった場合には、再びＭを１に初期化する。
【００２７】
以上の説明のように、本実施の形態の乱数発生器１は、回路３および回路４に他の目的のために具備されているキャリブレーション部５のキャリブレーション情報をもとに乱数を発生するため簡単な構成である。すなわち、第１の回路である回路３と第２の回路である回路４とは、乱数発生器１に不可欠な回路であるが、乱数発生器１の専用回路ではない。
【００２８】
そして乱数発生器１は簡易な構成でありながら高速に、かつ恒常的に乱数を発生させることができる。そして、キャリブレーションのタイミングは温度に依存しているため、乱数発生器１が発生する乱数は予測不可能な物理乱数である。すなわち、乱数発生器１は簡単な構成で高品質の乱数を発生することができる。
【００２９】
なお、上記説明では説明を簡単にするために１０本のバス線２Ａを有するバス２のキャリブレーション情報をもとに乱数を発生する乱数発生器１について説明したが、バス線の数は例えばあるＣＰＵでは１００本以上、例えば１４４本であり、このＣＰＵのバスのキャリブレーションを利用した本発明の乱数発生器は６４ビット長または１２８ビット長のより長いデータ長の乱数を発生することもできる。なお、乱数発生器１は全てのバス線２Ａの情報を用いる必要はない。
【００３０】
また、上記説明ではキャリブレーションの対象としてタイミングを例に説明したが、例えば電流値、容量等、動的にキャリブレーションが行われる種々の情報を用いてもよい。
【００３１】
さらに、キャリブレーション情報変換部１１では、タイミングが増加した場合にビットデータを「１」、減少した場合に「０」としたが、タイミングが増加した場合にビットデータを「０」、減少した場合に「１」としてもよいし、所定の割合以上、増減があった場合にのみビットデータを入れ替えても良い。
【００３２】
＜第２の実施の形態＞  
以下、図面を参照して本発明の第２の実施の形態の乱数発生器について説明する。本発明の第２の実施の形態の乱数発生器は、第１の実施の形態の乱数発生器１と類似しているため、同じ構成要素には同じ符号を付し同じ説明は省略する。
【００３３】
ここで、図４は、本実施の形態の乱数発生器の動作の流れについて説明するためのフローチャートであり、図５は、本実施の形態の乱数発生器の処理を説明するための説明図である。以下、図４のフローチャートに従い説明する。
【００３４】
＜ステップＳ３０〜Ｓ３７＞
ステップＳ３０〜Ｓ３７は、すでに説明した図２のステップＳ１０〜Ｓ１７と同じであるので説明は省略する。
【００３５】
＜ステップＳ３８＞  エントリ入替
本実施の形態の乱数発生器では、キャリブレーション情報変換部１１は、調整情報が前回の調整情報と同じであったバス線２Ａにもとづいた１ビットデータを記憶するメモリ部１３のエントリＮｏを１つ下位と入れ替える。
【００３６】
図３に示したように、初期状態では、メモリ部１３の各エントリには上位Ｎｏ．からバス線Ｎｏ．１〜１０の情報をもとにした１ビットデータが、バス線Ｎｏ．の順に記録されている。しかし、例えば、図５（Ａ）および（Ｂ）に示すように、バス線Ｎｏ．Ｋ＝５のタイミングはＸ回目に８４．２％であり、（Ｘ＋１）回目にも同じ８４．２％であった。この場合、キャリブレーション情報変換部１１は、バス線Ｎｏ．Ｋ＝５の情報をもとにした１ビットデータを、メモリ部１３のエントリＮｏ．６に記憶し、バス線Ｎｏ．Ｋ＝６の情報をもとにした１ビットデータを、メモリ部１３のエントリＮｏ．５に記憶するように変更する。そして、この変更は次回以降の乱数発生においても維持される。このため受信タイミングが変化しにくいバス線２Ａの情報をもとにした１ビットデータは、繰り返し処理によって徐々にメモリ部１３の下位にエントリされることになる。
【００３７】
バス線２Ａには、それぞれ特性があり、キャリブレーションの調整情報が変動しにくいバス線２Ａの調整情報にもとづいた１ビットデータは変動しにくいが、第２の実施の形態の乱数発生器ではビットが固定化するのを防ぐことができる。すなわち、かかるバス線のメモリ部１３へのエントリＮｏを下位に移動することにより、サンプリング部１４がサンプリングする上位ビットに、変動しにくいバス線２Ａの調整情報にもとづいた１ビットデータが入らなくなる。すなわち、キャリブレーション前後でタイミングに変化の起きる頻度が少ないバス線の情報を極力除くことにより、よりランダム性の高い数列を生成することが可能となる。
【００３８】
＜ステップＳ３９〜Ｓ４６＞
ステップＳ３９〜Ｓ４６は、すでに説明した図２のステップＳ１８〜Ｓ２５と同じであるので説明は省略する。
【００３９】
本実施の形態の乱数発生器は第１の実施の形態の乱数発生器１が有する効果に加えて、より高品質の乱数を発生することができる。
【００４０】
＜第３の実施の形態＞  
以下、図面を参照して本発明の第３の実施の形態の擬似乱数発生器１０１について説明する。本発明の第３の実施の形態の擬似乱数発生器１０１は、第１の実施の形態の乱数発生器１と類似しているため、同じ構成要素には同じ符号を付し、同じ説明は省略する。  
ここで、図６は本実施の形態の擬似乱数発生器の概略の構成を示す構成図であり、図７は、本実施の形態の擬似乱数発生器の動作の流れについて説明するためのフローチャートであり、図８は、本実施の形態の擬似乱数発生器の処理を説明するための説明図である。
【００４１】
図６に示すように本実施の形態の擬似乱数発生器１０１は、乱数発生器１Ａと、乱数発生器１Ａが発生した乱数をシードとして擬似乱数を発生する擬似乱数発生部９とを有する。乱数発生器１が発生する乱数は物理乱数であり予測不可能であるが、より簡単な構成で高品質の乱数を得るために、擬似乱数発生器１０１は、擬似乱数発生部９による処理を行う。
【００４２】
以下、図７のフローチャートに従い擬似乱数発生器１０１の処理について説明する。
【００４３】
＜ステップＳ５０〜Ｓ６０＞
すでに説明した図２のフローチャートのＳ１１〜Ｓ２１と同じであるので、説明は省略する。
【００４４】
＜ステップＳ６１＞  乱数出力  
図８（Ｄ）に示すように、乱数発生器１Ａは、サンプリング部１４がサンプリングした所定ビット長のデータ列の上位８ビットを乱数として擬似乱数発生部９に出力する。すなわち、乱数発生器１Ａでは、乱数発生器１等と異なり、ローテートシフト処理またはメモリ部１３へのエントリＮｏ変更処理等を行わない。このため、乱数発生器１Ａは、乱数発生器１よりも簡単な構成である。
【００４５】
＜ステップＳ６２＞  擬似乱数出力  
擬似乱数発生部９は、乱数発生器１Ａから出力された乱数をシードとして擬似乱数を発生する。
【００４６】
以上の説明のように、擬似乱数発生器１０１は、熱や電圧の影響を回避するためのキャリブレーション部を有するシステムにおいて、そのキャリブレーションの結果を用いることにより、熱や電圧などのランダム性を反映した擬似乱数生成のためのシードを安価に高速に取得することができる。
【００４７】
すなわち、擬似乱数発生器１０１の擬似乱数発生部９が発生する擬似乱数はシードが乱数であるため、高品質である。また、乱数発生器１Ａは、乱数発生器１よりも簡単な構成であるため、擬似乱数発生部９は構築が容易である。なお、もちろん、より高品質の擬似乱数を発生するために、本発明の擬似乱数発生器に第１の実施の形態の乱数発生器１または第２の実施の形態の乱数発生器を配設してもよい。
【００４８】
なお、オペレーティングシステム、デバイスドライバ、ユーザーアプリケーションのプログラムコードにおいては、マルチスレッド、マルチプロセッサ、その他の並列実行環境において、乱数発生装置からあるプログラム実行単位（プロセスまたはスレッドなど）が乱数または擬似乱数シードの値を取得処理する際、各キャリブレーションが実行される周期の時間以上、排他処理とし、その他のプログラム実行単位が値取得処理できないようにする、すなわち、１回のキャリブレーションの調整情報を取得できるのは１つのプログラム実行単位のみであることを保障することが好ましい。上記構成により、あるソフトウエアが生成される数列を利用しようとする瞬間に、その他のソフトウエアにより同時に同数列を読み取ってしまう可能性を排除できる。これは、特にセキュリティ関連のソフトウエアにおいて有効である。
【００４９】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【００５０】
【図１】第１の実施の形態の乱数発生器の概略の構成を示す構成図である。
【図２】第１の実施の形態の乱数発生器の動作の流れについて説明するためのフローチャートである。
【図３】第１の実施の形態の乱数発生器の処理を説明するための説明図である。
【図４】第２の実施の形態の乱数発生器の動作の流れについて説明するためのフローチャートである。
【図５】第２の実施の形態の乱数発生器の処理を説明するための説明図である。
【図６】第３の実施の形態の乱数発生器の概略の構成を示す構成図である。
【図７】第３の実施の形態の乱数発生器の動作の流れについて説明するためのフローチャートである。
【図８】第３の実施の形態の乱数発生器の処理を説明するための説明図である。
【符号の説明】
【００５１】
１、１Ａ…乱数発生器
２…バス
２Ａ…バス線
３、４…回路
３Ａ、４Ａ…インターフェイス
４Ｂ…クロック部
５…キャリブレーション部
９…擬似乱数発生部
１０…乱数発生部
１１…キャリブレーション情報変換部
１２…乱数生成部
１３…メモリ部
１４…サンプリング部
１５…シフト部
１６…カウント部
１０１…擬似乱数発生器
【図１】
2010140419.tif 000003
【図２】
2010140419.tif 000004
【図３】
2010140419.tif 000005
【図４】
2010140419.tif 000006
【図５】
2010140419.tif 000007
【図６】
2010140419.tif 000008
【図７】
2010140419.tif 000009
【図８】
2010140419.tif 000010