(57)【要約】【課題】ソフトウェアに基づき高品位の乱数を発生すること【解決手段】極めて一般的な方法では、コイン投げの結果は、ランダムに分布した同じ数の０ビットと１ビットとを含むランダムビットテーブルから１つのビットをランダムに選択することにより、再現される。発生すべき乱数はコイン投げシミュレーションのその後の結果からビットごとに組み合わせられる。従って、ｎＲＮＤ個のビットＢＲｉ（ここで、１≦ｉ≦ｎＲＮＤ−１である）を有する乱数を発生するための方法は、ａ）ｍＢＦＴ個のアドレス指定可能なビットＢＴｊ（ここで、０≦ｊ≦ｍＢＦＴ−１である）を有するスタティックビットテーブルＢＦＴ（このスタティックビットテーブルは同じ数の「０」ビットと「１」ビットとを任意の分布で含む）を設けるステップと、ｂ）１≦ｉ≦ｎＲＮＤ−１の前記乱数のビットＢＲｉに対し、０からｍＢＦＴ−１までのレンジ内のアドレスＦＡを発生し、前記スタティックビットテーブルから前記アドレスＦＡを有するビットＢＴＦＡを選択し、前記スタティックビットテーブルからの前記ビットＢＴＦＡに等しくなるよう、前記乱数のうちの前記ビットＢＲｉ（ＢＲｉ＝ＢＴＦＡ）をセットするステップとを備える。【特許請求の範囲】
【請求項１】
ｎＲＮＤ個のビットＢＲｉ（ここで、１≦ｉ≦ｎＲＮＤである）を有する乱数を発生するための方法であって、この方法は、
ａ）ｍＢＦＴ個のアドレス指定可能なビットＢＴｊ（ここで、０≦ｊ≦ｍＢＦＴ−１である）を有するスタティックビットテーブルＢＦＴ（このスタティックビットテーブルは同じ数の「０」ビットと「１」ビットとを任意の分布で含む）を設けるステップと、
ｂ）１≦ｉ≦ｎＲＮＤの前記乱数のビットＢＲｉに対し、
i．０からｍＢＦＴ−１までのレンジ内のアドレスＦＡを発生し、
ii．前記スタティックビットテーブルから前記アドレスＦＡを有するビットＢＴＦＡを選択し、
iii．前記スタティックビットテーブルからの前記ビットＢＴＦＡに等しくなるよう、前記乱数のうちの前記ビットＢＲｉをセットする（ここでＢＲｉ＝ＢＴＦＡである）ステップとを備える、乱数を発生するための方法。
【請求項２】
アドレスＦＡを発生するための前記ステップは、
ａ）基本ランダム性値ＢＲＶ（各基本ランダム性値ＢＲＶはｌビットの長さを有している）の数ｑを提供するステップと、
ｂ）前記ｑ個の基本ランダム性値ＢＲＶのうちの各々のｌビットのうちの選択されたビットを抽出し、前記選択されたビットから前記アドレスＦＡを組み立てるステップを備える、請求項１に記載の方法。
【請求項３】
前記ｑ個の基本ランダム性値ＢＲＶのｌビットの選択されたビットを抽出する前記ステップは、前記ｑ個の基本ランダム性値ＢＲＶの各々と多数の所定の特定の最終アドレスアセンブリパラメータＦＡＡＰのうちの選択されたビットとのＡＮＤ演算を実行するステップを含み、前記選択されたビットからの前記アドレスＦＡを組み立てる前記ステップは、前記ＡＮＤ演算の結果を最終アドレスレジスタに転送するステップを含む、請求項２に記載の方法。
【請求項４】
前記最終アドレスパラメータＦＡＡＰは、発生すべき乱数の各ビットＢＲｉに対し、前記アドレスＦＡを組み立てるために、各基本ランダム性値ＢＲＶから選択されたビットの数ｐＦＡが同じ（ｐＦＡ＝ｍＢＦＴ／ｑ）となるように構成されている、請求項３に記載の方法。
【請求項５】
前記最終アドレスパラメータＦＡＡＰは、乱数のｌ／ｐＦＡビットＢＲｉの発生の後に、基本ランダム性値ＢＲＶの前記ｌビットのうちの各ビットが正確に１回選択されているように構成されている、請求項４に記載の方法。
【請求項６】
前記基本ランダム性値ＢＲＶは、
ａ）疑似乱数ＰＲＮＤを発生し、
ｂ）少なくとも１つのフィードバック変更子の値ＦＢＭ（前記フィードバック変更子は、所定の数の、前に発生されたビットＢＲｉによって影響される）を提供し、
ｃ）前記発生された疑似乱数のうちの少なくとも一部と前記少なくとも１つのフィードバック変更子の値ＦＢＭとのＸＯＲ演算を実行することによって発生される、請求項２〜５のうちのいずれか１項に記載の方法。
【請求項７】
前記基本ランダム性値ＢＲＶは、
ａ）リニア合同発生器によりｌＰＲＮＤ（ここでｌＰＲＮＤ≧ｌ）のビット長さを有する疑似乱数ＰＲＮＤを発生し、
ｂ）ｌビットの長さを有する少なくとも１つのフィードバック変更子の値ＦＢＭ（前記フィードバック変更子は、所定の数の、前に発生されたビットＢＲｉによって影響される）を提供し、
ｃ）前記発生された疑似乱数のうちの最後のｌビットと前記少なくとも１つのフィードバック変更子の値ＦＢＭとのＸＯＲ演算を実行することによって発生される、請求項２〜５のうちのいずれか１項に記載の方法。
【請求項８】
前記少なくとも１つのフィードバック変更子の値ＦＢＭは、所定のｌビット長さの基本変更子の値ＢＭと前に発生された最後のｌ個のビットＢＲｉとのＸＯＲ演算を実行することによって発生される、請求項６または７に記載の方法。
【請求項９】
前記少なくとも１つのフィードバック変更子の値ＦＢＭは周期的に更新される、請求項６または７のうちのいずれか１項に記載の方法。
【請求項１０】
前記少なくとも１つのフィードバック変更子の値ＦＢＭは、複数の所定のｌビット長さの基本変更子の値ＢＭのうちの１つと前に発生された最後のｌ個のビットＢＲｉとのＸＯＲ演算を実行することによって発生され、フィードバック変更子の各発生後に、前記複数の基本変更子の値ＢＭのうちの基本変更子の値ＢＭを周期的に入れ替える、請求項８〜９のうちのいずれか１項に記載の方法。
【請求項１１】
２つの値のブロックを交互に満たすことによって、すなわち前記スタティックビットテーブル（ＢＦＴ）のランダムに選択されたビットと発生された疑似乱数とのＸＯＲ演算の結果を１つのブロックに満たすこと、および発生された変更されていない疑似乱数で１つのブロックを満たすことを交互に行うことによって、本方法の初期化ステップ中に前記基本変更子の値ＢＭを発生する、請求項８〜１０のうちのいずれか１項に記載の方法。
【請求項１２】
請求項１〜１１のうちのいずれか１項に記載の乱数を発生するための方法をプログラマブルプロセッサに実行させるようになっている命令を特徴とする、コンピュータで使用可能なメディアに記憶されたコンピュータプログラム製品。
【請求項１３】
前記プログラムがコンピュータで実行されるときに、請求項１〜１１のうちのいずれか１項に記載の方法のすべてのステップを実行するためのプログラムコードを含むコンピュータプログラム。
【請求項１４】
前記プログラムがコンピュータで実行されるときに、請求項１〜１１のうちのいずれか１項に記載の方法のすべてのステップを実行するためのプログラムコードを有するメモリ手段と、
請求項１〜１１のうちのいずれか１項に記載の方法を実施するために、前記プログラムコードを実行させるための実行環境とを含むコンピュータデバイス。
【請求項１５】
パワーアップごとに前記方法のための１つ以上の初期パラメータを補正するための手段を更に備える、請求項１４に記載のコンピュータデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、真の乱数を発生するための方法および装置に関し、より詳細には、かかる乱数を発生するためのソフトウェアに基づく方法および装置に関する。
【背景技術】
【０００２】
乱数は、種々の目的のために使用され、シミュレーション研究、情報処理、通信および暗号化などのシステムでキーとなる役割を果たしている。
【０００３】
乱数は、他のより長いシーケンスの疑似乱数を作成するプロセスのための初期入力、すなわちシードとして使用されることが多い。真の乱数は一般に、同じシーケンスの結果を発生するのに繰り返すことのできない、物理的処理の結果として得られる。例えば原子核同位体の崩壊、雷放電によって生じる静電荷、または地球の磁気球体におけるシフトによって誘導されるスプリアスな電荷は、すべて乱数の発生を促進するのに使用できるが、これら乱数は別の場所または別の時間では再生できない。
【０００４】
真の乱数発生器は、統計的に互いに独立した出力を発生する。従って、所定の時間におけるデバイスの出力またはステートの一部のセットの折衷は、過去に発生された、または将来発生される乱数のセキュリティを損なうものではない。他方、真の乱数発生器は、設計が技巧的であり（多くの設計は、精密な製造プロセスに依存している）、これらはテストが困難であり、チップの入力（例えばＶｃｃ）を操作し得る敵対者に対して脆弱であり、乱数を発生するレートは通常かなり低い。
【０００５】
より高速かつより低コストで乱数を発生するには、多少とも許容できるランダム性特性を示す疑似乱数を発生するような数学に基づくいくつかのプロセッサがこれまで開発されている。
【０００６】
これらプロセスは、乱数に類似するが、技術的にはランダムでない結果を発生するので、適切には疑似乱数処理と称することがきる。これらプロセスは、短い乱数シードを、乱数に類似する特性を有する、より長い疑似乱数シーケンスに変換するようになっており、初期の乱数シードおよびプロセスの性質からその後の疑似乱数のすべてが、厳密に誘導される。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
高速処理速度は、これら技術のキーとなる利点であり、処理における計算が複雑であるので、処理の結果生じる疑似乱数シーケンスを予測することは極端に困難である。しかしながら、一旦初期乱数シードが提供されると、プロセスに新しいランダム性は導入されない。
【０００８】
本発明の目的は、高品位の乱数を発生するためのソフトウェアに基づく方法を提供することにある。
【課題を解決するための手段】
【０００９】
この目的は、請求項１に記載の、乱数を発生するための方法によって達成される。この方法は、ベルヌーイの試行のように、「公正な」コインを投げると、裏と表が出る確率が正確に５０％となることに対応して、０ビットになるか１ビットになるかの確率が、正確に５０％であるという原理に基づく。コイン投げにおける決定的な事実は、前の結果と次の結果とが独立していることである。ランダム性の異なるソースを組み合わせることにより、現時点で示される方法は、ソフトウェアによってこのようなコイン投げの原理をまねたものである。
【００１０】
極めて一般的な方法では、コイン投げの結果は、ランダムに分布した同じ数の０ビットと１ビットとを含むランダムビットテーブルから１つのビットをランダムに選択することにより、再現される。発生すべき乱数はコイン投げシミュレーションのその後の結果からビットごとに組み合わせられる。従って、ｎＲＮＤ個のビットＢＲｉ（ここで、１≦ｉ≦ｎＲＮＤである）を有する乱数を発生するための方法は、
ａ）ｍＢＦＴ個のアドレス指定可能なビットＢＴｊ（ここで、０≦ｊ≦ｍＢＦＴ−１である）を有するスタティックビットテーブルＢＦＴ（このスタティックビットテーブルは同じ数の「０」ビットと「１」ビットとを任意の分布で含む）を設けるステップと、
ｂ）１≦ｉ≦ｎＲＮＤの前記乱数のビットＢＲｉに対し、０からｍＢＦＴ−１までのレンジ内のアドレスＦＡを発生し、前記スタティックビットテーブルから前記アドレスＦＡを有するビットＢＴＦＡを選択し、前記スタティックビットテーブル（ＢＲｉ＝ＢＴＦＡ）からの前記ビットＢＴＦＡに等しくなるよう、前記乱数のうちの前記ビットＢＲｉをセットするステップとを備える。
【００１１】
ビットフィッシングテーブルＢＦＴと称されるスタティックビットテーブルは、同じ数の「０」ビットと「１」ビットとで、ランダムに満たされた一次元のビットテーブルでよい。ＢＦＴ内のランダムなビットは、本発明の発生される乱数出力の「エンドレスな」変化および予測不能性の基礎を成す。本発明に示すような方法に含まれる「０」ビットおよび「１」ビットのランダムな分布を生じさせる任意の適当な方法により、ランダムビットテーブルＢＦＴ自身をランダムに発生する。
【００１２】
ディメンジョン（ランダムビットの総数）は、アプリケーションのタイプによって決まる。実現上の理由から、このディメンジョンは、（８キロバイトに対応する）６５５３６ビットから（５１２メガバイトに対応する）４２９４９６７２９６ビットまでの範囲の２の指数として選択することが好ましい。後者の限界は、３２ビットプロセッサアーキテクチャにおける技術的限界を構成するものと見なされる。
【００１３】
暗号アプリケーションに対しては８ＫＢ、１６ＫＢ、３２ＫＢおよび６４ＫＢのバージョンが特に重要である。その理由は、これらバージョンはスマートカードまたはＵＳＢトークンの安全メモリ内に容易に適すからである。ＢＦＴは、発生される数のランダム性に対する決定的な要素であるので、シードではなく、ＢＦＴだけが暗号アプリケーションにおいて秘密に保持すべき要素となる。トップのセキュリティアプリケーションには８ＫＢだけの秘密で十分であることが理解できよう。
【００１４】
実際に８ＫＢ（２６５５３５）の２００３５２９．．．×１０１９７２８の可能なテーブルの間では、３２７６８個の「０」ビットおよび３２７６８個の「１」ビットを有する６,２４４４５１．．．×１０１９７２５個の異なるテーブルが存在する。従って、８キロバイトの所定のＢＦＴに対しては、元のビットと比較して５０％以上の同一ビットを有するテーブルを探す前に、約１０１４１個のテーブルを発生しなければならない。６０％以上の同じビットを有するテーブルを探すには、約１０５７２個のテーブルを発生し、７０％同じビットまで達しなければならず、次に１０２３４１個のテーブルを発生しなければならない、などである。地球上の人口が１０００億人に達し、どの人も毎秒１つのテーブルを必要とすると仮定した場合、我々は１０００年たってもビット位置が５５％以上同じである２つのテーブルを見つけることはできないであろう。所定のテーブルに対してビット位置が５５％以上同じテーブルを得る確率は１：１０１４１であるので、いわゆる誕生日パラドックスを適用すると、ビットが５５％同じである２つのテーブルを探すには、１０７０以上のテーブルを必要とする。１０００年以内に発生されるテーブルの総数が合計３１５３×１０２１であることを検討すると、これらテーブルを探し出す見込みは極めて低い。
【００１５】
本発明に係わる方法は、簡単な８キロバイトの秘密テーブルのこのような膨大なポテンシャルを、何十億の何十億倍もの、予測不能で、かつ良好に分布した乱数に効率的に変換できる。
【００１６】
本発明は、乱数を発生するためにビット位置ごとに処理を進めることに留意すべきである。このため、発生すべき乱数の長さｎＲＮＤは、特定のアプリケーションに適した任意の数に等しくなるように選択できる。
【００１７】
スタティックビットテーブルＢＦＴから選択すべきビットのアドレスＦＡは、所定のレンジ内のアドレスの高品位のランダム性を保証する任意の適当な方法によってランダムに発生できる。本発明の好ましい実施例は、アドレスＦＡを発生するための前記ステップは、
ａ）基本ランダム性値ＢＲＶ（各基本ランダム性値ＢＲＶはｌビットの長さを有している）の数ｑを提供するステップと、
ｂ）前記ｑ個の基本ランダム性値ＢＲＶのうちの各々のｌビットのうちの選択されたビットを抽出し、前記選択されたビットから前記アドレスＦＡを組み立てるステップを備える。
【００１８】
可能な一実施例では、４つの基本ランダム性値ＢＲＶ１からＢＲＶ４まで存在し、すなわちｑ＝４であり、各値は３２ビットの長さを有し、すなわちｌ＝３２となる。次に最終アドレスは、４つのＢＲＶから異なるビット位置を組み立てたものとなる。
【００１９】
良好に分布した乱数を得るには、発生される最終アドレスＦＡも、ビットフィッシングテーブルＢＦＴのアドレススペース全体にわたってランダムに分布していなければならない。発生されるアドレスのランダム性を保証するために、前記ｑ個の基本ランダム性値ＢＲＶのｌビットの選択されたビットを抽出する前記ステップは、前記ｑ個の基本ランダム性値ＢＲＶの各々と多数の所定の特定の最終アドレスアセンブリパラメータＦＡＡＰのうちの選択されたビットとのＡＮＤ演算を実行するステップを含み、前記選択されたビットからの前記アドレスＦＡを組み立てる前記ステップは、前記ＡＮＤ演算の結果を最終アドレスレジスタに転送するステップを含むことが好ましい。
【００２０】
好ましい実施例では、前記最終アドレスパラメータＦＡＡＰは、発生すべき乱数の各ビットＢＲｉに対し、前記アドレスＦＡを組み立てるために、各基本ランダム性値ＢＲＶから選択されたビットの数ｐＦＡが同じ（ｐＦＡ＝ｍＢＦＴ／ｑ）となるように構成されている。前記最終アドレスパラメータＦＡＡＰは、乱数のｌ／ｐＦＡビットＢＲｉの発生の後に、基本ランダム性値ＢＲＶの前記ｌビットのうちの各ビットが正確に１回選択されているように構成されている。このことは、前記基本ランダム性値ＢＲＶの各ビットが１回だけ使用され、かつ所定の回数の実行の後で各ＢＲＶのビットのすべてが１回しか使用されないようにＦＡＡＰsが決定されていることを意味する。
【００２１】
上記実施例では、最終アドレスアセンブリパラメータＦＡＡＰは、例えば、次のビットをフィッシングするために最終ＢＦＰアドレスを組み立てるのに使用される１６個の特殊な値（４の４つのグループ）となっている。これら１６の値は、４つの列Ａ、Ｂ、Ｃ、Ｄと、４つの行１、２、３、４に配列できる。
【００２２】
ＢＦＴから抽出するための次のビットＢＲｉを決定するよう、最終アドレスＦＡを組み立てるには、１つの列（Ａ１、Ａ２、Ａ３、Ａ４）からの４つのパラメータを使用する。次のサイクル、すなわち次のビットＢＲｉのＦＡの発生中は、本方法はＢラインからの４つのパラメータを使用し、次にＣラインからの４つのパラメータを使用し、次にＤラインからの４つのパラメータを使用する。良好に計算されたＦＡＡＰは、アドレスのどのビットも適当に組み立てられることを保証する。
【００２３】
ＦＡＡＰ値は、４サイクル中に異なるビットとのアドレス組み立てにどのＢＲＶも関与するように選択されている。ＦＡＡＰの値は、ＢＲＶのうちの同じビットが二度と使用されないように決定されており、そうでない場合には、発生される乱数の良好な分布が危険なものとなる。行ごとの４つのパラメータにおいて位置ごとに、１つのパラメータを使用することによって、このことを満たしている。
【００２４】
ＦＡＡＰ値は（極めてランダムのように見える）所定のテーブルとして任意に決定でき、プログラム命令内に含めることができる。暗号アプリケーションにおける秘密セッション鍵としてランダムＦＡＡＰテーブルを使用したい場合、これらＦＡＡＰ値はランダムに発生されたテーブルでもよい。
【００２５】
前記基本ランダム性値ＢＲＶは、疑似乱数ＰＲＮＤを発生し、少なくとも１つのフィードバック変更子の値ＦＢＭ（前記フィードバック変更子は、所定の数の、前に発生されたビットＢＲｉによって影響される）を提供し、前記発生された疑似乱数のうちの少なくとも一部と前記少なくとも１つのフィードバック変更子の値ＦＢＭとのＸＯＲ演算を実行することによって発生することが好ましい。
【００２６】
疑似乱数ＰＲＮＤは、例えばリニア合同発生器によって発生でき、ｌＰＲＮＤビットの長さを有し、少なくとも１つのフィードバック変更子ＦＢＭは、ｌビットの長さ（ｌＰＲＮＤ≧ｌである）を有することができる。この場合、基本ランダム性値ＢＲＶの発生は、前記発生された疑似乱数ＰＲＮＤの最後のｌビットと、前記少なくとも１つのフィードバック変更子ＦＢＭとのＸＯＲ演算を含むことができる。
【００２７】
本方法の好ましい実施例では、基本ランダム性値の形成に複数のフィードバック変更子を使用する。本方法は、ＢＲＶを形成するために４つの３２ビット値（ＦＢＭ１〜ＦＢＭ４）のテーブルを使用できる。
【００２８】
フィードバック変更子は、前に発生されたビットＢＲｉ、例えば最後に発生された３２ビットの所定の数によって影響されるはずである。この理由から、フィードバック変更子ＦＢＭは、所定の３２ビット長さの基本変更子の値ＢＭと最後に発生された３２のビットＢＲｉとのＸＯＲ演算を実行することによって発生することが好ましい。本方法の可能な実施例では、前記少なくとも１つのフィードバック変更子の値ＦＢＭは、複数の所定のｌビット長さの基本変更子の値ＢＭのうちの１つと前に発生された最後のｌ個のビットＢＲｉとのＸＯＲ演算を実行することによって発生され、フィードバック変更子の各発生後に、前記複数の基本変更子の値ＢＭのうちの基本変更子の値ＢＭを周期的に入れ替える。この基本変更子は、例えば１６個の無符号の３２ビットの整数ＢＭ１〜ＢＭ１６のテーブルから構成できる。
【００２９】
発生された最後の３２ビットのフィードバックは、発生されるＦＢＭの値に影響するが、その値自身を決定するわけではない。それにもかかわらず、我々は発生された最後の３２ビットがこれら値の計算に影響することを示すために、フィードバックなる用語を使用している。
【００３０】
本方法の好ましい実施例では、フィードバック変更子ＦＢＭは、周期的に、例えば８、１６、２４または３２ビットのリクエストされた乱数が終了するごとに更新される。このことは、例えばフィードバック変更子ＦＢＭ３をＦＢＭ４へ変換し、ＦＢＭ２をＦＢＭ３へ変換し、ＦＢＭ１をＦＢＭ２へ変換し、次のＢＭと発生された最後の３２ビットとのＸＯＲ演算をすることにより、新しいＦＢＭ１を形成することによって達成できる。ＢＭ１６を使用した後に、ＢＭ１と共に再び次のサイクルが開始する。
【００３１】
基本変更子ＢＭは、本方法の初期化ステップ中に発生できる。これら値を計算するための推奨される方法は、２つの値のブロックを交互に満たすことにある。すなわちこれら値の最良の秘密を保証するために、ＢＦＴのランダムにフィッシングされたビットとＸＯＲ演算されたＬＣＧの６４ビットの疑似乱数で１つのブロックを満たし、次に２６４の可能なビットからの所定のシードに対するユニーク性を保証するために、変更されていないＬＣＧ乱数で１つのブロックを満たすことである。
【００３２】
本発明の方法は、任意の標準的なコンピュータ、例えば簡単なパソコンで容易に実施できる。従って、本発明は、乱数を発生するための上記方法のすべてのステップを実行するためのプログラムコードを含むコンピュータプログラムまたはこれまで開示した乱数を発生するための方法をプログラマブルプロセッサに実施させるようになっている命令を含む、コンピュータで使用可能なメディアに記憶されたコンピュータプログラム製品にも関する。
【００３３】
更に本発明は、前記プログラムがコンピュータで実行されるときに、本発明の方法のすべてのステップを実行するためのプログラムコードを有するメモリ手段と、前記方法を実施するために、前記プログラムコードを実行させるための実行環境とを含むコンピュータデバイスにも関する。好ましい実施例ではコンピュータデバイスは起動時に一つあるいはそれ以上の前期方法に対する初期値パラメーターを修正するための手段をさらに有することができる。安全なメモリ内の同じチップに記憶されたランダムビットテーブルＢＦＴを有しなければならない、かかるコンピュータデバイスは、再生産できない予測不能な乱数を発生するための有名なブラックボックスとなっている。
【発明を実施するための最良の形態】
【００３４】
乱数を発生するための方法の一実施例の次の説明から、本発明はより明らかとなろう。
同じ確率で（最後に発生されるものを含む）所定長さのビットストリングに対する理論的に可能な組み合わせのどれかを得るために、我々は、現在の疑似乱数発生器の代数学的アプローチを放棄しなければならない。本発明に係わる方法の基本的な「エンドレスな」可能性は、ビットフィッシングテーブル（ＢＦＴ）とも称される乱数テーブルから主に生じるものである。
【００３５】
このテーブルの大きさ、通常は２を指数とするビットの数は、８キロバイトの小さい数から５１２メガバイトの（３２ビットのプロセッサに対する）技術的限界まで変化し得る。１と０を同じ確率で発生することを保証するために、同じ数の１ビットと０ビットをテーブルは有していなければならない。予測不可能性を最大限に保証するため、テーブルは十分に良質なランダム品質を保っていなければならない。
【００３６】
乱数を発生するために、本発明の方法は、５０％の確率で１と０とを得るのにビット位置ごとの処理を行う。ビット当たりの第１ステップは、（ランダム性の異なるソースを組み合わせることにより）ＢＦＴのサイズのレンジ内のランダムアドレスＦＡを発生することであり、第２のステップは、ランダムテーブルからこのビットを取り出し、これを構築中の乱数に加えることである。
【００３７】
第１の場合の方法を作動させるには、６４ビットバージョンの古典的な疑似乱数発生器（ＬＣＧ）を使用できる。古典的なリニア合同発生器は、新しい方法を作動するためにしか使用されないが、本発明で提案する方法の出力は、ＬＣＧが発生する乱数に決して相関化しないことに留意すべきである。このＬＣＧの主な特徴は、６４ビットの２６４の異なるユニークな値が、ランダムに、かつ予測できる順序で生じることである。ランダム性の原理に対するこれら事実は、シードごとに最小２６４ビットからのストリングのユニーク性を保証するのに、本発明の方法で有利に使用される。よって他の可能な介入を受けることなく、個々のビットフィッシングテーブルＢＦＴ（２６４の可能なシードを有し、どのシードも少なくとも２６４ビットの異なるランダムストリングを発生するように）ごとに、少なくとも最低で２１２８ビットを確実に発生することができる。
【００３８】
このシード方法は、本発明の方法の初期部分であり、ＬＣＧが発生する数百の第１疑似乱数値を必要とする。このシード方法は２つの異なる目標を満たさなければならない。第１の目標は１６の基本変更子（ＢＭ）に対する値を計算することであり、これら基本変更子は、ＬＣＧおよびＢＦＴからの一部の情報を８個のレジスタ内で組み合わせ、更に８個のレジスタ内でＬＣＧからの変更されていない値を組み合わせることによって計算される。ＬＣＧとＢＦＴを組み合わせることにより、シードについて知り、更にシードごとのユニーク性を保証する他の半分を変更しないことにより、これらレジスタからの値を推測する可能性を排除できる。これらの値は次回のさいシーディングまで変更されない。
【００３９】
第２の目標は、パイプを満たすことである。このことは、ＬＣＧ疑似乱数の助けによりＢＦＴからビットを抽出することにより、通常の発生サイクルで必要な異なるレジスタに対するスタート値をランダムに計算することを意味する。このことは、４つの３２ビットフィードバック変更子（ＦＢＭ）、４つの３２ビット基本ランダム性値（ＢＲＶ）および発生された最後の３２ビットを有するレジスタに関係している。
【００４０】
オプションのスピード最適化方針として、最初のサイクルでＢＦＴの選択された部分として検討すべき乱数値で３２ビットのレジスタを満たすことができる。この最初の発生サイクルでは、この乱数値を使用し、常に１サイクル進んでいる、次のサイクルである第２サイクルで使用すべき次の乱数値に対するリクエストをスタートする。このようにすることにより、プロセッサが待ち時間中に一部の作業を行うことができるようにメモリ内のＢＦＴへアクセスする際の不快な遅延を部分的に解消できる。
【００４１】
このシード方法が一旦終了すると、「コイン投げ」をスタートできる。提案する方法の基本サイクルは、４ビットを発生することである。これは、ＢＦＴから選択すべきビットの最終アドレスを計算するために使用される方法に起因するからである。実際の構成例では、スピードを最適にするためにワンラウンドにおいて８ビットの数を発生するのに２つの基本サイクルをつなげることができる。
【００４２】
１つのビットの発生は次のように進む。
・次のＬＣＧ数を計算する。
・ＬＣＧからの、上方の３２ビットと１つのＦＢＭとを（４つのうちの１つを周期的に）ＸＯＲ演算することにより、１つのＢＲＶを（４つのうちの１つを周期的に）再計算する。
・特定の最終アドレス組み立てパラメータ（ＦＡＡＰ）に定義された選択されたビットを、「ＡＮＤ」命令により、ＢＲＶ１から最終アドレス（ＦＡ）レジスタに転送する。
・次のＦＡＡＰに基づき、ＢＲＶ２からの一部のビットを加える。
・ＢＲＶ３からも同じように行う。
・ＢＲＶ４からも同じように行う。
・これら演算の後で、ＢＦＴから抽出するためのビットのアドレスを得て、構築中の乱数にこのビットを加える。
【００４３】
（８ビット、１６ビット、２４ビットまたは３２ビットの無符号の整数に対し）８ビットの発生を１回、２回、３回または４回実行した後に、ＦＢＭｓのテーブルを更新するために、このメインサイクルを離れなければならない。ＦＢＭ３をＦＢＭ４に変換し、ＦＢＭ２をＦＢＭ３に変換し、ＦＢＭ１をＦＢＭ２に変換する。ＦＢＭ１は、発生された最後の３２ビットと、周期的に決定された基本変更子（ＢＭ）とをＸＯＲ演算することによって再計算される。
【００４４】
次に、１、２、３または４バイトに対する次の発生サイクルを再びスタートできる。より多数の乱数を高速で発生することが必要である場合、一度に３２ビットを発生することが推奨される。一方、本明細書の読者は、基本変更子サイクルを異なるように進め、最後の３２ビットレジスタが同じにならないようにしているので、３２ビットの１回のリクエストから１６ビットの２回のリクエストへ（恐らくは時間クロックに基づき、または経過時間に基づき）ランダムに変更することにより、再生できない乱数の発生が可能となることが、これら説明から容易に理解できよう。本可能性については、実行時ランダム性という用語が使用されている。
【００４５】
説明するように２６４ビットごとの２６４の異なるビットストリング（ＬＣＧの異なるシードごとに１つ）を得る。異なるＢＦＴｓに対しては、当然ながら完全に異なるストリングを得ることになる。
【００４６】
このことは本方法がＬＣＧの時間外で働く前に、所定のテーブルに対し、かつシードごとに２５８個の６４ビットの整数しか有しないことを意味するのではないかと主張する人があろう。実際にＬＣＧの最初のサイクルの後で、ＦＢＭｓの同じステートに侵入する機会が生じる低い可能性が存在する。
【００４７】
しかしながら、このことは心配する問題ではない。まず、第１の理由は、毎秒１０億個の６４ビットの整数を発生する場合でも、この発生までに９年以上待たなければならないと容易に計算できるからであり、第２の理由は、ある日、この問題が生じた場合、２６４ビットを発生した後に自動的に新しいシーディングを強制できるからである。マルチプロセッサシステムでの並列処理により、大量の乱数を発生したい場合、プロセッサごとに異なるＢＦＴを取り出したり、または１つのＢＦＴを取り出し、プロセッサごとに異なるシードを使用するように選択できる。
【００４８】
ラン時間のランダム性またはＦＡＡＰｓなどの自動変更のような、他の可能性も存在するので、ＰＲＧＮｓで作業する場合に行わなければならないような周期性を計算しようとする試みは適当でないと信じられる。本発明の方法は、確率の基本法則によってしか制限されない、（２５６ビットの長さを検討する場合）今まで見られず、かつ繰り返しのない乱数を発生する可能性を、どのスピードでも提供できる。所望するように乱数を再現可能なものとして、または再現できないものとして得ることができる。暗号アプリケーションのために真に再現できない乱数を得るには、パワーアップごとにシードを自動的に増加し、外部から読み取りできない安全なメモリ内の同じチップに記憶された秘密ＢＦＴを有する特別設計のマイクロコンピュータを使用することが推奨される。かかるマイクロコンピュータは、再現できない予測不能な乱数を発生するための有名なブラックボックスとなる。
【００４９】
達成可能な速度に関して３ＧＨｚの６４ビットＥＭＴを有するインテルペンティアム４では、８ＫＢ  ＢＦＴを用いると、毎秒１２４メガビット（すなわち毎秒１５.５メガバイト）まで、更に６４ＫＢ  ＢＦＴを用いると、毎秒１１５メガビットまでを測定した。１８０ＭＨｚで作動する小型のＡＲＭ９では、得られたレートは毎秒１.３メガビットであった。プログラム言語はハンドコード化されたアセンブラー最適化を行わないＣ−９９である。
【００５０】
キャッシュとメインメモリとの間のアクセス速度の差に起因し、極めて大きいＢＦＴｓを用いた場合に速度は急激に低下する。
【００５１】
結論として、本発明は真の乱数の特性を有する高品位の乱数を発生するためのソフトウェアに基づく方法を提案するものである。従って、この方法は、任意の標準的なコンピュータで真の乱数の発生を可能にする。
【００５２】
ほとんどの公知の疑似乱数発生器と対照的に、本方法によって発生される乱数は、前方向および後方向の双方に完全に予測不能である。暗号アプリケーションのための特別設計された疑似ランダムビット発生器を除けば、ＰＲＮＧｓは前方向および後方向に予測可能な乱数を発生する。乱数は数学的な関数からの結果であるので、数の小さいシーケンスを知れば、前に発生されたシーケンスおよび次のシーケンスを計算できる。
【００５３】
提案する方法は、ビットフィッシングテーブルの概念に基づき、乱数の発生を可能にし、このため、ビットフィッシングテーブルが秘密である限り、シーケンスの一部の知識に基づいて既知の部分の前後の未知のストリングを計算することは絶対不可能である。
【００５４】
ＢＦＴについては知っているが、シードについては知らない場合、シードを計算することはできないが、恐らくはこれまで使用されたシードを探すために２６４個の可能なシードのすべてを試行しなければならないことになる。シードおよびＢＦＴについては知っているが、ＦＡＡＰの値を有していなければ、ランダムに計算されたＦＡＡＰｓを我々が使用するケースでは、１０億の１０億倍もの可能なＦＡＡＰｓを試行しなければならないことになる。
【００５５】
更にＰＲＮＧｓのすべては基本的には周期性を有しており、その後、ＰＲＮＧは同じ乱数を繰り返し始める。これはＰＲＮＧｓ内で使用される数学的関数に起因するものである。古典的な３２ビットのＬＣＧに対して、実際に最新のデスクトップコンピュータで数分内にこの事実を証明できるが、４８ビットまたは６４ビットのバージョンに対しては、時間がより長くなることに起因して、この作業はより困難となる。提案する方法に対し、我々はこの問題には関係していない。ＢＦＴのどのバージョンも、２６４の長さの２６４の異なるストリングのユニークな発生を保証できる。これまでの説明で示したように、この値、すなわちランタイムのランダム性およびＦＡＡＰｓの変更を超える異なる可能性が存在する。発生のために２６４ビットの長さを超えるよう、この方法を拡張する最も容易な方法は、旧いシード＋１で自動的に新しくシーディングすることである。シーディングのこのような簡単な変更は、異なるストリングの数を２１２８まで拡張できる。
【００５６】
「ＰＲＮＧの出力は、一般にシードの決定的関数である。すなわちすべての真のランダム性はシードの発生に制限される。プロセスの決定的性質により、「疑似ランダム」なる用語となっている。疑似ランダムシーケンスの各要素は、シードから再現可能であるので、疑似ランダムシーケンスの再生または有効性が必要な場合、シードをセーブすればよい。」（ＮＩＳＴ特別出版８００−２２Ａのパラグラフ２、ポイント１.１.４、暗号用途のための乱数および疑似乱数発生器に適した統計学的テスト）現時点で提案する方法の場合、シードはある役割を果たすが、主要な役割を果たすわけではなく、絶対的に唯一の役割を果たすわけではない。ランダム性の主なソースは、ビットフィッシングテーブル（ＢＦＴ）であり、シード、ＦＡＡＰｓおよびランタイムランダム性により発生器の作動中に導入される外部の可能なランダム性は、このランダム性の補足的ソースとなっている。
【手続補正書】
【提出日】平成20年2月28日(2008.2.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ｎＲＮＤ個のビットＢＲｉ（ここで、１≦ｉ≦ｎＲＮＤである）を有する乱数を発生するための方法であって、この方法は、
ａ）ｍＢＦＴ個のアドレス指定可能なビットＢＴｊ（ここで、０≦ｊ≦ｍＢＦＴ−１である）を有するスタティックビットテーブルＢＦＴ（このスタティックビットテーブルは同じ数の「０」ビットと「１」ビットとを任意の分布で含む）を設けるステップと、
ｂ）１≦ｉ≦ｎＲＮＤの前記乱数のビットＢＲｉに対し、
i．０からｍＢＦＴ−１までのレンジ内のアドレスＦＡを発生し、
ii．前記スタティックビットテーブルから前記アドレスＦＡを有するビットＢＴＦＡを選択し、
iii．前記スタティックビットテーブルからの前記ビットＢＴＦＡに等しくなるよう、前記乱数のうちの前記ビットＢＲｉをセットする（ここでＢＲｉ＝ＢＴＦＡである）ステップとを備える、乱数を発生するための方法。
【請求項２】
アドレスＦＡを発生するための前記ステップは、
ａ）基本ランダム性値ＢＲＶ（各基本ランダム性値ＢＲＶはｌビットの長さを有している）の数ｑを提供するステップと、
ｂ）前記ｑ個の基本ランダム性値ＢＲＶのうちの各々のｌビットのうちの選択されたビットを抽出し、前記選択されたビットから前記アドレスＦＡを組み立てるステップを備える、請求項１に記載の方法。
【請求項３】
前記ｑ個の基本ランダム性値ＢＲＶのｌビットの選択されたビットを抽出する前記ステップは、前記ｑ個の基本ランダム性値ＢＲＶの各々と多数の所定の特定の最終アドレスアセンブリパラメータＦＡＡＰのうちの選択されたビットとのＡＮＤ演算を実行するステップを含み、前記選択されたビットからの前記アドレスＦＡを組み立てる前記ステップは、前記ＡＮＤ演算の結果を最終アドレスレジスタに転送するステップを含む、請求項２に記載の方法。
【請求項４】
前記最終アドレスパラメータＦＡＡＰは、発生すべき乱数の各ビットＢＲｉに対し、前記アドレスＦＡを組み立てるために、各基本ランダム性値ＢＲＶから選択されたビットの数ｐＦＡが同じとなるように構成されている、請求項３に記載の方法。
【請求項５】
前記最終アドレスパラメータＦＡＡＰは、乱数のｌ／ｐＦＡビットＢＲｉの発生の後に、基本ランダム性値ＢＲＶの前記ｌビットのうちの各ビットが正確に１回選択されているように構成されている、請求項４に記載の方法。
【請求項６】
前記基本ランダム性値ＢＲＶは、
ａ）疑似乱数ＰＲＮＤを発生し、
ｂ）少なくとも１つのフィードバック変更子の値ＦＢＭ（前記フィードバック変更子は、所定の数の、前に発生されたビットＢＲｉによって影響される）を提供し、
ｃ）前記発生された疑似乱数のうちの少なくとも一部と前記少なくとも１つのフィードバック変更子の値ＦＢＭとのＸＯＲ演算を実行することによって発生される、請求項２〜５のうちのいずれか１項に記載の方法。
【請求項７】
前記ステップａ）で発生された前記疑似乱数ＰＲＮＤは、ｌＰＲＮＤ（ここでｌＰＲＮＤ≧ｌ）のビット長さを有し、リニア合同発生器により発生され、
前記ステップｂ）で提供される前記少なくとも１つのフィードバック変更子の値ＦＢＭは、ｌビットの長さを有し、
前記ステップｃ）におけるＸＯＲ演算で使用された、前記発生された疑似乱数のうちの少なくとも１部は、前記発生された疑似乱数ＰＲＮＤの最後のｌ個のビットである、請求項６に記載の方法。
【請求項８】
前記少なくとも１つのフィードバック変更子の値ＦＢＭは、所定のｌビット長さの基本変更子の値ＢＭと前に発生された最後のｌ個のビットＢＲｉとのＸＯＲ演算を実行することによって発生される、請求項６または７に記載の方法。
【請求項９】
前記少なくとも１つのフィードバック変更子の値ＦＢＭは周期的に更新される、請求項６または７のうちのいずれか１項に記載の方法。
【請求項１０】
前記少なくとも１つのフィードバック変更子の値ＦＢＭは、複数の所定のＬビット長さの基本変更子の値ＢＭのうちの１つと前に発生された最後のｌ個のビットＢＲｉとのＸＯＲ演算を実行することによって発生され、フィードバック変更子の各発生後に、前記複数の基本変更子の値ＢＭのうちの基本変更子の値ＢＭを周期的に入れ替える、請求項８〜９のうちのいずれか１項に記載の方法。
【請求項１１】
２つの値のブロックを交互に満たすことによって、すなわち前記スタティックビットテーブル（ＢＦＴ）のランダムに選択されたビットと発生された疑似乱数とのＸＯＲ演算の結果を１つのブロックに満たすこと、および発生された変更されていない疑似乱数で１つのブロックを満たすことを交互に行うことによって、本方法の初期化ステップ中に前記基本変更子の値ＢＭを発生する、請求項８〜１０のうちのいずれか１項に記載の方法。
【請求項１２】
請求項１〜１１のうちのいずれか１項に記載の乱数を発生するための方法をプログラマブルプロセッサに実行させるようになっている命令を特徴とする、コンピュータで使用可能なメディアに記憶されたコンピュータプログラム製品。
【請求項１３】
前記プログラムがコンピュータで実行されるときに、請求項１〜１１のうちのいずれか１項に記載の方法のすべてのステップを実行するためのプログラムコードを含むコンピュータプログラム。
【請求項１４】
前記プログラムがコンピュータで実行されるときに、請求項１〜１１のうちのいずれか１項に記載の方法のすべてのステップを実行するためのプログラムコードを有するメモリ手段と、
請求項１〜１１のうちのいずれか１項に記載の方法を実施するために、前記プログラムコードを実行させるための実行環境とを含むコンピュータデバイス。
【請求項１５】
パワーアップごとに前記方法のための１つ以上の初期パラメータを補正するための手段を更に備える、請求項１４に記載のコンピュータデバイス。
【国際調査報告】
2009531761.tif 000002
2009531761.tif 000003
2009531761.tif 000004