説明

乱数発生器および擬似乱数発生器

【課題】簡単な構成で高品質の乱数を発生する乱数発生器および擬似乱数発生器を実現する。
【解決手段】 回路3と回路4との間の信号を送受信する複数のバス線2Aから構成されたバス2と、信号の受信条件を動的に調整するキャリブレーション部5と、キャリブレーション部5の調整情報にもとづいて乱数を発生する乱数発生部10と、を有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、乱数発生器および擬似乱数発生器に関し、特にバスを介して受信される信号の受信条件の変動にもとづいて乱数を発生する乱数発生器および前記乱数をシードとする擬似乱数発生器に関する。
【背景技術】
【0002】
セキュリティ意識の高まりにより暗号化技術が広く用いられるようになっている。多くの暗号化技術は乱数を必要とする。簡単に乱数を得る方法として、擬似乱数生成器を用いることが一般的に行われている。擬似乱数は、確定的な計算によって求めている数列に含まれる数であるため、実行される時に入力される値、すなわちシードが同じであれば同じ乱数が発生する。このため、擬似乱数生成器では、シードとして、どのような値を用いるかが重要である。例えば、Linuxにおける/dev/randomファイルのように、コンピュータシステムへのキーボードまたはマウスからの入力情報などをプールしておき、必要に際して取り出してシードとして用いるということが行われている。しかし、この方法では、必要な量の乱数を得るまでに時間がかかることがあり、さらに、サーバーシステムなど外側からの入力頻度が低いシステムにおいては利用が容易ではなかった。
【0003】
一方、擬似乱数に対して、規則性も再現性もないために予測が不可能な物理乱数を発生する物理乱数発生器も、統計科学、金融シミュレーション、大規模な物理シミュレーション、セキュリティなどの分野で使用されている。物理乱数とは、自然現象を利用して発生させたでたらめに並んだ数列のことである。例えば、特開2007−304730号公報には、半導体素子内部の熱電子のランダムな信号を、高速デジタル処理することにより、物理乱数を発生する物理乱数発生器が開示されている。
【0004】
物理乱数は自然現象を利用しているため、予測不可能な品質の高い乱数であるが、物理乱数発生器は温度センサなど専用のハードウエアを必要とする。このため、物理乱数発生器は複雑化および大型化することため小規模のシステムにおいての利用は容易ではなかった。
【特許文献1】特開2007−304730号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
上記事情に鑑みて、本発明はなされたものであり、本発明は、簡単な構成で高品質の乱数を発生する乱数発生器および擬似乱数発生器を実現することを目的とする。
【課題を解決するための手段】
【0006】
本願発明の一態様の乱数発生器は、回路間の信号を送受信する複数のバス線から構成されたバスと、信号の受信条件を動的に調整するキャリブレーション部と、キャリブレーション部の調整情報にもとづいて乱数を発生する乱数発生部と、を有することを特徴とする乱数発生器である。
【0007】
また、本発明の別の一態様の擬似乱数発生器は、回路間の信号を送受信する複数のバス線から構成されたバスと、信号の受信条件を動的に調整するキャリブレーション部と、キャリブレーション部の調整情報にもとづいて乱数を発生する乱数発生部と、を有することを特徴とする乱数発生器と、乱数発生器が発生した乱数をシードとして擬似乱数を発生する擬似乱数発生部と、を有することを特徴とする擬似乱数発生器である。
【発明の効果】
【0008】
本発明によれば、簡単な構成で高品質の乱数を発生する乱数発生器および擬似乱数発生器を実現することができる。
【発明を実施するための最良の形態】
【0009】
<第1の実施の形態>
以下、図面を参照して本発明の第1の実施の形態の乱数発生器1について説明する。
最初に、図1を用いて本実施の形態の乱数発生器1の構成を説明する。図1は、本実施の形態の乱数発生器の概略の構成を示す構成図である。
図1に示すように、本実施の形態の乱数発生器1は、第1の回路である回路3と第2の回路である回路4との回路間の信号を、インターフェイス3Aおよびインターフェイス4Aを介して送受信するn本のバス線2A1〜2Anから構成されたバス2と、回路4が信号を受信するための受信条件である受信タイミングを動的に調整するキャリブレーション部5と、キャリブレーション部5の調整情報にもとづいて乱数を発生する乱数発生部10とを有する。なお、ここでは、n=10を例に説明する。キャリブレーション部5は、システム初期化時に最初のキャリブレーションを行うほか、システム稼動時にも動的にキャリブレーションを繰り返す。例えば、回路3はCPUであり、回路4はCPUと同じチップ上に作成された補助動作素子である。なお、回路4および回路10は、回路A側に配置されていてもよい
バス線を介しての信号の送受信のタイミングは、例えば回路4に配設されたクロック部4Bが発生するクロック信号をもとに決定される。しかし、クロック部4Bが発生したクロック信号が回路3に到達し、回路3が信号を送信し、そして回路4が受信するまでのディレイ時間は、温度等の周辺環境の状態により変動する。また、その変動の大小はそれぞれのバス線毎に様々である。このため、クロック部4Bが発生したクロック信号の位相を調整して、回路4が信号を受信する受信条件である受信タイミング等を最適化するキャリブレーションが不可欠であり、このキャリブレーションを行うのが、キャリブレーション部5である。
【0010】
キャリブレーション部5は動的に、すなわち、ある単位時間毎に、それぞれのバス線毎に、キャリブレーション処理を行う。例えば、数十MHzの動作周波数で動作しているバスの場合には、1秒間に数十M回のキャリブレーションが、バス線の数だけ行われている。そして、前述のように、キャリブレーション条件に最も大きな影響を及ぼす因子が温度である。
【0011】
図1に示すように、本実施の形態の乱数発生器1は、キャリブレーション部5が調整した、調整情報である、それぞれのバス線2Aの受信タイミングの変化にもとづいて、「0」または「1」の1ビットデータ1を発生するキャリブレーション情報変換部11と、キャリブレーション情報変換部11が生成した1ビットデータを、順に記憶するメモリ部13と、メモリ部13に記憶された1ビットデータを順にサンプリング処理し所定ビット長、例えば8ビット長の数列を得るサンプリング部14と、乱数発生回数をカウントするカウント部16と、所定のビット長の数列をカウント部16の情報にもとづいてローテートシフトし乱数を発生するシフト部15と、を有する。メモリ部13は、LRU(Least Recently Used)メモリ部である。
【0012】
以上の説明のように、回路3と回路4との間で信号を送受信するバス2、およびキャリブレーション部5は、本発明の乱数発生器1にとり重要な構成要素ではあるが、その本来の目的は別であり、乱数発生器1も利用する構成要素である。
【0013】
次に図2および図3を用いて本実施の形態の乱数発生器1の動作の流れについて説明する、図2は、本実施の形態の乱数発生器の動作の流れについて説明するためのフローチャートであり、図3は、本実施の形態の乱数発生器の処理を説明するための説明図である。以下、図2のフローチャートに従い説明する。
【0014】
<ステップS10> カウンタM初期化
最初に、乱数発生回数をカウントするカウント部16のカウンタMを「1」に初期化する。
【0015】
<ステップS11> キャリブレーション
キャリブレーション部5は、n本のバス線のそれぞれについてキャリブレーション処理を行い、受信状態を最適の状態に調整する。ここで、図3(A)は、最適化されたタイミングである調整情報を示している。ここでは、クロックが最良のタイミング(信号が立ち上がりきった、もしくは立ち下がり切った状態)で入った場合を100%、それに対して最悪タイミング(信号が意味をなさない状態)の場合を0%として規格化されている例を示している。
【0016】
<ステップS12> カウンタK初期化
n本のバスのキャリブレーションの調整情報を順に処理するため、カウント部16のカウンタKを「1」に初期化する。なお、ループ変数Kについてのループは、並列処理、すなわち、各バスについて同時に処理してもよい。
【0017】
<ステップS13、ステップS14、ステップS18> キャリブレーション情報変換1
図3に示すように、キャリブレーション情報変換部11はバス線NoがKのバス線のキャリブレーションの調整情報が、前回の調整情報と比較して、タイミングが増加している場合(バス線No.1、3、4等)、メモリ部13のエントリNo.Kに、「1」が出力される。
【0018】
<ステップS15、ステップS16、ステップS18> キャリブレーション情報変換2
図3に示すように、キャリブレーション情報変換部11はバス線NoがKのバス線の調整情報が、前回の調整情報と比較して、タイミングが減少している場合(バス線No.2、6、7等)、メモリ部13のエントリNo.Kに、「0」が出力される。
【0019】
<ステップS17、ステップS18> キャリブレーション情報変換3
キャリブレーション情報変換部11はバス線NoがKのバス線の調整情報が、前回の調整情報と比較して、タイミングが同じ場合、メモリ部13のエントリNo.Kには、前回と同じ値が出力される。
【0020】
<ステップS19、ステップS20> n本のバス線処理
カウンタKがバス線の本数n、例えば10になるまで、キャリブレーション情報変換部11は処理を行う。
【0021】
<ステップS21> サンプリング
図3(D)に示すように、サンプリング部14は、メモリ部13に記憶されているnビットのデータ列の上位から所定のビット数、例えば8ビットの数列をサンプリングする。
【0022】
なお、ステップS21で得られる数列は乱数であるが、本実施の形態の乱数発生器1は、より高品質の乱数を発生するためにステップS22以降の処理を行う。
【0023】
<ステップS22> ローテートシフト
シフト部15は、サンプリング部14がサンプリングしたnビット長のデータ列を、カウント部16のカウントMの数値分だけローテートシフト処理する。
【0024】
ここで、ローテートシフト処理とは、図3(E)に示すように、所定位置の1ビットデータを最上位にし、順に位置を変化する処理である。図3(E)ではM=4の場合を示しており、サンプリングされた8ビット長のデータ列の4番目のビットを最上位ビットとしてシフトしている。
【0025】
<ステップS23> 乱数出力
乱数生成部12は、シフト部15がローテートシフト処理した8ビット長のデータ列を乱数として出力する。
【0026】
<ステップS24、ステップS25> 乱数出力継続
シフト部15がローテートシフトする値Mを1ずつ増加し、乱数発生を継続して行う。Mがデータ長nになった場合には、再びMを1に初期化する。
【0027】
以上の説明のように、本実施の形態の乱数発生器1は、回路3および回路4に他の目的のために具備されているキャリブレーション部5のキャリブレーション情報をもとに乱数を発生するため簡単な構成である。すなわち、第1の回路である回路3と第2の回路である回路4とは、乱数発生器1に不可欠な回路であるが、乱数発生器1の専用回路ではない。
【0028】
そして乱数発生器1は簡易な構成でありながら高速に、かつ恒常的に乱数を発生させることができる。そして、キャリブレーションのタイミングは温度に依存しているため、乱数発生器1が発生する乱数は予測不可能な物理乱数である。すなわち、乱数発生器1は簡単な構成で高品質の乱数を発生することができる。
【0029】
なお、上記説明では説明を簡単にするために10本のバス線2Aを有するバス2のキャリブレーション情報をもとに乱数を発生する乱数発生器1について説明したが、バス線の数は例えばあるCPUでは100本以上、例えば144本であり、このCPUのバスのキャリブレーションを利用した本発明の乱数発生器は64ビット長または128ビット長のより長いデータ長の乱数を発生することもできる。なお、乱数発生器1は全てのバス線2Aの情報を用いる必要はない。
【0030】
また、上記説明ではキャリブレーションの対象としてタイミングを例に説明したが、例えば電流値、容量等、動的にキャリブレーションが行われる種々の情報を用いてもよい。
【0031】
さらに、キャリブレーション情報変換部11では、タイミングが増加した場合にビットデータを「1」、減少した場合に「0」としたが、タイミングが増加した場合にビットデータを「0」、減少した場合に「1」としてもよいし、所定の割合以上、増減があった場合にのみビットデータを入れ替えても良い。
【0032】
<第2の実施の形態>
以下、図面を参照して本発明の第2の実施の形態の乱数発生器について説明する。本発明の第2の実施の形態の乱数発生器は、第1の実施の形態の乱数発生器1と類似しているため、同じ構成要素には同じ符号を付し同じ説明は省略する。
【0033】
ここで、図4は、本実施の形態の乱数発生器の動作の流れについて説明するためのフローチャートであり、図5は、本実施の形態の乱数発生器の処理を説明するための説明図である。以下、図4のフローチャートに従い説明する。
【0034】
<ステップS30〜S37>
ステップS30〜S37は、すでに説明した図2のステップS10〜S17と同じであるので説明は省略する。
【0035】
<ステップS38> エントリ入替
本実施の形態の乱数発生器では、キャリブレーション情報変換部11は、調整情報が前回の調整情報と同じであったバス線2Aにもとづいた1ビットデータを記憶するメモリ部13のエントリNoを1つ下位と入れ替える。
【0036】
図3に示したように、初期状態では、メモリ部13の各エントリには上位No.からバス線No.1〜10の情報をもとにした1ビットデータが、バス線No.の順に記録されている。しかし、例えば、図5(A)および(B)に示すように、バス線No.K=5のタイミングはX回目に84.2%であり、(X+1)回目にも同じ84.2%であった。この場合、キャリブレーション情報変換部11は、バス線No.K=5の情報をもとにした1ビットデータを、メモリ部13のエントリNo.6に記憶し、バス線No.K=6の情報をもとにした1ビットデータを、メモリ部13のエントリNo.5に記憶するように変更する。そして、この変更は次回以降の乱数発生においても維持される。このため受信タイミングが変化しにくいバス線2Aの情報をもとにした1ビットデータは、繰り返し処理によって徐々にメモリ部13の下位にエントリされることになる。
【0037】
バス線2Aには、それぞれ特性があり、キャリブレーションの調整情報が変動しにくいバス線2Aの調整情報にもとづいた1ビットデータは変動しにくいが、第2の実施の形態の乱数発生器ではビットが固定化するのを防ぐことができる。すなわち、かかるバス線のメモリ部13へのエントリNoを下位に移動することにより、サンプリング部14がサンプリングする上位ビットに、変動しにくいバス線2Aの調整情報にもとづいた1ビットデータが入らなくなる。すなわち、キャリブレーション前後でタイミングに変化の起きる頻度が少ないバス線の情報を極力除くことにより、よりランダム性の高い数列を生成することが可能となる。
【0038】
<ステップS39〜S46>
ステップS39〜S46は、すでに説明した図2のステップS18〜S25と同じであるので説明は省略する。
【0039】
本実施の形態の乱数発生器は第1の実施の形態の乱数発生器1が有する効果に加えて、より高品質の乱数を発生することができる。
【0040】
<第3の実施の形態>
以下、図面を参照して本発明の第3の実施の形態の擬似乱数発生器101について説明する。本発明の第3の実施の形態の擬似乱数発生器101は、第1の実施の形態の乱数発生器1と類似しているため、同じ構成要素には同じ符号を付し、同じ説明は省略する。
ここで、図6は本実施の形態の擬似乱数発生器の概略の構成を示す構成図であり、図7は、本実施の形態の擬似乱数発生器の動作の流れについて説明するためのフローチャートであり、図8は、本実施の形態の擬似乱数発生器の処理を説明するための説明図である。
【0041】
図6に示すように本実施の形態の擬似乱数発生器101は、乱数発生器1Aと、乱数発生器1Aが発生した乱数をシードとして擬似乱数を発生する擬似乱数発生部9とを有する。乱数発生器1が発生する乱数は物理乱数であり予測不可能であるが、より簡単な構成で高品質の乱数を得るために、擬似乱数発生器101は、擬似乱数発生部9による処理を行う。
【0042】
以下、図7のフローチャートに従い擬似乱数発生器101の処理について説明する。
【0043】
<ステップS50〜S60>
すでに説明した図2のフローチャートのS11〜S21と同じであるので、説明は省略する。
【0044】
<ステップS61> 乱数出力
図8(D)に示すように、乱数発生器1Aは、サンプリング部14がサンプリングした所定ビット長のデータ列の上位8ビットを乱数として擬似乱数発生部9に出力する。すなわち、乱数発生器1Aでは、乱数発生器1等と異なり、ローテートシフト処理またはメモリ部13へのエントリNo変更処理等を行わない。このため、乱数発生器1Aは、乱数発生器1よりも簡単な構成である。
【0045】
<ステップS62> 擬似乱数出力
擬似乱数発生部9は、乱数発生器1Aから出力された乱数をシードとして擬似乱数を発生する。
【0046】
以上の説明のように、擬似乱数発生器101は、熱や電圧の影響を回避するためのキャリブレーション部を有するシステムにおいて、そのキャリブレーションの結果を用いることにより、熱や電圧などのランダム性を反映した擬似乱数生成のためのシードを安価に高速に取得することができる。
【0047】
すなわち、擬似乱数発生器101の擬似乱数発生部9が発生する擬似乱数はシードが乱数であるため、高品質である。また、乱数発生器1Aは、乱数発生器1よりも簡単な構成であるため、擬似乱数発生部9は構築が容易である。なお、もちろん、より高品質の擬似乱数を発生するために、本発明の擬似乱数発生器に第1の実施の形態の乱数発生器1または第2の実施の形態の乱数発生器を配設してもよい。
【0048】
なお、オペレーティングシステム、デバイスドライバ、ユーザーアプリケーションのプログラムコードにおいては、マルチスレッド、マルチプロセッサ、その他の並列実行環境において、乱数発生装置からあるプログラム実行単位(プロセスまたはスレッドなど)が乱数または擬似乱数シードの値を取得処理する際、各キャリブレーションが実行される周期の時間以上、排他処理とし、その他のプログラム実行単位が値取得処理できないようにする、すなわち、1回のキャリブレーションの調整情報を取得できるのは1つのプログラム実行単位のみであることを保障することが好ましい。上記構成により、あるソフトウエアが生成される数列を利用しようとする瞬間に、その他のソフトウエアにより同時に同数列を読み取ってしまう可能性を排除できる。これは、特にセキュリティ関連のソフトウエアにおいて有効である。
【0049】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【0050】
【図1】第1の実施の形態の乱数発生器の概略の構成を示す構成図である。
【図2】第1の実施の形態の乱数発生器の動作の流れについて説明するためのフローチャートである。
【図3】第1の実施の形態の乱数発生器の処理を説明するための説明図である。
【図4】第2の実施の形態の乱数発生器の動作の流れについて説明するためのフローチャートである。
【図5】第2の実施の形態の乱数発生器の処理を説明するための説明図である。
【図6】第3の実施の形態の乱数発生器の概略の構成を示す構成図である。
【図7】第3の実施の形態の乱数発生器の動作の流れについて説明するためのフローチャートである。
【図8】第3の実施の形態の乱数発生器の処理を説明するための説明図である。
【符号の説明】
【0051】
1、1A…乱数発生器
2…バス
2A…バス線
3、4…回路
3A、4A…インターフェイス
4B…クロック部
5…キャリブレーション部
9…擬似乱数発生部
10…乱数発生部
11…キャリブレーション情報変換部
12…乱数生成部
13…メモリ部
14…サンプリング部
15…シフト部
16…カウント部
101…擬似乱数発生器

