以下の図面と併せて考察して詳細な説明および特許請求の範囲を参照することで、より完全に本主題を理解することができる。これらの図面では全般にわたり同様の参照符号は類似の要素を示している。
下記の詳細な記載は本来説明のみを目的とし、本主題の実施形態またはこれらの実施形態の適用および使用を限定することを意図しない。本明細書において使用される場合、「例示的な(exemplary)」という単語は、「例、事例、または説明としての役割を果たす」ことを意味する。例示として本明細書に記載されるすべての実施例は、必ずしも他の実施例よりも好適であるまたは優位であるとは解釈されない。さらに、上記技術分野、背景技術、または以下の詳細な説明で提示される、いかなる表示または暗示された理論によっても束縛されることは意図されていない。簡潔にするために、「ランダムデータ」、「ランダムビット」、「乱数」、および「ランダム値」という用語は、真にランダムなデータ/ビット/数/値(すなわち、偏りのないランダム変数のインスタンス、または均一に分散されたランダムプロセスによって生成された出力)または擬似ランダムなデータ/ビット/数/値(すなわち、観察しても見えない内部動作を有するプロセスによって生成された、決定性ではあるが事実上ランダムなデータ/ビット/数/値)のいずれかを意味する。したがって、本明細書において「ランダムデータ」、「ランダムビット」、「乱数」、または「ランダム値」の生成に言及する場合、それは真にランダムな、または擬似ランダムなデータ/ビット/数/値のいずれかを生成することを含むように意図される。下記により詳細に記載されるように、またこれらの用語が本明細書において使用される場合、乱数生成器の実施形態は「ランダムビット」の形態の「ランダムデータ」を生成する。本明細書においては、有効なランダムデータのインスタンスとして乱数生成器によって生成されるランダムビットの固定長出力ブロックを「乱数」と称する。「ランダム値」は乱数生成器によって生成される乱数「から導出される」値であり、「から導出される」という用語は、乱数がランダム値を生成するために改変されている場合があるが、必ずしもそうとは限らない(たとえば、乱数「から導出される」ランダム値は乱数と同一であってもよい)ことを意味する。ランダム値は乱数生成器によって生成される乱数と同じ長さを有してもよいし、有しなくてもよい。
本発明の主題の実施形態は、乱数生成器を使用して効率的にランダム値を生成することが望まれる、さまざまな異なるタイプのシステムのいずれかにおいて使用され得る。たとえば、さまざまな実施形態は、さまざまなシステムエンティティ間での通信のためにデータパケット(たとえば、インターネットプロトコル(IP)データパケット)を保護するように構成されるシステムにおいて実装されることができる。より具体的には、そのようなシステムにおいて、通信セッションに関与するもの(たとえば、ホストの対、ゲートウェイ、ネットワークなど)の間で通信されることになるIPデータパケットは、インターネット・エンジニアリング・タスク・フォース(IETF)によって指定されるインターネット・プロトコル・セキュリティ(IPsec)プロトコルにしたがって処理されることができる。IPsecプロトコルは、伝送前にIPパケットを認証および暗号化するための要件を明記している。たとえば、IPsecプロトコルスイートのカプセル化セキュリティペイロード(ESP)部分は、データパケットを構築および解釈するためのフォーマットを明記している。とりわけ、ESPは、パケット内の、ペイロードデータのためのサイズの一定しないフィールドに関する開始ロケーションを指定する。データ投入されると、ペイロード・データ・フィールドは、元のIPパケットの保護されたペイロードを含む。
特定のモードにおいて元のIPパケットの保護された内容を生成するために、プレーンテクスト・パケット・ペイロードの最初の部分が同じサイズの初期化ベクトル(IV)(たとえば、ランダム値)と組み合わされ、この組み合わせが暗号アルゴリズム(たとえば、先進暗号化規格(「AES」)を利用する暗号アルゴリズムまたは何らかの他のアルゴリズム)に入力される。結果もたらされる暗号文が出力されて保護されるIPパケットのペイロード・データ・フィールドの一部にデータ投入される。加えて、結果もたらされる暗号文はフィードバックもされて、その暗号化の前のプレーンテクスト・パケット・ペイロードの次の部分に組み合わされる。このプロセスが、パケットペイロード全体が暗号化されるまで繰り返される。パケットペイロードごとに異なるIVが使用され、これによって、暗号化データパケットのランダム性(したがって、解読不可能性)が増大される。
一実施形態によれば、電子システムは、ランダムデータ/乱数を要求するように構成される1つまたは複数のシステムエンティティと、そのような要求に応答して乱数を生成するように構成される乱数生成器と、乱数生成器によって生成される乱数から導出されるランダム値(たとえば、IVまたはこれらの乱数から導出される他のランダム値)を記憶するように構成されるデータストレージ(たとえば、バッファ)とを含む。乱数生成器がIVを生成するために使用される各乱数を求める別個の要求を受信する従来のシステムとは対照的に、実施形態は、乱数生成器に、非特定長のランダムデータ(たとえば、非特定数の乱数)要求を提供することを含む。システムはさらに、非特定長ランダムデータ要求に応答して乱数生成器によって生成される乱数から導出される一連のランダム値(たとえば、乱数から導出される一連のIV)をデータストレージに記憶する。その後、ランダム値(たとえば、IV)は、必要に応じて他のシステムエンティティによってデータストレージから読み出されることができる。ランダム値生成の速度がシステム内のスループットボトルネックを回避するために十分であることを確実にするよう試みるために、一実施形態では、十分な量のランダム値がバッファ内に維持される。したがって、本明細書において説明される実施形態の結果として、従来のシステムを用いて達成可能であるよりも、ランダム値(たとえば、IV)の生成が著しく高速になり得る。より具体的には、乱数生成器は、従来のシステムがそうするように1つの要求当たり1つのみの乱数を生成するのではなく、単一の非特定長ランダムデータ要求に応答して複数の乱数を生成することができるため、一実施形態によるシステムは、従来のシステムよりも著しく高速にランダム値(たとえば、IV)を生成することができる。加えて、ランダム値はバッファリングされるため、ランダム値を要求したエンティティは、乱数生成器に対する個々の要求に応じてのみランダム値が生成される(すなわち、要求が受信されるより前にランダム値がバッファリングされない)従来のシステムにおけるよりも速く、要求される値を受信することができる。
IPsecプロトコルにしたがって通信するシステムの文脈においてランダム値を生成するための方法および装置の実施形態が本明細書において詳細に説明されるが、さまざまな実施形態が同様に他のタイプのシステムにおいて使用されることができることを理解されたい。本明細書における記載に基づいて、さまざまな実施形態を、それらの実施形態によって生み出される利点から利益を受け得る他のタイプのシステムに組み込む方法を、当業者は理解しよう。したがって、さまざまな実施形態を他のシステムに組み込むことが、本発明の主題の範囲内にあることが意図される。
図1は、一実施形態による電子システム100の例示的な実施形態を描いている。システム100は、ランダム値生成モジュール110、および1〜N個の要求側モジュール130、131、132(または「乱数リクエスタ」)を含み、Nは任意の整数(たとえば、1〜10もしくはそれ以上の任意の整数)であり得る。下記により詳細に記載されるように、ランダム値生成モジュール110は、要求側モジュール130〜132からの要求に応答してランダム値を生成するように構成される。一実施形態によれば、たとえば、要求側モジュール130〜132とランダム値生成モジュール110は、双方向性システムバス140または他の通信メカニズムを介して通信することができる。たとえば、任意の要求側モジュール130〜132は、バス140を介してランダム値要求をランダム値生成モジュール110に送信することができ、今度は、バス140を介してランダム値生成モジュール110から要求されたランダム値を受信することができる。
要求側モジュール130〜132は、プロセッサコアと、(たとえば、デジタル署名アルゴリズム(DSA)鍵、RSA鍵、AES鍵などを生成するための)暗号化鍵生成器と、暗号エンジンと、プロトコル・パケット・プロセッサと、パディングモジュールと、さまざまな目的のためにランダム値を使用するように構成されるさまざまな他のタイプのモジュールとを含むことができる。特定の実施形態では、要求側モジュール130〜132のうちの1つまたは複数は、IPsecパケット処理(たとえば、パケット認証および暗号化を実行するためのIPsecプロトコルの実施)を実行するように構成されることができる。このような処理モジュールは、本明細書においては「IPsec処理モジュール」と称し、要求側モジュール130をIPsec処理モジュールの一例として特に使用することとする。すでに説明したように、IPsecパケット処理は、プレーンテクスト・パケット・ペイロードの一部をIVと組み合わせること、この組み合わせに対して暗号操作を実行すること、結果もたらされる暗号文を出力すること、および、プレーンテクスト・パケット・ペイロードの次の部分と組み合わされることになる、結果もたらされる暗号文をフィードバックすることを含むことができる。一実施形態によれば、IVを受信するために、IPsec処理モジュール130は、ランダム値要求(または、より具体的には「IV要求」)を、バス140を介してランダム値生成モジュール110に送信する。下記により詳細に記載されるように、ランダム値生成モジュール110は、各ランダム値(またはIV)要求に応答して、IVをIPsec処理モジュール130に送信する。
IV要求に加えて、要求側モジュール130〜132は、他のタイプのランダム値を求める要求も送信してもよい。たとえば、要求側モジュール130〜132は暗号化鍵生成器であってもよく、要求側モジュール130〜132は暗号化鍵(たとえば、DSA秘密鍵、AES鍵など)に対応し得る(または、それを作成するために使用され得る)ランダム値を求める要求を送信してもよい。同様に、他のタイプの要求側モジュール130〜132が、他のタイプのランダム値を求める要求を送信してもよい。
一実施形態によれば、要求側モジュール130〜132からのランダム値要求は、ランダム値タイプ(たとえば、IV、暗号化鍵など)および/またはランダム値長(たとえば、8バイト、16バイトなど)を指示する。ランダム値要求は、応答によって返されると、要求側モジュール130〜132が、要求に対する応答を認識し、かつ/または応答において提供されたランダム値を正確なシーケンスにおいて使用することを可能にする、要求側モジュール識別子(ID)、シーケンス番号、および/または他の情報をも含むことができる。ランダム値要求に応答してランダム値生成モジュール110によって提供されるランダム値は、要求側モジュール130〜132によって前に送信された情報(たとえば、要求側モジュールIDおよび/またはシーケンス番号)を特定することができる。
ランダム値生成モジュール110は、一実施形態では、乱数生成器112と、要求ハンドリングモジュール116と、要求調停モジュール118と、バッファモジュール120と、バッファ122とを含む。バッファモジュール120、要求ハンドリングモジュール116、および要求調停モジュール118は、記載を明瞭にするために図1においては別個のブロックとして図示されている。本明細書において、「モジュール」という用語は、1つまたは複数の別個の機能を実行するように構成されるハードウェアおよび/またはソフトウェアの別個の組み合わせを意味する。システムのさまざまなモジュールは、完全に別個のハードウェアおよび/もしくはソフトウェアを使用して実装されてもよく、または、複数のモジュールが共通のハードウェアおよび/もしくはソフトウェアを使用してもよい。たとえば、バッファモジュール120、要求ハンドリングモジュール116、および要求調停モジュール118は、図1に図示されているように相互接続される物理的に別個のハードウェアを使用して実装され得るが、バッファモジュール120、要求ハンドリングモジュール116、および要求調停モジュール118のさまざまな部分は、依然として本明細書に記載されるさまざまな実施形態の機能を提供しながら、共通のハードウェアを使用して実装されてもよく、かつ/または異なって相互接続されてもよい。たとえば、代替の実施形態では、要求調停モジュール118の機能がバッファモジュール120および/もしくは要求ハンドリングモジュール116に組み込まれてもよく、またはその逆であってもよい。代替的には、代替の実施形態においてバッファモジュール120の機能が要求調停モジュール118および/もしくは要求ハンドリングモジュール116に組み込まれてもよく、またはその逆であってもよい。したがって、このような変形形態が、本発明の主題の範囲内にあることが意図される。
一実施形態によれば、ランダム値要求に応答してランダム値を記憶(バッファリング)すること、およびそれらを生成することは、システム100において選択的にイネーブルされ得る。たとえば、ランダム値バッファリングは、外部モジュールによって要求ハンドリングモジュール116にイネーブル入力114を提供することによってイネーブルされることができる。ランダム値バッファリングがイネーブルされると、システムはバッファ122において、乱数生成器112によって生成される乱数から導出されるランダム値のバッファリングをサポートすることができる。ランダム値バッファリングがイネーブルされない(またはディセーブルされる)場合、ランダム値はバッファリングされず、すべてのランダム値要求は要求ハンドリングモジュール116によって、乱数生成器112との直接対話を通じてハンドリングされる。システム100がランダム値バッファリングを実行する能力によって従来のシステムにまさるいくつかの著しい利点がもたらされるため、残りの記載のほとんどは、ランダム値バッファリングがイネーブルされるものと仮定している。
バッファ122は、乱数生成器112によって生成されるいくつかの乱数から導出されるランダム値を逐次記憶するように構成されるデータ構造である。たとえば、バッファ122は、その中に乱数生成器112によって生成される乱数から導出されるランダム値が記憶されることができる複数のアドレス可能要素から成る先入れ先出し(FIFO)またはリングバッファであり得る。一実施形態では、バッファ122は、バッファモジュール120のみによってアクセス可能であり得る(たとえば、バッファモジュール120のみがバッファ122の要素にアクセスする(たとえば、その要素から読み出し、またはその要素に書き込む)。代替の実施形態では、乱数生成器112および/または要求ハンドリングモジュール116が、バッファ122の要素に記憶されている値に直接アクセスすることが可能であってもよい。
一実施形態では、バッファ122の各要素は、乱数生成器112によって生成される各乱数の長さに対応する長さを有するランダム値を記憶するように構成される。たとえば、乱数生成器112が256ビット(すなわち、32バイト)の長さを有する乱数を生成するように構成されるとき、バッファ122の各要素は、32バイト長であるランダム値を記憶するように構成されることができる。代替の実施形態では、バッファ122の各要素は、乱数生成器112によって生成される各乱数の長さとは異なる(たとえば、それよりも短いまたは長い)長さを有するランダム値を記憶するように構成される。たとえば、一実施形態では、バッファ122は、IPsecプロセッサ(たとえば、要求側モジュール130〜132のうちの1つまたは複数)が消費するためのIVを記憶するように使用されることができ、各IVは乱数生成器112によって生成される乱数の長さと異なる長さを有してもよい。そのような実施形態では、バッファ122の各要素は、乱数生成器112によって生成される各乱数の長さではなく、IVの長さに対応する長さを有するランダム値を記憶するように構成されることができる。代替的には、バッファ122の各要素は、複数のIVを含むランダム値を記憶するように構成されてもよく、複数のIVは乱数生成器112によって生成される単一の乱数から導出される。
たとえば、他は上記で与えられた例と一貫して、乱数生成器112は、各々が32バイトの長さを有する乱数を生成するように構成される場合があり、IPsecプロセッサは16バイトの長さを有するIVを使用するように構成される場合がある。そのような構成では、バッファ122の各要素は(IVの長さに対応する)16バイトの長さを有し得、乱数生成器112によって生成される各乱数は、バッファ122の2つの連続する要素に記憶するために、2つのIVになるように分割され得る。代替的には、2つのIVが32バイトの長さを有する単一のバッファ要素に記憶されてもよい。別の例では、IPsecプロセッサは、8バイトの長さを有するIVを使用するように構成されてもよく、乱数生成器112によって生成される各乱数は、バッファ122の4つの連続する要素に記憶するために4つのIVになるように分割されてもよい(または、4つのIVが32バイトの長さを有する単一のバッファ要素に記憶されてもよい)。
代替的には、乱数生成器112によって生成される乱数の長さが、システムによって使用されるIVの長さより大きい実施形態では、乱数生成器112によって生成される各乱数の一部が棄却されてもよい(たとえば、1つのみのIVが生成される各乱数に対して生成される)。乱数生成器112によって生成される乱数の長さが、システムによって使用されるIV(または他のランダム値)の長さよりも短い、また他の実施形態では、乱数生成器112によって生成される複数の乱数が、バッファ122のエントリに記憶されることになる単一の値を作成するために使用され得る。単一のIVがバッファ122の各要素に記憶される実施形態では、IVは(たとえば、要求側モジュール130〜132からのIV要求に応答して)バッファ122の各要素から直接提供され得る。複数のIVがバッファ122の各要素に記憶される代替の実施形態では、IVは各要素に記憶されるビットの一部(たとえば、半分)として提供されてもよい。
後により詳細に記載されるように、バッファモジュール120は、乱数生成器112に乱数を求める要求を(要求インタフェース152を介して)行うように構成される。一実施形態では、乱数生成器112はバッファモジュール120からのランダムデータ要求に応答して乱数を生成し、乱数生成器112はその乱数をバッファ122に(たとえば、乱数インタフェース161を介して単一クロックサイクル内に)プッシュする。代替の実施形態では、バッファモジュール120は乱数生成器112から乱数を受信し、バッファモジュール120は乱数から導出されるランダム値をバッファ122に記憶する。いずれにせよ、書き込みポインタが(たとえば、バッファモジュール120および/または乱数生成器112によって)維持され、これは、最近のランダム値が記憶された、バッファ122内の要素を指し示す。
バッファモジュール120は、要求ハンドリングモジュール116からランダム値を求める要求を(要求インタフェース150を介して)受信し、要求に応答してバッファ122に記憶されているランダム値を(ランダム値インタフェース162を介して)要求ハンドリングモジュール116に提供するようにも構成される。バッファモジュール120はさらに、バッファ122に関連付けられる(たとえば、最近に提供されたランダム値がそこから読み出されたバッファ122内の要素を指し示す)読み出しポインタを維持するように構成される。
一実施形態では、書き込みポインタおよび読み出しポインタの解析に基づいて、バッファモジュール120は、バッファ122に記憶されたアクセスされていないランダム値の量(たとえば、書き込みポインタと読み出しポインタとの間の差)をモニタリングし、バッファ122を「フル」(すなわち、所望のレベルまで一杯になっている、これは100%フルまたは何らかの他のより低いレベルであり得る)に維持するよう試みる。特定の実施形態によれば、バッファモジュール120は、バッファ122に記憶されるアクセスされていないランダム値の量がしきい値を下回るか否かを判定し、および、下回る場合、要求インタフェース152を介してランダムデータ要求をアサートするように構成される。後により詳細に記載されるように、一実施形態では、バッファモジュール120は、「非特定長ランダムデータ要求」と称される、非特定長のランダムデータを求める要求をアサートする。その名称が暗示するように、非特定長ランダムデータ要求は、乱数生成器112によって生成されるべきランダムデータの量を特定しない。代わりに、非特定長ランダムデータ要求がデアサート(アサート停止)されるまで、乱数生成器112は、その内部動作状態を(たとえば、米国標準技術局(NIST)規格にしたがって)更新することなく、乱数を生成し続けることになる。したがって、単一のランダムデータ要求に応答して、バッファ122は乱数生成器112から(直接にまたはバッファモジュール120を介して)複数の乱数を受信することができる。
要求ハンドリングモジュール116は、ランダム値要求を(たとえば、バス140を介して要求側モジュール130〜132から)受信し、ランダム値要求に応答して(たとえば、要求されるランダム値をバス140を介して要求側モジュール130〜132に送信することによって)ランダム値を取得および提供するように構成される。さまざまな事例において、要求ハンドリングモジュール116によって生成されるランダム値は、乱数生成器112によって生成される乱数が改変されていないもの、または、乱数生成器112によって生成される乱数の導出であり得る。たとえば、要求ハンドリングモジュール116は、要求側モジュール130〜132から特定のサイズのランダム値を求める要求を受信することができ、要求ハンドリングモジュール116は、要求に応答して、乱数生成器112から乱数を取得するか、または、バッファモジュール120からランダム値を取得することができる。取得された乱数/ランダム値が要求されるランダム値よりも長い場合、要求ハンドリングモジュール116は取得された乱数/ランダム値の一部を棄却することができる。逆に、取得された乱数/ランダム値が要求されるランダム値よりも短い場合、要求ハンドリングモジュール116は複数の乱数/ランダム値を取得し、それらを組み合わせて要求されるランダム値を生成することができる。
一実施形態では、要求ハンドリングモジュール116が要求側モジュール130〜132からランダム値要求を受信すると、要求ハンドリングモジュール116はその要求を評価して提供されることになるランダム値がバッファモジュール120から取得されるべきか、または乱数生成器112から直接取得されるべきかを判定する。たとえば、要求ハンドリングモジュール116が要求側モジュール130〜132(たとえば、IPsecプロセッサ)から第1のタイプのランダム値を求めるランダム値要求(たとえば、IV要求)を受信すると、要求ハンドリングモジュール116は、要求インタフェース150上で第1のタイプのランダム値を求める要求をバッファモジュール120に送信することができる(たとえば、要求ハンドリングモジュール116はこの文脈では「ランダム値リクエスタ」とみなされ得る)。それに応答して、バッファモジュール120はバッファ122からランダム値(たとえば、IV)を取り出し、それにしたがってその読み出しポインタを更新し、ランダム値インタフェース162上でランダム値(たとえば、IV)を要求ハンドリングモジュール116に提供することができる。次いで、要求ハンドリングモジュール116は要求されたランダム値(たとえば、IV)を要求側モジュール130〜132に送信することができる。代替の実施形態では、要求ハンドリングモジュール116は、バッファ122からランダム値(たとえば、IV)を直接読み出すことができる。
バッファ122内にランダム値を記憶することによって、これらの第1のタイプのランダム値要求が、乱数生成器112が個々のランダムデータ要求に応答して乱数を生成する速度よりも速いものであり得る速度で要求ハンドリングモジュール116によってサービスされることが可能となる。したがって、これらの第1のタイプのランダム値要求は、「高速実行要求(high runner requests)」とみなされ得る。たとえば、要求ハンドリングモジュール116は、乱数生成器112が個々のランダムデータ要求(その各々が乱数生成器112が時間のかかる内部状態更新を実行することを必要とする)に応答して乱数を生成し得る速度よりも速い速度でIPsecプロセッサ(たとえば、要求側モジュール130〜132のうちの1つ)からIV要求を受信することができる。バッファモジュール120によって用いられる要求メカニズムおよびバッファ122内に複数の乱数を記憶することの実施形態によって、要求ハンドリングモジュール116は、各IVを求める個々のランダムデータ要求を乱数生成器112に発行することによって乱数生成器112からIVを取得し得るよりも高速に、バッファ122からIVを取得することが可能となる。したがって、要求ハンドリングモジュール116は、高速実行要求に応答して乱数生成器112から直接乱数を取得するのではなく、高速実行要求に応答してバッファモジュール120からランダム値を取得する。
対照的に、要求ハンドリングモジュール116が要求側モジュール130〜132から他のタイプのランダム値要求を受信するとき、要求ハンドリングモジュール116は要求インタフェース151を介して乱数生成器112に乱数を要求することができる。後により詳細に記載されるように、一実施形態では、要求ハンドリングモジュール116は、特定長のランダムデータを求める要求をアサートし、この要求は本明細書において「特定長ランダムデータ要求」と称される。その名称が暗示するように特定長ランダムデータ要求は、乱数生成器112によって生成されるべきランダムデータの量の指示を含む。そのような要求に応答して、乱数生成器112は特定長のランダムデータ(たとえば、単一の乱数)のみを生成することになり、その後その内部状態を更新することになる。一実施形態によれば、要求ハンドリングモジュール116は、1バイトからマルチバイト(たとえば、数百または数千バイト)のランダムデータの長さを指定することができるが、モジュールは同様に他の長さを指定してもよい。
上記の記載が示すように、バッファモジュール120および要求ハンドリングモジュール116の両方が乱数生成器112にランダムデータ/乱数を要求することができる。一実施形態では、乱数生成器112は、重なっているまたは衝突している時間間隔の間にバッファモジュール120と要求ハンドリングモジュール116とから受信される要求の間で調停するためのロジックを含まない。したがって、一実施形態では、システム100は要求調停モジュール118を含むことができ、これは、バッファモジュール120と要求ハンドリングモジュール116とからの重なっているランダムデータ要求間で調停するように構成される。要求調停モジュール118は乱数生成器112、バッファモジュール120、および要求ハンドリングモジュール116から別個のものとして図示されているが、他の実施形態では、要求調停モジュール118のすべてまたは部分が乱数生成器112、バッファモジュール120、および/または要求ハンドリングモジュール116に組み込まれてもよい。
一実施形態によれば、乱数生成器112は一度に1つだけの乱数を生成することが可能である。換言すれば、乱数生成器112は一度に1つのランダムデータ要求にしかサービスすることができない。システム性能目標(たとえば、他のタイプの要求が欠乏することを回避しながら、高速実行要求が高速に満足されることができるように、バッファ122を十分にフルに保つ)を達成するようにランダムデータ要求を提供するために、要求調停モジュール118は、任意の所与の時点において、(ランダムデータ要求インタフェース152を介して)バッファモジュール120から、および、(ランダムデータ要求インタフェース151を介して)要求ハンドリングモジュール116から受信される複数のランダムデータ要求のいずれが乱数生成器112に提供されるべきかを判定するように構成される。
一実施形態によれば、要求調停モジュール118は、バッファモジュール120からのランダムデータ要求に、要求ハンドリングモジュール116からの要求より高い優先順位を与える。バッファモジュール120がランダムデータ要求インタフェース152上でランダムデータ要求を提供し、かつ他の要求が乱数生成器112と係属中でない場合、要求調停モジュール118は基本的に、ランダムデータ要求インタフェース154上でバッファモジュール120からのランダムデータ要求を乱数生成器112に渡す。これに応答して、乱数生成器112は乱数インタフェース161上で要求されたランダムデータを提供する。同様に、要求ハンドリングモジュール116がランダムデータ要求インタフェース151上でランダムデータ要求を提供し、かつ他の要求が乱数生成器112と係属中でない場合、要求調停モジュール118は基本的に、ランダムデータ要求インタフェース153上でランダムデータ要求を乱数生成器112に渡す。これに応答して、乱数生成器112は乱数インタフェース160上で要求されたランダムデータを提供する。
しかしながら、バッファモジュール120および要求ハンドリングモジュール116からの要求が実質的に同時に受信されたとすると、一実施形態では、要求調停モジュール118は最初に、(ランダムデータ要求インタフェース154上で)バッファモジュール120からの要求に対応する非特定長ランダムデータ要求をアサートすることになり、バッファ制御要求が完了するまで要求ハンドリングモジュール116からの要求に対応する特定長ランダムデータ要求を保留する。加えて、要求調停モジュール118が、非特定長ランダムデータ要求をランダムデータ要求インタフェース154上でアサートされるようにしている(すなわち、バッファモジュール120からの要求に対応する)時間の間に、要求ハンドリングモジュール116からの要求が要求調停モジュール118によって受信されるとき、要求調停モジュール118は、現在アサートされている要求を、ランダムデータ要求インタフェース154上の要求をデアサートしてランダムデータ要求インタフェース153上で特定長ランダムデータ要求をアサートする前の時間期間にわたって維持することができる。いずれにせよ、要求調停モジュール118は、任意の所与の時点において単一のランダムデータ要求のみが乱数生成器112に提供されることを確実にする。
乱数生成器112は、乱数の生成に関係するさまざまな機能を実行する。さまざまな実施形態において、乱数生成器112によって実行される機能は、(たとえば、図1に図示されているような)単一のデバイス内に含まれてもよく、または複数のデバイスにわたって分散されてもよい。いずれにせよ、乱数生成器112は、外部エンティティ(たとえば、バッファモジュール120、要求ハンドリングモジュール116および/または要求調停モジュール118)による要求に応じて乱数を生成するように構成され、各乱数は特定数のランダム・データ・ビットを含む。
より具体的には、乱数生成器112は、乱数生成器112によって受信されるランダムデータ要求にしたがってランダムデータを生成する、生成機能を含む。乱数を生成するために、乱数生成器112は1つまたは複数の暗号プリミティブ(たとえば、ハッシュ関数またはブロック暗号アルゴリズム)を含む。たとえば、乱数生成器112はハッシュ関数(たとえば、SHA−256または何らかの他のSHA関数)に基づいて乱数を生成することができ、このタイプのハッシュ関数は出力ブロック長(すなわち、各乱数内のビット数)を決定する。たとえば、乱数生成器112は一度に160、224、256、384または512ビットのランダムデータから成る出力ブロックを生成する(すなわち、生成される各乱数は160、224、256、384または512ビット長である)ように構成されることができるが、乱数生成器112は同様に、一度に異なるビット数の出力ブロックを生成するように構成されることができる。例示のみを目的として、本明細書における記載は、乱数生成器112が一度に256ビット(すなわち、32バイト)のランダムデータから成る出力ブロックを生成するように構成されることを参照し得るが、この例は限定であるようには意図されない。
特定長ランダムデータ要求の受信に応答して、乱数生成器112は要求された量のランダムデータを(たとえば、1つまたは複数のハッシュまたは暗号操作を実行することによって)生成し、その内部動作状態を更新して次の要求に備える。対照的に、非特定長ランダムデータ要求の受信に応答して、乱数生成器112は、要求がデアサートされるまで継続的にランダムデータの出力ブロックを(たとえば、1つまたは複数のハッシュまたは暗号操作を実行することによって)生成して、その後その内部動作状態を更新して次の要求に備える。いくつかの事例においては、乱数生成器112は、乱数生成器112が再シード操作を実行しなければならないと判定する場合などに、要求をデアサートする前にランダムデータの生成を停止することができる。
一実施形態によれば、乱数生成器112は、米国標準技術局(NIST)(たとえば、NIST Special Publication 800−90 A、「決定論的ランダムビット生成器を使用する乱数生成に対する推奨」、2012年1月(NIST Special Publication 800−90 A,Recommendation for Random Number Generation Using Deterministic Random Bit Generators,Jan.,2012))によって指定または推奨されるアルゴリズムに実質的にしたがってランダムビットを生成するように構成される決定論的ランダムビット生成器(DRBG)である。より具体的な実施形態によれば、乱数生成器112はHash_DRBG(すなわち、ハッシュ関数を利用して乱数生成を実行するDRBG)である。他の実施形態では、乱数生成器112は異なるタイプの乱数生成器(たとえば、他のアルゴリズム(たとえば、認可されているハッシュ関数、ブロック暗号、数論問題など)にしたがってランダムビットを生成するように構成される非決定論的ランダムビット生成器またはDBRG)であってもよい。
一実施形態によれば、図2および図3と併せてより詳細に記載されるように、乱数生成器112は複数のI/O(入力/出力)を含み、ここで、I/Oの2つ以上のセットが「要求ポート」に対応する。たとえば、ランダムデータ要求インタフェース153は、1つの要求ポートに結合されることができ、ランダムデータ要求インタフェース154は別の要求ポートに結合されることができる。各要求ポートは、ランダムデータを求める要求を(たとえば、一実施形態では要求調停モジュール118から、または、別の実施形態ではバッファモジュール120および要求ハンドリングモジュール116から直接)受信するとともに、要求に応答して(たとえば、乱数インタフェース160、161を介して)乱数を提供するように構成される。一実施形態によれば、乱数生成器112は2つの要求ポートを含み、一方の要求ポートは非特定長ランダムデータ要求をハンドリングするように構成され、他方の要求ポートは特定長ランダムデータ要求を求める要求をハンドリングするように構成される。前者のポートは本明細書においては「非特定長要求ポート」と称し、後者のポートは本明細書においては「特定長要求ポート」と称する。一実施形態によれば、非特定長ランダムデータ要求はバッファモジュール120から発するランダムデータ要求に対応し、特定長ランダムデータ要求は、要求側モジュール130〜132からの非高速実行タイプのランダム値要求(たとえば、非IVタイプの要求)に基づいて要求ハンドリングモジュール116から発するランダムデータ要求に対応する。したがって、バッファモジュール120から発するランダムデータ要求は非特定長要求ポート上で受信され、非高速実行タイプのランダム値要求に基づいて要求ハンドリングモジュール116から発するランダムデータ要求は特定長要求ポート上で受信される。
乱数生成器112が非特定長要求ポート上でアサートされたランダムデータ要求を検出すると、乱数生成器112はランダムデータ要求がデアサートされるまで乱数のシーケンスを生成する。一実施形態によれば、非特定長ランダムデータ要求にサービスしている間、乱数生成器112はランダムデータの連続して生成される出力ブロック間で(たとえば、連続して生成される乱数間で)その内部状態を更新しない。代わりに、乱数生成器112は、非特定長ランダムデータ要求がデアサートされるときにのみその内部状態を更新する。対照的に、乱数生成器112が特定長要求ポート上でアサートされたランダムデータ要求を検出すると、乱数生成器112は要求されるデータ長を決定し、要求されるデータ長に対応する量のランダムデータを生成し、その後その内部状態を更新して次の要求に備える。
図2は、例示的な実施形態によるマルチポート乱数生成器200の簡略化されたブロック図である。たとえば、乱数生成器200は、(たとえば、図1のシステム100内の乱数生成器112のように)非特定長乱数および特定長乱数が要求され得るシステムにおいて使用されることができる。一実施形態によれば、乱数生成器200は複数の入力210〜216および複数の出力220〜224を含む。たとえば、一実施形態によれば、乱数生成器200は、1つまたは複数のエントロピー入力210(そのうち1つのみを図示している)、インスタンス化入力211、非インスタンス化入力212、再シードインスタンス化入力213、およびテスト入力214を含む。加えて、一実施形態では、乱数生成器200はテスト出力220を含む。上記の入力および出力の目的は既知であり本明細書の範囲外であるため、本明細書において詳細には説明されない。
上記の入力および出力に加えて、乱数生成器200は、第1のポート230(たとえば、非特定長要求ポート)に対応する第1のセットのI/O215、221、222、および、第2のポート232(たとえば、特定長要求ポート)に対応する第2のセットのI/O216、223、224を含む。第1のポート230は、一実施形態では、ランダムデータ要求入力215、ランダムデータ出力221、およびステータス出力222を含む。同様に、第2のポート232は、一実施形態では、ランダムデータ要求入力216、ランダムデータ出力223、およびステータス出力224を含む。入力215、216および出力221〜224の各々は単一のI/Oとして図示されており、これは入力215、216および出力221〜224が直列I/Oであり得ることを暗示しているが、これは便宜上のものにすぎない。さまざまな実施形態において、入力215、216および出力221〜224のいくつかまたはすべては直列I/Oであり得、入力215、216および出力221〜224のいくつかまたはすべては並列I/Oであり得る。同様に、それらが接続する先のインタフェース(たとえば、図1の要求インタフェース153、154および乱数インタフェース160、161)は直列または並列インタフェースであり得る。一実施形態によれば、ランダムデータ出力221は第1の幅(すなわち、単一クロックサイクル中に並列に出力されることができるビット数)を有し、ランダムデータ出力223は第2の幅を有し、第1の幅と第2の幅とは互いに同じであってもよいし、異なってもよい。
とりわけ、乱数生成器200は生成機能240を実装し、これは、ランダムデータ要求入力215、216上で受信されるランダムデータ要求に応答してランダムデータを生成するように構成される。たとえば、ランダムデータ要求入力215上で非特定長ランダムデータ要求がアサートされたことが検出されることに応答して、生成機能240は、(たとえば、1つまたは複数のハッシュまたは暗号操作を実行することによって)ランダムデータの出力ブロックを生成すること、および、ランダムデータの出力ブロックをランダムデータ出力221上で利用可能にすることを開始する。一実施形態によれば、乱数生成器200は、ランダムデータの各出力ブロックが生成されるとすぐに、単一クロックサイクル内にランダムデータをランダム値バッファ(たとえば、図1のバッファ122)にプッシュする。代替の実施形態では、ランダムデータ出力221上で新たなランダムデータの出力ブロックが利用可能になる度毎に、生成機能240はステータス出力222上で「SUCCESS(成功)」指示子(インジケータ)を提供する。ステータス出力222上の「SUCCESS」指示子は、要求側エンティティに(たとえば、図1のバッファモジュール120に)、ランダムデータ出力221上で乱数が利用可能であることを指し示す。生成機能240は、乱数生成器200がランダムデータ要求入力215上の非特定長ランダムデータ要求がデアサートされたことを検出するまで、ランダムデータ出力221上でランダムデータを出力し続ける(とともに、ランダムデータをランダム値バッファにプッシュするか、またはステータス出力222上で「SUCCESS」指示子を提供する)。そのとき、生成機能240はその内部状態を更新して次に受信される要求に備える。いくつかの事例においては、生成機能240は、ランダムデータの生成を停止する必要がある場合があり(たとえば、再シードが必要とされる場合)、ステータス出力222上で「ERROR(エラー)」指示子を提供する場合がある。しかしながら、エラーの取り扱いは本開示の範囲内になく、本明細書においては詳細には説明されない。
その非特定長ランダムデータ要求のハンドリングとは対照的に、ランダムデータ要求入力216上で特定長ランダムデータ要求がアサートされたことを検出するのに応答して、生成機能240は、要求内で指定された量のランダムデータのみを(たとえば、1つまたは複数のハッシュまたは暗号操作を実行することによって)生成し、ランダムデータ出力223上でランダムデータを出力する。一実施形態によれば、ランダムデータ要求入力216は単一の信号を搬送する場合があり、これは、要求されるランダムデータの長さを指し示す(たとえば、バスは要求されるバイト数のランダムデータを搬送する)。そのような実施形態では、乱数生成器200は、示される長さが0でない限り、要求を有効であるとみなし得る。別の実施形態では、ランダムデータ要求入力216は、長さ信号および有効信号の両方を搬送することができる(たとえば、ランダムデータ要求入力216は実際には、複数の入力、すなわち、長さを搬送する一方、および、要求が有効であるときを示すもう一方を含むことができる)。いずれにせよ、乱数生成器200は、ランダムデータ要求入力216上の有効な入力に応答して要求される量のランダムデータを生成することができる。ランダムデータ出力223上でランダムデータが利用可能である場合、生成機能240はステータス出力224上で「SUCCESS」指示子を提供する。ステータス出力224上の「SUCCESS」指示子は、要求側エンティティに(たとえば、図1の要求ハンドリングモジュール116に)、ランダムデータ出力224上で乱数が利用可能であることを示し、要求側エンティティはその場合、乱数をランダムデータ出力223からプルすることができる。要求が完了すると、生成機能240はその内部状態を更新して次に受信される要求に備える。
図2に示されている実施形態では、各ポートは、ランダムデータ要求入力215、216、ランダムデータ出力221、223、およびステータス出力222、224を含む。代替の実施形態では、乱数生成器は、複数のランダムデータ要求入力、および、単一のランダムデータ出力および/またはステータス出力のみを実装してもよい。たとえば、図3は、そのような例示的な実施形態によるマルチポート乱数生成器300の簡略化されたブロック図である。乱数生成器200(図2)と同様に、乱数生成器300は、(たとえば、図1のシステム100内の乱数生成器112のように)非特定長乱数および特定長乱数が要求され得るシステムにおいて使用されることができる。一実施形態によれば、乱数生成器300は、同じく乱数生成器200と同様に、1つまたは複数のエントロピー入力310(そのうち1つのみを図示している)、インスタンス化入力311、非インスタンス化入力312、再シードインスタンス化入力313、テスト入力314、およびテスト出力320を含む。加えて、乱数生成器300は、生成機能340をも実装する。
しかしながら、図2に示されている実施形態とは対照的に、乱数生成器300の非特定長要求ポート330は、ランダムデータ要求入力315のみを含み、乱数生成器300の特定長要求ポート332は、(たとえば、要求されるランダムデータの長さ、および、場合によっては有効要求信号を搬送する)ランダムデータ要求入力316のみを含む。非特定長および特定長ランダムデータ要求の両方に対するランダムデータを出力するために単一のランダムデータ出力321が使用される。加えて、非特定長および特定長ランダムデータ要求の両方に対するランダムデータ生成のステータス(状態)を示すために単一のステータス出力322が使用される。別様に解釈すると、ランダムデータ要求入力315、316は、2つの別個のポートから成る部分として指定され、ランダムデータ出力321およびステータス出力322は2つのポートによって共有される。システム内に実装されると、要求側エンティティ(たとえば、図1のバッファモジュール120、要求ハンドリングモジュール116)のうちの1つのみがランダムデータ要求入力315、316の各々とのインタフェースを行うことになるが、両方の要求側エンティティが共有されるランダムデータ出力321およびステータス出力322とインタフェースを行うことになる。
図1〜図3は、各々が2つの要求ポート(たとえば、1つの非特定長要求ポートおよび1つの特定長要求ポート)を含む乱数生成器112、200、300を例示および記載しているが、1つの実施形態では、乱数生成器は、3つ以上の要求ポートおよび/またはタイプ毎に2つ以上の要求ポートを含んでもよい。別の代替の実施形態では、バッファモジュール(たとえば、図1のバッファモジュール120)から発する要求にサービスするように構成される要求ポートは、非特定長要求ポートではなく特定長要求ポートであってもよく、バッファモジュールは、非特定長のランダムデータを求める要求を発行するのではなく、バッファ(たとえば、図1のバッファ122)に記憶されることになる特定量のランダムデータを求める要求を発行してもよい。さらに他の実施形態では、乱数生成器は1つまたは複数の追加のポート(たとえば、(図1に示されている以外のモジュールに接続される)一般ランダムデータポート、外部要求ポート、および、(たとえば、AESエンジンの一部としての)マスク生成ポート)を含んでもよい。
図4は、例示的な実施形態による、ランダム値生成モジュール(たとえば、図1のモジュール110)が要求側モジュール(たとえば、図1の要求側モジュール130〜132)の要求を受けてランダム値を生成する方法のフローチャートである。例示を目的として、本方法は、要求されバッファ(たとえば、図1のバッファ122)から取り出されることができる「高速実行」ランダム値のタイプとしてIVを使用して記載されている。他の実施形態は、要求されバッファから取り出される他のタイプのランダム値の要求および生成を含んでもよいことが理解されよう。したがって、このような他の実施形態が、本発明の主題の範囲内にあることが意図される。
たとえば、本方法は、ホストシステム(たとえば、その中にランダム値生成モジュールが組み込まれるコンピュータシステム)が電源投入もしくはリブートされると、または、何らかの他の起動事象(イベント)が発生すると開始することができる。説明を容易にする目的で、下記の記載は、システムの乱数生成器(たとえば、図1の乱数生成器112)がこの時点においてインスタンス化されていないこと、および、バッファモジュール(たとえば、図1のバッファモジュール120)と関連付けられたバッファ(たとえば、図1のバッファ122)が空であることを想定している。
したがって、本方法は、ブロック402において、乱数生成器(RNG)をインスタンス化することによって開始することができる。乱数生成器のインスタンス化は本開示の範囲外であるが、乱数生成器のインスタンス化プロセスの一実施形態を下記に簡潔に記載する。乱数生成器をインスタンス化するために、エントロピー入力が(たとえば、図2、図3のエントロピー入力210、310上で)提供される。乱数生成器内で、エントロピー入力は他の入力(たとえば、ナンス(nonce)および/または個別化文字列)と組み合わされて、そこから乱数生成器が初期内部動作状態を作成するシードが作成される。本明細書においては詳細に説明されていないが、再シードも時折、同様に実行される場合がある(たとえば、シードの寿命の終わりに達したとき、乱数生成器が再利用されるとき、または他のとき)。ともかく、シードが利用可能になると、乱数生成器は、シードから1つまたは複数の値を導出し、インスタンス化がシード(または再シード)されてから生成された要求またはブロックの数のカウントを開始することによって、その初期内部動作状態を確立する。インスタンス化プロセスが成功または失敗したことを示すために、インスタンス化機能からステータスが返されることができる。
ブロック404において、ランダム値バッファリングが(たとえば、外部モジュールによって要求ハンドリングモジュール116に図1のイネーブル入力114を提供することによって)イネーブルされることができる。ランダム値バッファリングがイネーブルされると、システムは、乱数生成器によって生成される乱数に基づくランダム値の(たとえば、図1のバッファ122における)バッファリングをサポートすることができる。ランダム値バッファリングがイネーブルされない(またはディセーブルされる)場合、ランダム値はバッファリングされず、すべてのランダム値要求は(たとえば、要求ハンドリングモジュール116によって)乱数生成器との直接対話を通じてハンドリングされる。
ブロック406〜412において、乱数バッファ(たとえば、図1のバッファ122)を所定のレベル(たとえば、100%フルまたは何らかの他のより低いパーセンテージまで)「充填する」ためのプロセスが実行される。望ましくは、バッファ充填プロセスは、ランダム値生成モジュールが要求側モジュール(たとえば、図1の要求側モジュール130〜132)からランダム値を求める何らかの要求を受信する前に、開始および完了される。プロセスを開始するために、ブロック406において、非特定長ランダムデータ要求が、(たとえば、図2、図3の非特定長要求入力215、315を介して)乱数生成器の第1のポート上でアサートされる。たとえば、非特定長ランダムデータ要求は、バッファモジュール(たとえば、図1のバッファモジュール120)によって直接的に、または、要求調停回路(たとえば、図1の要求調停モジュール118)によって間接的にアサートされることができる。
一実施形態では、要求に応答して、ブロック408において、乱数生成器は乱数の生成およびバッファ(たとえば、図1のバッファ122)への乱数の記憶を開始する。代替の実施形態では、乱数生成器は(たとえば、図2、図3のステータス出力222、322を介して)乱数が利用可能になるときを示し、バッファモジュールは乱数生成器から乱数を取得して、乱数に基づいてランダム値をバッファに記憶する。いずれにせよ、乱数はそのまま(たとえば、乱数生成器によって生成されたものと同じ形態で)記憶されてもよく、記憶される前に改変されてもよい(たとえば、すでに説明されたように、乱数生成器によって生成された乱数がIVの二倍の長さであり、したがって2つのIVが各乱数から生成され得るときなどは、乱数はIVのサイズに対応するセグメントに分割されてもよい)。新たな乱数(またはIV)がバッファ内に書き込まれる度毎に、書き込みポインタが更新される。
ブロック410において、バッファポインタ(たとえば、書き込みポインタおよび読み出しポインタ)に基づいて、バッファモジュールはバッファが十分に満たされている(一杯である)か、または何らかの他のプリエンプティブ事象が発生したか否かを判定する。そうでない場合、バッファモジュールは非特定長ランダムデータ要求のアサートを継続し、乱数生成器は乱数の生成および乱数のバッファ内への記憶を継続する(ブロック408)。一実施形態によれば、特定のプリエンプティブ事象は、バッファモジュールに、バッファが十分に満たされているとみなされるようになる前に、バッファの充填を中断させる(すなわち、非特定長ランダムデータ要求をデアサートすることによって)ことができる。たとえば、バッファモジュールは、特定長ランダムデータ要求が(たとえば、図1の要求ハンドリングモジュール116によって)アサートされたとき、バッファが十分に満たされる前に非特定長ランダムデータ要求をデアサートすることができる。そのような実施形態では、バッファモジュールは非特定長ランダムデータ要求を直ちにデアサートしてもよく、または、バッファモジュールは、バッファモジュールが非特定長ランダムデータ要求をデアサートするまで(たとえば、非特定長ランダムデータ要求の結果として追加の量のランダムデータの生成が完了するまで)の期間、待ってもよい。たとえば、バッファモジュールが、最小限の数のエントリがバッファに記憶されることを確実にするために十分なランダムデータが供給されたと判定するとき、バッファモジュールは非特定長ランダムデータ要求をデアサートすることができる。他の実施形態では、バッファモジュールは同様に、他のプリエンプティブ事象に応答して非特定長ランダムデータ要求をデアサートしてもよい。バッファモジュールが、バッファが十分に満たされているか、またはプリエンプティブ事象が発生したと判定するとき、ブロック412において、バッファモジュールは第1のポート上で非特定長ランダムデータ要求をデアサートし、乱数生成器はそれに応答してバッファに記憶するためのランダムデータの生成を中止する。初期非特定長ランダムデータ要求は、(プリエンプティブ事象がその時間の間に発生しないと仮定すると)バッファを満たすのにかかるだけ十分長くアサートされているため、一実施形態では、初期非特定長ランダムデータ要求は、後続の非特定長ランダムデータ要求(たとえば、ブロック420における、バッファが十分に満たされなくなっているという判定に基づいてアサートされる、後の非特定長要求)よりも、完了までにかかる時間が著しく長い場合がある。換言すれば、バッファを満たすために最初に使用されるランダムデータを生成するための起動時間は、後続の非特定長ランダムデータ要求に応答してランダムデータを生成するための時間よりも著しく長い場合がある。これはいくつかの状況において当てはまる場合がある。しかしながら、いくつかの事例においては、後続の非特定長ランダムデータ要求は初期非特定長ランダムデータ要求よりも長い期間にわたってアサートされる場合がある。たとえば、ランダム値が、乱数生成器がバッファにデータ投入するのとほぼ同じ速度でバッファから提供されており、かつプリエンプティブ事象が発生していない状態が持続する場合、対応する非特定長ランダムデータ要求が相対的に長い期間にわたってアサートされ得る。
この時点においては、ブロック414において、ランダム値生成モジュールは、要求側モジュール(たとえば、図1の要求側モジュール130〜132)からのランダム値を求める入来する要求を待つ。ランダム値を求める要求が要求側モジュールから受信されると、ブロック416において、ランダム値生成モジュール(たとえば、図1の要求ハンドリングモジュール116)は、要求のタイプを判断する。より具体的には、ランダム値生成モジュールは、要求が、バッファに記憶される何らかのタイプのランダム値(たとえば、IV)を求める要求に対応するか、または何らかの他のタイプの乱数に対応するかを判定する。ランダム値生成モジュールが要求がバッファに記憶される値(たとえば、IV)を求めるものであると判定する場合、ブロック418において、ランダム値生成モジュールはバッファから値を読み出し、値を要求側モジュールに送信する。たとえば、要求ハンドリングモジュールは、バッファモジュール(たとえば、図1のバッファモジュール120)に値を要求することができ、バッファモジュールはそれに応答してバッファから値を提供することができ、バッファモジュールはそれにしたがって読み出しポインタを更新することができる。
ブロック420において、バッファモジュールは、バッファポインタ(たとえば、読み出しポインタおよび書き込みポインタ)の解析に基づいて、バッファが依然として、十分に満たされていると考えられるか否かを判定することができる。たとえば、一実施形態では、しきい値パーセンテージまたはしきい値数の読み出されていないランダム値が依然としてバッファ内にあるとバッファモジュールが判定した場合に、バッファは十分に満たされていると考えられ得る。このパーセンテージは100%と同じ高さであり得るが、パーセンテージは100%未満に設定されてもよく、それによって、すべての単一のランダム値要求後にバッファモジュールはバッファを再充填しようと試みなくなる。いずれにしても、バッファモジュールがバッファが十分に満たされていないと判定する場合、ブロック406において、バッファモジュールは第1のポート上で非特定長ランダムデータ要求を再アサートすることができ、本方法は図示されるように反復することができる。一実施形態では、バッファモジュール(または、図1の要求調停モジュール118のような調停ロジック)は、乱数生成器がすでに特定長ランダムデータ要求(または何らかの他の要求)を遂行している場合は、第1のポート上で非特定長ランダムデータ要求をアサートするのを待つことができる。再びブロック420を参照して、バッファが依然として十分に満たされていると考えられるとバッファモジュールが判定する場合、本方法は図示されるように反復することができる(すなわち、プロセスは、ブロック414における、要求側モジュールから入来するランダム値要求を待つ状態に戻ることができる)。
再びブロック416を参照して、ランダム値生成モジュールが、ランダム値要求がバッファ内の値を求める要求以外のタイプの要求であると判定する場合、ブロック422において、乱数生成器の第2のポート上で(たとえば、図2、図3の特定長要求入力216、316を介して)特定長ランダムデータ要求がアサートされる。たとえば、特定長ランダムデータ要求は、要求ハンドリングモジュール(たとえば、図1の要求ハンドリングモジュール116)によって直接的に、または、要求調停回路(たとえば、図1の要求調停モジュール118)によって間接的にアサートされることができる。
要求に応答して、乱数生成器は要求される量のランダムデータを生成する。乱数生成器はまた、(たとえば、図2、図3のステータス出力224、322を介して)ランダムデータが利用可能になるときを示す。ランダムデータが利用可能であるとき、ランダム値生成モジュール(たとえば、図1の要求ハンドリングモジュール116)は、ブロック424において乱数生成器からランダムデータに対応する乱数を取得し、ブロック426において乱数から導出されるランダム値を要求側モジュールに送信する。その後、本方法は図示されるように反復する。
図5は、例示的な実施形態による非特定長ランダムデータ要求および特定長ランダムデータ要求に応答して乱数生成器(たとえば、図1〜図3の乱数生成器112、200、300)が乱数を生成する方法のフローチャートである。簡潔にするために、下記のプロセスの記載は、乱数生成器がランダムデータの生成に成功しない場合(たとえば、再シードが必要とされるとき、または何らかの他の事象に起因して)の偶発性は記載しない。当業者であれば、本明細書における記載に基づいて、このプロセスをランダムデータ生成失敗の偶発性を含むように修正する方法を理解しよう。
いずれにせよ、本方法は、乱数生成器がランダムデータ要求を受信すると開始することができる。(判断ブロック502によって示されるように)非特定長ランダムデータ要求に対応する第1のポート(たとえば、図2、図3のポート230、330)上で要求が為されると、次いでブロック504において、乱数生成器の生成機能が、乱数生成器の現在の内部状態に基づいてランダムデータ(たとえば、32バイト数のような、ランダムデータの出力ブロック)を生成する。ランダムデータの生成に成功したと仮定して、次いでブロック506において、乱数生成器がバッファ(たとえば、図1の外部バッファ122)内に乱数を記憶する。代替的に、乱数生成器は乱数出力(たとえば、図2、図3の乱数出力221、321)上でランダムデータを利用可能にして、ステータス出力(たとえば、図2、図3のステータス出力222、322)上で乱数生成が成功したことを示すことができる。次いで、ブロック508において、乱数生成器は、非特定長ランダムデータ要求が第1のポート上でデアサートされたか否かを判定する。そうでない場合、本方法は図示されるように反復する。そうである場合、ブロック514において、乱数生成器はその内部状態を更新し、本方法は終了する。
再びブロック502を参照して、ランダムデータ要求が特定長ランダムデータ要求に対応する第2のポート(たとえば、図2、図3のポート232、332)上で為された場合、次いでブロック510において、乱数生成器の生成機能は、乱数生成器の現在の内部状態に基づいて要求内で指定される量のランダムデータを生成する。ランダムデータの生成に成功したと仮定して、次いでブロック512において、生成機能はランダムデータを乱数出力(たとえば、図2、図3の乱数出力223、321)上で利用可能にし、ステータス出力(たとえば、図2、図3のステータス出力224、322)上で乱数生成に成功したことを示す。次いで、ブロック514において、乱数生成器はその内部状態を更新し、本方法は終了する。
本明細書に含まれるさまざまな図面において示されている接続線は、さまざまな要素間の例示的な機能的関係および/または物理結合を表すように意図されている。なお、多くの代替形態または追加の機能的関係または物理接続が本主題の一実施形態において存在してもよい。加えて、特定の専門用語は本明細書においては参照のみを目的として使用されている場合もあり、したがって、限定であるようには意図されておらず、「第1の」、「第2の」といった用語、および、構造を指す他のこのような数に関する用語は文脈において明確に示されていない限り、並びまたは順序を暗示してはいない。
上記の記載は、ともに「接続される」または「結合される」ものとして要素もしくはノードまたは特徴に言及している。本明細書において使用される場合、別途明確に述べられていない限り、「接続される」とは、1つの要素が別の要素に直接的に結び付けられている(または直接的にそれと通信する)ことを意味し、必ずしも機械的にではない。同様に、別途明確に述べられていない限り、「結合される」とは、1つの要素が別の要素に直接的にまたは間接的に結び付けられている(または直接的にもしくは間接的にそれと通信する)ことを意味し、必ずしも機械的にではない。したがって、図面に示されている概略図は要素の1つの例示的な構成を図示しているが、追加の介在する要素、デバイス、特徴、または構成要素が図示される主題の実施形態において存在してもよい。
ランダム値を生成するための方法の一実施形態は、第1のランダムデータ要求を乱数生成器に提供することと、乱数生成器が、第1のランダムデータ要求に応答して第1のランダムデータを生成することを含む。本方法は、第1のランダムデータから導出される複数のランダム値をデータ構造に記憶することをさらに含む。第1のランダム値リクエスタからの(第1のタイプのランダム値を求める)第1のランダム値要求の受信に応答して、第1のタイプのランダム値が生成され、第1のランダム値リクエスタに送信される。このランダム値は、データ構造に記憶された複数のランダム値のうちの1つのランダム値に基づく。本方法は、第2のタイプのランダム値を求める第2のランダム値要求の受信に応答して第2のランダムデータ要求を乱数生成器に提供することと、第2のランダムデータ要求の送信に応答して乱数生成器から第2のランダムデータを受信することと、第2のランダムデータから導出される、第2のタイプのランダム値を、第2のタイプのランダム値のリクエスタに送信することとをさらに含む。
ランダム値を生成するための方法の別の実施形態は、第1のランダムデータ要求を乱数生成器に提供することと、乱数生成器が、第1のランダムデータ要求に応答して第1のランダムデータを生成することを含む。本方法は、第1のランダムデータから導出される複数のランダム値をバッファに記憶することをさらに含む。初期化ベクトルリクエスタからの初期化ベクトル要求の受信に応答して、バッファに記憶された複数のランダム値のうちの1つに基づいて初期化ベクトルが生成され、初期化ベクトルは初期化ベクトルリクエスタに送信される。本方法は、初期化ベクトル以外のランダム値を求めるランダム値要求の受信に応答して第2のランダムデータ要求を乱数生成器に提供することと、第2のランダムデータ要求の送信に応答して乱数生成器から第2のランダムデータを受信することとをさらに含む。
システムの一実施形態は、乱数生成器と、データ構造と、第1のモジュールと、第2のモジュールとを含む。乱数生成器は、ランダムデータ要求に応答してランダムデータを生成するように構成される。データ構造は、第1のランダムデータ要求に応答して乱数生成器によって生成される第1のランダムデータから導出される複数のランダム値を記憶するように構成される。乱数生成器およびデータ構造に結合される第1のモジュールは、第1のランダムデータ要求を乱数生成器に提供するように構成される。第1のモジュールは、第1のランダム値のリクエスタから第1のタイプの第1のランダム値を求める第1のランダム値要求を受信するとともに、第1のランダム値要求に応答して、第1のランダム値を第1のランダム値のリクエスタに送信するようにも構成される。第1のランダム値は、データ構造に記憶された複数のランダム値から導出される。乱数生成器に結合される第2のモジュールは、第2のランダム値のリクエスタからの第2のタイプの第2のランダム値を求める第2のランダム値要求の受信に応答して、第2のランダムデータ要求を乱数生成器に提供し、第2のランダムデータ要求の送信に応答して乱数生成器から第2のランダムデータを受信するとともに、第2のランダムデータから導出される第2のランダム値を第2のランダム値のリクエスタに送信するように構成される。
前述の詳細な説明の中で少なくとも1つの例示的な実施形態を提示してきたが、膨大な数の変形形態が存在することが理解されるべきである。本明細書に記載される1つまたは複数の例示的な実施形態は、権利を請求する主題の範囲、適用性または構成を限定することを決して意図していないことも理解されるべきである。そうではなく、前述の詳細な説明は、説明された1つまたは複数の実施形態を実行するための有意義な指針を当業者に提供するものである。既知の均等物および本願の出願時点で予見される均等物を含む、特許請求の範囲によって画定される範囲から逸脱することなく、要素の機能および構成におけるさまざまな変更を行うことができることが理解されるべきである。