(57)【要約】  乱数を発生し、処理するための方法、装置、およびコンピュータプログラム製品が提供される。装置は、プロセッサ、乱数発生器、および1対のバッファを含む処理システムを含む。第1のバッファは、乱数発生器によって発生された低エントロピ乱数を受け取り、第2のバッファは、高エントロピ乱数を処理システムに直接供給する。処理システムは、処理システムによって実行される命令に応答して第2のバッファに直接アクセスすることができる。処理システムは、バッファの占有率レベルに基づいて、第1のバッファから読み出した低エントロピ乱数を調整して、高エントロピ乱数を取得し、次いで、高エントロピ乱数を第2のバッファに記憶することによって、割込みに応答する。
2016512643.tif 000002
【特許請求の範囲】
【請求項１】
乱数発生器と、
前記乱数発生器によって発生された乱数を受け取る第1の記憶デバイスと、
処理システムとを含み、前記処理システムが、
割込みに応答して前記第1の記憶デバイスから乱数のシーケンスを読み出し、
前記乱数のシーケンスを調整することによって少なくとも1つの調整済み乱数を発生させ、
前記少なくとも1つの調整済み乱数を第2の記憶デバイスに記憶するように構成され、
前記第2の記憶デバイスが、複数の調整済み乱数を維持し、前記処理システムによって実行される命令に応答して前記複数の調整済み乱数のうちの1つを出力するように構成される、装置。
【請求項２】
前記第2の記憶デバイスの占有率が第1の閾値最小占有率より下になると、前記割込みをアサートする割込み論理部をさらに含む、請求項1に記載の装置。
【請求項３】
前記第1の記憶デバイスの占有率が第2の閾値最小占有率を超えると、前記割込み論理部が前記割込みをアサートする、請求項2に記載の装置。
【請求項４】
前記第2の閾値最小占有率が、前記少なくとも1つの調整済み乱数を生成するのに必要とされる乱数の個数に対応する、請求項3に記載の装置。
【請求項５】
前記処理システムが、前記割込みを受け取るプロセッサを含み、前記プロセッサが、
前記割込みの原因を決定し、
前記第2の記憶デバイスの枯渇によって、または前記第2の記憶デバイスの占有率が閾値最小占有率より下になることによって、前記割込みが引き起こされると、前記少なくとも1つの調整済み乱数の発生を開始する
ように構成される、請求項1に記載の装置。
【請求項６】
前記プロセッサは、
前記割込みが前記第2の記憶デバイスの枯渇によって引き起こされると、前記少なくとも1つの調整済み乱数が前記第2の記憶デバイスに記憶されるまで、処理システムを待たせるように構成される、請求項5に記載の装置。
【請求項７】
前記プロセッサは、
前記第2の記憶デバイスが空であるときに前記第2の記憶デバイスにアクセスするアプリケーションによって前記割込みが引き起こされると、前記少なくとも1つの調整済み乱数が前記第2の記憶デバイスに記憶されるまで、処理システムを待たせるように構成される、請求項5に記載の装置。
【請求項８】
前記プロセッサは、
前記第1の記憶デバイスが、前記少なくとも1つの調整済み乱数を生成するのに十分な乱数を含むまで、処理システムを待たせるように構成される、請求項5に記載の装置。
【請求項９】
前記乱数のシーケンスが、暗号関数を使用して調整される、請求項1に記載の装置。
【請求項１０】
前記乱数のシーケンスが、ハッシュ関数を使用して調整される、請求項1に記載の装置。
【請求項１１】
前記乱数のシーケンスが、ブロック暗号関数を使用して調整される、請求項1に記載の装置。
【請求項１２】
前記乱数のシーケンスが、前記乱数のシーケンス中の乱数のエントロピに関して、前記少なくとも1つの調整済み乱数のエントロピを増加させるように構成されたアルゴリズムを使用して調整される、請求項1に記載の装置。
【請求項１３】
前記処理システムによって実行される前記命令が、アプリケーションによって起動され、前記処理システムに前記第2の記憶デバイスに直接アクセスさせる、請求項1に記載の装置。
【請求項１４】
前記処理システムによって実行される前記命令が機械語命令を含む、請求項13に記載の装置。
【請求項１５】
前記第1の記憶デバイスおよび前記第2の記憶デバイスの各々が、先入れ先出しデバイスを含む、請求項1に記載の装置。
【請求項１６】
乱数を発生する方法であって、
割込みに応答して、物理的乱数発生器によって発生された乱数を第1の記憶デバイスから読み出すステップと、
前記乱数発生器によって発生された前記乱数を調整して、少なくとも1つの高エントロピ乱数を取得するステップと、
前記少なくとも1つの高エントロピ乱数を第2の記憶デバイスに記憶するステップと
を含み、
前記第2の記憶デバイスが、プロセッサによって実行される命令に応答して前記少なくとも1つの高エントロピ乱数を出力するように構成される、方法。
【請求項１７】
前記第2の記憶デバイスの占有率が第1の閾値最小占有率より下になると、前記割込みがアサートされる、請求項16に記載の方法。
【請求項１８】
前記第1の記憶デバイスの占有率が第2の閾値最小占有率を超えると、前記割込みがアサートされる、請求項17に記載の方法。
【請求項１９】
前記第2の閾値最小占有率が、前記少なくとも1つの調整済み乱数を生成するのに必要とされる乱数の個数に対応する、請求項18に記載の方法。
【請求項２０】
前記乱数発生器によって発生された前記乱数を調整するステップが、前記乱数発生器によって発生された複数の前記乱数をハッシュするステップを含む、請求項16に記載の方法。
【請求項２１】
前記乱数発生器によって発生された前記乱数を調整するステップが、ブロック暗号関数を使用するステップを含む、請求項16に記載の方法。
【請求項２２】
前記乱数発生器によって発生された前記乱数を調整するステップが、前記第2の記憶デバイスに記憶される複数の高エントロピ乱数間の相関を減少させるように選択された暗号関数を使用するステップを含む。請求項16に記載の方法。
【請求項２３】
前記乱数発生器によって発生された前記乱数を調整するステップは、
前記第1の記憶デバイスが、前記少なくとも1つの調整済み乱数を生成するのに十分な乱数を含むまで、待つステップ
を含む、請求項16に記載の方法。
【請求項２４】
乱数を発生するための装置であって、
割込みに応答して、乱数発生器によって発生された乱数を記憶デバイスから読み出すための手段と、
前記乱数発生器によって発生された前記乱数を調整して、少なくとも1つの高エントロピ乱数を取得するための手段と、
前記少なくとも1つの高エントロピ乱数を記憶するための手段と
を含み、
記憶する前記手段が、プロセッサによって実行される機械語命令に応答して前記少なくとも1つの高エントロピ乱数を出力するように構成される、装置。
【請求項２５】
前記少なくとも1つの高エントロピ乱数を記憶するための前記手段が、先入れ先出し(FIFO)デバイスを含む、請求項24に記載の装置。
【請求項２６】
前記割込みをアサートするための手段をさらに含み、前記FIFOデバイスの占有率が第1の閾値最小占有率より下になると、前記割込みがアサートされる、請求項25に記載の装置。
【請求項２７】
前記記憶デバイス中のFIFOデバイスの占有率が第2の閾値最小占有率を超えると、前記割込みがアサートされる、請求項26に記載の装置。
【請求項２８】
前記乱数を調整するための前記手段が、前記乱数発生器によって発生された複数の前記乱数をハッシュするように構成される、請求項24に記載の装置。
【請求項２９】
前記乱数発生器によって発生された前記乱数を調整するための前記手段が、ブロック暗号関数を使用する、請求項20に記載の装置。
【請求項３０】
前記乱数発生器によって発生された前記乱数を調整するための前記手段が、前記記憶デバイスから読み出される複数の高エントロピ乱数間の相関を減少させるように選択された暗号関数を使用する、請求項20に記載の装置。
【請求項３１】
1つまたは複数の命令を有するプロセッサ可読記憶媒体であって、前記1つまたは複数の命令は、それが少なくとも1つの処理回路によって実行されると、前記少なくとも1つの処理回路に、
割込みに応答して、乱数発生器によって発生された乱数を第1のバッファから読み出し、
前記乱数発生器によって発生された前記乱数を調整して、少なくとも1つの高エントロピ乱数を取得し、
前記少なくとも1つの高エントロピ乱数を第2のバッファに記憶するようにさせ、
前記第2のバッファが、プロセッサによって実行される機械語命令に応答して前記少なくとも1つの高エントロピ乱数を出力するように構成される、プロセッサ可読記憶媒体。
【請求項３２】
第2のFIFOデバイスの占有率が第1の閾値最小占有率より下になると、前記割込みがアサートされる、請求項31に記載のプロセッサ可読記憶媒体。
【請求項３３】
前記第1のバッファの占有率が第2の閾値最小占有率を超えると、前記割込みがアサートされる、請求項32に記載のプロセッサ可読記憶媒体。
【請求項３４】
前記第2の閾値最小占有率が、前記少なくとも1つの調整済み乱数を生成するのに必要とされる乱数の個数に対応する、請求項33に記載のプロセッサ可読記憶媒体。
【請求項３５】
前記乱数発生器によって発生された前記乱数が、前記乱数発生器によって発生された複数の前記乱数をハッシュすることによって調整される、請求項31に記載のプロセッサ可読記憶媒体。
【請求項３６】
前記乱数発生器によって発生された前記乱数が、ブロック暗号関数を使用して調整される、請求項31に記載のプロセッサ可読記憶媒体。
【請求項３７】
前記乱数発生器によって発生された前記乱数が、前記第2のバッファに記憶される複数の高エントロピ乱数間の相関を減少させるように選択された暗号関数を使用して調整される、請求項31に記載のプロセッサ可読記憶媒体。
【請求項３８】
前記1つまたは複数の命令は、前記少なくとも1つの処理回路を、
前記乱数発生器によって発生された前記乱数を調整する前に、前記第1のバッファが、前記少なくとも1つの調整済み乱数を生成するのに十分な乱数を含むまで、待たせる、請求項31に記載のプロセッサ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、デジタル通信システムに関し、より詳細には、乱数を処理システムに供給するための装置および方法に関する。
【背景技術】
【０００２】
乱数は、通信システム、セキュリティおよび暗号化、シミュレーションおよびゲーミング、ならびに他の用途で広範囲に使用される。乱数は、普通、無相関であるかまたは明白なパターンがないように見える一連の数を発生するハードウェア乱数発生器(RNG)を使用して取得される。RNGは、特に乱数を頻繁に利用するシミュレーションおよびゲーミングなどの用途ではスループットを改善するためにハードウェアで実装される。RNGは、さらに、乱数を発生し、乱数の要求と受取りとの間の時間として測定することができる待ち時間を最小にするために必要とされる処理オーバヘッドを減少させるために使用される。
【０００３】
RNGは、一般に、擬似乱数を発生し、擬似乱数はある程度相関され、それゆえに、完全には予測不可能ではない。エントロピ測定を使用して、乱数のランダム性の品質を定量化することができる。最新のRNGは、発生した10ビットに対して8ビットの実際のエントロピ(0.8のエントロピレート)をもたらすことができ、それは、一般に、コンピューティングシステムで必要とされるエントロピレートよりも小さい。
【０００４】
システムによっては、著しく高いエントロピをもつ乱数を取得するために、RNGによって発生された低エントロピ数(low-entropy number)を暗号関数を使用して調整する。従来のシステムは、速く、非同期で、および低応答待ち時間で乱数を発生できるようにするために、RNG中に暗号関数論理回路を含む。暗号関数の追加は、RNGハードウェアの複雑さを著しく増加させ、それは、集積回路面積の使用量の増加および電力消費の増加を引き起こす。
【０００５】
その結果、ダイ面積の占有率が少なく、システム電力の消費が少ない高スループット低待ち時間RNGの必要性がある。
【発明の概要】
【課題を解決するための手段】
【０００６】
本開示の一態様では、方法、コンピュータプログラム製品、および装置が提供される。装置は、プロセッサと、一時的および非一時的記憶装置のいくつかの組合せとを含む処理システムを含むことができる。
【０００７】
本開示の一態様では、装置は、乱数発生器と、乱数発生器によって発生された乱数を受け取る第1の記憶デバイスと、処理システムとを含む。処理システムは、割込みに応答して第1の記憶デバイスから乱数のシーケンスを読み出すように構成することができる。処理システムは、乱数のシーケンスを調整することによって少なくとも1つの調整済み乱数を発生するように構成することができる。処理システムは、少なくとも1つの調整済み乱数を第2の記憶デバイスに記憶するように構成することができる。第2の記憶デバイスは、複数の調整済み乱数を維持し、処理システムによって実行される命令に応答して複数の調整済み乱数のうちの1つを出力するように構成することができる。
【０００８】
本開示の一態様では、乱数を発生する方法は、割込みに応答して、物理的乱数発生器によって発生された乱数を第1の記憶デバイスから読み出すステップと、乱数発生器によって発生された乱数を調整して、少なくとも1つの高エントロピ乱数を取得するステップと、少なくとも1つの高エントロピ乱数を第2の記憶デバイスに記憶するステップとを含む。第2の記憶デバイスは、プロセッサによって実行される命令に応答して少なくとも1つの高エントロピ乱数を出力するように構成することができる。
【０００９】
本開示の一態様では、乱数を発生するための装置は、割込みに応答して、乱数発生器によって発生された乱数を記憶デバイスから読み出すための手段と、乱数発生器によって発生された乱数を調整して、少なくとも1つの高エントロピ乱数を取得するための手段と、少なくとも1つの高エントロピ乱数を記憶するための手段とを含む。少なくとも1つの高エントロピ乱数を記憶するための手段は、プロセッサによって実行される機械語命令に応答して少なくとも1つの高エントロピ乱数を出力するように構成される。
【００１０】
本開示の一態様では、プロセッサ可読記憶媒体は1つまたは複数の命令を有し、1つまたは複数の命令は、それが少なくとも1つの処理回路によって実行されると、少なくとも1つの処理回路に、割込みに応答して、乱数発生器によって発生された乱数を第1のバッファから読み出し、乱数発生器によって発生された乱数を調整して、少なくとも1つの高エントロピ乱数を取得し、少なくとも1つの高エントロピ乱数を第2のバッファに記憶するようにさせる。第2のバッファは、プロセッサによって実行される機械語命令に応答して、少なくとも1つの高エントロピ乱数を出力するように構成することができる。
【図面の簡単な説明】
【００１１】
【図１】処理システムで使用するための乱数の発生を示す図である。
【図２】低応答待ち時間での乱数発生を示す図である。
【図３】割込み駆動ハードウェア乱数発生器を示す図である。
【図４】コンピューティングシステムでの割込み駆動ハードウェア乱数発生器の使用を示すブロック概略図である。
【図５】割込み駆動ハードウェア乱数発生器におけるバッファフロー制御を示すブロック概略図である。
【図６】本開示のいくつかの態様による方法を示す流れ図である。
【図７】割込み駆動ハードウェア乱数発生器を含む装置のブロック概略図である。
【発明を実施するための形態】
【００１２】
以下の説明において、特定の詳細が、本開示の様々な態様を十分に理解するように与えられる。しかしながら、態様はこれらの特定の詳細なしに実践できることを当業者は理解されよう。たとえば、回路は、不必要な詳細で態様を不明瞭にするのを避けるためにブロック図で示すことがある。他の例では、周知の回路、構造、および技法は、本開示の態様を不明瞭にしないために詳細に示さないことがある。
【００１３】
図1は、ハードウェア乱数処理システムまたは回路112からの高エントロピ乱数136を取得する処理システム110を示す図100である。乱数処理システム112は、周辺機器として、または処理システム110が特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、システムオンチップ、または他のプログラマブルロジックに設けられる場合を含めて別の形で、処理システム110に埋め込むことができる。図1において、ハードウェア要素とソフトウェア要素との間の分割が点線199で描かれているが、ソフトウェアは、処理システム110の物理的記憶媒体116に記憶され、プロセッサ114によって実行されるコードおよびデータで具現化することができる。
【００１４】
乱数処理システム112は、低エントロピ数130を発生するRNGデバイス102を含むことができる。低エントロピ数130は、ある程度のランダム性を示すデバイスまたはメカニズムから取得されたシード数から発生される擬似乱数を含むことができる。1つの例では、シード数は、熱トランスデューサ、機械トランスデューサ、または他のトランスデューサから取得することができる。別の例では、シード数は、ランダム性に近似するように、迅速に変化するデジタル回路から非周期的間隔でサンプリングされ得る。擬似乱数は、タイマ回路の下位ビット、高周波データバスで観察される値、測定された受信機搬送波強度、システム実時間クロックの下位ビットなどのコンピューティングシステムレジスタから、または測定した物理現象を数値に変換するトランスデューサから取得される何か他の統計的にランダムな「ノイズ」信号から不定期ベースで捕捉された「微視的」観察("microscopic" observations)に基づいて発生することができる。これらの観測値を使用して、擬似乱数発生器をシードし、その結果、RNG102によって発生された数130のエントロピを増加させることができる。
【００１５】
RNG102は、若干相関され、比較的低いエントロピを有する乱数130であって、処理システム110を含むコンピューティングシステムによって必要とされるエントロピレートより下のエントロピレートを有することがある乱数130を生成する可能性がある。乱数発生回路102によって発生される数136のエントロピは、RNG102の出力130を調整することによって増加させることができる。1つの例では、RNG102によって発生される一連の擬似乱数130をハッシュ関数またはブロック暗号関数104を使用して調整して、著しく高いエントロピをもつ乱数132を取得することができる。関数104によって生成されたより高いエントロピの乱数132は、FIFOデバイス106にバッファすることができ、それは、次いで、ソフトウェアコマンドによって読み出すことができる。FIFOデバイス106は、アイテムがハードウェアバッファに書き込まれたのと同じ順序でアイテムが読み出されるハードウェアバッファとして実装することができる。1つの例では、FIFOデバイス106は、パイプラインに接続された複数のレジスタを含み、それによって、FIFOデバイス106の入力に書き込まれた数は、数がFIFOデバイス106に書き込まれたのと同じシーケンスでパイプラインを出て行く。別の例では、FIFOデバイス106は、循環バッファとして組織されたメモリデバイス、または待ち行列を含むことができる。
【００１６】
処理システム110は、オペレーティングシステム120によって制御されるプロセッサ114を含むことができる。アプリケーション122は、乱数処理システム112から乱数136を取得するためにオペレーティングシステム120にシステムコールを行うことができる。一般に、乱数136を要請するシステムコールは、FIFOデバイス106から数134を引き出すソフトウェア機能を開始させ、システムコールにより、バスインターフェース108は、バッファされた数136を、システムバス118に、および/またはプロセッサ114またはシステム110の他の構成要素によって制御される入力/出力(I/O)バスまたはチャネルに与える。ソフトウェア機能は、システムコールを行ったアプリケーション122に送出するために乱数136をさらにバッファするかまたは待ち行列に入れることができる。オペレーティングシステム120は、あるシステム優先順位に従ってタスクをスケジューリングすることができる。第1のアプリケーションによってなされたシステムコールは、コンテクスト変更を開始することができ、それによって、第2のアプリケーションがプロセッサ114の制御を獲得し、システムコール応答は、第1のアプリケーションがプロセッサ114の制御を再獲得した場合にのみ受け取られ得る。それ故に、アプリケーション122は、システムコールによって乱数を取得する際にかなりの遅延を経験することがある。
【００１７】
図2は、ハードウェア乱数処理システムまたは回路212からアプリケーション222に低応答待ち時間で高エントロピ乱数236を供給することができる処理システム210を示す概略図200である。この例では、乱数処理システム212によって発生された乱数236は、プロセッサ214に対応する命令セットを使用してアプリケーション222が直接アクセスできるレジスタ/バッファ208に記憶される。したがって、命令を1つまたは複数のアプリケーション222に挿入し、それにより、アプリケーション222は乱数236をレジスタ/バッファ208から直接読み出すことができるようになる。図1に記載した例と同様に、RNG202によって発生された擬似乱数230はハッシュ関数、ブロック暗号、または他の調整関数204を使用して調整して、著しく高いエントロピをもつ乱数232を取得することができる。ブロック暗号関数204によって生成されたより高いエントロピの乱数232は、FIFOデバイス206にバッファすることができる。次いで、FIFOデバイス206は、処理システム210および/またはプロセッサ214の制御下でレジスタ/バッファ208を通して乱数234を供給することができる。この例では、乱数236へのアクセスは、オペレーティングシステム220によって管理することもでき、少なくともいくつかのアプリケーション222は、システムコールによって乱数236を取得することができる。
【００１８】
プロセッサ214の命令セットに用意された命令を使用するか、または処理システム210の構成および処理システム210の他の構成要素に基づいて複数の命令を含むマクロを使用して、アプリケーション222は乱数236にアクセスすることができる。1つの例では、FIFOデバイス206は、アドレス指定可能なレジスタまたはバッファ208を通してアクセスすることができる。レジスタまたはバッファ208は、プロセッサ214の内部にまたは外部に設けることができる。プロセッサ214は、事前定義されたレジスタ場所をアドレス指定することによって、および/またはプロセッサ214のアドレス空間中の事前定義された場所で、乱数236にアクセスすることができる。アプリケーション222は、事前定義されたアドレスまたはアドレスのブロックからプロセッサ214がデータをフェッチするための1つまたは複数の命令を実行することによって、またはプロセッサ214によって定義された1組のレジスタからデータをフェッチすることによって、乱数236にアクセスすることができる。プロセッサ214の命令セットは、プログラマが乱数236に直接アクセスできるようにする命令を含むことができ、かつ/または命令セットは、アプリケーション222が乱数236に直接アクセスできるように拡張することができる。プログラミング言語命令による乱数236への直接アクセスは、FIFOデバイス206および/またはレジスタ/バッファ208が使い尽くされており、プロセッサが、乱数236が発生し終わるまで待つのを強いられる場合、アプリケーション222がデッドロックされることがあるという危険を伴う。
【００１９】
従来のシステムは、一般に、乱数136、236への要請を満たすのに十分な速度で乱数処理システム112、212が動作するのを保証するために、物理的論理でRNG回路102、202および高速調整回路104、204を実装する。ハードウェアで実装された調整回路104、204を含むと、複雑であり、集積回路の大きい物理的面積を占める乱数処理システム112または212がもたらされることがある。その上、乱数処理システム112、212は、かなり大きい電力を消費することがあり、モバイルデバイス中のバッテリ寿命を減少させることがある。
【００２０】
本発明のいくつかの実施形態は、高スループット、低待ち時間、高エントロピ乱数136、236を生成するとともに、従来のシステムよりもICに占める面積を少なく、システム電力の消費を少なくすることができるように乱数発生システム112、212を変更する。いくつかの実施形態では、低エントロピ数130、230の調整は、処理システム110、210のプロセッサ114、214によって少なくとも部分的に実行される。
【００２１】
図3は、従来の乱数発生システムに見出される問題のうちの多くを克服する乱数発生システム300を示すブロック概略図である。たとえば、乱数発生システム300は、一般に、ICに占める占有面積が少なく、電力消費は、調整が一般に連続して実行されないので制御することができる。乱数発生システム300は単一のICデバイスで具現化することができ、または複数の別個のデバイスを使用して実装することができる。乱数発生システム300は、処理システム310と、一時的および非一時的記憶装置304、306、および308の何らかの組合せとを含むか、またはそれらと相互作用することができる。メモリ308は、処理システム310の動作を制御するのに使用されるデータおよびコードを記憶するために、処理システム310によって使用される記憶デバイスを含むことができる。メモリ308は、追加として、低エントロピ乱数、高エントロピ乱数、およびそれらの中間物を記憶するために使用することができる。
【００２２】
いくつかの実施形態では、RNG302は、擬似乱数を含むことができる低エントロピ数322を発生する。RNG302は、いくつかの通信システム、セキュリティ、ゲーミング、および/またはシミュレーション用途を含む多くの用途で使用するには不適当な不完全な低エントロピ乱数322を生成することがある。擬似乱数322は、一般にコンピューティングシステムレジスタから不定期ベースで捕捉される「微視的」観察を使用して発生させることができる。擬似乱数322は、高周波データバスで観察される値、受信機搬送波強度の測定値、システム実時間クロックの下位ビット、または測定した物理現象を数値に変換するトランスデューサから取得される何か他の統計的にランダムな「ノイズ」信号を使用して発生させることができる。一連の擬似乱数322は、ランダムに変動する信号を繰り返してサンプリングすることによって取得することができる。しかしながら、擬似乱数322は、一般に、数を発生するのに使用されるメカニズムに起因する何らかのバイアスを反映する。RNG302によって発生された擬似乱数322は、レジスタ、FIFO、後入れ先出し(LIFO)回路、ソフトウェアスタック、リングバッファ、または別の形態の記憶装置などのバッファ304に集めることができる。バッファ304により、RNG302は処理システム310と無関係に動作できるようになる。たとえば、自走RNG302は、バッファ304が一杯である場合でさえ乱数322をバッファ304にクロックし続けることができ、それは、RNG302によって発生された過剰な乱数322は単に廃棄することができるからである。1つの例では、バッファ304は、過剰な乱数を記憶しないことによって、バッファ304の入口の点で過剰な乱数を廃棄することができる。別の例では、FIFOまたはリングバッファを含むバッファ304は、記憶している最も古い乱数を廃棄して、最新の乱数をバッファ304に記憶することができる。
【００２３】
バッファ304は割込みハンドラ314によって処理することができる。割込みハンドラ314は、処理システム310のプロセッサ318中に具現化することができ、プロセッサ318に現在の処理作業を保留させ、割込みハンドラ314を実行させることによって、割込み信号328に応答することができる。割込みハンドラ314は、割込み信号328の原因を決定し、調整モジュール316などの処理モジュールの実行を開始させるかまたは促進するように構成することができる。割込み信号328は、バッファ304および306の状態をモニタする論理部312によって発生することができる。1つまたは複数の信号324が、バッファ304の占有率レベルを示すことができる。1つの例では、1つまたは複数の信号324は、1つまたは複数の所定の閾値または事前設定された閾値レベルに基づいてバッファ304に記憶されている乱数の個数を示すことができる。割込み論理部312は、さらに、バッファ306の占有率レベルを示す1つまたは複数の信号326をモニタすることができる。バッファ306は、レジスタ、FIFO、LIFO回路、ソフトウェアスタック、リングバッファ、または高エントロピ乱数を記憶するように適合するかまたは構成することができる別の形態の記憶装置のうちの1つまたは複数を含むことができる。バッファ306は、プロセッサ可読記憶装置308に少なくとも部分的に実装することができる。
【００２４】
割込みハンドラ314は割込みサービスルーチンを開始することができ、それにより、調整モジュール316を実行させ得る。調整モジュール316は、バッファ304から1つまたは複数の低エントロピ乱数を抽出することができ、ハッシュ関数、ブロック暗号、または何か他の好適な暗号アルゴリズムを使用して、抽出された低エントロピ数を調整して、高エントロピ乱数を生成することができる。次いで、高エントロピ乱数をバッファ306に記憶することができる。バッファ306は、バス320を通して、または別のバスもしくは入出力チャネル330を通してプロセッサによって直接にアクセス可能となり得る。図3に示した例では、処理システム310は、高エントロピ乱数のコンシューマ(consumer)とすることができ、バッファ306に書き込み、バッファ306から読み出すように構成することができる。実施形態によっては、乱数を調整し、高エントロピ数をバッファ306に記憶するが、バッファ306に記憶された高エントロピ乱数に直接アクセスしないかまたはそれを使用しないコプロセッサまたは他のプロセッサ318を、処理システム310は含むことができる。一般に、処理システム310は、高エントロピ数を使用する装置の1つまたは複数の主要な機能を実行する装置の構成要素である。
【００２５】
動作中に、バッファ306の占有率が事前定義された閾値最小値より下になると、プロセッサ318は割り込むことができる。閾値最小値は、高エントロピ数に対する予測される需要に基づいて決定することができる。バッファ306の閾値最小占有率の選択値は、割込み328の頻度を制限するためには十分に低くすることができ、バッファが、バースト的な状態においてさえ、高エントロピ数をオンデマンドで確実に供給できるために十分に高くすることができる。バッファ306のサイズは、用途要件に基づいて選択することができる。
【００２６】
実施形態によっては、プロセッサ318は、バッファ304が十分な個数の低エントロピ乱数を保持しているときに割り込んで、事前定義されたまたは事前構成された最少個数の高エントロピ乱数を発生することができる。1つの例では、最小個数の高エントロピ乱数は、少なくとも1つの高エントロピ乱数を発生できるときに割込み328を発生することができるように設定することができる。
【００２７】
調整モジュール316は、プロセッサ318によって実行されるべき1つまたは複数のアルゴリズムを含むことができる。実施形態によっては、調整は割込みサービスルーチン内で実行され、それによって、プロセッサ318の制御は、所望の個数の高エントロピ乱数が発生されたかまたはより高い優先度の割込みがアサートされた後、放棄される。実施形態によっては、割込みハンドラ314によって開始される割込みサービスルーチンは、プロセッサ318が割込みサービスルーチンを出るときに、休止しているかまたは働いていないアプリケーションを実行させることができるフラグ、セマフォ、または他の指標を設定する。実施形態によっては、割込みハンドラ314によって開始された割込みサービスルーチンにより、オペレーティングシステムのタスクまたはスレッドは準備が整い、それによって、調整モジュール316はタスクまたはスレッド内で実行される。準備ができると、タスクまたはスレッドを、オペレーティングシステムまたはアプリケーション制御ループでスケジューリングすることができる。
【００２８】
調整モジュール316は、低エントロピ乱数を調整し、それによって、高エントロピ乱数を生成するように動作するソフトウェア命令を含むことができる。実施形態によっては、調整モジュール316は、調整モジュール316のいくつかの機能を可能にするかまたは促進するために1つまたは複数のハードウェア回路、および/または調整モジュール316によって使用されるアルゴリズムを含むことができる。調整モジュール316は、バッファ304から読み出した低エントロピ乱数または擬似乱数に対して所望の暗号関数を計算し、その後、その結果をバッファ306内のFIFOまたは他の記憶デバイスに戻して書き込むことができる。それ故に、従来のシステムで利用されている専用ハードウェアの多くを省くことができ、その結果、ダイ面積および電力消費の節約がもたらされる。
【００２９】
図4は、本発明のいくつかの態様による、乱数処理システムを利用する装置の例400を示す。装置は、プロセッサ418と記憶デバイス412とを含む処理システム410を含むことができる。記憶デバイス412に記憶された命令およびデータは、プロセッサ418によって実行可能とすることができる。プロセッサ418は、アプリケーション422のためのプラットフォームを備えることができるオペレーティングシステム420で制御することができる。調整モジュール416などの追加のモジュールは、オペレーティングシステム420の制御以外で実行することができ、たとえば、プロセッサ418で受け取った1つまたは複数の割込み428に応答して実行することができる。実施形態によっては、オペレーティングシステム420は、調整モジュール416の少なくともいくつかの機能に対して制御を行使することができる。プロセッサ418は、乱数発生器回路430から受け取った割込み428に応答する割込みハンドラ410を含むことができる。乱数発生器回路430は、低エントロピ乱数を第1のバッファ404に供給するRNG402と、割込み発生論理部408と、第2のバッファ406と、バスインターフェース434とを含むことができる。この例では、第1および第2のバッファ404および406は、FIFOデバイス404および406として実装することができる。FIFOデバイス406は、調整モジュール416がプロセッサ418で実行されることによって発生された高エントロピ乱数を記憶する。調整モジュール416により、プロセッサ418は調整済み乱数をFIFOデバイス406に書き込むことができ、1つまたは複数のアプリケーション422および/またはオペレーティングシステムにより、プロセッサ418は高エントロピ数をFIFOデバイス406から読み出すことができる。それ故に、乱数調整は、調整モジュール416で生成された高エントロピ数を消費するアプリケーションに関して非同期で実行される。バスインターフェース432および434は、FIFOデバイス404および406がバス414または処理システム410の他の入出力チャネルと相互作用できるようにする論理部およびバッファを含むことができる。バス414は、プロセッサ418をメモリ412、乱数発生器回路430、ならびに他の周辺機器およびデバイスに結合させることができる。
【００３０】
本発明の1つの態様によれば、アプリケーション422は、プロセッサ418がバッファ406に記憶された高エントロピ乱数に直接アクセスするようにする1つまたは複数の命令を含むことができる。1つまたは複数の命令は、処理システム410および/またはプロセッサ418のために定義された命令セットに属することができる。命令セットは、処理システム410をプログラムするために使用することができ、定義された組の措置のうちの1つをプロセッサが実行するようにする数字コードを含む機械語に基づくことができる。措置は、データ移動、レジスタスワップ、メモリ読出し/書込みなどを含むことができる。
【００３１】
いくつかの実施形態では、バッファ406中の乱数は、RNG402によって発生される擬似乱数で自動的にポピュレートされ得るFIFOデバイス404の占有率と無関係に使い尽くすことができる。FIFOデバイス406は、1つまたは複数のレジスタ、FIFOデバイス、および他のシーケンシャルまたはランダムアクセス記憶装置を含むことができる。
【００３２】
いくつかの実施形態では、調整モジュール416は、乱数発生回路430から受け取った割込みに応答してまたはソフトウェア例外によって、プロセッサ418で実行される1つまたは複数のソフトウェア機能を定義することができる。ソフトウェア例外は、たとえば、FIFOデバイス406が高エントロピ数の一連の読み出しによって使い尽くされたときに高エントロピ数のコンシューマによって発生され得る。割込み論理部408は、FIFOデバイス404および406のうちの1つまたは複数の状態をモニタする。乱数発生回路430は、FIFOデバイス406が閾値最小レベルより下に使い尽くされたときにプロセッサ418に結合された割込み信号428をアサートするように適合するかまたは構成する割込み論理部408を含むことができる。割込みハンドラ410は、割込み信号428のアサーションに応答してプロセッサ418によって起動され得る。割込みハンドラ410により、調整モジュール416は実行することができ、それによって、調整モジュール416は、ハッシュ関数、ブロック暗号、または別の暗号関数をFIFOデバイス404から読み出された低エントロピ乱数に対して実行して、複数の高エントロピ乱数を生成することができる。次いで、高エントロピ乱数をバッファ406に移送することができる。割込みハンドラ410は、バッファ406が一杯であるとき、および/またはFIFOデバイス404が空であるかまたは低エントロピ乱数の最小個数未満しか保持していないときに、割込み428を受け取ることがあり、それによって、割込みハンドラは、調整モジュール416の実行を一時停止させることができる。実施形態によっては、調整モジュール416は、バッファ406が一杯である、かつ/またはFIFOデバイス404が空であるかまたは低エントロピ乱数の最小個数未満しか保持していないと調整モジュール416が決定する場合、それ自体一時停止する。
【００３３】
1つの例では、バッファ406は、FIFOデバイス、スタック、複数のレジスタ、および/または循環バッファとして管理される記憶装置を含むことができる。バッファ406は、一般に、命令セットに用意された1つまたは複数の命令を実行する際にプロセッサ418が高エントロピ乱数にアクセスできるようにする1つまたは複数のインターフェースデバイス434を含む。インターフェースデバイス434は、プロセッサ418または処理システム410内に設けることができる。インターフェースデバイス434は、プロセッサ418のために規定されたポートを通して、および/または1つまたは複数のアドレス可能場所でアクセスすることができる。実施形態によっては、バッファ406および/またはバスインターフェース434は、プロセッサ418中に、または処理システム410の別のデバイス中に具現化することができる。
【００３４】
図5は、割込み駆動乱数処理システムにおけるフロー制御を示す概略図500である。この例では、処理システム502は、ハードウェア乱数発生および処理回路540と相互作用する。処理システム502は、1つまたは複数のアプリケーション506と、調整モジュール508のいくつかの関数およびアルゴリズムとを実行するプロセッサ504を含む。割込み論理部518は、FIFOデバイス516の現状レベル534をモニタして、FIFOデバイス516が一杯であるか、空であるか、または部分的に満たされているかどうかを決定することができる。割込み論理部518は、FIFOデバイス516が使い尽くされ、その結果、高エントロピ乱数の閾値最小個数532未満しか含んでいないとき、プロセッサ504に割り込むように構成することができる。割込み論理部518は、FIFOデバイス512の現状レベル524をモニタして、FIFOデバイス512が一杯であるか、空であるか、または部分的に満たされているどうかを決定することができる。1つの例では、割込み論理部518は、FIFOデバイス512中の低エントロピ乱数の個数が閾値最小値522を超えるとき割込みを発生させるように構成するかまたは適合することができる。
【００３５】
1つの例では、割込み論理部518は、FIFOデバイス512が、少なくとも1つの高エントロピ乱数を生成するのに十分な個数の低エントロピ乱数を用意できると、プロセッサ504に割り込むように構成される。それ故に、割込み論理部518は、FIFOデバイス512の現状占有率レベル524をモニタして、FIFOデバイス512が一杯であるか、空であるか、または部分的に満たされているどうかを決定することができる。割込み論理部518は、FIFOデバイス512中の低エントロピ乱数の現状個数524が、少なくとも1つの高エントロピ乱数を発生させるのに必要とされる低エントロピ乱数の個数に対応する閾値個数522を超える場合、割込みを発生させるように構成するかまたは適合することができる。割込み論理部518は、FIFOデバイス512中の低エントロピ乱数の現状個数524が、少なくとも1つの高エントロピ乱数を発生させるのに必要とされる低エントロピ乱数の個数に対応する閾値個数522を超えるまで、割込みのアサーションを防止するように構成するかまたは適合することができる。FIFOデバイス512の制御論理部520は、現状レベル指標524および/または最小閾値レベル522を発生しモニタすることができる。FIFOデバイス512は、一般に、たとえばRNG514によって発生された1つまたは複数の擬似乱数を組み合わせることによって少なくとも部分的に調整された低エントロピ乱数のストリームを受け取る。
【００３６】
いくつかの実施形態では、割込み論理部518によって使用される閾値522、532は、アプリケーション506で、または処理システム502および/またはプロセッサ504の動作を制御するオペレーティングシステム528で構成することができる。閾値522、532は、1つまたは複数のアクティブなアプリケーション506のニーズの変化をサポートするために1つまたは複数の乱数発生回路540の振舞いを変更するように構成することができる。たとえば、バッファ516の平均現状レベル534は、制御論理部530および/または割込み論理部518のなんらかの組合せによって、最小閾値532の構成を介して決定することができる。一杯である、空である、ひどく使い尽くされているなどを含む追加の閾値レベルをモニタすることができる。いくつかの実施形態では、割込み発生器論理部518は、異なる優先順位で割込みをアサートするように構成することができ、最高優先順位の割込みは、バッファ516の現状レベル534が最小閾値レベル532以下であるときにアサートされる。高い優先レベルは、1つまたは複数のアプリケーション506がブロックされ、かつ/またはプロセッサ504が停止する前に、バッファ516が再び満たされるのを保証することができる。
【００３７】
バッファ516へのアクセスは、制御論理部530を使用して実施できる1つまたは複数のセマフォ、相互排除セマフォ(ミューテックス)、または他のフラグによって制御することができる。いくつかの実施形態では、バッファ516が空であるとき、バッファ516の試行アクセスはヌルまたは他の事前定義された値に戻ることができる。いくつかの実施形態では、バッファ516が空であるとき、バッファ516の試行アクセスにより、割込みがアサートできるようになる。アプリケーション506が高エントロピ乱数を待っている場合、調整モジュールは、十分な低エントロピ数がバッファ512で利用可能になるまで、循環することができる。
【００３８】
いくつかの実施形態では、アプリケーション506は、ドライバおよびオペレーティングシステム528のサービスを実装するコードを含むことができ、オペレーティングシステム528は、1つまたは複数のアプリケーション506のためにバッファ516から乱数を取得することができる。オペレーティングシステム528は、一般に、他のアプリケーション506がバッファ516にアクセスするのと同じようにバッファ516にアクセスする。しかしながら、割込み論理部518で使用される割込みの優先度を上げて、デッドロックを避けることができ、かつ/または優先度の高いタスク、またはオペレーティングシステムによって使用される割込みハンドラが、乱数を必要とするが、優先問題に起因して調整モジュール508を実行できないときに生じることがある優先度逆転問題を避けることができる。
【００３９】
処理システム502および/またはプロセッサ504のための命令セットは、最小待ち時間で高エントロピ乱数を取得するためにバッファ516と相互作用する1つまたは複数の機械語命令を含むことができる。低エントロピ乱数を調整するために使用されるソフトウェアモジュール508は、等価なハードウェア調整モジュールよりも著しく低いレートで高エントロピ乱数を生成すると予測することができる。しかしながら、割込み駆動調整は、十分な高エントロピ乱数が、ハードウェア調整を利用するシステムから取得される待ち時間に匹敵するように利用可能となることを保証することができる。一般に、ほとんどのアプリケーションは、乱数への時折のアクセスしか必要とせず、アクセス間の時間は、ゲーミングおよびシミュレーションのアプリケーションの場合でさえ秒単位で測定することができる。
【００４０】
待ち時間は、アプリケーション506がバッファ516への直接アクセスを使用することにより最小化することができる。バッファ516と相互作用する機械語命令は、アセンブリ言語またはより高水準のプログラミング言語で書き込むことができるドライバおよび/またはアプリケーション506で利用することができる。効率的にコンパイルされたより高水準の言語「ゲットランダム(get random)」命令の待ち時間は、バッファ516からの読み出しを実行するのに十分ないくつかのクロックサイクルに制限することができる。バッファ516は、ソフトウェア調整済み乱数で非同期に満たされるFIFOデバイスを含むことができ、「ゲットランダム」命令は、システムデータバス414(図4を参照)を通しておよび/またはプロセッサ504のポートを通してバッファ516のFIFOデバイスから直接読み出されてもよい。
【００４１】
本明細書に記すように、バッファ516の動作は、バッファ512が空であるときに生じることがあるプロセッサ504の機能停止を避けるために変更することができる。FIFOデバイス512、516のサイズおよびFIFOデバイス512、516に関連する閾値レベルは、「ゲットランダム」命令の実行を完了する際の遅延を避けるように選択することができる。高優先度割込みでは、バッファ516の最小現状占有率534は、比較的高く設定された閾値レベル532に対して測定されることがあり、それは、比較的短い時間が割込みハンドラおよび調整モジュール508で費やされることにより、より頻繁な割込み作業をもたらすことがある。バッファ516が十分に大きい場合、より低い優先度の割込みを、比較的低く設定された閾値レベル532を用いて割込み論理部518によって発生して、より長い時間が割込みハンドラおよび調整モジュール508で費やされることによりそれほど頻繁でない割込みを取得することができる。高ストレス使用下では、乱数発生は、ソフトウェア調整解法の速度に委ねることがあり、それにもかかわらず、ソフトウェア調整解法の速度は、ほとんどのアプリケーション506にとって十分に速い可能性がある。
【００４２】
実施形態によっては、1つまたは複数の割込みハンドラを利用して、FIFOデバイス512およびバッファ/FIFOデバイス516のそれぞれの充満レベルに基づいてFIFOデバイス512をアンロードし、バッファ/FIFOデバイス516にロードすることができる。調整機能をオペレーティングシステムのタスクまたはスレッドとして実行して、高優先度の作業のためにシステムを空けておくことができる。たとえば、低待ち時間の保証を必要とする実時間オペレーティングシステムまたは他のシステムソフトウェアは、たとえば、高品質のサービス要件をもつ音声およびビデオ通信タスクのために、より高い優先度の応答を必要とすることがある。
【００４３】
図6は、乱数発生器によって発生される乱数を調整する方法を示す流れ図である。この方法は、図4に示したプロセッサ418などの処理回路またはデバイスで実行することができる。
【００４４】
ステップ602において、この方法は、プロセッサ418が割り込まれるときトリガすることができる。割込み428は、1つまたは複数の記憶デバイスの状態を示すことができる。1つまたは複数の記憶デバイスは、第1の記憶デバイス404および第2の記憶デバイス406を含むことができる。第1および第2の記憶デバイス404、406のうちの1つまたは複数は、FIFOデバイスを含むことができる。第2の記憶デバイス406は、プロセッサ418によって直接アドレス指定できるようにすることができる。割込み428は、割込み論理部408によって発生されたおよび/またはアサートされた1つまたは複数の信号を含むことができる。割込み論理部408は、第2の記憶デバイス406の占有率が第1の閾値最小占有率より下になると、割込み428をアサートすることができる。割込み428は、第2の記憶デバイス406の占有率が第1の閾値最小占有率より下になると、アサートされ得る。割込み428は、第1の記憶デバイス404の占有率が第2の閾値最小占有率を超えると、アサートされ得る。割込み428がアサートされない場合、さらなる措置は実行されず、プロセッサ418は、割込み428、および/または割込み428が処理されたことを示すために割込みハンドラ410によって設定される1つまたは複数のフラグをモニタし続ける。割込み428が生じたか、または処理された場合、この方法はステップ604に進む。
【００４５】
いくつかの実施形態では、プロセッサ418は、割込みの原因を決定することができる。プロセッサ418は、割込みが第2の記憶デバイス406の枯渇によって引き起こされると、少なくとも1つの調整済み乱数の発生を開始することができる。プロセッサ418は、第2の記憶デバイス406の占有率が閾値最小占有率より下になることによって割込みが引き起こされると、少なくとも1つの調整済み乱数の発生を開始することができる。いくつかの実施形態では、プロセッサ418は、第2の記憶デバイス406が空になることによって割込みが引き起こされると、少なくとも1つの調整済み乱数が第2の記憶デバイス406に記憶されるまで待つことができる。いくつかの実施形態では、プロセッサ418は、第2の記憶デバイス406が空であるときにアプリケーションが第2の記憶装置にアクセスすることによって割込みが引き起こされると、少なくとも1つの調整済み乱数が第2の記憶デバイス406に記憶されるまで待つことができる。いくつかの実施形態では、プロセッサ418は、第1の記憶デバイス404が、少なくとも1つの調整済み乱数を生成するのに十分な乱数を含むまで待つことができる。
【００４６】
ステップ604において、プロセッサは、少なくとも1つの調整されたより高いエントロピの乱数を取得するのに十分な乱数が記憶デバイス404において利用可能かどうかを決定することができる。いくつかの実施形態では、割込みは、第1の記憶デバイス404の占有率が第2の閾値最小占有率を超えない限り、アサートされないことがある。第2の閾値最小占有率は、少なくとも1つの調整済み乱数を生成するのに必要とされる乱数の個数に対応することができる。いくつかの実施形態では、プロセッサ418は、十分な乱数が第1の記憶デバイス404に含まれているかどうかを独立して決定することができ、含まれていなければ、十分な乱数が第1の記憶デバイス404に蓄積されるまで待つことができる。他の場合には、この方法はステップ606に進む。
【００４７】
ステップ606において、プロセッサ418は、第1の記憶デバイス404から乱数を読み出すことができる。第1の記憶デバイス404により供給される乱数は、乱数発生器402によって発生される。乱数発生器402によって発生される乱数は、擬似乱数などの低エントロピデータを含むことがある。1つの例では、第1の記憶デバイス404のコンテンツは、バスインターフェース432を通してプロセッサ418で読み出すことができ、バスインターフェース432は、バス414の動作を制御する信号をモニタし対応するためのラインドライバ、レジスタ、および論理部のうちの1つまたは複数を含むことができる。別の例では、第1の記憶デバイス404の少なくとも一部分はプロセッサ418中に具現化されるレジスタを含み、そのレジスタを通してプロセッサ418は第1の記憶デバイス404のコンテンツを読み出すことができる。
【００４８】
ステップ608において、プロセッサ418は、乱数発生器402によって発生された乱数を調整して、少なくとも1つの高エントロピ乱数を取得することができる。乱数発生器402によって発生された乱数は、暗号関数を使用して調整することができる。乱数発生器402によって発生された乱数は、乱数のシーケンス中の乱数のエントロピに対して、少なくとも1つの調整済み乱数のエントロピを増加させるように構成されたアルゴリズムを使用して、調整することができる。乱数発生器402によって発生された乱数は、乱数発生器402によって発生された複数の乱数をハッシュすることによって調整することができる。乱数発生器402によって発生された乱数は、ブロック暗号関数を使用して調整することができる。乱数発生器402によって発生された乱数は、第2の記憶デバイス406に記憶される複数の高エントロピ乱数間の相関を減少させるように選択された関数を使用して調整することができる。
【００４９】
ステップ610において、プロセッサ418は、少なくとも1つの高エントロピ乱数を第2の記憶デバイス406に記憶させることができる。次いで、この方法はステップ612で終了することができる。
【００５０】
第2の記憶デバイス406は、プロセッサ418によって実行された機械語命令408に応答して少なくとも1つの高エントロピ乱数を出力するように構成することができる。1つの例では、第2の記憶デバイス406のコンテンツは、バスインターフェース434を通してプロセッサ418によって読み出すことができ、バスインターフェース434は、バス414の動作を制御する信号をモニタし対応するためのラインドライバ、レジスタ、および論理部のいくつかの組合せを含むことができる。別の例では、第2の記憶デバイス406の少なくとも一部分はプロセッサ418中に具現化されるレジスタを含み、そのレジスタを通してプロセッサ418は第2の記憶デバイス406のコンテンツを読み出すことができる。
【００５１】
いくつかの実施形態では、第2の記憶デバイス406は、一般にアプリケーション422によって起動されるプロセッサ418によって実行される命令に応答して、直接にアクセスされ得る。命令は機械語命令を含むことができる。
【００５２】
図7は、処理システム702を利用する装置のためのハードウェア実装態様の一例を示す図700である。処理システム702は、処理システム702の特定の用途とシステム要件および仕様とに応じて、複数の相互接続バスおよびブリッジを含むことができる、一般にバス708で表される、バスアーキテクチャを使用して実装することができる。バス708は、ソフトウェア、および/または処理回路704として表されたハードウェアモジュール、すなわち、モジュール710、712、714、716、718を含む1つまたは複数のプロセッサを含む回路と、コンピュータ、処理システム702、および/または1つまたは複数のプロセッサまたは処理回路704で読み出すことができる記憶媒体706とを伝達的に結合させることができる。バス708は、クロックおよびタイミング発生源、周辺機器、電圧調整器、および電力管理回路などの他の回路を接続することもできる。
【００５３】
処理システム702は、RNG722を含む乱数発生で使用される様々な回路と、FIFOデバイス724および726などの1つまたは複数の記憶デバイスとを含むことができる。処理システム702は、割込みハンドラ718と割込み発生論理部728とを含む割込み管理モジュールおよび/または回路を含むことができる。処理システムは、プロセッサ可読記憶媒体706に結合された処理回路704を含むことができる。処理回路704は、プロセッサ可読記憶媒体706に記憶された命令を使用して制御することができるマイクロプロセッサ、デジタル信号プロセッサ、およびシーケンシング論理部のうちの1つまたは複数を含むことができる。処理回路704は、プロセッサ可読媒体706に記憶されたソフトウェアの実行を含む一般的な処理を担当することができる。ソフトウェアは、それが処理回路704によって実行されると、処理システム702に上述で説明した様々な機能を行わせる。プロセッサ可読記憶媒体706は、さらに、ソフトウェアを実行するときに処理回路704によって扱われるデータを記憶するために使用することができる。処理回路は、モジュールまたは回路710、712、714、716、および718のうちの少なくとも1つをさらに含む。モジュールは、処理回路704によって実行されるソフトウェアモジュールであって、プロセッサ可読媒体706に常駐する、および/または記憶することができる、ソフトウェアモジュール、処理回路704中に具現化されたおよび/または処理回路704に結合された1つまたは複数のハードウェアモジュール、またはそれらの組合せを含むことができる。
【００５４】
1つの構成では、装置は、割込み730に応答して、乱数発生器722によって発生された乱数を記憶デバイス724から読み出すための手段710と、乱数を調整して、少なくとも1つの高エントロピ乱数を取得するための手段712と、少なくとも1つの高エントロピ乱数を第2の記憶デバイス726に記憶するための手段714と、処理システム704によって実行される命令に応答して、高エントロピ乱数を第2の記憶デバイス726から読み出すための手段716とを含む。
【００５５】
前述の手段は、前述の手段で列挙された機能を実行するように構成された、装置の処理システム702の前述のモジュールのうちの1つまたは複数とすることができる。
【００５６】
本明細書で説明したいかなる実装態様または態様も本開示の他の態様と比べて好ましいかまたは有利であると必ずしも解釈されるべきでない。「態様」という用語は、本開示のすべて態様が、論じた特徴、利点、または動作モードを含むことを必要としない。「結合された」という用語は、本明細書では、2つの物体間の直接または間接結合を指すために使用されている。たとえば、物体Aが物体Bに物理的に接触し、物体Bが物体Cに接触している場合、物体AおよびCは、それらが互いに直接物理的に接触していない場合でさえ、依然として互いに結合されていると見なすことができる。たとえば、第1のダイは、たとえ第1のダイが第2のダイに直接物理的に接触していなくても、パッケージの第2のダイに結合され得る。
【００５７】
「ダイ」という用語は、本明細書では、ICを含むように使用することができる。ダイは、1つまたは複数の回路を含むことができる。「ユニット」という用語は、ダイの一部および/またはダイの回路である構成要素を指すことができる。ユニットは1つのダイに配置されてもよく、またはユニットは、いくつかのダイおよび/または回路にわたって分散された半導体デバイス、システム、および/またはパッケージの一部であってもよい。したがって、ユニットは、いくつかの場所に物理的におよび/または論理的に配置された構成要素を指すことができる。
【００５８】
図1〜図7に示した構成要素、ステップ、特徴、および/または機能のうちの1つまたは複数は、単一の構成要素、ステップ、特徴、または機能に再配置および/または組み合わせるか、またはいくつかの構成要素、ステップ、または機能で具現化することができる。追加の要素、構成要素、ステップ、および/または機能を、本明細書で開示した新規な態様および/または特徴から逸脱することなく追加することもできる。図1〜図5および図7に示した装置、デバイス、および/または構成要素は、本明細書で説明した方法、特徴、またはステップのうちの1つまたは複数を実行するように構成することができる。本明細書で説明した新規なアルゴリズムを、ソフトウェアに効率的に実装する、かつ/またはハードウェアに埋め込むこともできる。
【００５９】
また、実施形態は、流れ図、フローダイアグラム、構造図、またはブロック図として示されるプロセスとして説明されることがあることに留意されたい。流れ図は動作を逐次プロセスとして説明することがあるが、動作のうちの多くは、並列にまたは同時に実行することができる。加えて、動作の順序は再構成することができる。プロセスは、その動作が完了したときに終了する。プロセスは、方法、機能、手順、サブルーチン、サブプログラムなどに対応することができる。プロセスが機能に対応するとき、プロセスの終了は、機能を呼出し機能または主機能に戻すことに対応する。
【００６０】
その上、記憶媒体は、読取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、および/または情報を記憶するための他の機械可読媒体を含む、データを記憶するための1つまたは複数のデバイスを表すことができる。「機械可読媒体」または「機械可読記憶媒体」という用語は、限定はしないが、携帯または固定記憶デバイス、光記憶デバイス、ワイヤレスチャネル、ならびに命令および/またはデータを記憶する、含有する、または搬送することができる様々な他の媒体を含む。
【００６１】
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、またはそれらの任意の組合せによって実装することができる。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実装されたとき、必要なタスクを実行するためのプログラムコードまたはコードセグメントは、記憶媒体または他の記憶装置などの機械可読媒体、たとえば、記憶デバイス412(図4)などに記憶することができる。プロセッサ418は、必要なタスクを実行することができる。コードセグメントは、手順、機能、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または命令、データ構造、もしくはプログラムステートメントの任意の組合せを表すことができる。コードセグメントは、情報、データ、引数、パラメータ、または記憶内容を渡しかつ/または受け取ることによって、別のコードセグメントまたはハードウェア回路に結合され得る。情報、引数、パラメータ、データなどは、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク送信などを含む任意の好適な手段を介して渡され、転送され、または送信され得る。
【００６２】
本明細書で開示される例に関連して説明した様々な例示的な論理ブロック、モジュール、回路(たとえば、処理回路)、要素、および/または構成要素は、汎用プロセッサ、デジタル信号プロセッサ(DSP)、ASIC、FPGAもしくは他のプログラマブル論理構成要素、個別ゲートもしくはトランジスタ論理、個別ハードウェア構成要素、または本明細書で説明した機能を実行するように設計されたそれらの任意の組合せで実装または実行することができる。汎用プロセッサはマイクロプロセッサとすることができるが、代替では、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械とすることができる。プロセッサは、さらに、コンピューティング構成要素の組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、いくつかのマイクロプロセッサ、DSPコアと協力する1つまたは複数のマイクロプロセッサ、または任意の他のそのような構成として実装することができる。
【００６３】
本明細書で開示した例に関連して説明した方法またはアルゴリズムは、直接ハードウェアで、プロセッサで実行能なソフトウェアモジュールで、または両方の組合せで、処理ユニット、プログラミング命令、または他の指示の形態において具現化することができ、単一のデバイスに含まれるか、または多数のデバイスにわたって分配され得る。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で知られている任意の他の形態の記憶媒体に常駐することができる。記憶媒体は、プロセッサが記憶媒体から情報を読み出し、記憶媒体に情報を書き込むことができるようにプロセッサに結合され得る。代替では、記憶媒体はプロセッサと一体とすることができる。
【００６４】
当業者は、さらに、本明細書で開示した実施形態に関連して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップが、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得ることを理解されよう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップは、一般に、それらの機能に関して上記で説明した。そのような機能をハードウェアとして実装するか、またはソフトウェアとして実装するかは、特定の用途および全体的なシステムに課される設計制約によって決まる。本明細書で説明した本発明の様々な特徴は、本発明から逸脱することなく異なるシステムで実装することができる。本開示の前述の態様は単なる例であり、本発明を限定すると解釈すべきでないことに留意されたい。本開示の態様の説明は、例示的なものであり、特許請求の範囲の範囲を限定するものではない。そのため、本教示は、他のタイプの装置、ならびに多くの代替、変更、および変型に容易に適用できることは、当業者には明白であろう。
【符号の説明】
【００６５】
102  乱数発生回路
104  ハッシュ関数またはブロック暗号関数
106  FIFOデバイス
108  バスインターフェース
110  処理システム
112  乱数処理システム
114  プロセッサ
116  物理的記憶媒体
118  システムバス
120  オペレーティングシステム
122  アプリケーション
130  低エントロピ数、擬似乱数
132  著しく高いエントロピをもつ乱数
134  数
136  高エントロピ乱数
202  RNG(乱数発生回路)
204  ハッシュ関数、ブロック暗号、または他の調整関数
206  FIFOデバイス
208  レジスタ/バッファ
210  処理システム
212  乱数処理システム
214  プロセッサ
220  オペレーティングシステム
222  アプリケーション
230  擬似乱数、低エントロピ数
232  著しく高いエントロピをもつ乱数
234  乱数
236  高エントロピ乱数
300  乱数発生システム
302  RNG
304、306  バッファ
308  メモリ、プロセッサ可読記憶装置
310  処理システム
312  割込み論理部
314  割込みハンドラ
316  調整モジュール
318  プロセッサ
320  バス
322  低エントロピ乱数
324、326  信号
326  信号
328  割込み信号
330  バスまたは入出力チャネル
402  乱数発生器
404  第1のバッファ、FIFOデバイス、第1の記憶デバイス
406  第2のバッファ、FIFOデバイス、第2の記憶デバイス
408  割込み論理部
410  処理システム
410  割込みハンドラ
412  記憶デバイス
414  バス
416  調整モジュール
418  プロセッサ
420  オペレーティングシステム
422  アプリケーション
428  割込み信号
430  乱数発生器回路、乱数発生回路
432、434  バスインターフェース
502  処理システム
504  プロセッサ
506  アプリケーション
508  調整モジュール
508  ソフトウェアモジュール
512、516  FIFOデバイス、バッファ
514  RNG
518  割込み論理部
520  制御論理部
522  最小閾値レベル
524  現状占有率レベル
528  オペレーティングシステム
530  制御論理部
532  高エントロピ乱数の閾値最小個数
534  バッファ516の最小現状占有率
540  ハードウェア乱数発生および処理回路
702  処理システム
704  処理回路
706  プロセッサ可読記憶媒体
708  バス
710、712、714、716、718  モジュール、回路
722  乱数発生器
724、726  FIFOデバイス
728  割込み発生論理部
730  割込み
【図１】
2016512643.tif 000003
【図２】
2016512643.tif 000004
【図３】
2016512643.tif 000005
【図４】
2016512643.tif 000006
【図５】
2016512643.tif 000007
【図６】
2016512643.tif 000008
【図７】
2016512643.tif 000009
【国際調査報告】
2016512643.tif 000010
2016512643.tif 000011
2016512643.tif 000012