【特許請求の範囲】
【請求項1】
回路間の信号を送受信する複数のバス線から構成されたバスと、
前記信号の受信条件を動的に調整するキャリブレーション部と、
前記キャリブレーション部の調整情報にもとづいて乱数を発生する乱数発生部と、を有することを特徴とする乱数発生器。
【請求項2】
前記キャリブレーション部が調整する前記受信条件が受信タイミングであり、
前記乱数発生部が、それぞれの前記バス線の前記受信タイミングの変化にもとづいて、「0」または「1」の1ビットデータを発生するキャリブレーション情報変換部を有することを特徴とする請求項1に記載の乱数発生器。
【請求項3】
前記乱数発生部が、
前記キャリブレーション情報変換部が発生する1ビットデータを順に記憶するメモリ部と、
前記メモリ部に記憶された前記1ビットデータを順にサンプリングし、前記乱数のビット長の数列を得るサンプリング処理を行うサンプリング部と、
前記サンプリング部の前記サンプリング処理毎に前記数列をローテートシフト処理し、前記乱数を発生するシフト部と、を有することを特徴とする請求項2に記載の乱数発生器。
【請求項4】
前記キャリブレーション情報変換部が、前記バス線の前記受信タイミングが変化しなかった場合、当該バス線にもとづく前記1ビットデータが前記メモリ部に記憶されるエントリ順番を減ずることを特徴とする請求項3に記載の乱数発生器。
【請求項5】
請求項1から4のいずれか1項に記載の乱数発生器と、
前記乱数発生器が発生した乱数をシードとして擬似乱数を発生する擬似乱数発生部と、を有することを特徴とする擬似乱数発生器。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2010−140419(P2010−140419A)
【公開日】平成22年6月24日(2010.6.24)
【国際特許分類】
【出願番号】特願2008−318666(P2008−318666)
【出願日】平成20年12月15日(2008.12.15)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】