(57)【要約】  予め記憶された初期化シードを使用することによる擬似乱数生成器のためのセキュアなシーディングおよび再シーディング方式が提供される。この方式は、エントロピー収集が利用できないときでも、擬似乱数生成器を未知状態に初期化する。プライマリシードファイルおよびシャドーシードファイルが初期化シード情報とともにセキュアなファイルシステム中に保持される。プライマリシードファイルが壊れている場合、擬似乱数生成器はシャドーシードファイルのコンテンツをシードされる。さらに、予め記憶されたシード情報が損なわれているときでも、信頼できるタイマまたはクロックを予め記憶された初期化シードと混合して、エントロピーを追加することができる。
2010525417.tif 000002
【特許請求の範囲】
【請求項１】
擬似乱数生成器を動作させるための方法であって、
前記擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化することと、
前記記憶された原始シードを一度使用された後に破棄することと、
エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得することと、
前記擬似乱数生成器の前記内部状態を前記新たなシードで予測不可能な状態に変更することと、
前記擬似乱数生成器の前記変更された内部状態に基づいて擬似ランダム出力を生成することと、
前記擬似ランダム出力を前記擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶することと
を備える方法。
【請求項２】
前記擬似乱数生成器の製造中に前記原始シードをセキュアな位置に記憶すること
をさらに備える、請求項１に記載の方法。
【請求項３】
前記擬似乱数生成器の再シーディングが間隔タイマに従って定期的に実行される、請求項２に記載の方法。
【請求項４】
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すことと、
前記擬似乱数生成器の前記始動内部状態を前記初期化シードで初期化することと、
前記シードファイルのコンテンツを前記擬似乱数生成器から取得された新たな初期化シードと置き換えることと
をさらに備える、請求項１に記載の方法。
【請求項５】
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すことと、
信頼できるソースから時間値を取得することと、
前記時間値と初期化シードを組み合わせて、変更された初期化シードを取得することと、
前記擬似乱数生成器の始動内部状態を前記変更された初期化シードで初期化することと、
前記シードファイルの前記コンテンツを前記擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えることと
をさらに備える、請求項１に記載の方法。
【請求項６】
前記時間値と初期化シードが、前記時間値が前記変更された初期化シードの範囲全体に分散されるように組み合わせられる、
請求項５に記載の方法。
【請求項７】
前記擬似ランダム出力をシードファイル中に記憶することが、
前記擬似ランダム出力をセキュアなファイルシステム中のプライマリシードファイル中に記憶することと、
前記擬似ランダム出力を前記セキュアなファイルシステム中のシャドーシードファイル中に記憶することとを含む、
請求項１に記載の方法。
【請求項８】
前記擬似乱数生成器を再始動すると、前記プライマリシードファイルの完全性が損なわれているかどうかを判断することと、
前記プライマリファイルの前記完全性が首尾よく検証された場合、前記プライマリシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化することと、
そうでない場合、前記シャドーシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化することと
をさらに備える、請求項７に記載の方法。
【請求項９】
擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化するための手段と、
前記記憶された原始シードを一度使用された後に破棄するための手段と、
エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得するための手段と、
前記擬似乱数生成器の前記内部状態を前記新たなシードで予測不可能な状態に変更するための手段と、
前記擬似乱数生成器の前記変更された内部状態に基づいて擬似ランダム出力を生成するための手段と、
前記擬似ランダム出力を前記擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶するための手段と
を備える擬似乱数生成器。
【請求項１０】
前記擬似乱数生成器の製造中に前記原始シードをセキュアな位置に記憶するための手段
をさらに備える、請求項９に記載の擬似乱数生成器。
【請求項１１】
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すための手段と、
前記擬似乱数生成器の前記始動内部状態を前記初期化シードで初期化するための手段と、
前記シードファイルのコンテンツを前記擬似乱数生成器から取得された新たな初期化シードと置き換えるための手段と
をさらに備える、請求項９に記載の擬似乱数生成器。
【請求項１２】
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出すための手段と、
信頼できるソースから時間値を取得するための手段と、
前記時間値と初期化シードを組み合わせて、変更された初期化シードを取得するための手段と、
前記擬似乱数生成器の始動内部状態を前記変更された初期化シードで初期化するための手段と、
前記シードファイルの前記コンテンツを前記擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えるための手段と
をさらに備える、請求項９に記載の擬似乱数生成器。
【請求項１３】
前記時間値と初期化シードが、前記時間値が前記変更された初期化シードの範囲全体に分散されるように組み合わせられる、
請求項１２に記載の擬似乱数生成器。
【請求項１４】
前記擬似ランダム出力をシードファイル中に記憶することが、
前記擬似ランダム出力をセキュアなファイルシステム中のプライマリシードファイル中に記憶するための手段と、
前記擬似ランダム出力を前記セキュアなファイルシステム中のシャドーシードファイル中に記憶するための手段とを含む、
請求項９に記載の擬似乱数生成器。
【請求項１５】
前記擬似乱数生成器を再始動すると、前記プライマリシードファイルの完全性が損なわれているかどうかを判断するための手段と、
前記プライマリファイルの前記完全性が首尾よく検証された場合、前記プライマリシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化するための手段と、
そうでない場合、前記シャドーシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化するための手段と
をさらに備える、請求項１４に記載の擬似乱数生成器。
【請求項１６】
１つまたは複数のシードソースから１つのシードを選択するように構成されたシード選択モジュールと、
前記シード選択モジュールに結合され、前記シード選択モジュールによって与えられるシードに従って擬似乱数生成器の内部状態を調整するように構成されたシーディングモジュールと、
前記シーディングモジュールに結合され、前記擬似乱数生成器の前記内部状態に基づいて擬似ランダム出力を生成するように構成された数生成モジュールと
を備える擬似乱数生成器であって、
前記シード選択モジュールが、
前記擬似乱数生成器が初めて開始された場合、予め記憶された原始シードを選択して、前記擬似乱数生成器の始動内部状態を初期化し、
前記擬似乱数生成器が以前に開始されていた場合、予め記憶されたシードファイルから初期化シードを選択して、前記擬似乱数生成器の前記始動内部状態を初期化するように、さらに構成される、擬似乱数生成器。
【請求項１７】
前記シード選択モジュールが、前記記憶された原始シードを一度使用された後に破棄するようにさらに構成される、請求項１６に記載の擬似乱数生成器。
【請求項１８】
前記数生成モジュールが、前記シードファイル中に記憶されており、前記初期化シードとして使用される擬似ランダム出力を与える、請求項１６に記載の擬似乱数生成器。
【請求項１９】
前記シーディングモジュールに結合された信頼できる時間ソースをさらに備え、前記シーディングモジュールが、
前記信頼できる時間ソースから時間値を取得し、
前記時間値と初期化シードを組み合わせて、変更された初期化シードを取得し、
前記擬似乱数生成器の始動内部状態を前記変更された初期化シードで初期化するようにさらに構成される、
請求項１６に記載の擬似乱数生成器。
【請求項２０】
前記時間値と初期化シードが、前記時間値が前記変更された初期化シードの範囲全体に分散されるように組み合わせられる、
請求項１９に記載の擬似乱数生成器。
【請求項２１】
前記シードファイルを記憶するためのセキュアなファイルシステムをさらに備え、前記シードファイルがプライマリシードファイルとシャドーシードファイルとを含み、
前記シード選択モジュールが、
前記擬似乱数生成器を再始動すると、前記プライマリシードファイルの完全性が損なわれているかどうかを判断し、
前記プライマリファイルの前記完全性が首尾よく検証された場合、前記プライマリシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化し、
そうでない場合、前記シャドーシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化するようにさらに構成される、
請求項１６に記載の擬似乱数生成器。
【請求項２２】
擬似乱数生成器の内部状態を記憶するための１つまたは複数の内部状態レジスタを含むメモリデバイスと、
前記メモリデバイスに結合され、
前記擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化し、
前記記憶された原始シードを一度使用された後に破棄し、
エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得し、
前記新たなシードを前記擬似乱数生成器に再シードして、前記擬似乱数生成器の前記内部状態を予測不可能な状態に変更し、
前記擬似乱数生成器の前記変更された内部状態に基づいて擬似ランダム出力を生成し、
前記擬似ランダム出力を前記擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶する、ように構成された処理デバイスと、
を備える処理回路。
【請求項２３】
前記処理デバイスが、
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出し、
信頼できるソースから時間値を取得し、
前記時間値と初期化シードを組み合わせて、変更された初期化シードを取得し、
前記擬似乱数生成器の始動内部状態を前記変更された初期化シードで初期化し、
前記シードファイルのコンテンツを前記擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換える、ようにさらに構成される、
請求項２２に記載の処理回路。
【請求項２４】
前記時間値と初期化シードが、前記時間値が前記変更された初期化シードの範囲全体に分散されるように組み合わせられる、
請求項２３に記載の処理回路。
【請求項２５】
前記処理デバイスが、
前記擬似ランダム出力をセキュアなファイルシステム中のプライマリシードファイル中に記憶し、
前記擬似ランダム出力を前記セキュアなファイルシステム中のシャドーシードファイル中に記憶するようにさらに構成される、
請求項２２に記載の処理回路。
【請求項２６】
前記処理デバイスが、
前記擬似乱数生成器を再始動すると、前記プライマリシードファイルの完全性が損なわれているかどうかを判断し、
前記プライマリファイルの前記完全性が首尾よく検証された場合、前記プライマリシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化し、
そうでない場合、前記シャドーシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化するようにさらに構成される、
請求項２５に記載の処理回路。
【請求項２７】
プロセッサによって実行されたとき、前記プロセッサに、
擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化させ、
前記記憶された原始シードを一度使用された後に破棄させ、
エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得させ、
前記新たなシードを前記擬似乱数生成器に再シードして、前記擬似乱数生成器の前記内部状態を予測不可能な状態に変更させ、
前記擬似乱数生成器の前記変更された内部状態に基づいて擬似ランダム出力を生成し、
前記擬似ランダム出力を前記擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶させる、
擬似ランダム出力を生成するための１つまたは複数の命令を有する、機械可読媒体。
【請求項２８】
プロセッサによって実行されたとき、前記プロセッサに、
前記擬似乱数生成器が再始動された後に、前記シードファイルから前記初期化シードを取り出させ、
信頼できるソースから時間値を取得させ、
前記時間値と初期化シードを組み合わせて、変更された初期化シードを取得させ、
前記擬似乱数生成器の始動内部状態を前記変更された初期化シードで初期化させ、
前記シードファイルのコンテンツを前記擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えさせる、
１つまたは複数の命令をさらに有する、請求項２７に記載の機械可読媒体。
【請求項２９】
前記時間値と初期化シードが、前記時間値が前記変更された初期化シードの範囲全体に分散されるように組み合わせられる、請求項２８に記載の機械可読媒体。
【請求項３０】
前記シードファイルが、
セキュアなファイルシステム中のプライマリシードファイルとシャドーシードファイルとを含み、
プロセッサによって実行されたとき、前記プロセッサに、
前記擬似乱数生成器を再始動すると、前記プライマリシードファイルの完全性が損なわれているかどうかを判断させ、
前記プライマリファイルの前記完全性が首尾よく検証された場合、前記プライマリシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化させ、
そうでない場合、前記シャドーシードファイルの前記初期化シードで前記擬似乱数生成器の前記始動内部状態を初期化させる１つまたは複数の命令をさらに有する、
請求項２７に記載の機械可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本特許出願は、２００６年８月２３日に出願され、本願の譲受人に譲渡された、Ｇｒｅｇｏｒｙ  Ｇｏｒｄｏｎ  Ｒｏｓｅらによる、「Ｃｒｙｐｔｏｇｒａｐｈｉｃａｌｌｙ  Ｓｅｃｕｒｅ  Ｐｓｅｕｄｏ−Ｒａｎｄｏｍ  Ｎｕｍｂｅｒ  Ｇｅｎｅｒａｔｏｒ」と題する米国特許第１１／５０９，２１５号に関連する。
【０００２】
本発明は、セキュア（secure）な擬似乱数生成器に関し、より詳細には、電子デバイス中の擬似乱数生成器を初期化するためのシード管理に関する。
【背景技術】
【０００３】
乱数の生成には、たとえば暗号学的使用（たとえば、暗号化および完全性保護のために使用される鍵、セキュリティプロトコルのために使用されるナンス（nonce）など）を含む多くの適用例がある。真の乱数を平均より高い確率で予測することは不可能である。現実の世界では、完全な乱数ソースを取得することは極めて難しい。
【０００４】
決定性アルゴリズムを使用して擬似乱数を生成する擬似乱数生成器（pseudo-random number generator：ＰＲＮＧ）がしばしば採用される。ＰＲＮＧは数を極めて高速に生成することができる。シード（seed）と呼ばれるランダム入力が与えられれば、擬似乱数の極めて長いシーケンスを決定論的に生成することができる。このシードについての知識なしに、生成器をランダムソースと区別することは不可能または極めて難しい。利用可能な多数のＰＲＮＧがあるが、大部分はセキュリティ適用例向けに設計されていない。ＰＲＮＧは決定性アルゴリズムを使用するので、ハッキングにさらされ、それによりＰＲＮＧのセキュリティが弱まる。たとえば、ＰＲＮＧとして線形合同生成器（linear congruential generator）が広く使用されているが、短い出力シーケンスが分析された後に破られる可能性がある。
【０００５】
暗号学的適用例などいくつかの適用例では、一般に「ランダムな」数を初期化ベクトル、鍵、ナンス、ソルト（salt）などとして使用する。概して、暗号学的にセキュアなＰＲＮＧ（cryptographically secure PRNG：ＣＳＰＲＮＧ）は予測不可能な入力をセキュアな方法でシードされるので、その出力をランダムビットのシーケンスと区別することは不可能である。
【０００６】
擬似乱数生成方式はＣＳＰＲＮＧでは比較的簡単である。擬似乱数生成方式は、たとえば、カウンタモードまたは出力フィードバックモードで実行するブロック暗号、暗号鍵としてシードを使用するストリーム暗号、あるいはハッシングのネスト構造とすることができる。ＣＳＰＲＮＧ設計の複雑な部分は、ＣＳＰＲＮＧをどのようにシードおよび再シード（reseed）するかである。理想的には、ＣＳＰＲＮＧは、アプリケーションによって呼び出される前に生成器の内部状態を予測不可能にする何らかの情報をシードされる。再シーディング（reseeding）は、以前にシードされたＣＳＰＲＮＧの順序論理を新たなシードで更新するために使用されるプロセスである。そのような再シーディングは、決定論的数生成アルゴリズムを破ることをより困難にする。しかしながら、エントロピー収集モジュールが良好なシードを得るには時間がかかる。したがって、ＣＳＰＲＮＧは、電源投入すると、そのようなシードが利用可能になる前にアプリケーションによって呼び出されることがあるので、ＣＳＰＲＮＧがアプリケーションによって呼び出される前にＣＳＰＲＮＧをシードまたは再シードすることが共通の問題である。
【０００７】
ＦＩＰＳ１８６−２、ＡＮＳＩ  Ｘ９．１７−１９８５  Ａｐｐｅｎｄｉｘ  Ｃ、ＡＮＳＩ  Ｘ９．３１−１９９８  Ａｐｐｅｎｄｉｘ  Ａ．２．４、ＡＮＳＩ  Ｘ９．６２−１９９８  Ａｎｎｅｘ  Ａ．４など、いくつかの標準化されたＣＳＰＲＮＧ設計が存在する。残念ながら、これらの設計の多くは、いくつかの状況下では満足のいくものではない。たとえば、Ｆａｓｔ  Ｓｏｆｔｗａｒｅ  Ｅｎｃｒｙｐｔｉｏｎ、５ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｗｏｒｋｓｈｏｐ  Ｐｒｏｃｅｅｄｉｎｇｓ、Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ、１９９８において、Ｊ．ＫｅｌｓｅｙらによってＡＮＳＩ  Ｘ９．１７ＰＲＮＧの２つの設計不備が確認されている。さらに、国立標準技術研究所（ＮＩＳＴ）Ｓｐｅｃｉａｌ  Ｐｕｂｌｉｃａｔｉｏｎ  ８００−９０、名称「Ｒｅｃｏｍｍｅｎｄａｔｉｏｎ  ｆｏｒ  Ｒａｎｄｏｍ  Ｎｕｍｂｅｒ  Ｇｅｎｅｒａｔｏｒ  Ｕｓｉｎｇ  Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｒａｎｄｏｍ  Ｂｉｔ  Ｇｅｎｅｒａｔｏｒｓ」、２００６年６月も、擬似乱数生成器を初期化するためのシステムを開示しているが、ハッキングに対する適切なセキュリティ機能は提供していない。
【０００８】
したがって、シードを迅速にセキュアに取得することができる擬似乱数生成器が必要である。
【発明の概要】
【０００９】
予め記憶された初期化シードを使用することによる擬似乱数生成器のためのセキュアなシーディングおよび再シーディング方式が提供される。この方式は、エントロピー収集が利用できないときでも、擬似乱数生成器を未知状態に初期化する。プライマリシードファイルおよびシャドーシードファイルをシーディング情報とともにセキュアなファイルシステム中に保持することができる。プライマリシードファイルが壊れた場合、擬似乱数生成器はシャドーシードファイルのコンテンツをシードされる。シードファイルのハッキング対策として、信頼できるタイマをシーディング機構の一部として使用することができる。予め記憶されたシード情報が損なわれているときでも、信頼できるタイマまたはクロックを予め記憶されたシード情報と混合して、エントロピーを追加する。
【００１０】
擬似乱数生成器を動作させるための方法を提供する。擬似乱数生成器の始動内部状態（startup internal state）を予め記憶された原始シード（primordial seed）で初期化する。記憶された原始シードは、一度使用された後に破棄され得る。エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得し、その新たなシードを使用して擬似乱数生成器の内部状態を予測不可能な状態に変更することができる。擬似乱数生成器の変更された内部状態に基づいて擬似ランダム出力を生成することができる。擬似ランダム出力は、次いで擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶できる。原始シードは、擬似乱数生成器の製造中にセキュアな位置に記憶できる。擬似乱数生成器の再シーディングは、間隔タイマに従って定期的に実行できる。
【００１１】
一例では、擬似乱数生成器が再始動された後に、初期化シードをシードファイルから取り出す。擬似乱数生成器の始動内部状態を初期化シードで初期化する。シードファイルのコンテンツを擬似乱数生成器から取得された新たな初期化シードと置き換える。
【００１２】
別の例では、次いで信頼できるソースから時間値（time value）を取得する。次いで、時間値と初期化シードを組み合わせて、変更された初期化シードを取得する。時間値と初期化シードは、時間値が、変更された初期化シードの範囲全体に分散されるように組み合わせることができる。擬似乱数生成器の始動内部状態を変更された初期化シードで初期化する。次いで、シードファイルのコンテンツを擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換える。
【００１３】
さらに別の態様では、擬似ランダム出力をシードファイル中に記憶することは、（１）擬似ランダム出力をセキュアなファイルシステム中のプライマリシードファイル中に記憶すること、および（２）擬似ランダム出力をセキュアなファイルシステム中のシャドーシードファイル中に記憶することを含むことができる。擬似乱数生成器を再始動すると、プライマリシードファイルの完全性が損なわれているかどうかに関する判断を行う。プライマリファイルの完全性が首尾よく検証された場合、プライマリシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化する。そうではなく、プライマリシードファイルの完全性検査が失敗した場合、シャドーシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化する。
【００１４】
シード選択モジュール、シーディングモジュール（seeding module）、および数生成モジュールを備える擬似乱数生成器も提供される。シード選択モジュールは、１つまたは複数のシードソースから１つのシードを選択するように構成できる。シーディングモジュールは、シード選択モジュールに結合され、シード選択モジュールによって与えられるシードに従って擬似乱数生成器の内部状態を調整するように構成できる。数生成モジュールは、シーディングモジュールに結合され、擬似乱数生成器の内部状態に基づいて擬似ランダム出力を生成するように構成できる。シード選択モジュールは、（ａ）擬似乱数生成器が初めて開始された場合、予め記憶された原始シードを選択して、擬似乱数生成器の始動内部状態を初期化し、および／または（ｂ）擬似乱数生成器が以前に開始されていた場合、予め記憶されたシードファイルから初期化シードを選択して、擬似乱数生成器の始動内部状態を初期化するようにさらに構成できる。シード選択モジュールは、記憶された原始シードを一度使用された後に破棄することができる。数生成モジュールは、シードファイル中に記憶されており、初期化シードとして使用される擬似ランダム出力を与えることができる。
【００１５】
１つの特徴によれば、擬似乱数生成器は、シーディングモジュールに結合された信頼できる時間ソースをさらに含むことができる。シーディングモジュールは、（ａ）信頼できる時間ソースから時間値を取得し、（ｂ）時間値と初期化シードを組み合わせて、変更された初期化シードを取得し、（ｃ）擬似乱数生成器の始動内部状態を変更された初期化シードで初期化するようにさらに構成できる。時間値と初期化シードは、時間値が、変更された初期化シードの範囲全体に分散されるように組み合わせることができる。
【００１６】
別の特徴によれば、擬似乱数生成器は、シードファイルを記憶するためのセキュアなファイルシステムをさらに含むことができる。シードファイルはプライマリシードファイルとシャドーシードファイルとを含むことができる。シード選択モジュールは、（ａ）擬似乱数生成器を再始動すると、プライマリシードファイルの完全性が損なわれているかどうかを判断し、（ｂ）プライマリファイルの完全性が首尾よく検証された場合、プライマリシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化し、および／または（ｃ）そうでない場合、シャドーシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化するようにさらに構成できる。
【００１７】
したがって、（ａ）擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化するための手段と、（ｂ）記憶された原始シードを一度使用された後に破棄するための手段と、（ｃ）エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得するための手段と、（ｄ）擬似乱数生成器の内部状態を新たなシードで予測不可能な状態に変更するための手段と、（ｅ）擬似乱数生成器の変更された内部状態に基づいて擬似ランダム出力を生成するための手段と、（ｆ）擬似ランダム出力を擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶するための手段と、（ｇ）擬似乱数生成器の製造中に原始シードをセキュアな位置に記憶するための手段と、（ｈ）擬似乱数生成器が再始動された後にシードファイルから初期化シードを取り出すための手段と、（ｉ）擬似乱数生成器の始動内部状態を初期化シードで初期化するための手段と、および／または（ｊ）シードファイルのコンテンツを擬似乱数生成器から取得された新たな初期化シードと置き換えるための手段とを備える擬似乱数生成器も提供される。
【００１８】
一例では、擬似乱数生成器は、（ａ）擬似乱数生成器が再始動された後にシードファイルから初期化シードを取り出すための手段と、（ｂ）信頼できるソースから時間値を取得するための手段と、（ｃ）時間値と初期化シードを組み合わせて、変更された初期化シードを取得するための手段と、（ｄ）擬似乱数生成器の始動内部状態を変更された初期化シードで初期化するための手段と、および／または（ｅ）シードファイルのコンテンツを擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えるための手段とをさらに備えることができる。時間値と初期化シードは、時間値が、変更された初期化シードの範囲全体に分散されるように組み合わせることができる。
【００１９】
別の例では、擬似乱数生成器はまた、（ａ）擬似ランダム出力をセキュアなファイルシステム中のプライマリシードファイル中に記憶するための手段と、（ｂ）擬似ランダム出力をセキュアなファイルシステム中のシャドーシードファイル中に記憶するための手段と、（ｃ）擬似乱数生成器を再始動すると、プライマリシードファイルの完全性が損なわれているかどうかを判断するための手段と、（ｄ）プライマリファイルの完全性が首尾よく検証された場合、プライマリシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化するための手段と、および／または（ｅ）そうでない場合、シャドーシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化するための手段とを備えることができる。
【００２０】
メモリデバイスと処理デバイスとを備える処理回路も提供される。メモリデバイスは、擬似乱数生成器の内部状態を記憶するための１つまたは複数の内部状態レジスタを含むことができる。処理デバイスは、メモリデバイスに結合され、（ａ）擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化し、（ｂ）記憶された原始シードを一度使用された後に破棄し、（ｃ）エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得し、（ｄ）その新たなシードを擬似乱数生成器に再シードして、擬似乱数生成器の内部状態を予測不可能な状態に変更し、（ｅ）擬似乱数生成器の変更された内部状態に基づいて擬似ランダム出力を生成し、および／または（ｆ）擬似ランダム出力を擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶するように構成できる。
【００２１】
１つの特徴によれば、処理デバイスは、（ａ）擬似乱数生成器が再始動された後、シードファイルから初期化シードを取り出し、（ｂ）信頼できるソースから時間値を取得し、（ｃ）時間値と初期化シードを組み合わせて、変更された初期化シードを取得し、（ｄ）擬似乱数生成器の始動内部状態を変更された初期化シードで初期化し、および／または（ｅ）シードファイルのコンテンツを擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えるようにさらに構成できる。時間値と初期化シードは、時間値が、変更された初期化シードの範囲全体に分散されるように組み合わせることができる。
【００２２】
１つの特徴によれば、処理デバイスは、（ａ）擬似ランダム出力をセキュアなファイルシステム中のプライマリシードファイル中に記憶し、（ｂ）擬似ランダム出力をセキュアなファイルシステム中のシャドーシードファイル中に記憶し、（ｃ）擬似乱数生成器を再始動すると、プライマリシードファイルの完全性が損なわれているかどうかを判断し、（ｄ）プライマリファイルの完全性が首尾よく検証された場合、プライマリシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化し、および／または（ｅ）そうでない場合、シャドーシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化するようにさらに構成できる。
【００２３】
プロセッサによって実行されたとき、プロセッサに、（ａ）擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化させ、（ｂ）記憶された原始シードを一度使用された後に破棄させ、（ｃ）エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得させ、（ｄ）その新たなシードを擬似乱数生成器に再シードして、擬似乱数生成器の内部状態を予測不可能な状態に変更させ、（ｅ）擬似乱数生成器の変更された内部状態に基づいて擬似ランダム出力を生成させ、および／または（ｆ）擬似ランダム出力を擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶させる、擬似ランダム出力を生成するための１つまたは複数の命令を有する機械可読媒体も提供される。
【００２４】
一例では、機械可読媒体は、プロセッサによって実行されたとき、プロセッサに、（ａ）擬似乱数生成器が再始動された後、シードファイルから初期化シードを取り出させ、（ｂ）信頼できるソースから時間値を取得させ、（ｃ）時間値と初期化シードを組み合わせて、変更された初期化シードを取得させ、（ｄ）擬似乱数生成器の始動内部状態を変更された初期化シードで初期化させ、および／または（ｅ）シードファイルのコンテンツを擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えさせる、１つまたは複数の命令をさらに有することができる。時間値と初期化シードは、時間値が、変更された初期化シードの範囲全体に分散されるように組み合わせられる。
【００２５】
１つの特徴によれば、シードファイルはセキュアなファイルシステム中にプライマリシードファイルとシャドーシードファイルとを含むことができる。機械可読媒体は、プロセッサによって実行されたとき、プロセッサに、（ａ）擬似乱数生成器を再始動すると、プライマリシードファイルの完全性が損なわれているかどうかを判断させ、（ｂ）プライマリファイルの完全性が首尾よく検証された場合、プライマリシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化させ、および／または（ｃ）そうでない場合、シャドーシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化させる、１つまたは複数の命令をさらに有することができる。
【図面の簡単な説明】
【００２６】
【図１】本明細書で説明する１つまたは複数の新規な特徴を実装することができる擬似乱数生成器の一例を示すブロック図。
【図２】初期シード管理を有する擬似乱数生成器の一例を示すブロック図。
【図３】一例による、予め記憶されたシードを使用して擬似乱数生成器を初期化するための方法を示す図。
【図４】電源遮断を予測し、擬似乱数生成器の後続の始動初期化用の擬似ランダム出力を記憶するシステムを示すブロック図。
【図５】何らかの電源切断イベントを検出すると初期化シードを生成し、保存するようにデバイスを動作させるための方法を示す図。
【図６】擬似乱数生成器用の初期化シードを記憶するためにプライマリシードファイルおよびシャドーシードファイルを使用するための方法を示す図。
【図７】シードファイルのハッキングに対処するために時間構成要素をどのように利用することができるかについての一例を示すブロック図。
【図８】擬似乱数生成器用の初期化シードの一部として時間を組み合わせるための方法を示す図。
【図９】擬似乱数生成器を実装するように構成された記憶媒体とプロセッサとを備える処理回路を示すブロック図。
【詳細な説明】
【００２７】
以下の説明では、実施形態の十分な理解が得られるように具体的な詳細を与える。ただし、実施形態は、これらの具体的な詳細なしに実施できることを、当業者は理解されよう。たとえば、実施形態を不必要な詳細で不明瞭にしないために、回路をブロック図で示すか、または全く図示しないことがある。他の場合、実施形態を不明瞭にしないために、周知の回路、構造および技術を詳細に図示しないことがある。
【００２８】
また、実施形態を、フローチャート、流れ図、構造図、またはブロック図として示されるプロセスとして説明することがあることに留意されたい。フローチャートは動作を逐次プロセスとして説明することがあるが、動作の多くは並行してまたは同時に実行できる。さらに、動作の順序を並べ替えることができる。プロセスは、その動作が完了すると終了する。プロセスは、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに対応することがある。プロセスが関数に対応する場合、その終了は呼出し側関数またはメイン関数への関数の戻りに対応する。
【００２９】
さらに、記憶媒体は、読取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、および／または情報を記憶するための他の機械可読媒体を含む、データを記憶するための１つまたは複数のデバイスを表す。「機械可読媒体（machine readable medium）」という用語は、携帯または固定記憶デバイス、光記憶デバイス、無線チャネル、および（１つまたは複数の）命令および／またはデータを記憶、含有、または搬送することが可能な様々な他の媒体を含むが、それらに限定されない。
【００３０】
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、またはそれらの組合せによって実装できる。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実装した場合、必要なタスクを実行するためのプログラムコードまたはコードセグメントは記憶媒体または他の記憶手段など機械可読媒体中に記憶できる。プロセッサは必要なタスクを実行することができる。コードセグメントは、手順、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、あるいは命令、データ構造、またはプログラムステートメントの組合せを表すことができる。コードセグメントは、情報、データ、引数、パラメータ、またはメモリコンテンツをパッシングおよび／または受信することによって別のコードセグメントまたはハードウェア回路に結合できる。情報、引数、パラメータ、データなどは、特にメモリ共有、メッセージパッシング、トークンパッシング、ネットワーク送信を含む適切な手段によってパッシング、転送、または送信できる。
【００３１】
１つの特徴では、予め記憶された初期化シードを使用することによる擬似乱数生成器のためのセキュアなシーディングおよび再シーディング方式を提供する。この方式は、エントロピー収集が利用できないときでも、擬似乱数生成器を未知状態に初期化する。
【００３２】
シーディング方式の別の態様では、プライマリシードファイルおよびシャドーシードファイルをシーディング情報とともにセキュアなファイルシステム中に保持することができる。プライマリシードファイルが壊れている場合、擬似乱数生成器はシャドーシードファイルのコンテンツをシードされる。
【００３３】
さらに別の特徴では、シードファイルのハッキング対策として、信頼できるタイマをシーディング機構の一部として使用することができる。予め記憶されたシード情報が損なわれているときでも、信頼できるタイマまたはクロックを予め記憶されたシード情報と混合して、エントロピーを追加する。
【００３４】
図１は、本明細書で説明する１つまたは複数の新規の特徴を実装することができる擬似乱数生成器の一例を示すブロック図である。始動すると、擬似乱数生成器１０２は、シード生成器モジュール１０４からシードを受信して、擬似乱数生成器１０２を未知状態に初期化するように構成される。擬似乱数生成器１０２を１つまたは複数のアプリケーション１０６、１０８および１１０によって呼び出して、ビット、シンボルおよび／または数の擬似ランダム出力を取得することができる。
【００３５】
擬似乱数生成器１０２の状態を初期化するために使用するエントロピーの収集には時間がかかるので、１つの特徴では、この目的で始動シード（startup seed）を予め記憶する。たとえば、シード生成器モジュール１０４はそのような始動シードを記憶し、それにより、他のエントロピー情報が利用できないときでも、そのような始動シードを使用して擬似乱数生成器を予測不可能な状態に初期化することができる。したがって、擬似乱数生成器１０２が始動すると、それを予め記憶されたシードによって迅速にシードすることができる。
【００３６】
図２は、初期シード管理を有する擬似乱数生成器の一例を示すブロック図である。擬似乱数生成器は、携帯電話、コンピュータ、回路基板、チップ、プロセッサ、半導体デバイス、セットトップボックスなどの電子デバイス、および／またはソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードモジュールの一部として組み込むことができる。デバイス固有の原始シード２００は、電子デバイスの製造中に記憶デバイス２０２（たとえば、不揮発性メモリ）中に記憶できる。このプロセスでは、原始シード２００は記憶デバイス２０２の外部インターフェースを介して記憶できる。そのような原始シード２００は、たとえば、異なる乱数発生器を使用してオフラインで生成できる。後続の外部の読取りまたは書込み動作ができないように、原始シード２００が記憶されている記憶デバイス２０２へのアクセスは、好ましくは制限される。これにより、ハッカーは原始シード２００を変更または知ることができなくなる。
【００３７】
擬似乱数生成器２１２が動作のために初めて電源投入されると、原始シード２００が擬似乱数生成器２１２に供給される。原始シード２００中のエントロピーにより、擬似乱数生成器２１２は確実に未知または予測不可能な状態に初期化される。そうすることによって、擬似乱数生成器２１２は、始動するとすぐに、種々のアプリケーション用の擬似乱数（出力）を与えることができる。
【００３８】
一定時間後、エントロピー収集モジュール２０４は擬似乱数生成器２１２に別のシードを与え、これが擬似乱数生成器２１２に再シードされる。たとえば、擬似乱数生成器２１２にランダムデータのＭバイト（たとえば、Ｍ＝１２８バイト）を要求し、これらのＭバイトをセキュアなファイルシステム２０８中のシードファイル２０６に記憶するプロセスを開始することができる。シードファイル２０６が生成されると、記憶デバイス２０２中の原始シード２００は削除または破棄される（たとえば、すべてゼロにリセットされる）。
【００３９】
シード選択モジュール２１０は、擬似乱数生成器２１２と、１つまたは複数のシードソース２０２、２０４、および２０８とに結合できる。たとえば、擬似乱数生成器が開始または電源投入されると、シード選択モジュール２１０は原始シード２００かシードファイル２０６かを選択するように構成できる。さらに、シード選択モジュール２１０は、擬似乱数生成器２１２を定期的にまたは散発的に再シードするために使用する（１つまたは複数の）シードをエントロピー収集モジュール２０４から取得することができる。エントロピー収集モジュール２０４は、後でシードを生成するために使用できる１つまたは複数のソースからランダムデータまたは情報を収集するように構成できる。
【００４０】
その後、擬似乱数生成器２１２が再始動されると（たとえば、パワーサイクリングの後）、シード選択モジュール２１０は記憶デバイス２０２を検査して、有効な原始シードが利用可能かどうかを判断する。記憶デバイス２０２中の原始シード２００が削除または破棄されたので、記憶デバイス２０２は、シードファイル２０６が利用可能であること、および／またはそれを使用すべきであることを示すフラグまたはゼロを含むことができる。次いで、シード選択モジュール２１０は、シードファイル２０６から初期化シードを取得し、それを使用して擬似乱数生成器２１２の内部状態を未知または予測不可能な状態に初期化する。セキュアなファイルシステム２０８はシードファイル２０６の秘匿性および完全性を保証する。一例では、セキュアなファイルシステムは、暗号を使用して、シードファイル２０６のコンテンツの秘匿性および完全性を保護することができる。別の例では、セキュアなファイルシステムは、デバイスのユーザおよび／またはオペレーティングシステムがアクセス不可能であるが、シード選択モジュール２１０および／または擬似乱数生成器２１２によってアクセス可能である。
【００４１】
擬似乱数生成器２１２は、擬似乱数生成器２１２の（１つまたは複数の）内部状態を初期化するためにシードを受信するシーディングモジュール２１４を含むことができる。次いで、数生成器モジュール２１６は、シーディングモジュール２１４によって設定された状態に基づいて擬似ランダム出力を生成する。
【００４２】
擬似乱数生成器２１２からの擬似ランダム出力のいくつかは、後続の電源投入用の初期化シードとして記憶できる。シードファイル２０６中に新たなランダム情報を記憶し、それを使用して始動時に擬似乱数生成器２１２に再シードするプロセスが繰り返され、それにより毎回異なる初期化シードが使用されることになる。一実装形態では、擬似乱数生成器２１２が（たとえば、エントロピー収集モジュール２０４からの）エントロピーを含むシードを再シードされた後に、（初期化シードとして）シードファイル２０６中に記憶された擬似ランダム出力が取得される。
【００４３】
代替実装形態では、製造または他のセキュアな初期化手順の間に、原始シード２００を代わりにシードファイル２０６中に直接記憶する。次いで、擬似乱数生成器２１２の最初の初期化後に原始シードを破棄し、擬似乱数生成器２１２の後続の再シーディング用にランダム情報をシードファイル２０６中に記憶する。
【００４４】
図３は、一例による、予め記憶されたシードを使用して擬似乱数生成器を初期化するための方法を示す。擬似乱数生成器の電源投入初期化（３０２）の間、原始シードが利用可能であるかどうかに関する判断を行う（３０４）。原始シードが利用可能であることは、擬似乱数生成器が初期化されるのは今回が初めてであることを示す。そのような原始シードが利用可能である場合、セキュアな記憶ソースから原始シードを取得し（３０６）、原始シードの記憶されたバージョンを使用された後で破棄する（３０８）。記憶された原始シードを破棄することは、擬似乱数生成器が以前に開始されたことを示す将来のインジケータの役目を果たす。代替的に、同じこと示すためにフラグをセキュアな位置に設定することができる。次いで、擬似乱数生成器の始動内部状態を原始シードで初期化して（３１０）、擬似ランダム出力を生成する（３１２）。この時点で、擬似乱数生成器は擬似ランダム出力（たとえば、数、ビット、バイト、シンボルなど）を呼出し側アプリケーションに与えることが可能である。
【００４５】
エントロピーの１つまたは複数のソースを使用して、新たなシードを取得する（３１４）。擬似乱数生成器の内部状態を新たなシードで予測不可能な状態に変更する（３１６）。次いで、擬似乱数生成器の変更された内部状態に基づいて擬似ランダム出力を生成する（３１８）。擬似ランダム出力を擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶する（３２０）。始動内部状態（startup internal state）とは、電源投入された直後の擬似乱数生成器の状態をさす。
【００４６】
擬似乱数生成器が以後に電源投入されたとき、原始シードはもはや利用できない（３０４）。したがって、代わりに、予め記憶されたシードをシードファイルから取得する（３２２）。次いで、擬似乱数生成器の始動内部状態を予め記憶されたシードで初期化し（３２４）、擬似乱数生成器が擬似ランダム出力を生成することが可能になる（３１２）。擬似乱数生成器の後続の始動の間、この初期シーディングプロセスを繰り返す。
【００４７】
図４は、電源遮断を予測し、擬似乱数生成器の後続の始動初期化用の擬似ランダム出力を記憶するシステムを示すブロック図である。擬似乱数生成器は電子デバイスの一部（たとえば、チップ、回路など）として組み込むことができる。そのようなデバイスは、（１）ユーザがデバイスの電源をオフにしたとき、（２）デバイスが何らかの（１つまたは複数の）エラーによりそれ自体をシャットダウンしたとき、および／または（３）デバイスがクラッシュしたときに、電源切断される。
【００４８】
制御モジュール４０２は、様々なソースから情報を収集し、デバイスが遮断しようとしているかどうかを判断することができる。たとえば、ユーザがデバイスをオフにしたときを検出するために、制御モジュール４０２をユーザインターフェース４０４（たとえば、オン／オフスイッチなど）に結合することができる。同様に、エラーが起こったときを検出し、デバイスを制御された方法で遮断するエラーハンドラ４０６に制御モジュール４０２を結合することができる。ユーザインターフェース４０４またはエラーハンドラ４０６のいずれかが、デバイスがオフにされようとしていることを示すと、擬似乱数生成器４１０に、擬似ランダム出力を生成し、それをセキュアなファイルシステム４１２中のシードファイル４１４中に記憶させるように制御モジュール４０２を構成することができる。
【００４９】
図５は、何らかの電源切断イベントを検出すると初期化シードを生成し、保存するようにデバイスを動作させるための方法を示す。たとえば、電源切断信号が検出された場合（５０２）、またはシステムエラーが検出された場合（５０４）、デバイスの電源を切断する（５１０）前に、擬似ランダム出力を生成し（５０６）、セキュアなシードファイル中に記憶する（５０８）。セキュアなシードファイル中に記憶された擬似ランダム出力は、擬似乱数生成器を初期化するために、次の電源投入時に使用できる。
【００５０】
しかしながら、致命的エラーが起こる（たとえば、デバイスが電力を使い果たすか、またはサービス妨害攻撃によりメモリ破損が起こる）と、デバイスのクラッシュを検出することが困難になり、デバイスが遮断する前にシードファイル４１４を首尾よく更新することができない。この問題に対処するために、タイマ４０８が制御モジュール４０２に結合される。制御モジュール４０２は、擬似乱数生成器４１０がシードファイル４１４中に記憶される擬似ランダム出力を与えることを、制御モジュール４０２に要求させる周期信号をタイマ４０８から受信する。
【００５１】
シードファイル４１４を使用することの１つの脅威は、シードファイルの偽造である。１つの対策は、シードファイル４１４を特権的なパーティション中のセキュアなファイルシステム４１２中に配置することである。特権的なパーティションは、正常なファイルシステム外に常駐することができ、したがってシステム更新によって消去されることがない。システムの正常なファイルアクセスインターフェースは、セキュアなファイルシステム４１２の存在に気づかない。
【００５２】
別の特徴では、プライマリシードファイル４１４とシャドーシードファイル４１６とを（特権的なパーティション内の）セキュアなファイルシステム４１２中に保持することができる。シード情報は、最初にプライマリシードファイル４１４に保存され、次いでシャドーシードファイル４１６に保存される。プライマリシードファイル４１４への書込み中に致命的エラーが起きた場合、以前に使用されていないシード情報がまだシャドーシードファイル４１６中に記憶されており、次の電源投入時に擬似乱数生成器４１０を初期化するために使用される。このように、擬似乱数生成器４１０を初期化するための電源投入の間、常に良好なシード情報が入手可能である。
【００５３】
図６は、擬似乱数生成器用の初期化シードを記憶するためにプライマリシードファイルおよびシャドーシードファイルを使用するための方法を示す。擬似乱数生成器から擬似ランダム出力を取得する（６０２）。擬似ランダム出力（たとえば、ビット、シンボル、数など）を最初にプライマリシードファイル中に記憶し（６０４）、その後初期化シードとして使用する。擬似ランダム出力は、プライマリシードファイル中に以前に記憶された他のコンテンツと置き換わることができる。次いで、同じ擬似ランダム出力をシャドーシードファイル中に記憶する（６０６）。その後、擬似乱数生成器の電源を切断する（６０８）。
【００５４】
擬似乱数生成器の電源を再び投入すると（６１０）、プライマリシードファイルの完全性または真正性を検査して、それが有効かどうかを判断する（６１２）。プライマリシードファイルが有効な場合、初期化シードをプライマリシードファイルのコンテンツから取得する（６１４）。そうではなく、プライマリシードファイルが有効ではない（たとえば、ファイルコンテンツが壊れている）場合、初期化シードをシャドーシードファイルのコンテンツから取得する（６１６）。初期化シードを使用して、擬似乱数生成器を初期化する（６１８）。次いで、擬似乱数生成器は擬似ランダム出力を呼出し側アプリケーションに与える。擬似乱数生成器が電源切断および投入されるたびにこのプロセスを繰り返し、それにより、異なる初期化シードを使用して擬似乱数生成器を初期化することができる。
【００５５】
一部の実装形態では、（セキュアなファイルシステム４１２が保持されている）特権的なパーティションを使用することが不可能な場合がある。そのような特権的なパーティションがないと、ハッカーは、バックアップされた以前のシードファイルの正規のコピーでシードファイルを上書きすることが可能である。その場合、ハッカーは、（たとえば、電源を切断することによって）擬似乱数生成器を組み込んだデバイスを即時にクラッシュさせ、それによってデバイスをだまして、次の電源投入サイクル時に以前のシードファイルを使用させることができる。以前のシードファイルは、正規のコピーであるので、電源投入段階の間、擬似乱数生成器によって受け入れられることになる。その場合、擬似乱数生成器は、エントロピー収集モジュールによって再シードされるまで、ハッカーが同じ以前のシードファイルを使用するたびに、電源投入段階の間、同じ出力シーケンスを生成する。したがって、ハッカーは擬似乱数生成器の初期出力を制御することが可能である。
【００５６】
そのようなハッキングに対処するために、１つの特徴では、ハッキングに対して擬似乱数生成器をさらに保護するために始動初期化シードの一部として時間を使用することができる。図７は、シードファイルのハッキングに対処するために時間構成要素をどのように利用することができるかについての一例を示すブロック図である。時間キャプチャモジュール７０２は、信頼できる内部クロックから時間をキャプチャするために、またはネットワーク（たとえば、ＣＤＭＡネットワーク）から何らかの時間信号をキャプチャするために使用される。シードファイル７０４からのシードコンテンツｓは（時間キャプチャモジュール７０２からの）時間ｔと混合されて、初期シード７０８を形成する。混合関数７０６は、時間ｔの各ビット変化が関数出力の範囲全体に分散されるように選択または構成される。このようにして、時間ｔが変化すると初期化シード７０８全体が変化することになる。混合関数７０６の一例はハッシュアルゴリズム（hash algorithm）である（たとえば、ｉｎｉｔ＿ｓｅｅｄ＝ｈａｓｈ（ｓ｜｜ｔ）、ここで「｜｜」は結合（concatenation）を示す）。したがって、同じシードファイルを再使用する場合でも、新たな時間ｔ’により初期シードｈａｓｈ（ｓ｜｜ｔ’）はｈａｓｈ（ｓ｜｜ｔ）とは異なる。次いで、初期シード７０８を使用して、擬似乱数生成器を初期化することができる。
【００５７】
図８は、擬似乱数生成器用の初期化シードの一部として時間を組み合わせるための方法を示す。擬似乱数生成器を電源投入すると（８０２）、予め記憶されたシードをシードファイルから取得する（８０４）。信頼できる時間を（セキュアなソースから）取得し（８０６）、予め記憶されたシードと組み合わせて、新たな初期化シードを形成する（８０８）。新たな初期化シードを使用して、擬似乱数生成器を初期化し（８１０）、擬似ランダム出力を生成する（８１２）。
【００５８】
図９は、擬似乱数生成器を実装するように構成された記憶媒体９０２とプロセッサ９０４とを備える処理回路９００を示すブロック図である。記憶媒体９０２は、たとえば、擬似乱数生成器の内部状態を記憶するための１つまたは複数の内部状態レジスタを含むメモリデバイスおよび／またはハードドライブとすることができる。処理デバイス９０４は、擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化するように構成できる。記憶された原始シードは、一度使用された後に破棄することができる。エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得する。擬似乱数生成器を新たなシードで初期化し、擬似乱数生成器の内部状態を予測不可能な状態に変更する。擬似乱数生成器の変更された内部状態に基づいて擬似ランダム出力を生成する。擬似ランダム出力を擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶する。
【００５９】
一実装形態では、処理デバイスは、（１）擬似乱数生成器が再始動された後、シードファイルから初期化シードを取り出し、（２）信頼できるソースから時間値を取得し、（３）時間値と初期化シードを組み合わせて、変更された初期化シードを取得し、（４）擬似乱数生成器の始動内部状態を変更された初期化シードで初期化し、および／または（５）シードファイルのコンテンツを擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えるようにさらに構成できる。時間値と初期化シードは、時間値が、変更された初期化シードの範囲全体に分散されるように組み合わせることができる。
【００６０】
処理デバイスは、（１）擬似ランダム出力をセキュアなファイルシステム中のプライマリシードファイルおよびシャドーファイル中に記憶し、（２）擬似乱数生成器を再始動すると、プライマリシードファイルの完全性が損なわれているかどうかを判断し、（３）プライマリファイルの完全性が首尾よく検証された場合、プライマリシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化し、および／または（４）そうでない場合、シャドーシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化するようにさらに構成できる。
【００６１】
別の例では、記憶媒体９０２は、プロセッサ９０４によって実行されたとき、プロセッサ９０４に、（１）擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化させ、（２）記憶された原始シードを一度使用された後に破棄させ、（３）エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得させ、（４）その新たなシードを擬似乱数生成器に再シードして、擬似乱数生成器の内部状態を予測不可能な状態に変更させ、（５）擬似乱数生成器の変更された内部状態に基づいて擬似ランダム出力を生成させ、および／または（６）擬似ランダム出力を擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶させることができる命令を記憶する機械可読媒体とすることができる。機械可読媒体（記憶媒体９０２）は、プロセッサ９０４によって実行されたとき、プロセッサに、（１）擬似乱数生成器が再始動された後、シードファイルから初期化シードを取り出させ、（２）信頼できるソースから時間値を取得させ、（３）時間値と初期化シードを組み合わせて、変更された初期化シードを取得させ、（４）擬似乱数生成器の始動内部状態を変更された初期化シードで初期化させ、および／または（５）シードファイルのコンテンツを擬似乱数生成器の擬似ランダム出力から取得された新たな初期化シードと置き換えさせる、１つまたは複数の命令をさらに有することができる。
【００６２】
別の特徴によれば、シードファイルはセキュアなファイルシステム中にプライマリシードファイルとシャドーシードファイルとを含むことができる。機械可読媒体（記憶デバイス９０２）は、プロセッサによって実行されたとき、プロセッサに、（１）擬似乱数生成器を再始動すると、プライマリシードファイルの完全性が損なわれているかどうかを判断させ、（２）プライマリファイルの完全性が首尾よく検証された場合、プライマリシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化させ、および／または（３）そうでない場合、シャドーシードファイルの初期化シードで擬似乱数生成器の始動内部状態を初期化させる、１つまたは複数の命令をさらに有することができる。
【００６３】
したがって、（１）擬似乱数生成器の始動内部状態を予め記憶された原始シードで初期化するための手段と、（２）記憶された原始シードを一度使用された後に破棄するための手段と、（３）エントロピーの１つまたは複数の予測不可能なソースから新たなシードを取得するための手段と、（４）擬似乱数生成器の内部状態を新たなシードで予測不可能な状態に変更するための手段と、（５）擬似乱数生成器の変更された内部状態に基づいて擬似ランダム出力を生成するための手段と、（６）擬似ランダム出力を擬似乱数生成器の後続の始動内部状態用の初期化シードとしてシードファイル中に記憶するための手段とを備える擬似乱数生成器が提供される。擬似乱数生成器は、（７）擬似乱数生成器の製造中に原始シードをセキュアな位置に記憶するための手段と、（８）擬似乱数生成器が再始動された後にシードファイルから初期化シードを取り出すための手段と、（９）擬似乱数生成器の始動内部状態を初期化シードで初期化するための手段と、および／または（１０）シードファイルのコンテンツを擬似乱数生成器から取得された新たな初期化シードと置き換えるための手段とをさらに備えることができる。
【００６４】
図１、図２、図３、図４、図５、図６、図７、図８および／または図９で示した構成要素、ステップ、および／または関数の１つまたは複数を、擬似乱数生成の動作に影響を及ぼすことなく、単一の構成要素、ステップ、または関数に再編成および／または組み合わせることができ、あるいは、いくつかの構成要素、ステップ、または関数で実施することができる。また、本発明から逸脱することなく追加の要素、構成要素、ステップ、および／または関数を追加することができる。図１、図２、図４、図７および／または図９に示した装置、デバイス、および／または構成要素は、図３、図５、図６および／または図８に記載した方法、特徴、またはステップの１つまたは複数を実行するように構成できる。本明細書に記載の新規のアルゴリズムは、ソフトウェアおよび／または組込みハードウェアで効率的に実施できる。
【００６５】
さらに、本明細書で開示する実施形態に関連して説明する様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装できることを、当業者は理解されよう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、概してそれらの機能に関して上記で説明した。そのような機能をハードウェアで実装するかソフトウェアで実装するかは、システム全体に課せられた特定の適用および設計上の制約に依存する。
【００６６】
実施形態についての説明は、例示的なものであり、特許請求の範囲を限定するものではない。したがって、本教示は、他のタイプの装置、ならびに多くの代替形態、修正形態、および変更形態に容易に適用できることが当業者には明らかであろう。
【図１】
2010525417.tif 000003
【図２】
2010525417.tif 000004
【図３】
2010525417.tif 000005
【図４】
2010525417.tif 000006
【図５】
2010525417.tif 000007
【図６】
2010525417.tif 000008
【図７】
2010525417.tif 000009
【図８】
2010525417.tif 000010
【図９】
2010525417.tif 000011
【国際調査報告】
2010525417.tif 000012
2010525417.tif 000013
2010525417.tif 000014
2010525417.tif 000015
2010525417.tif 000016
2010525417.tif 000017