(57)【要約】【課題】ランダム値を生成するための方法およびシステムを提供する。【解決手段】第１のモジュールはランダムデータ要求（たとえば、非特定長のランダムデータを求める要求）を乱数生成器に提供する。乱数生成器は、ランダムデータ要求に応答してランダムデータを生成し、ランダムデータから導出される複数のランダム値がバッファに記憶される。ランダム値（たとえば、初期化ベクトル）を求める要求の受信に応答して、第１のモジュールはバッファに記憶された複数のランダム値に基づいてランダム値を生成する。【選択図】図１
2013214050.tif 000002
【特許請求の範囲】
【請求項１】
ランダム値を生成するための方法であって、
第１のランダムデータ要求を乱数生成器に提供するステップと、
前記乱数生成器が、前記第１のランダムデータ要求に応答して第１のランダムデータを生成するステップと、
前記第１のランダムデータから導出される複数のランダム値をデータ構造に記憶するステップと、
第１のランダム値リクエスタから、第１のタイプのランダム値を求める第１のランダム値要求を受信するステップと、
前記第１のランダム値要求の受信に応答して、前記データ構造に記憶された前記複数のランダム値のうちの１つのランダム値に基づいて前記第１のタイプの前記ランダム値を生成するステップと、
前記第１のタイプの前記ランダム値を前記第１のランダム値リクエスタに送信するステップと、
第２のタイプのランダム値を求める第２のランダム値要求の受信に応答して第２のランダムデータ要求を前記乱数生成器に提供するステップと、
前記第２のランダムデータ要求の送信に応答して前記乱数生成器から第２のランダムデータを受信するステップと、
前記第２のランダムデータから導出される、前記第２のタイプの前記ランダム値を、前記第２のタイプの前記ランダム値のリクエスタに送信するステップとを備える、方法。
【請求項２】
前記第１のタイプは、データパケットの暗号化に使用される初期化ベクトルに対応するランダム値のタイプである、請求項１に記載の方法。
【請求項３】
前記第１のランダムデータ要求は、非特定長のランダムデータを求める要求である、請求項１に記載の方法。
【請求項４】
前記第２のランダムデータ要求は、特定長のランダムデータを求める要求である、請求項１に記載の方法。
【請求項５】
前記第１のランダム値リクエスタが実行する、
要求側モジュールから第３のランダム値要求を受信するステップと、
前記第３のランダム値要求の受信に応答して前記第１のランダム値要求を送信するステップと、
前記第１のランダム値要求の送信に応答して前記第１のタイプの前記ランダム値を受信するステップと、
前記第１のタイプの前記ランダム値を前記要求側モジュールに送信するステップと、をさらに備える請求項１に記載の方法。
【請求項６】
前記第１のランダムデータ要求は前記乱数生成器の第１のポートに送信され、
前記第２のランダムデータ要求は前記乱数生成器の第２のポートに送信される、請求項１に記載の方法。
【請求項７】
前記データ構造への前記複数のランダム値の記憶と、ランダム値要求に基づく前記ランダム値の生成との選択的なイネーブルを行うステップをさらに備える請求項１に記載の方法。
【請求項８】
ランダム値を生成するための方法であって、
第１のランダムデータ要求を乱数生成器に提供するステップと、
前記乱数生成器が、前記第１のランダムデータ要求に応答して第１のランダムデータを生成するステップと、
前記第１のランダムデータから導出される複数のランダム値をバッファに記憶するステップと、
初期化ベクトルリクエスタから初期化ベクトル要求を受信するステップと、
前記初期化ベクトル要求の受信に応答して、前記バッファに記憶された前記複数のランダム値のうちの１つに基づいて初期化ベクトルを生成するステップと、
前記初期化ベクトルを前記初期化ベクトルリクエスタに送信するステップと、
初期化ベクトル以外のランダム値を求めるランダム値要求の受信に応答して第２のランダムデータ要求を前記乱数生成器に提供するステップと、
前記第２のランダムデータ要求の送信に応答して前記乱数生成器から第２のランダムデータを受信するステップとを含む、方法。
【請求項９】
前記第１のランダムデータ要求を提供するステップは、非特定長のランダムデータを求める要求をアサートするステップを含む、請求項８に記載の方法。
【請求項１０】
前記第２のランダムデータ要求を提供するステップは、特定長のランダムデータを求める要求をアサートするステップを含む、請求項８に記載の方法。
【請求項１１】
前記バッファが満たされているか否かを判定するステップと、
前記バッファが満たされている場合、非特定長のランダムデータを求める前記要求をデアサートするステップと、をさらに備える、請求項８に記載の方法。
【請求項１２】
前記初期化ベクトルを前記初期化ベクトルリクエスタに送信した後に、前記バッファが満たされているか否かを判定するステップと、
前記バッファが満たされていない場合、非特定長のランダムデータを求める前記要求を再アサートするステップと、をさらに備える、請求項８に記載の方法。
【請求項１３】
システムであって、
ランダムデータ要求に応答してランダムデータを生成するように構成される乱数生成器と、
複数のランダム値を記憶するように構成されるデータ構造であって、該複数のランダム値は、第１のランダムデータ要求に応答して前記乱数生成器によって生成される第１のランダムデータから導出される、データ構造と、
前記乱数生成器および前記データ構造に結合され、前記第１のランダムデータ要求を前記乱数生成器に提供し、前記第１のランダム値のリクエスタから第１のタイプの第１のランダム値を求める第１のランダム値要求を受信するとともに、前記第１のランダム値要求に応答して、前記第１のランダム値を前記第１のランダム値の前記リクエスタに送信するように構成される第１のモジュールであって、前記第１のランダム値は、前記データ構造に記憶された前記複数のランダム値から導出される、第１のモジュールと、
前記乱数生成器に結合され、第２のタイプの第２のランダム値を求める第２のランダム値要求を前記第２のランダム値のリクエスタから受信することに応答して、第２のランダムデータ要求を前記乱数生成器に提供し、前記第２のランダムデータ要求の送信に応答して前記乱数生成器から第２のランダムデータを受信するとともに、前記第２のランダムデータから導出される前記第２のランダム値を前記第２のランダム値の前記リクエスタに送信するように構成される第２のモジュールとを備える、システム。
【請求項１４】
前記第１のタイプは、データパケットの暗号化に使用される初期化ベクトルに対応するランダム値のタイプである、請求項１３に記載のシステム。
【請求項１５】
前記第２のモジュールは、前記第１のランダム値を求める第３のランダム値要求を第３のモジュールから受信し、前記第３のランダム値要求の受信に応答して前記第１のランダム値要求を前記第１のモジュールに送信し、前記第１のランダム値要求の送信に応答して前記第１のランダム値を前記第１のモジュールから受信するとともに、前記第１のランダム値を前記第３のモジュールに送信するようにさらに構成される、請求項１３に記載のシステム。
【請求項１６】
前記乱数生成器は、
前記第１のモジュールから前記第１のランダムデータ要求を受信するための第１のポートと
前記第２のモジュールから前記第２のランダムデータ要求を受信するための第２のポートとを備える、請求項１３に記載のシステム。
【請求項１７】
前記乱数生成器は前記データ構造に結合され、前記乱数生成器は、前記第１のランダムデータを前記複数のランダム値として前記データ構造に記憶するようにさらに構成される、請求項１３に記載のシステム。
【請求項１８】
前記第１のモジュールは、前記乱数生成器から前記第１のランダムデータを受信するとともに、前記第１のランダムデータを前記複数のランダム値として前記データ構造に記憶するようにさらに構成される、請求項１３に記載のシステム。
【請求項１９】
前記乱数生成器は決定論的乱数生成器である、請求項１３に記載のシステム。
【請求項２０】
前記データ構造は先入れ先出しバッファである、請求項１３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載される主題の実施形態は、一般的には、乱数生成器によって生成されるランダムデータに基づいてランダム値を生成するための方法および装置に関する。
【背景技術】
【０００２】
ハードウェアおよびソフトウェアの両方で実装される乱数生成器（ランダムビット生成器とも称される）は、ランダムまたは擬似ランダム値を生成するための計算および通信システムにおいて一般的に使用されている。たとえば、一般的な乱数生成器は、乱数（「ハッシュ値」または「ダイジェスト」とも称される）を生成するための暗号学的ハッシュ関数を実装する場合がある。たとえば、「セキュア・ハッシュ・アルゴリズム」（ＳＨＡ）という設計の下で米国標準技術局（ＮＩＳＴ）によって規定されている、一般的に使用されるハッシュ関数を含む、さまざまな暗号学的ハッシュ関数が開発されている。
【０００３】
計算または通信システムは、１つまたは複数の処理エンティティ（たとえば、プロセッサコア、暗号化エンジンなど）、および、処理エンティティが使用するための乱数（たとえば、ハッシュ値）を生成するように構成される乱数生成器を含み得る。さまざまな目的のいずれかのために、処理エンティティは乱数生成器から乱数を要求し得る。要求に応答して、乱数生成器は、複数のハッシュ演算を実行し、乱数を生成し、次の要求に備えるためにその内部動作状態（すなわち、エントロピー（情報量）および他の入力に基づいて初期化され、各要求の完了後に改変される、内部で維持される値）を更新することができる。この処理を乱数生成器が完了するには相当の時間がかかる場合がある。たとえば、従来のＳＨＡ−２５６ハッシュエンジンについて、単一のランダム値（すなわち、２５６ビット値）の生成は、完了するのに２００クロックサイクル以上かかる場合がある。
【０００４】
乱数を生成するのに必要とされる時間はいくつかのタイプのアプリケーションにとってはほとんど影響を及ぼさないものであり得るが、他のタイプのアプリケーションにとっては重大な性能ボトルネックを呈するものであり得る。より詳細には、いくつかのアプリケーションは、立て続けに乱数を要求および使用するように構成される。そのようなアプリケーションにおいては、乱数生成器が乱数を生成することが可能な速度が、アプリケーションが使用する所望の速度よりも著しく遅い場合、乱数生成器の限界によってアプリケーション性能および／またはスループットが悪影響を受ける場合がある。したがって、システム性能および速度を増大させることがさらにますます望まれていることに伴って、より効率的な乱数生成方法および装置が望まれている。
【図面の簡単な説明】
【０００５】
【図１】例示的な実施形態による電子システムの簡略化されたブロック図である。
【図２】例示的な実施形態によるマルチポート乱数生成器の簡略化されたブロック図である。
【図３】別の例示的な実施形態による、マルチポート乱数生成器の簡略化されたブロック図である。
【図４】例示的な実施形態による、ランダム値生成モジュールが要求側モジュールの要求を受けて乱数を生成する方法のフローチャートである。
【図５】例示的な実施形態による、非特定長乱数要求および特定長乱数要求に応答して乱数生成器が乱数を生成する方法のフローチャートである。
【発明を実施するための形態】
【０００６】
以下の図面と併せて考察して詳細な説明および特許請求の範囲を参照することで、より完全に本主題を理解することができる。これらの図面では全般にわたり同様の参照符号は類似の要素を示している。
【０００７】
下記の詳細な記載は本来説明のみを目的とし、本主題の実施形態またはこれらの実施形態の適用および使用を限定することを意図しない。本明細書において使用される場合、「例示的な（ｅｘｅｍｐｌａｒｙ）」という単語は、「例、事例、または説明としての役割を果たす」ことを意味する。例示として本明細書に記載されるすべての実施例は、必ずしも他の実施例よりも好適であるまたは優位であるとは解釈されない。さらに、上記技術分野、背景技術、または以下の詳細な説明で提示される、いかなる表示または暗示された理論によっても束縛されることは意図されていない。簡潔にするために、「ランダムデータ」、「ランダムビット」、「乱数」、および「ランダム値」という用語は、真にランダムなデータ／ビット／数／値（すなわち、偏りのないランダム変数のインスタンス、または均一に分散されたランダムプロセスによって生成された出力）または擬似ランダムなデータ／ビット／数／値（すなわち、観察しても見えない内部動作を有するプロセスによって生成された、決定性ではあるが事実上ランダムなデータ／ビット／数／値）のいずれかを意味する。したがって、本明細書において「ランダムデータ」、「ランダムビット」、「乱数」、または「ランダム値」の生成に言及する場合、それは真にランダムな、または擬似ランダムなデータ／ビット／数／値のいずれかを生成することを含むように意図される。下記により詳細に記載されるように、またこれらの用語が本明細書において使用される場合、乱数生成器の実施形態は「ランダムビット」の形態の「ランダムデータ」を生成する。本明細書においては、有効なランダムデータのインスタンスとして乱数生成器によって生成されるランダムビットの固定長出力ブロックを「乱数」と称する。「ランダム値」は乱数生成器によって生成される乱数「から導出される」値であり、「から導出される」という用語は、乱数がランダム値を生成するために改変されている場合があるが、必ずしもそうとは限らない（たとえば、乱数「から導出される」ランダム値は乱数と同一であってもよい）ことを意味する。ランダム値は乱数生成器によって生成される乱数と同じ長さを有してもよいし、有しなくてもよい。
【０００８】
本発明の主題の実施形態は、乱数生成器を使用して効率的にランダム値を生成することが望まれる、さまざまな異なるタイプのシステムのいずれかにおいて使用され得る。たとえば、さまざまな実施形態は、さまざまなシステムエンティティ間での通信のためにデータパケット（たとえば、インターネットプロトコル（ＩＰ）データパケット）を保護するように構成されるシステムにおいて実装されることができる。より具体的には、そのようなシステムにおいて、通信セッションに関与するもの（たとえば、ホストの対、ゲートウェイ、ネットワークなど）の間で通信されることになるＩＰデータパケットは、インターネット・エンジニアリング・タスク・フォース（ＩＥＴＦ）によって指定されるインターネット・プロトコル・セキュリティ（ＩＰｓｅｃ）プロトコルにしたがって処理されることができる。ＩＰｓｅｃプロトコルは、伝送前にＩＰパケットを認証および暗号化するための要件を明記している。たとえば、ＩＰｓｅｃプロトコルスイートのカプセル化セキュリティペイロード（ＥＳＰ）部分は、データパケットを構築および解釈するためのフォーマットを明記している。とりわけ、ＥＳＰは、パケット内の、ペイロードデータのためのサイズの一定しないフィールドに関する開始ロケーションを指定する。データ投入されると、ペイロード・データ・フィールドは、元のＩＰパケットの保護されたペイロードを含む。
【０００９】
特定のモードにおいて元のＩＰパケットの保護された内容を生成するために、プレーンテクスト・パケット・ペイロードの最初の部分が同じサイズの初期化ベクトル（ＩＶ）（たとえば、ランダム値）と組み合わされ、この組み合わせが暗号アルゴリズム（たとえば、先進暗号化規格（「ＡＥＳ」）を利用する暗号アルゴリズムまたは何らかの他のアルゴリズム）に入力される。結果もたらされる暗号文が出力されて保護されるＩＰパケットのペイロード・データ・フィールドの一部にデータ投入される。加えて、結果もたらされる暗号文はフィードバックもされて、その暗号化の前のプレーンテクスト・パケット・ペイロードの次の部分に組み合わされる。このプロセスが、パケットペイロード全体が暗号化されるまで繰り返される。パケットペイロードごとに異なるＩＶが使用され、これによって、暗号化データパケットのランダム性（したがって、解読不可能性）が増大される。
【００１０】
一実施形態によれば、電子システムは、ランダムデータ／乱数を要求するように構成される１つまたは複数のシステムエンティティと、そのような要求に応答して乱数を生成するように構成される乱数生成器と、乱数生成器によって生成される乱数から導出されるランダム値（たとえば、ＩＶまたはこれらの乱数から導出される他のランダム値）を記憶するように構成されるデータストレージ（たとえば、バッファ）とを含む。乱数生成器がＩＶを生成するために使用される各乱数を求める別個の要求を受信する従来のシステムとは対照的に、実施形態は、乱数生成器に、非特定長のランダムデータ（たとえば、非特定数の乱数）要求を提供することを含む。システムはさらに、非特定長ランダムデータ要求に応答して乱数生成器によって生成される乱数から導出される一連のランダム値（たとえば、乱数から導出される一連のＩＶ）をデータストレージに記憶する。その後、ランダム値（たとえば、ＩＶ）は、必要に応じて他のシステムエンティティによってデータストレージから読み出されることができる。ランダム値生成の速度がシステム内のスループットボトルネックを回避するために十分であることを確実にするよう試みるために、一実施形態では、十分な量のランダム値がバッファ内に維持される。したがって、本明細書において説明される実施形態の結果として、従来のシステムを用いて達成可能であるよりも、ランダム値（たとえば、ＩＶ）の生成が著しく高速になり得る。より具体的には、乱数生成器は、従来のシステムがそうするように１つの要求当たり１つのみの乱数を生成するのではなく、単一の非特定長ランダムデータ要求に応答して複数の乱数を生成することができるため、一実施形態によるシステムは、従来のシステムよりも著しく高速にランダム値（たとえば、ＩＶ）を生成することができる。加えて、ランダム値はバッファリングされるため、ランダム値を要求したエンティティは、乱数生成器に対する個々の要求に応じてのみランダム値が生成される（すなわち、要求が受信されるより前にランダム値がバッファリングされない）従来のシステムにおけるよりも速く、要求される値を受信することができる。
【００１１】
ＩＰｓｅｃプロトコルにしたがって通信するシステムの文脈においてランダム値を生成するための方法および装置の実施形態が本明細書において詳細に説明されるが、さまざまな実施形態が同様に他のタイプのシステムにおいて使用されることができることを理解されたい。本明細書における記載に基づいて、さまざまな実施形態を、それらの実施形態によって生み出される利点から利益を受け得る他のタイプのシステムに組み込む方法を、当業者は理解しよう。したがって、さまざまな実施形態を他のシステムに組み込むことが、本発明の主題の範囲内にあることが意図される。
【００１２】
図１は、一実施形態による電子システム１００の例示的な実施形態を描いている。システム１００は、ランダム値生成モジュール１１０、および１〜Ｎ個の要求側モジュール１３０、１３１、１３２（または「乱数リクエスタ」）を含み、Ｎは任意の整数（たとえば、１〜１０もしくはそれ以上の任意の整数）であり得る。下記により詳細に記載されるように、ランダム値生成モジュール１１０は、要求側モジュール１３０〜１３２からの要求に応答してランダム値を生成するように構成される。一実施形態によれば、たとえば、要求側モジュール１３０〜１３２とランダム値生成モジュール１１０は、双方向性システムバス１４０または他の通信メカニズムを介して通信することができる。たとえば、任意の要求側モジュール１３０〜１３２は、バス１４０を介してランダム値要求をランダム値生成モジュール１１０に送信することができ、今度は、バス１４０を介してランダム値生成モジュール１１０から要求されたランダム値を受信することができる。
【００１３】
要求側モジュール１３０〜１３２は、プロセッサコアと、（たとえば、デジタル署名アルゴリズム（ＤＳＡ）鍵、ＲＳＡ鍵、ＡＥＳ鍵などを生成するための）暗号化鍵生成器と、暗号エンジンと、プロトコル・パケット・プロセッサと、パディングモジュールと、さまざまな目的のためにランダム値を使用するように構成されるさまざまな他のタイプのモジュールとを含むことができる。特定の実施形態では、要求側モジュール１３０〜１３２のうちの１つまたは複数は、ＩＰｓｅｃパケット処理（たとえば、パケット認証および暗号化を実行するためのＩＰｓｅｃプロトコルの実施）を実行するように構成されることができる。このような処理モジュールは、本明細書においては「ＩＰｓｅｃ処理モジュール」と称し、要求側モジュール１３０をＩＰｓｅｃ処理モジュールの一例として特に使用することとする。すでに説明したように、ＩＰｓｅｃパケット処理は、プレーンテクスト・パケット・ペイロードの一部をＩＶと組み合わせること、この組み合わせに対して暗号操作を実行すること、結果もたらされる暗号文を出力すること、および、プレーンテクスト・パケット・ペイロードの次の部分と組み合わされることになる、結果もたらされる暗号文をフィードバックすることを含むことができる。一実施形態によれば、ＩＶを受信するために、ＩＰｓｅｃ処理モジュール１３０は、ランダム値要求（または、より具体的には「ＩＶ要求」）を、バス１４０を介してランダム値生成モジュール１１０に送信する。下記により詳細に記載されるように、ランダム値生成モジュール１１０は、各ランダム値（またはＩＶ）要求に応答して、ＩＶをＩＰｓｅｃ処理モジュール１３０に送信する。
【００１４】
ＩＶ要求に加えて、要求側モジュール１３０〜１３２は、他のタイプのランダム値を求める要求も送信してもよい。たとえば、要求側モジュール１３０〜１３２は暗号化鍵生成器であってもよく、要求側モジュール１３０〜１３２は暗号化鍵（たとえば、ＤＳＡ秘密鍵、ＡＥＳ鍵など）に対応し得る（または、それを作成するために使用され得る）ランダム値を求める要求を送信してもよい。同様に、他のタイプの要求側モジュール１３０〜１３２が、他のタイプのランダム値を求める要求を送信してもよい。
【００１５】
一実施形態によれば、要求側モジュール１３０〜１３２からのランダム値要求は、ランダム値タイプ（たとえば、ＩＶ、暗号化鍵など）および／またはランダム値長（たとえば、８バイト、１６バイトなど）を指示する。ランダム値要求は、応答によって返されると、要求側モジュール１３０〜１３２が、要求に対する応答を認識し、かつ／または応答において提供されたランダム値を正確なシーケンスにおいて使用することを可能にする、要求側モジュール識別子（ＩＤ）、シーケンス番号、および／または他の情報をも含むことができる。ランダム値要求に応答してランダム値生成モジュール１１０によって提供されるランダム値は、要求側モジュール１３０〜１３２によって前に送信された情報（たとえば、要求側モジュールＩＤおよび／またはシーケンス番号）を特定することができる。
【００１６】
ランダム値生成モジュール１１０は、一実施形態では、乱数生成器１１２と、要求ハンドリングモジュール１１６と、要求調停モジュール１１８と、バッファモジュール１２０と、バッファ１２２とを含む。バッファモジュール１２０、要求ハンドリングモジュール１１６、および要求調停モジュール１１８は、記載を明瞭にするために図１においては別個のブロックとして図示されている。本明細書において、「モジュール」という用語は、１つまたは複数の別個の機能を実行するように構成されるハードウェアおよび／またはソフトウェアの別個の組み合わせを意味する。システムのさまざまなモジュールは、完全に別個のハードウェアおよび／もしくはソフトウェアを使用して実装されてもよく、または、複数のモジュールが共通のハードウェアおよび／もしくはソフトウェアを使用してもよい。たとえば、バッファモジュール１２０、要求ハンドリングモジュール１１６、および要求調停モジュール１１８は、図１に図示されているように相互接続される物理的に別個のハードウェアを使用して実装され得るが、バッファモジュール１２０、要求ハンドリングモジュール１１６、および要求調停モジュール１１８のさまざまな部分は、依然として本明細書に記載されるさまざまな実施形態の機能を提供しながら、共通のハードウェアを使用して実装されてもよく、かつ／または異なって相互接続されてもよい。たとえば、代替の実施形態では、要求調停モジュール１１８の機能がバッファモジュール１２０および／もしくは要求ハンドリングモジュール１１６に組み込まれてもよく、またはその逆であってもよい。代替的には、代替の実施形態においてバッファモジュール１２０の機能が要求調停モジュール１１８および／もしくは要求ハンドリングモジュール１１６に組み込まれてもよく、またはその逆であってもよい。したがって、このような変形形態が、本発明の主題の範囲内にあることが意図される。
【００１７】
一実施形態によれば、ランダム値要求に応答してランダム値を記憶（バッファリング）すること、およびそれらを生成することは、システム１００において選択的にイネーブルされ得る。たとえば、ランダム値バッファリングは、外部モジュールによって要求ハンドリングモジュール１１６にイネーブル入力１１４を提供することによってイネーブルされることができる。ランダム値バッファリングがイネーブルされると、システムはバッファ１２２において、乱数生成器１１２によって生成される乱数から導出されるランダム値のバッファリングをサポートすることができる。ランダム値バッファリングがイネーブルされない（またはディセーブルされる）場合、ランダム値はバッファリングされず、すべてのランダム値要求は要求ハンドリングモジュール１１６によって、乱数生成器１１２との直接対話を通じてハンドリングされる。システム１００がランダム値バッファリングを実行する能力によって従来のシステムにまさるいくつかの著しい利点がもたらされるため、残りの記載のほとんどは、ランダム値バッファリングがイネーブルされるものと仮定している。
【００１８】
バッファ１２２は、乱数生成器１１２によって生成されるいくつかの乱数から導出されるランダム値を逐次記憶するように構成されるデータ構造である。たとえば、バッファ１２２は、その中に乱数生成器１１２によって生成される乱数から導出されるランダム値が記憶されることができる複数のアドレス可能要素から成る先入れ先出し（ＦＩＦＯ）またはリングバッファであり得る。一実施形態では、バッファ１２２は、バッファモジュール１２０のみによってアクセス可能であり得る（たとえば、バッファモジュール１２０のみがバッファ１２２の要素にアクセスする（たとえば、その要素から読み出し、またはその要素に書き込む）。代替の実施形態では、乱数生成器１１２および／または要求ハンドリングモジュール１１６が、バッファ１２２の要素に記憶されている値に直接アクセスすることが可能であってもよい。
【００１９】
一実施形態では、バッファ１２２の各要素は、乱数生成器１１２によって生成される各乱数の長さに対応する長さを有するランダム値を記憶するように構成される。たとえば、乱数生成器１１２が２５６ビット（すなわち、３２バイト）の長さを有する乱数を生成するように構成されるとき、バッファ１２２の各要素は、３２バイト長であるランダム値を記憶するように構成されることができる。代替の実施形態では、バッファ１２２の各要素は、乱数生成器１１２によって生成される各乱数の長さとは異なる（たとえば、それよりも短いまたは長い）長さを有するランダム値を記憶するように構成される。たとえば、一実施形態では、バッファ１２２は、ＩＰｓｅｃプロセッサ（たとえば、要求側モジュール１３０〜１３２のうちの１つまたは複数）が消費するためのＩＶを記憶するように使用されることができ、各ＩＶは乱数生成器１１２によって生成される乱数の長さと異なる長さを有してもよい。そのような実施形態では、バッファ１２２の各要素は、乱数生成器１１２によって生成される各乱数の長さではなく、ＩＶの長さに対応する長さを有するランダム値を記憶するように構成されることができる。代替的には、バッファ１２２の各要素は、複数のＩＶを含むランダム値を記憶するように構成されてもよく、複数のＩＶは乱数生成器１１２によって生成される単一の乱数から導出される。
【００２０】
たとえば、他は上記で与えられた例と一貫して、乱数生成器１１２は、各々が３２バイトの長さを有する乱数を生成するように構成される場合があり、ＩＰｓｅｃプロセッサは１６バイトの長さを有するＩＶを使用するように構成される場合がある。そのような構成では、バッファ１２２の各要素は（ＩＶの長さに対応する）１６バイトの長さを有し得、乱数生成器１１２によって生成される各乱数は、バッファ１２２の２つの連続する要素に記憶するために、２つのＩＶになるように分割され得る。代替的には、２つのＩＶが３２バイトの長さを有する単一のバッファ要素に記憶されてもよい。別の例では、ＩＰｓｅｃプロセッサは、８バイトの長さを有するＩＶを使用するように構成されてもよく、乱数生成器１１２によって生成される各乱数は、バッファ１２２の４つの連続する要素に記憶するために４つのＩＶになるように分割されてもよい（または、４つのＩＶが３２バイトの長さを有する単一のバッファ要素に記憶されてもよい）。
【００２１】
代替的には、乱数生成器１１２によって生成される乱数の長さが、システムによって使用されるＩＶの長さより大きい実施形態では、乱数生成器１１２によって生成される各乱数の一部が棄却されてもよい（たとえば、１つのみのＩＶが生成される各乱数に対して生成される）。乱数生成器１１２によって生成される乱数の長さが、システムによって使用されるＩＶ（または他のランダム値）の長さよりも短い、また他の実施形態では、乱数生成器１１２によって生成される複数の乱数が、バッファ１２２のエントリに記憶されることになる単一の値を作成するために使用され得る。単一のＩＶがバッファ１２２の各要素に記憶される実施形態では、ＩＶは（たとえば、要求側モジュール１３０〜１３２からのＩＶ要求に応答して）バッファ１２２の各要素から直接提供され得る。複数のＩＶがバッファ１２２の各要素に記憶される代替の実施形態では、ＩＶは各要素に記憶されるビットの一部（たとえば、半分）として提供されてもよい。
【００２２】
後により詳細に記載されるように、バッファモジュール１２０は、乱数生成器１１２に乱数を求める要求を（要求インタフェース１５２を介して）行うように構成される。一実施形態では、乱数生成器１１２はバッファモジュール１２０からのランダムデータ要求に応答して乱数を生成し、乱数生成器１１２はその乱数をバッファ１２２に（たとえば、乱数インタフェース１６１を介して単一クロックサイクル内に）プッシュする。代替の実施形態では、バッファモジュール１２０は乱数生成器１１２から乱数を受信し、バッファモジュール１２０は乱数から導出されるランダム値をバッファ１２２に記憶する。いずれにせよ、書き込みポインタが（たとえば、バッファモジュール１２０および／または乱数生成器１１２によって）維持され、これは、最近のランダム値が記憶された、バッファ１２２内の要素を指し示す。
【００２３】
バッファモジュール１２０は、要求ハンドリングモジュール１１６からランダム値を求める要求を（要求インタフェース１５０を介して）受信し、要求に応答してバッファ１２２に記憶されているランダム値を（ランダム値インタフェース１６２を介して）要求ハンドリングモジュール１１６に提供するようにも構成される。バッファモジュール１２０はさらに、バッファ１２２に関連付けられる（たとえば、最近に提供されたランダム値がそこから読み出されたバッファ１２２内の要素を指し示す）読み出しポインタを維持するように構成される。
【００２４】
一実施形態では、書き込みポインタおよび読み出しポインタの解析に基づいて、バッファモジュール１２０は、バッファ１２２に記憶されたアクセスされていないランダム値の量（たとえば、書き込みポインタと読み出しポインタとの間の差）をモニタリングし、バッファ１２２を「フル」（すなわち、所望のレベルまで一杯になっている、これは１００％フルまたは何らかの他のより低いレベルであり得る）に維持するよう試みる。特定の実施形態によれば、バッファモジュール１２０は、バッファ１２２に記憶されるアクセスされていないランダム値の量がしきい値を下回るか否かを判定し、および、下回る場合、要求インタフェース１５２を介してランダムデータ要求をアサートするように構成される。後により詳細に記載されるように、一実施形態では、バッファモジュール１２０は、「非特定長ランダムデータ要求」と称される、非特定長のランダムデータを求める要求をアサートする。その名称が暗示するように、非特定長ランダムデータ要求は、乱数生成器１１２によって生成されるべきランダムデータの量を特定しない。代わりに、非特定長ランダムデータ要求がデアサート（アサート停止）されるまで、乱数生成器１１２は、その内部動作状態を（たとえば、米国標準技術局（ＮＩＳＴ）規格にしたがって）更新することなく、乱数を生成し続けることになる。したがって、単一のランダムデータ要求に応答して、バッファ１２２は乱数生成器１１２から（直接にまたはバッファモジュール１２０を介して）複数の乱数を受信することができる。
【００２５】
要求ハンドリングモジュール１１６は、ランダム値要求を（たとえば、バス１４０を介して要求側モジュール１３０〜１３２から）受信し、ランダム値要求に応答して（たとえば、要求されるランダム値をバス１４０を介して要求側モジュール１３０〜１３２に送信することによって）ランダム値を取得および提供するように構成される。さまざまな事例において、要求ハンドリングモジュール１１６によって生成されるランダム値は、乱数生成器１１２によって生成される乱数が改変されていないもの、または、乱数生成器１１２によって生成される乱数の導出であり得る。たとえば、要求ハンドリングモジュール１１６は、要求側モジュール１３０〜１３２から特定のサイズのランダム値を求める要求を受信することができ、要求ハンドリングモジュール１１６は、要求に応答して、乱数生成器１１２から乱数を取得するか、または、バッファモジュール１２０からランダム値を取得することができる。取得された乱数／ランダム値が要求されるランダム値よりも長い場合、要求ハンドリングモジュール１１６は取得された乱数／ランダム値の一部を棄却することができる。逆に、取得された乱数／ランダム値が要求されるランダム値よりも短い場合、要求ハンドリングモジュール１１６は複数の乱数／ランダム値を取得し、それらを組み合わせて要求されるランダム値を生成することができる。
【００２６】
一実施形態では、要求ハンドリングモジュール１１６が要求側モジュール１３０〜１３２からランダム値要求を受信すると、要求ハンドリングモジュール１１６はその要求を評価して提供されることになるランダム値がバッファモジュール１２０から取得されるべきか、または乱数生成器１１２から直接取得されるべきかを判定する。たとえば、要求ハンドリングモジュール１１６が要求側モジュール１３０〜１３２（たとえば、ＩＰｓｅｃプロセッサ）から第１のタイプのランダム値を求めるランダム値要求（たとえば、ＩＶ要求）を受信すると、要求ハンドリングモジュール１１６は、要求インタフェース１５０上で第１のタイプのランダム値を求める要求をバッファモジュール１２０に送信することができる（たとえば、要求ハンドリングモジュール１１６はこの文脈では「ランダム値リクエスタ」とみなされ得る）。それに応答して、バッファモジュール１２０はバッファ１２２からランダム値（たとえば、ＩＶ）を取り出し、それにしたがってその読み出しポインタを更新し、ランダム値インタフェース１６２上でランダム値（たとえば、ＩＶ）を要求ハンドリングモジュール１１６に提供することができる。次いで、要求ハンドリングモジュール１１６は要求されたランダム値（たとえば、ＩＶ）を要求側モジュール１３０〜１３２に送信することができる。代替の実施形態では、要求ハンドリングモジュール１１６は、バッファ１２２からランダム値（たとえば、ＩＶ）を直接読み出すことができる。
【００２７】
バッファ１２２内にランダム値を記憶することによって、これらの第１のタイプのランダム値要求が、乱数生成器１１２が個々のランダムデータ要求に応答して乱数を生成する速度よりも速いものであり得る速度で要求ハンドリングモジュール１１６によってサービスされることが可能となる。したがって、これらの第１のタイプのランダム値要求は、「高速実行要求（ｈｉｇｈ  ｒｕｎｎｅｒ  ｒｅｑｕｅｓｔｓ）」とみなされ得る。たとえば、要求ハンドリングモジュール１１６は、乱数生成器１１２が個々のランダムデータ要求（その各々が乱数生成器１１２が時間のかかる内部状態更新を実行することを必要とする）に応答して乱数を生成し得る速度よりも速い速度でＩＰｓｅｃプロセッサ（たとえば、要求側モジュール１３０〜１３２のうちの１つ）からＩＶ要求を受信することができる。バッファモジュール１２０によって用いられる要求メカニズムおよびバッファ１２２内に複数の乱数を記憶することの実施形態によって、要求ハンドリングモジュール１１６は、各ＩＶを求める個々のランダムデータ要求を乱数生成器１１２に発行することによって乱数生成器１１２からＩＶを取得し得るよりも高速に、バッファ１２２からＩＶを取得することが可能となる。したがって、要求ハンドリングモジュール１１６は、高速実行要求に応答して乱数生成器１１２から直接乱数を取得するのではなく、高速実行要求に応答してバッファモジュール１２０からランダム値を取得する。
【００２８】
対照的に、要求ハンドリングモジュール１１６が要求側モジュール１３０〜１３２から他のタイプのランダム値要求を受信するとき、要求ハンドリングモジュール１１６は要求インタフェース１５１を介して乱数生成器１１２に乱数を要求することができる。後により詳細に記載されるように、一実施形態では、要求ハンドリングモジュール１１６は、特定長のランダムデータを求める要求をアサートし、この要求は本明細書において「特定長ランダムデータ要求」と称される。その名称が暗示するように特定長ランダムデータ要求は、乱数生成器１１２によって生成されるべきランダムデータの量の指示を含む。そのような要求に応答して、乱数生成器１１２は特定長のランダムデータ（たとえば、単一の乱数）のみを生成することになり、その後その内部状態を更新することになる。一実施形態によれば、要求ハンドリングモジュール１１６は、１バイトからマルチバイト（たとえば、数百または数千バイト）のランダムデータの長さを指定することができるが、モジュールは同様に他の長さを指定してもよい。
【００２９】
上記の記載が示すように、バッファモジュール１２０および要求ハンドリングモジュール１１６の両方が乱数生成器１１２にランダムデータ／乱数を要求することができる。一実施形態では、乱数生成器１１２は、重なっているまたは衝突している時間間隔の間にバッファモジュール１２０と要求ハンドリングモジュール１１６とから受信される要求の間で調停するためのロジックを含まない。したがって、一実施形態では、システム１００は要求調停モジュール１１８を含むことができ、これは、バッファモジュール１２０と要求ハンドリングモジュール１１６とからの重なっているランダムデータ要求間で調停するように構成される。要求調停モジュール１１８は乱数生成器１１２、バッファモジュール１２０、および要求ハンドリングモジュール１１６から別個のものとして図示されているが、他の実施形態では、要求調停モジュール１１８のすべてまたは部分が乱数生成器１１２、バッファモジュール１２０、および／または要求ハンドリングモジュール１１６に組み込まれてもよい。
【００３０】
一実施形態によれば、乱数生成器１１２は一度に１つだけの乱数を生成することが可能である。換言すれば、乱数生成器１１２は一度に１つのランダムデータ要求にしかサービスすることができない。システム性能目標（たとえば、他のタイプの要求が欠乏することを回避しながら、高速実行要求が高速に満足されることができるように、バッファ１２２を十分にフルに保つ）を達成するようにランダムデータ要求を提供するために、要求調停モジュール１１８は、任意の所与の時点において、（ランダムデータ要求インタフェース１５２を介して）バッファモジュール１２０から、および、（ランダムデータ要求インタフェース１５１を介して）要求ハンドリングモジュール１１６から受信される複数のランダムデータ要求のいずれが乱数生成器１１２に提供されるべきかを判定するように構成される。
【００３１】
一実施形態によれば、要求調停モジュール１１８は、バッファモジュール１２０からのランダムデータ要求に、要求ハンドリングモジュール１１６からの要求より高い優先順位を与える。バッファモジュール１２０がランダムデータ要求インタフェース１５２上でランダムデータ要求を提供し、かつ他の要求が乱数生成器１１２と係属中でない場合、要求調停モジュール１１８は基本的に、ランダムデータ要求インタフェース１５４上でバッファモジュール１２０からのランダムデータ要求を乱数生成器１１２に渡す。これに応答して、乱数生成器１１２は乱数インタフェース１６１上で要求されたランダムデータを提供する。同様に、要求ハンドリングモジュール１１６がランダムデータ要求インタフェース１５１上でランダムデータ要求を提供し、かつ他の要求が乱数生成器１１２と係属中でない場合、要求調停モジュール１１８は基本的に、ランダムデータ要求インタフェース１５３上でランダムデータ要求を乱数生成器１１２に渡す。これに応答して、乱数生成器１１２は乱数インタフェース１６０上で要求されたランダムデータを提供する。
【００３２】
しかしながら、バッファモジュール１２０および要求ハンドリングモジュール１１６からの要求が実質的に同時に受信されたとすると、一実施形態では、要求調停モジュール１１８は最初に、（ランダムデータ要求インタフェース１５４上で）バッファモジュール１２０からの要求に対応する非特定長ランダムデータ要求をアサートすることになり、バッファ制御要求が完了するまで要求ハンドリングモジュール１１６からの要求に対応する特定長ランダムデータ要求を保留する。加えて、要求調停モジュール１１８が、非特定長ランダムデータ要求をランダムデータ要求インタフェース１５４上でアサートされるようにしている（すなわち、バッファモジュール１２０からの要求に対応する）時間の間に、要求ハンドリングモジュール１１６からの要求が要求調停モジュール１１８によって受信されるとき、要求調停モジュール１１８は、現在アサートされている要求を、ランダムデータ要求インタフェース１５４上の要求をデアサートしてランダムデータ要求インタフェース１５３上で特定長ランダムデータ要求をアサートする前の時間期間にわたって維持することができる。いずれにせよ、要求調停モジュール１１８は、任意の所与の時点において単一のランダムデータ要求のみが乱数生成器１１２に提供されることを確実にする。
【００３３】
乱数生成器１１２は、乱数の生成に関係するさまざまな機能を実行する。さまざまな実施形態において、乱数生成器１１２によって実行される機能は、（たとえば、図１に図示されているような）単一のデバイス内に含まれてもよく、または複数のデバイスにわたって分散されてもよい。いずれにせよ、乱数生成器１１２は、外部エンティティ（たとえば、バッファモジュール１２０、要求ハンドリングモジュール１１６および／または要求調停モジュール１１８）による要求に応じて乱数を生成するように構成され、各乱数は特定数のランダム・データ・ビットを含む。
【００３４】
より具体的には、乱数生成器１１２は、乱数生成器１１２によって受信されるランダムデータ要求にしたがってランダムデータを生成する、生成機能を含む。乱数を生成するために、乱数生成器１１２は１つまたは複数の暗号プリミティブ（たとえば、ハッシュ関数またはブロック暗号アルゴリズム）を含む。たとえば、乱数生成器１１２はハッシュ関数（たとえば、ＳＨＡ−２５６または何らかの他のＳＨＡ関数）に基づいて乱数を生成することができ、このタイプのハッシュ関数は出力ブロック長（すなわち、各乱数内のビット数）を決定する。たとえば、乱数生成器１１２は一度に１６０、２２４、２５６、３８４または５１２ビットのランダムデータから成る出力ブロックを生成する（すなわち、生成される各乱数は１６０、２２４、２５６、３８４または５１２ビット長である）ように構成されることができるが、乱数生成器１１２は同様に、一度に異なるビット数の出力ブロックを生成するように構成されることができる。例示のみを目的として、本明細書における記載は、乱数生成器１１２が一度に２５６ビット（すなわち、３２バイト）のランダムデータから成る出力ブロックを生成するように構成されることを参照し得るが、この例は限定であるようには意図されない。
【００３５】
特定長ランダムデータ要求の受信に応答して、乱数生成器１１２は要求された量のランダムデータを（たとえば、１つまたは複数のハッシュまたは暗号操作を実行することによって）生成し、その内部動作状態を更新して次の要求に備える。対照的に、非特定長ランダムデータ要求の受信に応答して、乱数生成器１１２は、要求がデアサートされるまで継続的にランダムデータの出力ブロックを（たとえば、１つまたは複数のハッシュまたは暗号操作を実行することによって）生成して、その後その内部動作状態を更新して次の要求に備える。いくつかの事例においては、乱数生成器１１２は、乱数生成器１１２が再シード操作を実行しなければならないと判定する場合などに、要求をデアサートする前にランダムデータの生成を停止することができる。
【００３６】
一実施形態によれば、乱数生成器１１２は、米国標準技術局（ＮＩＳＴ）（たとえば、ＮＩＳＴ  Ｓｐｅｃｉａｌ  Ｐｕｂｌｉｃａｔｉｏｎ  ８００−９０  Ａ、「決定論的ランダムビット生成器を使用する乱数生成に対する推奨」、２０１２年１月（ＮＩＳＴ  Ｓｐｅｃｉａｌ  Ｐｕｂｌｉｃａｔｉｏｎ  ８００−９０  Ａ，Ｒｅｃｏｍｍｅｎｄａｔｉｏｎ  ｆｏｒ  Ｒａｎｄｏｍ  Ｎｕｍｂｅｒ  Ｇｅｎｅｒａｔｉｏｎ  Ｕｓｉｎｇ  Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｒａｎｄｏｍ  Ｂｉｔ  Ｇｅｎｅｒａｔｏｒｓ，Ｊａｎ．，２０１２））によって指定または推奨されるアルゴリズムに実質的にしたがってランダムビットを生成するように構成される決定論的ランダムビット生成器（ＤＲＢＧ）である。より具体的な実施形態によれば、乱数生成器１１２はＨａｓｈ＿ＤＲＢＧ（すなわち、ハッシュ関数を利用して乱数生成を実行するＤＲＢＧ）である。他の実施形態では、乱数生成器１１２は異なるタイプの乱数生成器（たとえば、他のアルゴリズム（たとえば、認可されているハッシュ関数、ブロック暗号、数論問題など）にしたがってランダムビットを生成するように構成される非決定論的ランダムビット生成器またはＤＢＲＧ）であってもよい。
【００３７】
一実施形態によれば、図２および図３と併せてより詳細に記載されるように、乱数生成器１１２は複数のＩ／Ｏ（入力／出力）を含み、ここで、Ｉ／Ｏの２つ以上のセットが「要求ポート」に対応する。たとえば、ランダムデータ要求インタフェース１５３は、１つの要求ポートに結合されることができ、ランダムデータ要求インタフェース１５４は別の要求ポートに結合されることができる。各要求ポートは、ランダムデータを求める要求を（たとえば、一実施形態では要求調停モジュール１１８から、または、別の実施形態ではバッファモジュール１２０および要求ハンドリングモジュール１１６から直接）受信するとともに、要求に応答して（たとえば、乱数インタフェース１６０、１６１を介して）乱数を提供するように構成される。一実施形態によれば、乱数生成器１１２は２つの要求ポートを含み、一方の要求ポートは非特定長ランダムデータ要求をハンドリングするように構成され、他方の要求ポートは特定長ランダムデータ要求を求める要求をハンドリングするように構成される。前者のポートは本明細書においては「非特定長要求ポート」と称し、後者のポートは本明細書においては「特定長要求ポート」と称する。一実施形態によれば、非特定長ランダムデータ要求はバッファモジュール１２０から発するランダムデータ要求に対応し、特定長ランダムデータ要求は、要求側モジュール１３０〜１３２からの非高速実行タイプのランダム値要求（たとえば、非ＩＶタイプの要求）に基づいて要求ハンドリングモジュール１１６から発するランダムデータ要求に対応する。したがって、バッファモジュール１２０から発するランダムデータ要求は非特定長要求ポート上で受信され、非高速実行タイプのランダム値要求に基づいて要求ハンドリングモジュール１１６から発するランダムデータ要求は特定長要求ポート上で受信される。
【００３８】
乱数生成器１１２が非特定長要求ポート上でアサートされたランダムデータ要求を検出すると、乱数生成器１１２はランダムデータ要求がデアサートされるまで乱数のシーケンスを生成する。一実施形態によれば、非特定長ランダムデータ要求にサービスしている間、乱数生成器１１２はランダムデータの連続して生成される出力ブロック間で（たとえば、連続して生成される乱数間で）その内部状態を更新しない。代わりに、乱数生成器１１２は、非特定長ランダムデータ要求がデアサートされるときにのみその内部状態を更新する。対照的に、乱数生成器１１２が特定長要求ポート上でアサートされたランダムデータ要求を検出すると、乱数生成器１１２は要求されるデータ長を決定し、要求されるデータ長に対応する量のランダムデータを生成し、その後その内部状態を更新して次の要求に備える。
【００３９】
図２は、例示的な実施形態によるマルチポート乱数生成器２００の簡略化されたブロック図である。たとえば、乱数生成器２００は、（たとえば、図１のシステム１００内の乱数生成器１１２のように）非特定長乱数および特定長乱数が要求され得るシステムにおいて使用されることができる。一実施形態によれば、乱数生成器２００は複数の入力２１０〜２１６および複数の出力２２０〜２２４を含む。たとえば、一実施形態によれば、乱数生成器２００は、１つまたは複数のエントロピー入力２１０（そのうち１つのみを図示している）、インスタンス化入力２１１、非インスタンス化入力２１２、再シードインスタンス化入力２１３、およびテスト入力２１４を含む。加えて、一実施形態では、乱数生成器２００はテスト出力２２０を含む。上記の入力および出力の目的は既知であり本明細書の範囲外であるため、本明細書において詳細には説明されない。
【００４０】
上記の入力および出力に加えて、乱数生成器２００は、第１のポート２３０（たとえば、非特定長要求ポート）に対応する第１のセットのＩ／Ｏ２１５、２２１、２２２、および、第２のポート２３２（たとえば、特定長要求ポート）に対応する第２のセットのＩ／Ｏ２１６、２２３、２２４を含む。第１のポート２３０は、一実施形態では、ランダムデータ要求入力２１５、ランダムデータ出力２２１、およびステータス出力２２２を含む。同様に、第２のポート２３２は、一実施形態では、ランダムデータ要求入力２１６、ランダムデータ出力２２３、およびステータス出力２２４を含む。入力２１５、２１６および出力２２１〜２２４の各々は単一のＩ／Ｏとして図示されており、これは入力２１５、２１６および出力２２１〜２２４が直列Ｉ／Ｏであり得ることを暗示しているが、これは便宜上のものにすぎない。さまざまな実施形態において、入力２１５、２１６および出力２２１〜２２４のいくつかまたはすべては直列Ｉ／Ｏであり得、入力２１５、２１６および出力２２１〜２２４のいくつかまたはすべては並列Ｉ／Ｏであり得る。同様に、それらが接続する先のインタフェース（たとえば、図１の要求インタフェース１５３、１５４および乱数インタフェース１６０、１６１）は直列または並列インタフェースであり得る。一実施形態によれば、ランダムデータ出力２２１は第１の幅（すなわち、単一クロックサイクル中に並列に出力されることができるビット数）を有し、ランダムデータ出力２２３は第２の幅を有し、第１の幅と第２の幅とは互いに同じであってもよいし、異なってもよい。
【００４１】
とりわけ、乱数生成器２００は生成機能２４０を実装し、これは、ランダムデータ要求入力２１５、２１６上で受信されるランダムデータ要求に応答してランダムデータを生成するように構成される。たとえば、ランダムデータ要求入力２１５上で非特定長ランダムデータ要求がアサートされたことが検出されることに応答して、生成機能２４０は、（たとえば、１つまたは複数のハッシュまたは暗号操作を実行することによって）ランダムデータの出力ブロックを生成すること、および、ランダムデータの出力ブロックをランダムデータ出力２２１上で利用可能にすることを開始する。一実施形態によれば、乱数生成器２００は、ランダムデータの各出力ブロックが生成されるとすぐに、単一クロックサイクル内にランダムデータをランダム値バッファ（たとえば、図１のバッファ１２２）にプッシュする。代替の実施形態では、ランダムデータ出力２２１上で新たなランダムデータの出力ブロックが利用可能になる度毎に、生成機能２４０はステータス出力２２２上で「ＳＵＣＣＥＳＳ（成功）」指示子（インジケータ）を提供する。ステータス出力２２２上の「ＳＵＣＣＥＳＳ」指示子は、要求側エンティティに（たとえば、図１のバッファモジュール１２０に）、ランダムデータ出力２２１上で乱数が利用可能であることを指し示す。生成機能２４０は、乱数生成器２００がランダムデータ要求入力２１５上の非特定長ランダムデータ要求がデアサートされたことを検出するまで、ランダムデータ出力２２１上でランダムデータを出力し続ける（とともに、ランダムデータをランダム値バッファにプッシュするか、またはステータス出力２２２上で「ＳＵＣＣＥＳＳ」指示子を提供する）。そのとき、生成機能２４０はその内部状態を更新して次に受信される要求に備える。いくつかの事例においては、生成機能２４０は、ランダムデータの生成を停止する必要がある場合があり（たとえば、再シードが必要とされる場合）、ステータス出力２２２上で「ＥＲＲＯＲ（エラー）」指示子を提供する場合がある。しかしながら、エラーの取り扱いは本開示の範囲内になく、本明細書においては詳細には説明されない。
【００４２】
その非特定長ランダムデータ要求のハンドリングとは対照的に、ランダムデータ要求入力２１６上で特定長ランダムデータ要求がアサートされたことを検出するのに応答して、生成機能２４０は、要求内で指定された量のランダムデータのみを（たとえば、１つまたは複数のハッシュまたは暗号操作を実行することによって）生成し、ランダムデータ出力２２３上でランダムデータを出力する。一実施形態によれば、ランダムデータ要求入力２１６は単一の信号を搬送する場合があり、これは、要求されるランダムデータの長さを指し示す（たとえば、バスは要求されるバイト数のランダムデータを搬送する）。そのような実施形態では、乱数生成器２００は、示される長さが０でない限り、要求を有効であるとみなし得る。別の実施形態では、ランダムデータ要求入力２１６は、長さ信号および有効信号の両方を搬送することができる（たとえば、ランダムデータ要求入力２１６は実際には、複数の入力、すなわち、長さを搬送する一方、および、要求が有効であるときを示すもう一方を含むことができる）。いずれにせよ、乱数生成器２００は、ランダムデータ要求入力２１６上の有効な入力に応答して要求される量のランダムデータを生成することができる。ランダムデータ出力２２３上でランダムデータが利用可能である場合、生成機能２４０はステータス出力２２４上で「ＳＵＣＣＥＳＳ」指示子を提供する。ステータス出力２２４上の「ＳＵＣＣＥＳＳ」指示子は、要求側エンティティに（たとえば、図１の要求ハンドリングモジュール１１６に）、ランダムデータ出力２２４上で乱数が利用可能であることを示し、要求側エンティティはその場合、乱数をランダムデータ出力２２３からプルすることができる。要求が完了すると、生成機能２４０はその内部状態を更新して次に受信される要求に備える。
【００４３】
図２に示されている実施形態では、各ポートは、ランダムデータ要求入力２１５、２１６、ランダムデータ出力２２１、２２３、およびステータス出力２２２、２２４を含む。代替の実施形態では、乱数生成器は、複数のランダムデータ要求入力、および、単一のランダムデータ出力および／またはステータス出力のみを実装してもよい。たとえば、図３は、そのような例示的な実施形態によるマルチポート乱数生成器３００の簡略化されたブロック図である。乱数生成器２００（図２）と同様に、乱数生成器３００は、（たとえば、図１のシステム１００内の乱数生成器１１２のように）非特定長乱数および特定長乱数が要求され得るシステムにおいて使用されることができる。一実施形態によれば、乱数生成器３００は、同じく乱数生成器２００と同様に、１つまたは複数のエントロピー入力３１０（そのうち１つのみを図示している）、インスタンス化入力３１１、非インスタンス化入力３１２、再シードインスタンス化入力３１３、テスト入力３１４、およびテスト出力３２０を含む。加えて、乱数生成器３００は、生成機能３４０をも実装する。
【００４４】
しかしながら、図２に示されている実施形態とは対照的に、乱数生成器３００の非特定長要求ポート３３０は、ランダムデータ要求入力３１５のみを含み、乱数生成器３００の特定長要求ポート３３２は、（たとえば、要求されるランダムデータの長さ、および、場合によっては有効要求信号を搬送する）ランダムデータ要求入力３１６のみを含む。非特定長および特定長ランダムデータ要求の両方に対するランダムデータを出力するために単一のランダムデータ出力３２１が使用される。加えて、非特定長および特定長ランダムデータ要求の両方に対するランダムデータ生成のステータス（状態）を示すために単一のステータス出力３２２が使用される。別様に解釈すると、ランダムデータ要求入力３１５、３１６は、２つの別個のポートから成る部分として指定され、ランダムデータ出力３２１およびステータス出力３２２は２つのポートによって共有される。システム内に実装されると、要求側エンティティ（たとえば、図１のバッファモジュール１２０、要求ハンドリングモジュール１１６）のうちの１つのみがランダムデータ要求入力３１５、３１６の各々とのインタフェースを行うことになるが、両方の要求側エンティティが共有されるランダムデータ出力３２１およびステータス出力３２２とインタフェースを行うことになる。
【００４５】
図１〜図３は、各々が２つの要求ポート（たとえば、１つの非特定長要求ポートおよび１つの特定長要求ポート）を含む乱数生成器１１２、２００、３００を例示および記載しているが、１つの実施形態では、乱数生成器は、３つ以上の要求ポートおよび／またはタイプ毎に２つ以上の要求ポートを含んでもよい。別の代替の実施形態では、バッファモジュール（たとえば、図１のバッファモジュール１２０）から発する要求にサービスするように構成される要求ポートは、非特定長要求ポートではなく特定長要求ポートであってもよく、バッファモジュールは、非特定長のランダムデータを求める要求を発行するのではなく、バッファ（たとえば、図１のバッファ１２２）に記憶されることになる特定量のランダムデータを求める要求を発行してもよい。さらに他の実施形態では、乱数生成器は１つまたは複数の追加のポート（たとえば、（図１に示されている以外のモジュールに接続される）一般ランダムデータポート、外部要求ポート、および、（たとえば、ＡＥＳエンジンの一部としての）マスク生成ポート）を含んでもよい。
【００４６】
図４は、例示的な実施形態による、ランダム値生成モジュール（たとえば、図１のモジュール１１０）が要求側モジュール（たとえば、図１の要求側モジュール１３０〜１３２）の要求を受けてランダム値を生成する方法のフローチャートである。例示を目的として、本方法は、要求されバッファ（たとえば、図１のバッファ１２２）から取り出されることができる「高速実行」ランダム値のタイプとしてＩＶを使用して記載されている。他の実施形態は、要求されバッファから取り出される他のタイプのランダム値の要求および生成を含んでもよいことが理解されよう。したがって、このような他の実施形態が、本発明の主題の範囲内にあることが意図される。
【００４７】
たとえば、本方法は、ホストシステム（たとえば、その中にランダム値生成モジュールが組み込まれるコンピュータシステム）が電源投入もしくはリブートされると、または、何らかの他の起動事象（イベント）が発生すると開始することができる。説明を容易にする目的で、下記の記載は、システムの乱数生成器（たとえば、図１の乱数生成器１１２）がこの時点においてインスタンス化されていないこと、および、バッファモジュール（たとえば、図１のバッファモジュール１２０）と関連付けられたバッファ（たとえば、図１のバッファ１２２）が空であることを想定している。
【００４８】
したがって、本方法は、ブロック４０２において、乱数生成器（ＲＮＧ）をインスタンス化することによって開始することができる。乱数生成器のインスタンス化は本開示の範囲外であるが、乱数生成器のインスタンス化プロセスの一実施形態を下記に簡潔に記載する。乱数生成器をインスタンス化するために、エントロピー入力が（たとえば、図２、図３のエントロピー入力２１０、３１０上で）提供される。乱数生成器内で、エントロピー入力は他の入力（たとえば、ナンス（ｎｏｎｃｅ）および／または個別化文字列）と組み合わされて、そこから乱数生成器が初期内部動作状態を作成するシードが作成される。本明細書においては詳細に説明されていないが、再シードも時折、同様に実行される場合がある（たとえば、シードの寿命の終わりに達したとき、乱数生成器が再利用されるとき、または他のとき）。ともかく、シードが利用可能になると、乱数生成器は、シードから１つまたは複数の値を導出し、インスタンス化がシード（または再シード）されてから生成された要求またはブロックの数のカウントを開始することによって、その初期内部動作状態を確立する。インスタンス化プロセスが成功または失敗したことを示すために、インスタンス化機能からステータスが返されることができる。
【００４９】
ブロック４０４において、ランダム値バッファリングが（たとえば、外部モジュールによって要求ハンドリングモジュール１１６に図１のイネーブル入力１１４を提供することによって）イネーブルされることができる。ランダム値バッファリングがイネーブルされると、システムは、乱数生成器によって生成される乱数に基づくランダム値の（たとえば、図１のバッファ１２２における）バッファリングをサポートすることができる。ランダム値バッファリングがイネーブルされない（またはディセーブルされる）場合、ランダム値はバッファリングされず、すべてのランダム値要求は（たとえば、要求ハンドリングモジュール１１６によって）乱数生成器との直接対話を通じてハンドリングされる。
【００５０】
ブロック４０６〜４１２において、乱数バッファ（たとえば、図１のバッファ１２２）を所定のレベル（たとえば、１００％フルまたは何らかの他のより低いパーセンテージまで）「充填する」ためのプロセスが実行される。望ましくは、バッファ充填プロセスは、ランダム値生成モジュールが要求側モジュール（たとえば、図１の要求側モジュール１３０〜１３２）からランダム値を求める何らかの要求を受信する前に、開始および完了される。プロセスを開始するために、ブロック４０６において、非特定長ランダムデータ要求が、（たとえば、図２、図３の非特定長要求入力２１５、３１５を介して）乱数生成器の第１のポート上でアサートされる。たとえば、非特定長ランダムデータ要求は、バッファモジュール（たとえば、図１のバッファモジュール１２０）によって直接的に、または、要求調停回路（たとえば、図１の要求調停モジュール１１８）によって間接的にアサートされることができる。
【００５１】
一実施形態では、要求に応答して、ブロック４０８において、乱数生成器は乱数の生成およびバッファ（たとえば、図１のバッファ１２２）への乱数の記憶を開始する。代替の実施形態では、乱数生成器は（たとえば、図２、図３のステータス出力２２２、３２２を介して）乱数が利用可能になるときを示し、バッファモジュールは乱数生成器から乱数を取得して、乱数に基づいてランダム値をバッファに記憶する。いずれにせよ、乱数はそのまま（たとえば、乱数生成器によって生成されたものと同じ形態で）記憶されてもよく、記憶される前に改変されてもよい（たとえば、すでに説明されたように、乱数生成器によって生成された乱数がＩＶの二倍の長さであり、したがって２つのＩＶが各乱数から生成され得るときなどは、乱数はＩＶのサイズに対応するセグメントに分割されてもよい）。新たな乱数（またはＩＶ）がバッファ内に書き込まれる度毎に、書き込みポインタが更新される。
【００５２】
ブロック４１０において、バッファポインタ（たとえば、書き込みポインタおよび読み出しポインタ）に基づいて、バッファモジュールはバッファが十分に満たされている（一杯である）か、または何らかの他のプリエンプティブ事象が発生したか否かを判定する。そうでない場合、バッファモジュールは非特定長ランダムデータ要求のアサートを継続し、乱数生成器は乱数の生成および乱数のバッファ内への記憶を継続する（ブロック４０８）。一実施形態によれば、特定のプリエンプティブ事象は、バッファモジュールに、バッファが十分に満たされているとみなされるようになる前に、バッファの充填を中断させる（すなわち、非特定長ランダムデータ要求をデアサートすることによって）ことができる。たとえば、バッファモジュールは、特定長ランダムデータ要求が（たとえば、図１の要求ハンドリングモジュール１１６によって）アサートされたとき、バッファが十分に満たされる前に非特定長ランダムデータ要求をデアサートすることができる。そのような実施形態では、バッファモジュールは非特定長ランダムデータ要求を直ちにデアサートしてもよく、または、バッファモジュールは、バッファモジュールが非特定長ランダムデータ要求をデアサートするまで（たとえば、非特定長ランダムデータ要求の結果として追加の量のランダムデータの生成が完了するまで）の期間、待ってもよい。たとえば、バッファモジュールが、最小限の数のエントリがバッファに記憶されることを確実にするために十分なランダムデータが供給されたと判定するとき、バッファモジュールは非特定長ランダムデータ要求をデアサートすることができる。他の実施形態では、バッファモジュールは同様に、他のプリエンプティブ事象に応答して非特定長ランダムデータ要求をデアサートしてもよい。バッファモジュールが、バッファが十分に満たされているか、またはプリエンプティブ事象が発生したと判定するとき、ブロック４１２において、バッファモジュールは第１のポート上で非特定長ランダムデータ要求をデアサートし、乱数生成器はそれに応答してバッファに記憶するためのランダムデータの生成を中止する。初期非特定長ランダムデータ要求は、（プリエンプティブ事象がその時間の間に発生しないと仮定すると）バッファを満たすのにかかるだけ十分長くアサートされているため、一実施形態では、初期非特定長ランダムデータ要求は、後続の非特定長ランダムデータ要求（たとえば、ブロック４２０における、バッファが十分に満たされなくなっているという判定に基づいてアサートされる、後の非特定長要求）よりも、完了までにかかる時間が著しく長い場合がある。換言すれば、バッファを満たすために最初に使用されるランダムデータを生成するための起動時間は、後続の非特定長ランダムデータ要求に応答してランダムデータを生成するための時間よりも著しく長い場合がある。これはいくつかの状況において当てはまる場合がある。しかしながら、いくつかの事例においては、後続の非特定長ランダムデータ要求は初期非特定長ランダムデータ要求よりも長い期間にわたってアサートされる場合がある。たとえば、ランダム値が、乱数生成器がバッファにデータ投入するのとほぼ同じ速度でバッファから提供されており、かつプリエンプティブ事象が発生していない状態が持続する場合、対応する非特定長ランダムデータ要求が相対的に長い期間にわたってアサートされ得る。
【００５３】
この時点においては、ブロック４１４において、ランダム値生成モジュールは、要求側モジュール（たとえば、図１の要求側モジュール１３０〜１３２）からのランダム値を求める入来する要求を待つ。ランダム値を求める要求が要求側モジュールから受信されると、ブロック４１６において、ランダム値生成モジュール（たとえば、図１の要求ハンドリングモジュール１１６）は、要求のタイプを判断する。より具体的には、ランダム値生成モジュールは、要求が、バッファに記憶される何らかのタイプのランダム値（たとえば、ＩＶ）を求める要求に対応するか、または何らかの他のタイプの乱数に対応するかを判定する。ランダム値生成モジュールが要求がバッファに記憶される値（たとえば、ＩＶ）を求めるものであると判定する場合、ブロック４１８において、ランダム値生成モジュールはバッファから値を読み出し、値を要求側モジュールに送信する。たとえば、要求ハンドリングモジュールは、バッファモジュール（たとえば、図１のバッファモジュール１２０）に値を要求することができ、バッファモジュールはそれに応答してバッファから値を提供することができ、バッファモジュールはそれにしたがって読み出しポインタを更新することができる。
【００５４】
ブロック４２０において、バッファモジュールは、バッファポインタ（たとえば、読み出しポインタおよび書き込みポインタ）の解析に基づいて、バッファが依然として、十分に満たされていると考えられるか否かを判定することができる。たとえば、一実施形態では、しきい値パーセンテージまたはしきい値数の読み出されていないランダム値が依然としてバッファ内にあるとバッファモジュールが判定した場合に、バッファは十分に満たされていると考えられ得る。このパーセンテージは１００％と同じ高さであり得るが、パーセンテージは１００％未満に設定されてもよく、それによって、すべての単一のランダム値要求後にバッファモジュールはバッファを再充填しようと試みなくなる。いずれにしても、バッファモジュールがバッファが十分に満たされていないと判定する場合、ブロック４０６において、バッファモジュールは第１のポート上で非特定長ランダムデータ要求を再アサートすることができ、本方法は図示されるように反復することができる。一実施形態では、バッファモジュール（または、図１の要求調停モジュール１１８のような調停ロジック）は、乱数生成器がすでに特定長ランダムデータ要求（または何らかの他の要求）を遂行している場合は、第１のポート上で非特定長ランダムデータ要求をアサートするのを待つことができる。再びブロック４２０を参照して、バッファが依然として十分に満たされていると考えられるとバッファモジュールが判定する場合、本方法は図示されるように反復することができる（すなわち、プロセスは、ブロック４１４における、要求側モジュールから入来するランダム値要求を待つ状態に戻ることができる）。
【００５５】
再びブロック４１６を参照して、ランダム値生成モジュールが、ランダム値要求がバッファ内の値を求める要求以外のタイプの要求であると判定する場合、ブロック４２２において、乱数生成器の第２のポート上で（たとえば、図２、図３の特定長要求入力２１６、３１６を介して）特定長ランダムデータ要求がアサートされる。たとえば、特定長ランダムデータ要求は、要求ハンドリングモジュール（たとえば、図１の要求ハンドリングモジュール１１６）によって直接的に、または、要求調停回路（たとえば、図１の要求調停モジュール１１８）によって間接的にアサートされることができる。
【００５６】
要求に応答して、乱数生成器は要求される量のランダムデータを生成する。乱数生成器はまた、（たとえば、図２、図３のステータス出力２２４、３２２を介して）ランダムデータが利用可能になるときを示す。ランダムデータが利用可能であるとき、ランダム値生成モジュール（たとえば、図１の要求ハンドリングモジュール１１６）は、ブロック４２４において乱数生成器からランダムデータに対応する乱数を取得し、ブロック４２６において乱数から導出されるランダム値を要求側モジュールに送信する。その後、本方法は図示されるように反復する。
【００５７】
図５は、例示的な実施形態による非特定長ランダムデータ要求および特定長ランダムデータ要求に応答して乱数生成器（たとえば、図１〜図３の乱数生成器１１２、２００、３００）が乱数を生成する方法のフローチャートである。簡潔にするために、下記のプロセスの記載は、乱数生成器がランダムデータの生成に成功しない場合（たとえば、再シードが必要とされるとき、または何らかの他の事象に起因して）の偶発性は記載しない。当業者であれば、本明細書における記載に基づいて、このプロセスをランダムデータ生成失敗の偶発性を含むように修正する方法を理解しよう。
【００５８】
いずれにせよ、本方法は、乱数生成器がランダムデータ要求を受信すると開始することができる。（判断ブロック５０２によって示されるように）非特定長ランダムデータ要求に対応する第１のポート（たとえば、図２、図３のポート２３０、３３０）上で要求が為されると、次いでブロック５０４において、乱数生成器の生成機能が、乱数生成器の現在の内部状態に基づいてランダムデータ（たとえば、３２バイト数のような、ランダムデータの出力ブロック）を生成する。ランダムデータの生成に成功したと仮定して、次いでブロック５０６において、乱数生成器がバッファ（たとえば、図１の外部バッファ１２２）内に乱数を記憶する。代替的に、乱数生成器は乱数出力（たとえば、図２、図３の乱数出力２２１、３２１）上でランダムデータを利用可能にして、ステータス出力（たとえば、図２、図３のステータス出力２２２、３２２）上で乱数生成が成功したことを示すことができる。次いで、ブロック５０８において、乱数生成器は、非特定長ランダムデータ要求が第１のポート上でデアサートされたか否かを判定する。そうでない場合、本方法は図示されるように反復する。そうである場合、ブロック５１４において、乱数生成器はその内部状態を更新し、本方法は終了する。
【００５９】
再びブロック５０２を参照して、ランダムデータ要求が特定長ランダムデータ要求に対応する第２のポート（たとえば、図２、図３のポート２３２、３３２）上で為された場合、次いでブロック５１０において、乱数生成器の生成機能は、乱数生成器の現在の内部状態に基づいて要求内で指定される量のランダムデータを生成する。ランダムデータの生成に成功したと仮定して、次いでブロック５１２において、生成機能はランダムデータを乱数出力（たとえば、図２、図３の乱数出力２２３、３２１）上で利用可能にし、ステータス出力（たとえば、図２、図３のステータス出力２２４、３２２）上で乱数生成に成功したことを示す。次いで、ブロック５１４において、乱数生成器はその内部状態を更新し、本方法は終了する。
【００６０】
本明細書に含まれるさまざまな図面において示されている接続線は、さまざまな要素間の例示的な機能的関係および／または物理結合を表すように意図されている。なお、多くの代替形態または追加の機能的関係または物理接続が本主題の一実施形態において存在してもよい。加えて、特定の専門用語は本明細書においては参照のみを目的として使用されている場合もあり、したがって、限定であるようには意図されておらず、「第１の」、「第２の」といった用語、および、構造を指す他のこのような数に関する用語は文脈において明確に示されていない限り、並びまたは順序を暗示してはいない。
【００６１】
上記の記載は、ともに「接続される」または「結合される」ものとして要素もしくはノードまたは特徴に言及している。本明細書において使用される場合、別途明確に述べられていない限り、「接続される」とは、１つの要素が別の要素に直接的に結び付けられている（または直接的にそれと通信する）ことを意味し、必ずしも機械的にではない。同様に、別途明確に述べられていない限り、「結合される」とは、１つの要素が別の要素に直接的にまたは間接的に結び付けられている（または直接的にもしくは間接的にそれと通信する）ことを意味し、必ずしも機械的にではない。したがって、図面に示されている概略図は要素の１つの例示的な構成を図示しているが、追加の介在する要素、デバイス、特徴、または構成要素が図示される主題の実施形態において存在してもよい。
【００６２】
ランダム値を生成するための方法の一実施形態は、第１のランダムデータ要求を乱数生成器に提供することと、乱数生成器が、第１のランダムデータ要求に応答して第１のランダムデータを生成することを含む。本方法は、第１のランダムデータから導出される複数のランダム値をデータ構造に記憶することをさらに含む。第１のランダム値リクエスタからの（第１のタイプのランダム値を求める）第１のランダム値要求の受信に応答して、第１のタイプのランダム値が生成され、第１のランダム値リクエスタに送信される。このランダム値は、データ構造に記憶された複数のランダム値のうちの１つのランダム値に基づく。本方法は、第２のタイプのランダム値を求める第２のランダム値要求の受信に応答して第２のランダムデータ要求を乱数生成器に提供することと、第２のランダムデータ要求の送信に応答して乱数生成器から第２のランダムデータを受信することと、第２のランダムデータから導出される、第２のタイプのランダム値を、第２のタイプのランダム値のリクエスタに送信することとをさらに含む。
【００６３】
ランダム値を生成するための方法の別の実施形態は、第１のランダムデータ要求を乱数生成器に提供することと、乱数生成器が、第１のランダムデータ要求に応答して第１のランダムデータを生成することを含む。本方法は、第１のランダムデータから導出される複数のランダム値をバッファに記憶することをさらに含む。初期化ベクトルリクエスタからの初期化ベクトル要求の受信に応答して、バッファに記憶された複数のランダム値のうちの１つに基づいて初期化ベクトルが生成され、初期化ベクトルは初期化ベクトルリクエスタに送信される。本方法は、初期化ベクトル以外のランダム値を求めるランダム値要求の受信に応答して第２のランダムデータ要求を乱数生成器に提供することと、第２のランダムデータ要求の送信に応答して乱数生成器から第２のランダムデータを受信することとをさらに含む。
【００６４】
システムの一実施形態は、乱数生成器と、データ構造と、第１のモジュールと、第２のモジュールとを含む。乱数生成器は、ランダムデータ要求に応答してランダムデータを生成するように構成される。データ構造は、第１のランダムデータ要求に応答して乱数生成器によって生成される第１のランダムデータから導出される複数のランダム値を記憶するように構成される。乱数生成器およびデータ構造に結合される第１のモジュールは、第１のランダムデータ要求を乱数生成器に提供するように構成される。第１のモジュールは、第１のランダム値のリクエスタから第１のタイプの第１のランダム値を求める第１のランダム値要求を受信するとともに、第１のランダム値要求に応答して、第１のランダム値を第１のランダム値のリクエスタに送信するようにも構成される。第１のランダム値は、データ構造に記憶された複数のランダム値から導出される。乱数生成器に結合される第２のモジュールは、第２のランダム値のリクエスタからの第２のタイプの第２のランダム値を求める第２のランダム値要求の受信に応答して、第２のランダムデータ要求を乱数生成器に提供し、第２のランダムデータ要求の送信に応答して乱数生成器から第２のランダムデータを受信するとともに、第２のランダムデータから導出される第２のランダム値を第２のランダム値のリクエスタに送信するように構成される。
【００６５】
前述の詳細な説明の中で少なくとも１つの例示的な実施形態を提示してきたが、膨大な数の変形形態が存在することが理解されるべきである。本明細書に記載される１つまたは複数の例示的な実施形態は、権利を請求する主題の範囲、適用性または構成を限定することを決して意図していないことも理解されるべきである。そうではなく、前述の詳細な説明は、説明された１つまたは複数の実施形態を実行するための有意義な指針を当業者に提供するものである。既知の均等物および本願の出願時点で予見される均等物を含む、特許請求の範囲によって画定される範囲から逸脱することなく、要素の機能および構成におけるさまざまな変更を行うことができることが理解されるべきである。
【図１】
2013214050.tif 000003
【図２】
2013214050.tif 000004
【図３】
2013214050.tif 000005
【図４】
2013214050.tif 000006
【図５】
2013214050.tif 000007