(57)【特許請求の範囲】
【請求項１】
デバイスにおいて一方向性関数を生成し、それによって、ランダム値ストリームから利益を享受することができる前記デバイスにおいて使用するためのランダム値ストリームを生じさせる方法であって、
ａ）定義域値に従ってアドレス指定される複数のメモリセルを提供するステップを、含み、
任意の所定定義域値は、すべての可能性のある値域値をマッピングし、
前記方法は、さらに、
ｂ）所与のサイクル長を有したランダムデータを用いて、前記複数のメモリセルのうちの１つと関連付けられるランダム定義域アドレス値を生成するステップと、
ｃ）生成された前記ランダム定義域アドレス値と関連付けられるデータ値を読み取るステップと、
ｄ）ステップｂ）〜ｃ）を繰り返し、それによってランダム値ストリームを提供するステップと、
ｅ）前記ランダム値ストリームをオリジナルメモリセル位置およびデータ値から分離し、それによって非決定性ランダム値ストリームを生じさせるステップと、を含み、
前記ランダム値ストリームを前記オリジナルメモリセル位置およびデータ値から分離し、それによって非決定性ランダム値ストリームを生じさせる前記ステップは、前記生成するステップにおいて生成された前記ランダム定義域アドレス値を、ランダム編集プロセスを使用して、前記所与のサイクル長よりも長いサイクル長を有するような値に変えることにより、分離を提供することを含む、方法。
【請求項２】
複数のメモリセルを提供する前記ステップは、
ａ）追加量のデータを提供することと、
ｂ）疑わしい非ランダム部分を除去し、それによってソースデータを形成することと、
ｃ）最小ランダムネス要件に従って前記ソースデータを検証し、それによって検証されたソースデータを形成することと、
ｄ）前記検証されたソースデータを前記複数のメモリセルの位置と統合することと、を含む、動的に強化されたデータを生成するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記追加量のデータは、圧縮データを含む、請求項２に記載の方法。
【請求項４】
前記検証されたソースデータは、インデックス付きのデータプール内に含まれ、前記検証されたソースデータを前記複数のメモリセルの位置と統合する前記ステップは、前記インデックス付きのデータプールを再度インデックス付けすることをさらに含む、請求項２または３に記載の方法。
【請求項５】
前記疑わしい非ランダム部分を除去し、それによってソースデータを形成することは、ゼロ値部分およびファイル情報を除去することを含む、請求項２から４いずれか１項に記載の方法。
【請求項６】
前記検証されたソースデータを前記複数のメモリセルの位置と統合する前記ステップは、ランダム編集プロセスを使用して、前記検証されたソースデータを編集ストリームで処理することをさらに含む、請求項２から５のいずれか１項に記載の方法。
【請求項７】
前記ランダム編集プロセスは、マスキングモジュール、時間変位モジュール、カオスエンジンモジュール、ＸＯＲモジュール、上書きモジュール、拡張モジュール、除去モジュール、制御プレーンモジュール、およびアドレスプレーンモジュールから成るモジュール群から選択されるモジュールを含む、請求項１に記載の方法。
【請求項８】
前記選択したモジュールは、拡張モジュールであり、前記拡張モジュールは、ノイズチャンクを挿入する、請求項７に記載の方法。
【請求項９】
前記選択したモジュールは、制御プレーンモジュールであり、命令として機能するプログラムデータ値を含む、請求項７または８に記載の方法。
【請求項１０】
動的に強化されたデータを生成する前記ステップは、セッションデータとして使用される、前記検証されたソースデータのサブセットを選択することをさらに含む、請求項２から６のいずれか１項に記載の方法。
【請求項１１】
動的に強化されたデータを生成する前記ステップは、
ａ）第２の量の擬似ランダムデータを提供することと、
ｂ）請求項４のステップｂ）〜ｃ）を繰り返し、それによって強化された特徴を有する検証されたソースデータを提供することと、をさらに含む、請求項２、３、４、５、６および１０のいずれか１項に記載の方法。
【請求項１２】
ランダム値ストリームから利益を享受することができるデバイスにおいて使用するための、一方向性関数を通じて、前記デバイスにおいて前記ランダム値ストリームを生成する方法であって、
ａ）検証されたランダム値ストリームを提供するステップと、
ｂ）前記検証されたランダム値ストリームと相関しない、編集ストリームを提供するステップと、
ｃ）前記検証されたランダム値ストリームを前記デバイスの変換モジュールにおいて前記編集ストリームで変換し、それによって分離した非決定性ランダム値ストリームを生成するステップと、を含み、
前記編集ストリームは、ランダム値ストリームを生成するように構成される古典的な関数であって、所与のサイクル長を有したシフトレジスタを含み、前記ランダム値ストリームを、前記所与のサイクル長よりも長いサイクル長を有するような値に変換する、方法。
【請求項１３】
検証されたランダム値ストリームを提供する前記ステップは、認められる物理現象と相関する値を生成することを含む、請求項１２に記載の方法。
【請求項１４】
前記変換は、マスキング、時間変位、上書き、拡張、ＸＯＲ変換、カオスエンジン変換、除去変換、制御プレーン変換、およびアドレス変換から成る変換群から選択される変換を含む、請求項１２または１３に記載の方法。
【請求項１５】
プロセッサを備える装置に、請求項１に記載の方法を実行させるためのプログラムであって、
前記プログラムは、前記プロセッサに、前記方法の各ステップを実行させる、プログラム。
【請求項１６】
請求項１５に記載のプログラムを記憶したコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願に対する相互参照
本発明は、参照することによって本明細書に組み込まれる、２００８年８月６日に出願されたＲｏｓｓの米国暫定特許出願第６１／１８８，２１３号、およびＰａｔｒｉｃｋ  Ｄ．Ｒｏｓｓによる米国非暫定特許出願第１２／５３３，１７９号に対する国際条約の下で優先権を主張する。
【０００２】
本発明は、乱数を生成するための方法およびシステム、特に、乱数ストリームを生成するための方法およびシステムに関する。
【０００３】
産業上の適用性
本発明は、これらに限定されないが、コンピュータゲーム、バンキング、通信、およびメディア開発産業等の産業において適用可能である。そのような産業によって利用されるシステムで使用するためのコンピュータハードウェア／ソフトウェアにおいて実装され得る。
【背景技術】
【０００４】
多くのアプリケーションは、それらの内部処理の部分としてランダム値を必要とする。これらのアプリケーションの一部は、値の均一分布、所与のシード値からの再現性、およびそれらが反復する前の極めて長いサイクル等の単純な要件を有する。そのために、多くの論文および書籍は、これらの古典的なランダム値発生器を提供する、良好なハードウェアおよびソフトウェア関数について説明している。古典的なランダム値発生器の属性は、依然として有用でもあり、問題でもある。現在のランダム値発生器のいかなる欠陥にも対処する前に、まずこれらの発生器がどのように機能するかを検討しなければならない。
【０００５】
ハードウェアベースであるか、またはソフトウェアベースであるかにかかわらず、すべての古典的なランダム値発生器に共通する特性が多数存在する。古典的なランダム値発生器の基礎は、静的ランダム関数の使用である。これらの関数のそれぞれは、現在の非ゼロデータ値をシーケンスにおける次のランダム値へと処理する。それぞれの新しい値の後次処理は、ランダムシーケンスを形成する。良好な関数が使用されると仮定すると、ランダムシーケンスは、ランダムネスに関するほぼすべての周知の統計的試験に合格する。
【０００６】
多数のランダム関数が試験および公開されている。これらの公開された関数の大部分は、ランダム値の同一シーケンスを反復する前に、値の制限されたシーケンスを生成する。これらの短サイクル長は、多くのアプリケーションと互換可能となるには、短すぎる場合がある。ハードウェアにおいて、ランダム関数は、最も頻繁に、線形フィードバックシフトレジスタ（ＬＦＳＲ）として説明される。存在するソフトウェア関数は少ないが、新しいアプリケーションに使用するための、多数の確立された関数が設計者に使用可能である。また大部分のソフトウェアランダム関数は、同一の短サイクル属性を共有する。
【０００７】
合格または不合格にかかわらず、サイクル長が、統計的試験と正に同じ程度に重要であることは明らかである。非線形様式で複数の公開された関数を結合することは、サイクル長を増大させるための最も一般的な方法である。関数ベースのランダム値発生器は、正確には擬似ランダム発生器と呼ばれ、依然として容易に「クラック」（反転）する。ランダム値発生器をクラックすることは、アタッカーが、シーケンスにおける値のそれぞれを予測することを可能にする。大まかに言って、古典的なランダム関数の複雑性を倍増させることは、それをクラックするために必要な努力を二乗する効果を有する。ハードウェアおよびしたがってコンピュータの速度が増加するにつれて、ランダム値発生器の設計者とそれらを破ることを望むクラッカーとの間の闘いは激化する。
【０００８】
この大体の目安を採用して、ハードウェア設計者は、一層複雑なランダム値発生器関数を採択する。関数駆動パラダイムが不完全であることは避けられないため、設計者とクラッカーとの間の闘争は持続する。それぞれの新しい設計は、時代遅れになる運命にあるため、新しいランダム値発生器を形成、試験、および展開するコストは、それによって無制限である。続いて、チップの高い循環コストは、製品コストに直接変換される。この道筋に沿った末端は未知であるため、設計者は、それらの最新の関数が、どれくらいの期間クラッキングから安全であることを証明するかを予測することはできない。
【０００９】
漸増する関数の複雑性のコストは、複数の方法で表される。上述されるように、ハードウェアの激しい競争は、避けられない不完全な問題として持続する。ハードウェア技術の新しい飛躍のそれぞれは、クラッカーに先行するように、新しい対応する発生器設計を必要とする。この上昇するコストは、多くのアプリケーション設計者に、ハードウェアベースのソリューションを差し控えさせる。システムコストを削減するために、多くのアプリケーション設計者は、ソフトウェアベースのランダム値発生器を用いる。多くの場合、ソフトウェアソリューションに移行するプロセスは、性能を受け入れがたいほど遅延させるか、またはＣＰＵコストを増大させる。循環コストは、専用シリコンがなく低いが、ソフトウェア実装は、システム性能全体に重い負担をかける。ソフトウェアの複雑性が増大するにつれて、性能は逆に低下する。
【００１０】
クラッキングに抵抗しようとして、多くの設計者は、秘密の（非公開の）設計を用いる。秘密裏の開発は、制限された試験、検討、または再使用を余儀なくされる。あいにく、少量の所与の設計は、常にユニットあたりのコストが高いため、秘密裏の開発は、制限された投資利益を保証する。さらに、秘密性は、誰かがハードウェアまたはソフトウェア実施例を得るまで、これらの設計の完全性を維持するに過ぎない。
【００１１】
これらの古典的な関数の最終的な脆弱性は、各ランダム関数がその独自のランダムシーケンスを生成するという単純な不変の事実から生じる。言い換えると、ランダム関数と、それが生成する値の一意のシーケンスとの間には１対１の対応がある。そのシーケンスは、その生成関数に関して、「旋律」のように動作する。ランダム「旋律」は、生成されるときに、値とそれらの値の順序の両方として定義される。シード値は、「旋律」がどこで開始するかを定義するに過ぎない。
【００１２】
すべての古典的なランダム値発生器は、スカラ値（非ゼロシードから開始する）を使用して、それらの一意の「旋律」が開始する地点をインデックス付けする。古典的なランダム値発生器は、静的関数ベースの構築物であり、擬似ランダムシーケンスの開始を定義する鍵として動作するため、シード値は保護されなければならない。大部分の場合において、シード値のサイズを使用して、全体サイクル長を示す。すべてのハードウェアおよび大部分のソフトウェアベースの古典ランダム値発生器は、ランダム値の生成を開始するために、非ゼロシード値を必要とする。ほぼすべての場合において、ゼロ値シードは、あらゆるランダムストリームの生成に失敗する。
【００１３】
クラッキングに抵抗する無駄な努力において、多くの設計者は、秘密の（非公開の）設計を用いる。秘密裏の開発は、制限された試験、検討、または再使用を余儀なくされる。あいにく、少量の所与の設計は、常にユニットあたりのコストが高いため、秘密裏の開発は、制限された投資利益を保証する。さらに、秘密性は、誰かがハードウェアまたはソフトウェア実施例を得るまで、これらの設計の完全性を維持するに過ぎない。必要とされるものは、真のランダム値発生器であって、真の一方向性関数を実装し、非決定性の値のランダムストリームをもたらすもの、および／または本明細書において説明される問題のうちの１つ以上を解決する方法またはシステム、および／または本明細書に精通するようになると、当業者の注目を集め得る１つ以上の問題である。
【発明の概要】
【発明が解決しようとする課題】
【００１４】
本発明は、現在の最新技術に対応して、特に、現在使用可能な乱数発生器によって未だに完全に解決されていない、当該技術分野における問題およびニーズに対応して、開発された。したがって、本発明は、拡張された特徴を有する乱数を生成する方法および／またはシステムを提供するように開発された。
【課題を解決するための手段】
【００１５】
一実施形態において、多数の新しい技術に基づく、ランダム値発生器の新しいゲノムがあり、以下のモジュールのうちの１つ以上を含むが、これらに限定されない。
・不確定性関数−一方向性関数
・ランダム編集プロセス
・時間変位
・セッションデータの動的展開
・動的シード関数
・完全動的変異
ランダム値発生器のこの新しいゲノムの実施形態は、１つ、いくつかの、またはすべての知られているアプリケーションにおいて、１つ、いくつかの、またはすべての古典的なランダム値発生器の代替として優れている。現在のアプリケーションが古典的なランダム値発生器を使用するときはいつも、新しい不確定性ランダム値発生器の実施形態を、それに代わるように構成してもよい。
【００１６】
別の実施形態において、これらの新しい技術のすべてを併せて、ランダム値を生成するための無制限の構造上のソリューションとする。そのような構造上のモデルは、極めて低コストの製品から極めて要求の厳しいアプリケーションまで、それらのランダムデータ要件に基づいて拡大縮小する。
【００１７】
さらに別の実施形態において、デバイスにおいて一方向性関数を生成し、それによって、ランダム値ストリームから利益を享受し得るデバイスにおいて使用するためのランダム値ストリームを生じさせる方法があり、ａ）定義域値に従ってアドレス指定される複数のメモリセルを提供するステップであって、任意の所与の定義域値は、すべての可能性のある値域値をマッピングするステップと、ｂ）複数のメモリセルのうちの１つに関連付けられるランダム定義域アドレス値を生成するステップと、ｃ）生成されたランダム定義域値と関連付けられるデータ値を読み取るステップと、ｄ）ステップｂ）〜ｃ）を反復して、それによってランダム値ストリームを提供するステップと、を含む。一方向性関数を生成し、それによってランダム値ストリームを生じさせる方法は、追加として、ランダム値ストリームをオリジナルのメモリセル位置およびデータ値から分離し、それによって非決定性ランダム値ストリームを生じさせる手段を提供するステップを含む。
【００１８】
さらに別の実施形態において、適切に実装される不確定性ゲノムの実施例は、同一コストの古典的なゲノム発生器よりも反転させることが困難となり、セッションデータ（後に定義される）は損なわれないと仮定する。これは、誰もが同一の公的ハードウェア／ソフトウェアを使用できるが、依然として、クラッキングからの同様の抵抗を有することを意味する。
【００１９】
本明細書全体を通して、特徴、利点、または同様の言語に関する言及は、本発明で実現化されてもよい、特徴および利点のすべてが、本発明の実施形態のいずれかの一つであるべきか、または実際にそうであることを暗示しない。むしろ、特徴および利点を言及する言語は、実施形態に関連して説明される特定の特徴、利点、または特性が、本発明の少なくとも１つの実施形態に含まれることを意味すると理解される。したがって、本明細書全体を通して、特徴および利点、および同様の言語に関する議論は、必ずしもそうではないが、同一の実施形態を言及してもよい。
【００２０】
さらに、本発明の説明される特徴、利点、および特性は、１つ以上の実施形態において、任意の適切な様式で組み合わされてもよい。当業者は、特定実施形態の特定の特徴または利点のうちの１つ以上を伴わずに、本発明を実施することができることを認識するであろう。他の例において、追加の特徴および利点は、本発明のすべての実施形態に存在しない場合がある、ある実施形態において認識される場合がある。
【００２１】
本発明のこれらの特徴および利点は、以下の説明および添付の請求項からより完全に明らかとなるか、または以下で説明されるように、本発明の実施によって教示され得る。
【００２２】
本発明の利点が容易に理解されるようにするために、簡単に上述される本発明のより具体的な説明は、１つまたは複数の添付の図面において説明される、特定の実施形態を参照することによってもたらされる。本発明の図面は、原寸に比例していないことに留意されたい。図面は、単なる概略的表示であり、本発明の特定パラメータを描写するものではない。これらの図面は、本発明の典型的実施形態を描くのみであって、したがって、その範囲を限定するものと見なされないことを理解しながら、本発明は、添付の図面を使用することによって、追加の特異性および詳細とともに記述および説明される。
【図面の簡単な説明】
【００２３】
【図１】一方向性関数の単純な抽象化を示す図であり、ランダム値は、本発明の一実施形態に従って、データ値を不確定性関数から引き出すことによって生成される。
【図２】本発明の一実施形態に従う、不確定性ランダム値発生器の３つのランダムプレーン、およびその間の相互関係を描く、斜視ブロック図である。
【図３】本発明の一実施形態に従って、抽象化アプローチを使用し、ランダムデータストリームを生成するプロセスの概要を示すフローチャートである。
【図４】データマイニングモジュール／プロセスの実施形態を描くブロック図であり、本発明の一実施形態に従って、値は圧縮データから引き出され、破棄されるゼロ値に関してチェックされ、ソースデータファイルに書き込まれる。
【図５】本発明の一実施形態に従って、ランダム出力ストリームを生成するためのランダム編集プロセスを描く、システムのブロック図である。
【図６】本発明の一実施形態に従って、ランダム出力ストリームを生成するための複数のランダム編集プロセスを実装するシステムのブロック図である。
【図７】本発明の一実施形態に従って、マスク発生器プロセス中のビット操作を説明する。
【図８】チャンキングプロセスを描くシステムフロー図であり、本発明の一実施形態に従って、データストリームは、可変サイズのチャンクにチャンク化される。
【図９】置換ランダム編集プロセス中のビット操作を示し、データチャンクは、等量のターゲットストリームビットを置換する。
【図１０】非破壊的である拡張ランダム編集プロセス中のビット操作を示し、本発明の一実施形態に従って、各チャンクは、ターゲットストリームビットの間に「挿入」される。
【図１１】カオスエンジンを表すシステム図であり、本発明の一実施形態に従って、命令は解読され、適切なランダム編集プロセスはＲＥＰ表から選択される。
【図１２】本発明の一実施形態に従って、２つの古典的な関数を使用して、書き込みおよび読み取り（引き出し）アドレスを生成する、時間変位プロセスを表すシステムフロー図である。
【図１３】本発明の一実施形態に従って、ランダムアドレスストリームを生成する、短サイクルランダム編集プロセスを描く、システムフロー図である。
【図１４】本発明の一実施形態に従って、古典的なブロックと関連付けられる一般的なインターフェースを描く、システム図である。
【図１５】本発明の一実施形態に従って、アンセーフメモリアドレスの間接的ランダムストリームを使用して、値をデータプールから引き出す、ハイブリッドアドレス発生器を描くシステムフロー図である。
【図１６】本発明の一実施形態に従って、Ｘセーフアドレス発生器と称される、データパラドックスセーフランダムアドレスを形成するように、不確定性関数を適用する第２の方法を描くシステムフロー図である。
【図１７】本発明の一実施形態に従って、セーフランダムデータストリームを形成するのに使用されている２つの短サイクルプロセスで構成される、ハードウェア実施例１を表すシステムフロー図である。
【発明を実施するための形態】
【００２４】
本発明の原理の理解を促す目的で、ここで１つまたは複数の図面において説明される例示的実施形態を参照し、特定の言語を使用して、それらを説明する。それにもかかわらず、本発明の範囲の制限は、それによって意図されないことが理解される。本明細書において説明される発明的特徴のいかなる変更、およびさらなる修正、および本明細書において説明されるような本発明の原理に関するいかなる追加の適用は、関連技術分野において熟練し、本開示の所有権を有する者であれば生じると思われ、本発明の範囲内であると見なされる。
【００２５】
本明細書全体を通して、「実施形態」、「実施例」または同様の言語に関する言及は、実施形態と関連して説明されるその特定の特徴、構造、特性、またはそれらの組み合わせが、本発明の少なくとも１つの実施形態に含まれることを意味する。したがって、本明細書全体を通して、「実施形態」、「実施例」という語句、および同様の言語の出現は、必ずしもそうではないが、すべての同一の実施形態、異なる実施形態、または図面のうちの１つ以上を参照する。さらに、２つ以上の特徴、要素等に対する「実施形態」、「実施例」等の表現に関する言及は、特徴が必ずしも関連している、類似していない、同一である等を意味しない。
【００２６】
実施形態、または実施例の各記述は、各実施形態を特徴付ける類似または同一の言語の任意の使用にかかわらず、実施形態の任意の他の記述から独立していると見なされる。したがって、一実施形態が「別の実施形態」として識別されると、識別された実施形態は、「別の実施形態」という言語によって特徴付けられる任意の他の実施形態から独立している。本明細書において説明される特徴、機能等は、請求項および／または技術が直接または間接的、暗示的または明示的のいずれかで示し得るように、全体または概して部分的に組み合わせることができると考えられる。
【００２７】
本明細書で使用される場合、「含む（ｃｏｍｐｒｉｓｉｎｇ）」、含む（ｉｎｃｌｕｄｉｎｇ）」、含む（ｃｏｎｔａｉｎｉｎｇ）」、「である（ｉｓ）」、「である（ａｒｅ）」、「によって特徴付けられる（ｃｈａｒａｃｔｅｒｉｚｅｄ  ｂｙ）」、およびそれらの文法的に等しい語は、包括的または無制限の用語であり、追加の引用されない要素または方法ステップを排除しない。「含む、備える（ｃｏｍｐｒｉｓｉｎｇ）」は、「から成る（ｃｏｎｓｉｓｔｉｎｇ）」および「本質的に〜から成るｃｏｎｓｉｓｔｉｎｇ  ｅｓｓｅｎｔｉａｌｌｙ  ｏｆ）」というより制限的な用語を含むものとして解釈される。
【００２８】
代数の生徒として、我々はこの点を繰り返し続ける各後次の数学の授業で、等号の神聖性を教示される。両辺を等しく保つために、等式の右辺を修正したのと同一様式で等式の左辺を修正しなければならない。我々は、等号の神聖な保存によって、すべて教示、試験、評点、および進級される。したがって、我々の共通の数学訓練は、一方向性関数の概念を思い付くことを困難にする。
【００２９】
定義によれば、一方向性関数は、極めて容易に計算を進めることができるが、反転することは極めて困難である。一方向性関数の拡張定義は、多くの教科書において、ならびにオンラインで定義される。
【００３０】
最も頻繁に提供される実施例は、トラップドア一方向性関数であり、２つの極めて大きい素数の積である。積は容易に計算されるが、この積の因数分解は、依然として計算が極めて困難である。２つの大きい素数の解の因数分解は、「実証可能に困難な」問題のクラスに分類される。言い換えれば、「実証可能に困難な」という用語は、そのような関数を反転する困難性を反映するベンチマークを表す。８００桁の素数と９００桁の素数との掛け算を考慮すると、この積を元の２つの素数に因数分解することの困難性を想像できる。
【００３１】
「実証可能に困難な」という古い基準は十分ではない。実際の目的は、有用な真の一方向性関数、反転することができないものであるべきある。今日まで、そのような関数は発見されていない。我々は、共通の数学訓練が障害となっているため、等号の神聖性に支配されている。一方向性関数は、数学問題として知られているが、解法は、コンピュータサイエンスから得られる。
【００３２】
具体的に、プログラミングのオブジェクトパラダイムに移る。抽象化は、一組の操作要件であり、実装詳細の定義を含まない。これらの要件を満たす任意の実装は、抽象化されたクラスの一員である。これらの２つの単純な文章は、等号の支配を破る手段を提供する。
【００３３】
ランダム値発生器の抽象化を、ランダム値を生成するクラスとして定義することから始める。この一般的ベースクラスは、ソリューションの開始点である。次に、ランダム値を生じさせる、それらの公開された古典的なランダム関数に戻る。各公開された関数実装は、上記の抽象化クラスの一員となる。これまでのところ、新しいことは何もない。この抽象化のこれらのバージョンのそれぞれは、すべて古典的なランダム値発生器と同一の問題を有する。
【００３４】
関数を使用してランダム値を計算する代わりに、抽象化実装を変更しながら、データ値をデータプール（メモリ階層）から引き出す。プール内のデータがランダムに開始し、プールが十分に大きい場合、抽象化は、ランダムストリームを生じさせ、これは古典的なランダム関数のすべての周知の欠陥を克服する。
【００３５】
抽象化のこのバージョンは、最大データプールのサイズまで真の一方向性関数である。プールにデータの正確なコピーを有しない限り、あまり典型的な関数でないため、この関数を反転させることはできない。抽象化は、関数のように見え、関数のように動作するが、関数の他の特徴を含まない。これは、不確定性関数と称され、入手可能な最も単純な実施形態である。図１は、一方向性関数の単純な抽象化を示す図であり、ランダム値１２０は、本発明のこの単純な実施形態に従って、データ値をデータプール１１５から引き出す１１０ことによって生成される。これは、ハードウェア（シリコン）またはソフトウェアのいずれかで容易に実装できる。
【００３６】
この単純なデータ駆動不確定性関数は、すべての周知の古典的なランダム値関数、加えてすべての他のランダムシーケンスを（最大データプールサイズ１１５まで）模倣することができる。データプール１１５の一意の例の各々は、一意のデータストリームをもたらす。同一のデータプール１１５は、データプール１１５にアクセスするために使用される、各一意のアドレス指定方法論に対して、一意のデータストリームを付与する。
【００３７】
良好なデータの所与の１つのコピーを用いて、同一順序でメモリにロードされる同一データは、データが同一様式でデータプールから引き出される場合、毎回同一のシーケンスを生じさせる。その同一データが毎回異なる順序でメモリにロードされる場合、生成されるシーケンスも毎回異なる。大量のデータを用いて、この不確定性関数は、同一データからほぼ無制限の数のランダムシーケンスを生じさせることができる。
【００３８】
古典的なランダム値発生器は、１つの一意の「旋律」を有する関数に基づいているため、クラッキングされやすいが、一方で、このバージョンの不確定性関数は、データ駆動であり、一意の「旋律」を有しないため、クラッキングに抵抗性である。ランダム値発生器をクラッキングするための技術は、暗示的に、ランダム値発生器が、単一の「旋律」を有する静的関数として実装されると仮定する。しかしながら、ランダム値を生成する基礎関数がない場合、これらのクラッキング技術に何が起こるであろうか。
【００３９】
データをデータプールから引き出すことは、ランダム値を生成するための極めて低コストのソリューションである。実際に、ランダムデータを生じさせるための安価な手段を見出すことは非常に困難である。不確定性ランダム値発生器は、広範囲の製品にインストールされるように、同一の公的シリコン／ソフトウェアソリューションを誘う。得られるコスト低減は、多くの製品に波及する。
【００４０】
少量（データプールサイズ以下）のランダムデータを必要とするアプリケーションは、この不確定性関数を完全なソリューションとして使用することができる。しかしながら、それを行う前に、線形アドレス指定の危険性、データパラドックスのリスク、およびセッションデータの陳腐化を理解しなければならない。これらの問題は、ソースデータおよびセッションデータが説明された後、以下で論じられる。
【００４１】
この一方向性関数の有用性は、多くの異なる方法で現れる。これ以降、この一方向性関数は、不確定性関数と称される。メモリ内のランダム値は、「不確定性のプール」となる。したがって、設計内で任意の非決定性値を必要とする場合はいつも、プールに進み、それらを取得する。非反転可能ランダムデータストリームを生じさせるだけでなく、それを使用して、古典的な擬似ランダム発生器において見出される「旋律」を除去するために使用することもできる（例えば、セーフアドレスストリームを参照）。この一般的な不確定性関数は、極めて単純な設計を使用して、同一設計実装からほぼ無制限の数のランダムストリームを達成することを可能にする。
【００４２】
１対１（定義域対値域）モデル
伝統的な関数は、定義域値および値域値の１対１マッピングに従う。定義域は独立変数（入力値）であり、一方値域は従属変数（出力値）である。定義域値および値域値の立場を交換すると、次に、元の関数の反転が得られる。
【００４３】
多対１（定義域対値域）モデル
ハッシュ関数は、ある種のデータを比較的小さい整数にマッピングする。ハッシュ関数のプロセスは、複数のデータブロックを同一の値域値にマッピングできるように、定義域データを縮小する。このデータ喪失は、ハッシュ関数の単一反転を形成できないことを意味する。ハッシュ関数モデルを反転することはできないが、その固有の情報喪失は、それが一方向性関数でないことを意味する。
【００４４】
１対多（定義域対値域）モデル
一方向性関数は、１対多（定義域対値域）関数モデルを支持しなければならない。不確定性関数を厳重に検査すると、定義域は、１つまたは複数のデータプール内の任意の有効メモリアドレスであるが、値域は、メモリセルに保存される任意の値であることが分かる。これは、各定義域値（メモリアドレス）が、すべての可能性のある値域値を含むことができることを意味する。最初に、任意の所与の定義域値に対して値域値が完全に非決定性であるところで関数を有し、したがって、不確定性関数が一方向性関数であることを証明する。
【００４５】
さらに、不確定性関数は、以下を含む暗号プリミティブを形成するための極めて単純な手段も可能にする。
・擬似乱数発生器
・擬似ランダム関数ファミリー
・ビットコミットメントスキーム
・適応選択された暗号文攻撃に対して安全な私的鍵暗号化スキーム
・メッセージ認証コード
・デジタル署名スキーム（適合選択されたメッセージ攻撃に対して安全）
不確定性関数は、真の一方向性関数を呈することをはるかに超える値を有する。メモリセルを使用して、値域値を保持することは、一定スカラ値以外の他の可能性を暗示する。メモリセル内のスカラ値の代わりに、オブジェクトポインタを仮定する。オブジェクトポインタの起動は、動的関数が単純な静的値の代わりに、異なる値を戻すことを可能にする。そのようなオブジェクトポインタの一実施例は、完全に新しい不確定性関数である。
【００４６】
アドレス指定する必要がある、ランダム数発生器に使用されるいくつかの用語があり、最初は擬似乱数発生器（ＰＲＮＧ）である。ＰＲＮＧは、古典的なランダム値発生器を使用して、「ランダム」数のストリームを生成するが、それらは静的関数および固定シード値を使用するため、それらは反転することができる。現在の形態のこれらの種類のランダム発生器は、「数」という用語を使用する。以下の説明において、不確定性ランダム値発生器（ＵＲＶＧ）という用語は、本発明を参照して使用される。「値」という用語は、本説明全体を通して使用されるが、不確定性乱数発生器ＵＲＮＧのように、「数」という用語を使用することと同一である。
【００４７】
前述されるように、古典的なランダム関数は、多次元問題に対する一次元の解答に過ぎない。不確定性関数の導入は、ここで、データ、アドレス、およびランダムネスの制御プレーンを含む、複数の革新機会を支持する単純な方法を有することを意味する。ランダムネスの各プレーンは、その他のプレーンに影響することなく展開することができる。図２は、本発明の一実施形態に従う、不確定性ランダム値発生器の３つのランダムプレーン、およびその間の相互関係を描く、斜視ブロック図である。
【００４８】
ランダムネスのデータプレーン
不確定性関数と称されるデータプレーン２１０は、１つまたは複数の入力データプール、セッションデータプール２１５で形成される。データは、アプリケーション要件に応じて、各ランダム値発生器の実行または動的展開（完全動的変異）に対して、依然として静的であり得る。１つまたは複数のデータプールのメモリセルは、値域値を含む。
【００４９】
メモリコンテンツ対メモリアドレス指定の独立性は、明らかに、データプレーンをアドレスプレーンから区別される。これは、設計内のアドレス指定に影響することなく、メモリのコンテンツを変更できることを意味する。この革新の影響は劇的であり、同一ハードウェア／ソフトウェア実装を考えると、ＵＲＮＧの各使用は、異なる不確定性のプールを使用することによって一意にすることができる。
【００５０】
ランダムネスのアドレスプレーン
ランダム編集プロセスとも称される、ランダムネスのアドレスプレーン２２０は、データプールメモリアドレス（定義域値）を形成する手段である。全体として、アドレスプレーンの目的は、１セッション実行内で、出力ランダムシーケンスを反復することなく、データプレーン２１０にインデックス付けすること２２５である。これは、ランダムアドレスサイクル長は、目標量のランダムデータともに増大し得ることを必要とする。
【００５１】
ランダムネスの制御プレーン
ランダム編集プロセスとも称される、ランダムネスの制御プレーン２３５は、初期化および動的制御プロセス２３５（プログラムデータ）を含む。ソース／セッションデータ（不確定性のプール）は、値域データおよびプログラムデータの両方を含む。実際に、セッションデータ２１５内の任意の所与のデータ値は、値域データおよび／またはプログラムデータであり得る。
【００５２】
大部分の古典的なランダム値発生器は、公開関数を使用して、ランダム値を生成する。しかしながら、私的ランダムストリームを求める場合、公開関数の典型的な使用は、重大な不利益を有する。私的関数を構築するために、多数の公開関数を、何らかの様式で、（秘密裏に）組み合わせる必要がある。さらに、ユーザは、私的ランダムストリームを形成および維持するために、公開関数のシード値を隠すか、または秘密にしておかなければならない。
【００５３】
標準ＰＲＮＧは、単純なスカラーシード値を有する。正にその性質によって、ＵＲＮＧは、より複雑なシード仕様を必要とする。ＵＲＮＧを開始することは、２つまたは３つの値、どのＰＲＮＧを開始するか、そのＰＲＮＧのシード値、および任意選択で、そのＰＲＮＧのランレングスの選択を必要とする。この複数値セットは、シードベクトルと呼ばれる。
【００５４】
シードベクトルは、直接または間接的に付与することができる。各ベクトルタイプは、異なる特性を有する。直接シードベクトルは、値の単純なセットである。直接シードベクトルの利点は、膨大な数の一意のランダムストリームを同一ＵＲＮＧから形成できることである。しかしながら、ＵＲＮＧおよびそれが生成する一意のストリームに関する相当量の情報を暴露するため、このベクトルをあらゆる標準ＰＲＮＧシード値のように保護しなければならないことが不都合な点である。
【００５５】
間接的シードベクトルは、不確定性のプールにおいて見出される。単純な間接的スカラ値は、単なるプールへのオフセットである。この間接的値の利点は、いかなる保護をも必要とせず、したがって、「クリア」で送信できることである。間接的シードベクトルの不利益は、不確定性のプールが、それらを限定数保持できるに過ぎない。暗示的な間接的値は、プール内の周知の場所を指す。
【００５６】
一部のアプリケーションにおいて、動的シードベクトルが極めて有用である場合がある。通常のシードベクトルは、一部の時間ベースの関数および／またはトランザクションカウントを有する動的シードベクトルに更新される。更新されたベクトルは、一意のランダムストリームを時間の関数として形成する。この動的シードベクトルは、静的および動的セッションデータの両方を用いて十分に機能する。間接的な動的シードベクトルを使用することは、不確定性のプール内の制限された空間に対する有効な次善策である。明らかに、動的シードベクトルは、不確定性を強化する。
【００５７】
一部のアプリケーションは、複数のランダムストリームを必要とする。複数のシードベクトルの使用は、不確定性の同一プールの活用を可能にする。これらのベクトルが特定される方法は、アプリケーションに依存する。しかしながら、１つの方法は、１つのベクトルを特定し、それから複数の「１オフベクトル」を形成するための標準的な手段を定義することである。
【００５８】
不確定性関数内の一意のデータは、私的関数を形成して、ランダム値を生成する。これは、公的シード値を使用して、私的ランダムストリームを形成できることを意味する。幸いなことに、このプロセスは、さらに１ステップ先へと進めることができ、公的シード値は、１つまたは複数のデータプールのメモリアドレス（間接的公的シード値）である可能性がある。この方法の下で、一意のセッションデータ２１５を保持する者は、公的キーの真の値を知る唯一の者である。
【００５９】
不確定性ランダム値発生器内で、実装の一部として、異なる古典ランダム値発生器を有する可能性がある。一部の場合において、ほんの少数の古典的な関数のみが、全体セッション実行中に使用されるが、他の例では、異なるランレングスの異なる古典的な関数間に動的スイッチングがある。どの古典的な関数、シード値、およびランレングスをピッキングするかの制御プロセスは、一意のプログラムデータを介して動的に割り当てることができる。各初期化パラメータは、不確定性のプールに由来し、これは不確定データに対する動的依存が、ＵＲＮＧから決定性動作を除去するのを助けることを意味することに留意されたい。不確定性ランダム値発生器は、多次元問題に対する多次元の解答を提供する。
【００６０】
図３は、本発明の一実施形態に従って、抽象化アプローチを使用し、ランダムデータストリームを生成するプロセスの概要を示すフローチャートである。任意のランダムデータソースは、ソースデータの形成に使用され得る。これらのソースは、放射性崩壊、半導体における熱雑音、雑音環境において取られる音サンプル、およびさらにはラーヴァランプのデジタル画像等の物理現象を測定することによって決定される、予測できない乱数を含んでもよい。
【００６１】
他のより容易に得られる擬似ランダムデータの候補は、ＭＰＥＧ、ＪＰＥＧ、および他の圧縮ファイルから成る圧縮ファイルである。擬似ランダムデータ３１０は、圧縮データファイルとして、大部分のコンピュータメモリ階層に豊富に含まれ、ランダムデータプールを形成するためのソースとして使用することができる。データマイニングプロセス３２０は、擬似ランダムデータ３１０から値をランダムに引き出し、それらをソースデータ３４０ファイルにランダムに書き込む。すべての値は、ゼロ値３３０に対して試験され、ゼロ値を有するデータは破棄される３３５。ソースデータ３４０を使用してランダム値ストリームを形成する前に、最初にそれを検証（３５０）しなければならない。検証プロセス５００後、有効なソースデータ３６０を使用して、ランダムデータストリーム３９５を形成することができる。有効なソースデータ３６０データマイニング３７０が存在すると、有効なソースデータ３６０は、セッションデータ３８０を形成する。このセッションデータ３８０は、依然としてハッカーから完全に隠されず、分離プロセス３９０を行わなければならない。
【００６２】
分離プロセス３９０中、セッションデータ３８０と得られるランダム値ストリーム３９５との間の関係が破壊される。セッションデータ３８０には、動的セッションデータプールと静的セッションデータプールの２種類がある。動的セッションデータプールは、一度使用されると破棄される。動的セッションデータプールの適用は、通話、インターネット取引、クレジットカード取引、２者以上の間の任意の種類の通信を含む。静的セッションデータプールの使用の実施例には、これらに限定されないが、メディアプレーヤー装置におけるデータの暗号化、およびデジタル著作権管理（ＤＲＭ）アプリケーションが挙げられる。静的ランダムデータプールは保管され、データの暗号化および解読に使用される。
【００６３】
ソースデータの形成
すべてのデータを試験したとき、良好なランダムデータは、バイナリデータにおいて、ほぼ等しい数のゼロおよび１を有するはずである。バイナリレベルにおいて、圧倒的多数のゼロまたは１は、我々が求めている均衡データとは見なされない。このプロセスにおける我々の全体的な目的は、未知の形成「旋律」を有するセッションデータであることに留意されたい。全体的な目的に留意する限り、ランダムデータを見出する場所は広大である。そのような場所の１つは、前述されるような圧縮データである。これらのファイルは、バイナリデータにおいて、等確率のゼロおよび１を有する。当然のことながら、これは、圧縮ファイルにおいて見出されるファイル構造情報をカウントすることではない。
【００６４】
ファイル構造をステップオーバーしながら、データマイニング圧縮ファイルのプロセスは、ソースデータを効果的に形成する。データマイニングできる多くの方法があるにもかかわらず、１つの方法は、複数の圧縮ファイルを開き、ソースデータの形成を完了するまで、開いたファイル間でランダムにサンプリングすることである。最良の結果を得るために、１回に１バイトがサンプリングサイズであるべきである。ソースデータは、不確定性ランダム値発生器によって利用される、すべての可能性のあるデータを含むファイルとして定義される。
【００６５】
圧縮データのみをマイニングするために、マイニングソフトウェアは、ファイル形式を知らなければならない。言い換えれば、ファイル構造情報をデータとして、圧縮ファイル内の唯一のデータとしてピックアップしないよう注意しなければならない。ソースデータ３４０を形成するデータマイニングプロセスは、いかなるゼロ値もファイルに入れることを回避する。あらゆるゼロ値は、ハードウェアおよびソフトウェア機能の大部分において無効である。ゼロ値をソースデータ３４０に入れるべきではない。
【００６６】
図４は、データマイニングモジュール／プロセス４００の実施形態を描くブロック図であり、本発明の一実施形態に従って、値は圧縮データ４１０から引き出され、破棄される（４６４）ゼロ値をチェック（４６３）した後、ソースデータファイル４９０に書き込む（４８２）。ソースデータ４９０の形成は、アドレス読み取り（引き出し）する古典的な関数４４０を中心に展開する。入力は、制御シグナル、シード値４２８、ランレングスカウント値４３８を含む。初期シードインデックス４２０を使用して、メモリコンテンツ４１２を引き出し、これが現行のシード値４２８となる。初期ランレングスカウントインデックス４３０を使用して、現行のランレングスカウント値４３８となるメモリコンテンツ４１４を引き出す。次に、現行の古典的な関数４４０は、アドレスインデックスストリーム４４２を生じさせ始め、それを使用して、複数の圧縮データファイル４７０のうちの１つから値を引き出す（４６６）。複数の圧縮データファイルが使用される場合、ソースデータセレクタ４６０は、圧縮データ４７０のプールにおいて、適切な圧縮データファイル４１０ａ〜４１０ｎに接続する。この接続を決定する多くの方法があり、これらに限定されないが、圧縮データファイルを連続的にサイクルすること、または異なる圧縮データファイル４７０にランダムに接続することを含む。現行の読み取り（引き出し）アドレスインデックス４４２を使用して、選択した圧縮データファイル４１０から値を引き出す。圧縮データファイル４１０から引き出される各値４６７をチェックして、値がゼロ４６３に等しいか否かを決定し、いかなるゼロ値４６４も破棄する。ソースデータは、起こった順番にソースファイル４９０に書き込まれる。データファイルサイズ適合ユニット４８０は、いつソースファイル４９０が満たされるか、またはさらなるデータを必要とし、シグナル４４６をアドレス読み取り（引き出し）の古典的な関数４４０にフィードバックするかを決定する。
【００６７】
このプロセスに対するオプションは、古典的な関数を読み取り（引き出し）アドレス古典的な関数４４０に動的に変更することである。動的変更の別の方法は、データマイニングプロセス４００を通じて、シードインデックス４２８およびランレングスカウントインデックス４３８を変更することを含む。再初期化ユニット４５０は、データファイルサイズ適合ユニット４８０から命令を受信し得る。再初期化ユニット４５０は、シード値再初期化値４２６をシードユニット４２９に伝送し、ランレングスカウント再初期化値４３６をランレングスカウントユニット４３９に伝送する。
【００６８】
ソースデータ４９０の構成後、検証プロセス３５０を開始する。様々な良好な統計試験スイートを利用して、ランダムデータを検証することができる。米国標準技術局（ＮＩＳＴ）は、１つのそのようなパッケージを作成している（ＮＩＳＴ  Ｓｐｅｃｉａｌ  Ｐｕｂｌｉｃａｔｉｏｎ  ＳＰ８００−２２）。任意の検証プロセス３５０の失敗は、このソースデータ４９０を無効化するのに十分であり、この場合、別のものを形成する必要がある。検証試験は以下を含む。
・ＮＩＳＴ試験スイート
・Ｍａｕｒｅｒの普遍統計則
・Ｌｅｍｐｅｌ−Ｚｉｖ複雑性
・近似エントロピー
この検証プロセス３５０を完了すると、ソースデータ４９０が検証される。多数の機能不全データセットを不適格とする検証プロセス３５０を通して、実質的に無制限の数の有効なソースデータ４９０が適切に機能することも確認する。検証ソースデータ４９０のサイズは固定されない。唯一の要件は、良好なランダムストリームを形成するのに十分大きいことを含む。
【００６９】
セッションデータの形成
経時的に、不確定性ランダム値発生器における同一データを常に使用することは問題を生じる。同一データプールの反復使用によって、クラッカーは、そのデータセットが使用されているかを判定する場合がある。データプールにおいて陳腐化したデータのリフレッシュを達成する方法は多数あるが、新しいステップが提案されている。有効なソースデータ３６０をマイニングして（３７０）、不確定性ランダム値発生器の各使用のための新しいセッションデータを形成する。ネームセッションデータ３８０は、１回だけ（または多くても数回）使用された後、破棄されるため、データを正確に記述する。またセッションデータ３８０は、有効なソースデータ３６０と同様の方法で検証され得る（３５０）。このようにして、不確定性ランダム値発生器におけるデータは、フレッシュなままであり、したがって解読できない。
【００７０】
セッションデータ３８０は、不確定性ランダム値発生器の各実行に使用される、ソースデータ３６０の適切なサブセットである。有効なソースデータ３６０のサイズとセッションデータ３８０との間に暗黙の依存性は存在しない。例えば、ソースデータ３６０は、セッションデータ３８０要件よりも大きいと仮定する人もいるかもしれない。しかしながら、それは絶対ではない。必要とされるセッションデータ３８０よりも小さいソースデータ３６０を有する場合、マイニングプロセス３７０は、セッションデータ３８０要件が満たされるまで継続する。したがって、ソースデータ３６０は、セッションデータ３８０よりも小さいか、または大きい場合がある。ハードウェアまたはソフトウェアは、異なるサイズのセッションデータ３８０セットを支持し得る。セッションデータ３８０セットサイズは、目標のアプリケーションによって変化する可能性が高い。しかしながら、私的なランダムストリームが所望される場合、公開関数の典型的な使用は、深刻な不利益を有する。私的な関数を構築することは、多数の公的な関数をなんらかの方法で（秘密裏に）組み合わせる必要がある。さらに、ユーザは、私的なランダムストリームを形成および維持するために、公開関数のシード値を隠すか、または秘密にしなければならない。未知の形成「旋律」を有する良好なデータを有すると、進行する準備ができる。
【００７１】
各一意のハードウェアまたはソフトウェア不確定性ランダム値発生器設計は、異なる方法で、一意のセッションデータ３８０と相互作用する。所定の不確定性ランダム値発生器設計から「検証した」出力データを作成できない「検証した」セッションデータ３８０を有することができる。したがって、この問題を最小化するために、ランダム編集プロセス（以下のランダム編集プロセスを参照）およびセッションデータ３８０の両方を慎重に調整しなければならない。形成される可能性があるすべての可能性のあるソース／セッションデータセットのうち、一部のみが正常に機能する。
【００７２】
ランダム編集モジュール／プロセス
上述されるように、古典的な一次元ランダム値発生器は、多次元問題を解決することができない。代わりに、この問題は、不確定ランダムネスを確立するソリューションを必要とする。これは、無制限のソリューションセットの基礎を築く、単純概念によって達成され、いくつかの実施例が提供される。１つ以上のランダム編集モジュール／プロセスの適用は、任意の下層「旋律」を破壊することによって、不確定ランダムネスを得る。ランダム編集モジュール／プロセスを使用して、追加のランダムネスを、１つ以上のランダム入力ストリームのセットに統合する。複数のランダムストリームを合わせて混合することは、入力ストリームの「旋律」の一部／大部分／すべてを除去する傾向がある。ランダム編集プロセスは、１つ以上のランダムストリームを必要とし、そのうちの１つは「編集ストリーム」として定義される。編集ストリームデータは、ビットまたは他の入力ストリームからの値の順序を変更するためだけに使用され、そうでなければ出力ストリームにおいて目に見えることはない。実際に、編集プロセスは、すでにランダムな入力ストリームを新たなランダム出力ストリームに変異させる。
【００７３】
図５は、本発明の一実施形態に従って、ランダム出力ストリーム５４０を生じさせるためのランダム編集プロセスを描写する、システムのブロック図である。入力ストリームのうちの少なくとも１つは、編集ストリーム５１０でなければならない。ランダム編集モジュール／プロセス５００は、１つ以上の入力データストリーム５２０を変更し、この編集ストリーム５１０データは、出力ストリーム５４０から分離されたままである。編集という用語は、１つ以上の入力データストリーム上で取られる動作を説明する。編集プロセス５００は、１つ以上のすでにランダムな入力ストリーム５２０を新しいランダム出力ストリーム５４０に変異させる。
【００７４】
図６は、本発明の一実施形態に従って、ランダム出力ストリームを生成するための複数ランダム編集プロセスを実装する、システムのブロック図である。いくつかのランダム編集プロセス５００ａ〜５００ｎは、入力ストリーム５４０ａ〜５４０ｎを別のランダム編集プロセス５００ｍに提供する。入力ストリームのうちの１つは、編集ストリームでなければならない。複数レベルのランダム編集モジュール／プロセス５００は、ユーザが、必要に応じて単純または複雑なシステムを設計できるようにする。抽象化アプローチと組み合わされる共通インターフェースは、容易に拡張されるアーキテクチャをもたらす。
【００７５】
簡単に表現すれば、ランダム編集モジュール／プロセス５００は、付加的ランダムネスを追加する。編集プロセスは、これらの入力ストリームを、ランダム編集プロセスで動的に変更し、付加的ランダムネスをもたらす。全体的な結果は、任意の入力ストリームの「旋律」をもはや含まない、新しいランダム出力ストリームである。いかなるデータも編集ストリームに由来することは決してないため、編集ストリームを識別するための「法医学的な証拠」はない。言い換えれば、出力ストリームは、入力ストリームにおける旋律の「メモリ」を喪失した。
【００７６】
ランダム編集モジュール／プロセス５００の第１の使用は、データプールにランダムにアドレス指定して、データを引き出すことである。新しいランダムストリームが生じると、いかなる編集法医学的証拠をも残すことなく、オリジナルの「旋律」（セッションデータの複製）が喪失する（不可視になる）。オリジナルのランダムストリーム（セッションデータ）は、ランダムネスの一意のストリームに変異されている。ランダムネスのこれらのプレーンのそれぞれは、他に影響することなく、個別に展開することができる。
【００７７】
線形アドレスを使用して、データプールからデータを引き出すことは、最大データプールサイズのランダムストリームを生じさせる。これは、極めて小さいランダムデータ要件に対しては機能するが、データプールコンテンツを暴露する。線形アドレス指定は、データプールへのアクセスには決して使用されてはならない。本明細書で説明される機能、特徴、利益、構造等のいずれかは、プロセスとも称される１つ以上のモジュールにおいて具体化され得る。
【００７８】
マスク発生器
ここに、稼動中のランダム編集プロセスの別の実施例がある。図７は、結果ストリーム６５０を形成するため（６４０）のビットごとのプロセスを示す、本発明の一実施形態に従う、マスク発生器プロセス６００中のビット操作を説明する。データ０  ６１２、データ１  ６２２、およびマスクストリーム６０２と呼ばれる３つのランダムストリームは、マスク発生器に対する入力ストリームである。１つのストリームは編集に使用され、マスクストリーム６０２と称される。他の２つのストリーム、データ０  ６１２およびデータ１  ６２２は、マスクストリーム６０２によって編集され、結果ストリーム６５０を形成する。各マスクビット「０」６０４は、対応するデータ０ビット６３０をデータ０ストリーム６１２から選択する。各マスクビット「１」６０６は、対応するデータ１ビット６３２をデータ１  ６２２から選択する。各結果ビットが決定されると、それは結果ストリーム６５０に連続的に追加される。以下のＣプログラミング言語コードは、マスク発生器プロセスを示す。
【００７９】
【数１】
0005631312.tif 000002
【００８０】
マスクストリーム６０２は、２つの異なる入力値からデータを破壊的に「編集する」ために利用されるに過ぎず、そのため、マスク値が出力値において目に見えることはない。ビットの一部をデータ０ストリーム６１２から、残りのビットをデータ１ストリーム６２２からランダムに取ることによって、いかなるマスクビットも出力に追加することなく、編集プロセスは、入力または出力に関して未知である（目に見えない）。これらの３つのストリームから得た次の３つの値は、さらに別の未知値を生じる。
【００８１】
マスク発生器６００は、入力ストリームの「旋律」を分離する単純な方法として優れている。これらの３つのランダムストリームが相互作用すると、それらは、二次「旋律」を生じさせるが、一次旋律のすべての痕跡は喪失する。一次旋律を解体することは全体的な「旋律」問題を部分的に解決するに過ぎない。二次「旋律」も解体されなければならない。単一のランダム編集プロセスは、完全なソリューションにならないが、一次旋律を破壊する方法を教示する。ビットレベルでマスク発生器を見ることは、ランダム編集プロセスの結果を説明する。
【００８２】
より長いサイクル周期
ランダム編集プロセスには別の利点がある。すなわち、はるかに長いサイクル周期である。より長いサイクル長は、分化したサイクル長を入力ストリーム上で使用する場合、各サイクル長の産物に到達するまで、各入力ストリームは他と同期しないという単純な概念に基づく。入力ストリームに対して分化したサイクル長で開始する場合、次に、ランダム編集プロセスは、極めて長いサイクル周期を促進する。それぞれ異なるサイクル周期を有する３つのランダムな古典的な関数で開始し、これらの異なる周期の長さをＰ１、Ｐ２、およびＰ３と標識する。マスク発生器は、全体期間Ｐ１＊Ｐ２＊Ｐ３を有し、この積はＳ１と標識される。この単一ステージマスク発生器は、３つの入力ストリームで形成され、入力ストリーム期間と比較して極めて長いサイクル周期を有する。
【００８３】
しかしながら、一部のアプリケーションは、さらに長いサイクル周期を要する。これは、分化したサイクル長Ｓ１、Ｓ２、およびＳ３を有する、３つの単一ステージマスク発生器で構成することができる。これらのマスク発生器を、第２ステージマスク発生器を構成する別のマスク発生器に対する入力として使用する。これは、非常に大きい数の全体サイクル周期Ｓ１＊Ｓ２＊Ｓ３を有する。したがって、マスク発生器をスタッキングするパターン、または任意の他のランダム編集プロセスを定義して、任意の恣意的期間を形成する。
【００８４】
一般的な経験則として、分化したサイクル長の各追加ランダム編集プロセスは、乗算される別の項を追加して、発生器の全体サイクル周期を計算する。以下のＣプログラミング言語コードは、第２ステージマスク発生器の実施例である。
【００８５】
【数２】
0005631312.tif 000003
【００８６】
この特徴の背後にいくつかの実数がある。最も単純なソフトウェアランダム値発生器（線形合同）を最大周期近くで利用すると、ステージ１マスク発生器の全体期間は、約２９５となる。第２ステージマスク発生器の場合、サイクルは約２２８８となり、一方、第３ステージマスク発生器は、約２８５０となる。これらの値は、共通の３２ビット計算を仮定する。６４ビット計算の場合、ステージ１は約２１９１であり、ステージ２は約２５７５となり、一方、ステージ３は約２１７２５となる。これは、恣意的に長いサイクル周期を生じさせる極めて低コストの手段である。
【００８７】
マスク発生器のスタッキングは、ソフトウェアにおいていくらかかるか。単純な線形合同発生器は、１回の乗算、１回の加算、および１回の係数（除算）演算で構築される。総コストは、いくらかのメモリ負荷および保管を伴う３回の演算である。ステージ１マスク発生器は、そのコストの３倍に４つのビットワイズ論理演算を加えたものである。５０未満の命令の場合、良好な非常に長いサイクルのランダム値発生器をもたらす。ステージ２マスク発生器は、１５０未満の命令を要する。最後に、目標サイクルを選択するだけでよく、プロセッサに応じて、可能な計算（１６、３２、または６４ビット）を同様に選択する。等しく低コストのソリューションをハードウェアにおいて見出すことができる。古典的な公開された線形フィードバックシフトレジスタを利用することによって、対応して長いサイクル周期を有する、極めて良好なビット発生器を構築することができる。
【００８８】
マスク発生器は、古典的な関数を越える重要な改良である。それらは高速で使用コストが低い。それらは、恣意的サイクル周期を支持する、極めて単純な手段を有する。最も重要なことに、不確定データがマスク値として使用される場合、古典的なランダム関数よりもクラックすることがより困難である。
【００８９】
マスク発生器は、そのようなランダム編集プロセスの無制限クラスの第２の実施例である。追加の代表例は以下に一覧表示され、任意の好適な実施形態において使用されてもよい。通常のソフトウェアおよび／またはハードウェア設計ツールにおいて訓練された任意の人物に指示して、好適な実施形態から逸脱することなく、追加の編集プロセスを構築するために、これらの編集プロセスは使用される。
【００９０】
各追加ランダム編集プロセスは、全体サイクル長に対して同様の影響を有するが、一部の好適な実施形態は、適用要件に応じて、数回のみ使用し、一方他の実施形態は何回も使用する。
【００９１】
追加ランダム編集プロセス
また各ランダム編集プロセスは、ランダム入力ストリームを変異させる命令として見ることができる。これらの命令は、単純なものから極めて複雑なものに及び得る。これらの命令の一部は、追加値をほとんど提供しないが、教示目的で、より大きいセットが一覧表示される。命令はランダム編集プロセスであるが、マスク値は、任意選択の使用のための命令に対する追加データを表す。
【００９２】
各編集プロセスは、考えられる最も単純な手段で説明される。多くの場合、これはＣプログラミング言語であるが、他の場合、これはグラフィクスで描かれる。ハードウェアおよび／またはソフトウェアにおける当業者は、編集プロセスの意図される効果について教示されることに留意されたい。現在、これらの編集プロセスは、３つのランダムストリームに基づく。追加のランダムストリームは、ランダム編集プロセスの全体理論に影響することなく、追加することができる。以下のコードは、編集プロセスを示す。
【００９３】
【数３】
0005631312.tif 000004
【００９４】
マスク発生器は、２つのランダム値の間の破壊性編集から生じる。破壊されたデータが破棄される限り、マスク値は、目に見えないままである。したがって、生成される各マスク値に、１つの形態のマスク発生器のみを使用する必要がある。
【００９５】
【数４】
0005631312.tif 000005
【００９６】
逆演算ランダム編集プロセス
補数演算子のように、逆演算もデータ０、データ１、またはマスク等の任意の値に適用することができる、単項演算である。
【００９７】
【数５】
0005631312.tif 000006
【００９８】
ここで、逆演算（ＲＯＰ）を定義し、ＲＯＰによりマスク発生器のセットを再形成する。
【００９９】
【数６】
0005631312.tif 000007
【０１００】
この時点で、別の単項演算としてのＲＯＰは、優れたランダム編集プロセスを形成する。
回転ランダム編集プロセス
マスク値からのビットの一部を使用して、ビット数を選択し、右または左に回転させる。補数演算と同様に、「回転」は、逆演算も任意の値、データ０、データ１、またはマスクに適用することができる、単項演算である。ＲＯＴＬ＿ＭＡＳＫは、マスク値から、ビット数でｘだけ左に回転すると定義する。ＲＯＴＲ＿ＭＡＳＫは、マスク値から、ビット数で「ｘ」だけ右に回転すると定義する。
【０１０１】
【数７】
0005631312.tif 000008
【０１０２】
元に戻り、マスク発生器とともにこれを使用することさえもできる。
【０１０３】
【数８】
0005631312.tif 000009
【０１０４】
注記：回転させた後で補足するか、または補足した後で回転させることができる。
データ要素であるデータ０、データ１、またはマスクあたり、好きなだけ多くの単項演算を混合することができる。全体効果は、可能なランダム編集プロセスの真に無制限のセットである。
【０１０５】
数学演算ランダム編集プロセス
【０１０６】
【数９】
0005631312.tif 000010
【０１０７】
ランダムストリームビット密度の構築
複数のランダムストリームの支援を得て、１またはゼロのいずれかである、ほぼ恣意的なビット密度のランダムストリームを形成することが可能である。２つの単純な仮定から始める。
・各ランダムストリームは、他のランダムストリームのすべてに直交する。
・各ランダムストリームは、バイナリレベル（ゼロまたは１）で等しい可能性を有する。
【０１０８】
これら２つの仮定を用いて、表１に示されるように、異なるビット密度を有する、広範囲のランダムストリームを構築することができる。
【０１０９】
【表１】
0005631312.tif 000011
【０１１０】
２つのランダムストリーム間で「論理ビットワイズｏｒ」を行うと、１ビットの０．７５の確率を得る。２つのランダムストリーム間で「論理ビットワイズａｎｄ」を行うと、１ビットの０．２５の確率を得る。上記の表１は、より多くのランダムストリームを一緒に処理すると起こるものである。
【０１１１】
複数のストリームを、「論理ｏｒ」ならびに「論理ａｎｄ」と一緒に混合することによって、広範囲の選択ランダムビット密度を達成することができる。例えば、０．７５＊０．００３９１は、ランダムストリームにおける二進法の１の確率０．００２９３２５をもたらす。ランダムストリームの選択ビット密度を形成するこのプロセスは、アンバランスランダムストリームとして定義される。
【０１１２】
アンバランスランダムストリームをマスクストリームとして使用することは、ランダム編集プロセスにおいて、入力ランダムデータストリームをどれ程活発に編集するかの管理を可能にする。
【０１１３】
チャンク、チャンカー、およびチャンキング
ニブル、バイト、ワード等として知られるビットの固定されたサイズのグループには共通の名前がある。この議論のために、「チャンク」という用語は、ゼロ以上の隣接ビットとして定義される。明らかに、ゼロビットのサイズは、空のチャンクである。
【０１１４】
以前に、ランダムストリームを、古典的なおよび／または不確定性ランダム値発生器の任意の組み合わせによって実装される、上記抽象化クラスの任意の構成要素として定義した。ここで、データストリームを任意の入力データストリームと定義する（ランダムであるか否か）。データストリームを、チャンクとして知られる様々なサイズのビットグループにダイシングするという概念を使用して、固定の境界またはサイズなしに隣接ビットを可視化する。
【０１１５】
データストリームをチャンクに切断するプロセスは、チャンキングと呼ばれ、これを行うツールは、チャンカーとなる。チャンクは、２つのモード、１）ターゲットストリームをサンプリング（チャンク）するサンプリングモード、または２）チャンクストリームをチャンクする消費モードのうちの１つで、連続するデータストリームから取られる。
・消費モード−ターゲットストリームチャンカーは、ターゲットストリームにおけるすべてのデータを１回に１チャンクにダイシングする。
・サンプリングモード−チャンクストリームチャンカーは、結果ストリームが完了し、データの残りが破棄されるまで、チャンクによってチャンクストリームチャンクのサブセットを取る。
【０１１６】
上述されるように、チャンカーは、データストリームをサンプリングまたは消費することができる。「チャンク」という用語がチャンカーとして必要とされる理由は、それが生成すべきチャンクのサイズを示す。チャンクサイズは、チャンカーの使用の間で変化する場合が多い。
【０１１７】
消費チャンカーは、ターゲットストリーム全体を可変サイズのチャンクにダイシングする。チャンクが除去されるとき、ターゲットストリームビットはこのプロセスにおいて喪失されない。消費チャンカーに対する入力変数は、チャンクサイズである。
【０１１８】
図８は、チャンキングプロセス９００を描写するシステムフロー図であり、データストリーム９１２は、本発明の一実施形態に従って、可変サイズのチャンクにチャンクされる。チャンカー９０５は、入力データストリーム９１２からデータを受信し、チャンカー９０５は、入力データストリーム９１２からのデータを可変サイズのチャンク９３１、９３２、および９３３にチャンクする。制御シグナル、チャンクサイズ９０２、および操作モード９０４は、チャンカー９０５に命令を提供する。チャンカー出力９３０は、チャンク０  ９３１、チャンク１  ９３２、およびチャンク２  ９３３として表される一連のチャンクである。可変サイズのチャンクが、図９に表されているが、チャンクはすべて同一サイズであってもよい。
【０１１９】
ハードウェアおよびソフトウェアは、バイト、ワード、および場合によってビット等の固定サイズ単位に最適化される。サンプリングチャンカーは、データストリーム９１２をサンプリングし、可変サイズのチャンクを生成する一方で、あらゆる未使用の部分を破棄する。２つの入力値、チャンクサイズ９０２およびユニットサイズ９０４がある。チャンキングプロセス９００は、置換および拡張ランダム編集プロセスにおいて使用される。
【０１２０】
「置換」ランダム編集プロセス
置換ランダム編集プロセスは、結果ストリームのサイズを拡張することなく、ターゲットストリームを編集する、破壊的プロセスである。各チャンクが挿入されると、対応するターゲットストリームビットは置換される。重要な効果は、ターゲットストリームのサイズを変更しないことである。
【０１２１】
図９は、置換ランダム編集プロセス１０００ａ中のビット操作を説明し、チャンクストリーム１０２８のチャンクは、等量のターゲットストリーム１００８ビットを置換する。マスクプロセスと同様に、置換プロセスは、少なくとも３つの入力ランダムストリーム、１）マスクストリーム１０１８、２）ターゲットストリーム１００８、および３）チャンクストリーム１０２８で開始する。マスクストリーム１０１８を使用して、ターゲットストリーム１００８を編集する。各マスクビット「０」１００４は、対応する目標ビット値１０１０をターゲットストリーム１００８から選択する。マスクストリーム１０１８におけるマスクビット「１」１００６ビットは、置換プロセスに命令して、適切なチャンク１０３０をチャンクされたストリーム１０２８から取り、適切なターゲットストリームビットを挿入点の左右に置換する。
【０１２２】
図９の上部分は、識別される最初の２つのチャンク、チャンク１０３０ａおよびチャンク１０３０ｂを有するチャンクストリーム１０２８を示す。この実施形態において、チャンカー９０５は、サンプリングモードに設定される。第１のマスクストリーム１０１８マスクビット１  １００６ａは、置換プロセスに命令して、チャンク１０３０ａを取らせ、マスクビット１０１０ａによって示される、挿入点の右／左にターゲットストリーム１００８ビットを置換する。ターゲットストリーム１００８および結果ストリーム１０５０は、残りのターゲットストリームビット１００８に対する、チャンクストリーム１０２８チャンク１０３０ａおよび１０３０ｂの関係を示す。ターゲットストリーム１００８、チャンクストリーム１０２８、マスクストリーム１０１８、挿入右（または左）、およびチャンクサイズという５つの入力パラメータがある。
【０１２３】
明らかに、チャンクサイズまたはマスク値ゼロは、演算がＮＯＰとなるように、目標ビットを単に戻すことを意味する。ワードサイズは、ターゲットストリーム１００８、チャンクストリーム１０２８、マスクストリーム１０１８、チャンクサイズ、および結果ストリーム１０５０の上限であると仮定される。
【０１２４】
置換プロセス１０００ａは、挿入点の左または右のいずれかで起こり得る。マスクストリーム１０１８における各「１」ビットは、マスクサイズまたはチャンクサイズがゼロであり、次に置換がない場合に、可能な置換点を表す。チャンクサイズが増大するにつれて、結果値を満たす前に、先頭の置換点のみが使用される。チャンクがチャンクストリーム１０２８チャンクから構築されると、結果ストリーム１０５０は、ターゲットストリーム１００８から構築される。チャンクが結果ストリーム１０５０に追加されると、ターゲットストリーム１００８は、同一量のデータを喪失する。一旦、結果ストリーム１０５０が完成すると、置換プロセスは終了する。
注記：チャンクの一部分のみを使用して、結果構築を完了させてもよく、残りは破棄される。
【０１２５】
「拡張」ランダム編集プロセス
図１０は、非破壊性である、拡張ランダム編集プロセス１０００ｂ中のビット操作を示し、本発明の一実施形態に従って、各チャンクは、ターゲットストリーム１００８ビットの間に「挿入」される。挿入点は、マスク値によって定義される。目標ランダムストリーム１００８に追加される各チャンクは、対応する量だけターゲットストリーム１００８のサイズを増大させる。
【０１２６】
置換ランダム編集プロセス１０００ａは、結果のサイズを拡張しないが、拡張ランダム編集プロセス１０００ｂは拡張する。多くの方法において、拡張ランダム編集プロセス１０００ｂは、マスクランダム編集プロセス６００に類似している。例えば、主な目的は、いかなるデータビットもターゲットストリーム１００８から喪失しないことである。チャンクストリーム１０２８からのチャンクが目標ビットの間に挿入されると、結果ストリーム１０５０は、対応する量だけサイズを増大させる。ターゲットストリーム１００８、チャンクストリーム１０２８、マスクストリーム１０１８、拡張右（または左）、およびチャンクサイズという５つの入力パラメータがある。明らかに、チャンクサイズまたはマスク値ゼロは、演算がＮＯＰとなるように、対応するターゲットストリームビットを単に戻すことを意味する。
【０１２７】
拡張ランダム編集プロセス１０００ｂは、入力パラメータのサイズまたは結果のサイズのいずれかに対する実世界の制限に関係なく、ドキュメント化される。明らかに、これは、実世界において同様ではない。各実装は、それらに設計に対する適度な上限を設定しなければならない。それを行う際に、これらの上限は、副作用をもたらし得る。ワードサイズは、目標データストリーム１００８、チャンクデータストリーム１０２８、マスク１０１８、およびチャンクサイズの上限であると仮定されるが、結果１０５０は、結果サイズによって限定される。
【０１２８】
拡張は、挿入点の左または右のいずれかで行うことができる。マスクストリーム１０１８における各「１」ビットは、挿入点を表す。結果値１０５０は、チャンクがチャンクデータストリーム１０２８から取られると、目標データストリーム１００８から構築される。以下の、マスクはそれ以上の挿入点を有しない、またはターゲットストリーム１００８はそれ以上のビットを有しないという条件のうちの１つが満たされると、拡張は完了する。多くの追加の３オペランド編集関数は、このアーキテクチャ内で適合する。これは、容易に拡張できる無制限アーキテクチャである。
【０１２９】
「除去」ランダム編集プロセス
同一の入力マスクランダムストリーム１０１８を仮定すると、拡張／除去ランダム編集プロセスは、左右対称の反対同士である。拡張ランダム編集プロセス１０００ｂを介して、目標入力ストリーム１００８に追加される各チャンクは、除去ランダム編集プロセスを介して除去され、同一のマスク編集ストリームが両方の演算に使用されると仮定する。このように、目標入力ストリーム１００８は、偽性データチャンクまたは「ノイズ」の中に隠され、次に、「ノイズ」を除去した後に復帰する。
【０１３０】
ランダム編集プロセスのまとめ
すべてのランダム編集プロセスがすべての設計に意味を成すとは限らない。明らかに、ソフトウェアは、数学およびシフト演算を効率的にする、ＡＬＵ（演算論理ユニット）およびＢａｒｒｅｌシフター等の有用な特徴を有する。しかしながら、同一の特徴を有する負担ハードウェア設計は、費用効率が高くならない。そのため、設計者は、それらの製品に費用効率が高いランダム編集プロセスのみを使用することが推奨される。「過剰構築」ソフトウェア設計のコストは、過剰構築ハードウェア設計と比較して、極めて低い。一旦開発されると、ソフトウェアのコストは、ランタイムおよびメモリスペースの両方において非常に低いままである。
【０１３１】
本文書内で、多くのランダム編集プロセスは、教示ツールとして論じられる。ここで、どのように且つなぜランダム編集プロセスが機能するかが論じられ、通常の技術において訓練を受けた者であればだれでも、多くの追加ランダム編集プロセスを構築することができ、依然として、好適な実施形態の範囲内である。
【０１３２】
カオスエンジン
１）各ランダム編集プロセスは、ランダム入力ストリームを変異させる命令として見ることができる。命令間の動的スイッチングは、ＣＰＵに類似したものである、カオスエンジンを定義する。必要とされるランダムデータ容量が劇的に増加すると、分離プロセスは、プール内のデータを十分に分離するように、より活発にならなければならない。これは、単純なマスク発生器をカオスエンジンと置換することを意味する。データを隠すための１つの静的ランダム編集プロセスの代わりに、カオスエンジンは、複数のランダム編集プロセスを動的に切り替え、データを分離する。明らかに、カオスエンジンを使用して、メモリアドレスまたはデータのいずれかを分離することができる。カオスエンジン内の各ランダム編集プロセスは、その入力値に基づいて、異なる出力を与える。
２）図１１は、カオスエンジン７００を表すシステム図であり、命令７１０は解読され（７１５）、適切なランダム編集プロセス７５０は、本発明の一実施形態に従って、ＲＥＰ表のサブセットであるカオスエンジンＲＥＰ命令セット７２０から選択される。カオスエンジン７００内の各ランダム編集プロセス７５０は、その入力値に基づいて、異なる結果７６０を与える。
【０１３３】
カオスエンジン７００は、少なくとも４つのランダムストリームを入力として有する。これらのストリームのうちの少なくとも１つは、命令ストリーム７１０として指定されなければならない。命令ストリーム７１０を解読して（７１５）、どの命令７０６を実行するかを選択する。大部分のランダム編集プロセス７５０と同様に、入力として、データ０  ７３０、データ１  ７３２、およびマスク７３４がある。明らかに、命令ストリーム７１０は、間接ランダムストリームまたはいくつかの他のデータ駆動ソースのように、データプールからの追加のランダムストリームである。カオスエンジン７００は、究極のＲＩＳＣ（縮小命令セットコンピュータ）プロセッサに類似するものとなった。ほんの少数の単純命令であるが、結果は完全にデータプールを覆う。
【０１３４】
すべてのランダム編集プロセスのように、命令も編集ストリームも出力ストリームにおいて目に見えない。単純な１６命令（４ビット命令）カオスエンジンの実施例は以下のとおりである。
【０１３５】
【数１０】
0005631312.tif 000012
【０１３６】
驚くべきことに、マスク発生器よりも多くのゲートを表すが、全体として、達成するゲートはほとんど有しない。この単純カオスエンジンは、はるかに大きいランダムデータ要件を対象としたプール内のデータを分離し、その容量の必要データに対してだけ使用すべきである。
【０１３７】
ここで定義されるこれらの１６を超えて、好適な実施形態内に留まりながら、異なるおよび／または追加の命令（ランダム編集プロセス）を使用することができる。分化したサイクル長の入力ストリームで開始する場合、次にカオスエンジンサイクル長は、各入力サイクル長とデータプールサイズとを掛けた積である。命令として、不確定性のプールからビットを解読することを仮定すると、カオスエンジンあたりの命令数は２の累乗である。
【０１３８】
短サイクルカオスエンジン
上述のとおり、カオスエンジンは、不確定データを命令として使用し、処理関数の間で動的に選択する。短サイクルカオスエンジンは、制御プレーンも分離プロセスの一部として起動する。各処理関数は、依然として不確定データを入力パラメータとして必要とする。上記カオスエンジンは、１つの結果をもたらすために１つの命令を仮定するが、短サイクルカオスエンジンは、複数の結果をもたらす１つの命令に基づく。名前が暗示するとおり、一続きの結果は、比較的短い数であると仮定され、これらの複数の結果は、内部使用のみに限定される（すなわち、それらはパラドックスアンセーフである）。複数の結果を内部使用のみに限定することは、これらのシーケンスの可能性のあるモデリングを回避する必要があり、そうでなければ、攻撃者は、不確定性のプールに関する洞察を得る可能性がある。
【０１３９】
以下は、短サイクルカオスエンジンの実施例である。一群の線形フィードバックシフトレジスタ（ＬＦＳＲ）は、どのＬＦＳＲを開始するかを選択するために、共通のシード値、短サイクルカウント、および選択値を使用するように定義される。これらの入力パラメータのそれぞれは、不確定性のプールに由来する。所定のシーケンスの最後で、次のＬＦＳＲ値は、不確定性プールへのメモリアドレスとして使用され、次のシード値、ランカウント、および選択値を読み取る。このようにして、短サイクルカオスエンジンは、「短い」数の比較的不確定な値の不確定シード値を拡張し、次に、新しいシード値、関数セレクタ、およびシーケンスカウントを選択して、別の未知の短いシーケンスを形成する。このプロセスが継続するにつれて、「比較的不確定なストリーム」が生じる。このストリームは、アドレスおよび不確定データソースとして使用することができる。
【０１４０】
時間変位
マスク発生器の形態のランダム編集プロセスは、一次「旋律」を破壊する単純な手段である。一次「旋律」を排除する間、二次「旋律」を構築した。評価のために、「旋律」は、ランダム値発生器からの再現可能な出力であり、値およびそれらが形成される順序の両方を含む。出力メモリバッファを有する２つ以上のＰＲＮＧアドレス発生器の追加は、二次「旋律」を破壊するための別のツールを提供する。このツールは、時間変位と呼ばれる。
【０１４１】
図１２は、本発明の一実施形態に従って、２つの古典的な関数を使用し、ランダム書き込みおよび読み取り（引き出し）アドレスを生成する、時間変位プロセス８００を表すシステムフロー図である。第１の古典的な関数８０３は、ランダム書き込みアドレスストリーム８０４を生成する。ランダム値発生器８０２によって生成されるデータ値８０６は、対応する書き込みアドレスにおいて、出力メモリデータプール８１０に書き込まれる。第２の古典的な関数８１２は、出力メモリデータプール８１０の対応するアドレスから出力値８１４を引き出すために使用される、異なるランダムアドレスストリーム８１３を生成する。これは、出力値８１４の新しいランダムデータストリームを形成し、この出力値は、ランダム値発生器８０２の出力８０６から分離される。
【０１４２】
出力ストリーム８０６において生成される各値は、１つ以上の出力データプール８１０にランダムに保存される。異なるランダムアドレス８１３を使用して、出力メモリプール８１０から値を引き出す。ランダムアドレス指定の知的使用によって、これらの出力値の可視性から出力値の形成順序を分離することによって、残りの「旋律」を粉砕することができる。出力プールの一部の有用な副作用は以下のとおりである。
・ランダム値発生器からの出力は、それが出力ストリームにおいて目に見える前に上書きされ得る。
・同一の出力プールアドレスは、それが新しい値で上書きされる前に、複数回引き出され得る。
・ランダム値発生器からのすべての出力は、それが形成された時に関して、ランダムに時間変位されるか、または破壊される。
【０１４３】
時間変位によって、１つまたは複数の出力データプールを使用することによって、「旋律」の最後を取り除いたが、データプールは覆われたままである。１つ以上の出力プールの初期化は、データプールがロードされると同時に行われる。
【０１４４】
短サイクルプロセス
図１３は、本発明の一実施形態に従って、ランダムアドレスシステム１１２０を生成する、短サイクルプロセス１１００ａを表すシステムフロー図である。複数の入力制御値を有する古典的なブロック１１０５、関数選択１１２６、シード値１１２２、およびカウントダウン値１１２４は、短サイクルプロセス１１００ａの基礎を形成する。各短サイクルプロセス１１００ａは、別の関数再選択１１２６が行われる前に、いくつのアドレス（または値）が生成されるかのために、小さいカウントダウンカウンタ１１１０を有する。再選択１１２６が行われるたびに、新しい不確定性シード値１１２２も使用される。このようにして、攻撃者は、データプールから値を引き出すために使用されるランダムアドレス１１２０をモデル化することはできない。また、再選択プロセスは、新しいカウントダウン値１１２４を再ロードする。初期開始値１１２８は、制御ユニット１１３０に対する入力であり、関数選択値１１２６、シード値１１２２、およびカウントダウン値１１２４を計算する。カウントダウンカウンタが特定のカウントダウン値１１２４の最後に到達すると、カウントダウンカウンタは、ランダムアドレスストリーム１１２０の最後の出力値が生成された制御ユニット１１３０に通信する。各カウントダウン実行の最後の出力値１１３２は、制御ユニットによって使用され、制御値、シード値１１２２、関数選択１１２６、およびカウントダウン値１１２４の次のセットを計算する。
【０１４５】
なぜ短サイクルプロセス１１００ａが、アドレスおよびデータを効果的に分離するかは明らかであり、変化率は、依然として高速過ぎるため、どのランダム関数１１０５がアドレス１１２０を生成しているかをモデル化することはできない。さらに、関数カウントダウン値１１３２、ランレングスカウント１１２４を定義するための不確定性データの使用は、アドレス指定をモデル化することはできないことを意味する。この少量の不確定性データは、通常の擬似ランダム関数におけるシグナルの大部分を除去した。不確定性データの使用は、これらの静的関数内で定義された確定性の大部分を置換した。
【０１４６】
データパラドックスの解決
プール内のデータが依然として隠されている限り、データプールの外で構築される不確定性関数はソリューションである。明らかに、データプールへの線形アドレス指定は、可能な限り回避すべきである。プールのコンテンツを暴露することなく、どのようにしてデータプールからデータを引き出すかという逆説的状況に直面している。これは、データパラドックスとして定義される。良好なランダムデータを有する無限のデータプールを有する場合、パラドックスは存在しない。プール内の「無限」データの最後に達することはないため、プールの完全なコンテンツを暴露することはない。１つまたは複数のプールにおける不確定性ランダムデータは、問題の一部であると同時に、解法の一部であるという、データパラドックス問題／解法の皮肉な曲解に気付くであろう。
【０１４７】
実世界において、制限されたデータプールサイズおよび厳しいランダムデータ要件に対処することを余儀なくされる。目標アプリケーションに必要なランダムデータが、データプールサイズと比較して適度である場合、パラドックスは有意ではない。目標アプリケーションによって必要とされるランダムデータが増大するにつれて、データパラドックスのリスクも増大する。明らかに、１つ以上のデータプールの実際のサイズが増大するとすぐに、無効になる。
【０１４８】
アプリケーション要件を変更することはできないため、データパラドックスの効果に応答して、１つ以上の仮想データプールサイズを何らかのかたちで「合成的に増大させる」必要がある。ランダムデータ要件が増大すると、アプリケーションは、それぞれの現行ソリューションから最終的には成長して、より複雑なアーキテクチャへのアップグレードを必要とする。各アップグレードは、不確定性関数の強度を保存する、より高コストのソリューションを必要とする。
【０１４９】
好適な実施形態は、システム要件に応じて、単純なアーキテクチャからより複雑なソリューションに及ぶ。各アップグレードは、不確定性関数の強度を保存するよりも高コストのソリューションを要する。経済的な理由から、正しい実施形態に対してアプリケーションをサイズ調整するよう注意する必要がある。
【０１５０】
ソフトウェアソリューションのアップグレードは、ハードウェアソリューションと比較して、低コストのソリューションを達成する。したがって、大部分のソフトウェアアプリケーションは、より複雑なソリューションで開始し、全体的なシステム性能が問題となる場合に限り、何か他のものにダウングレードするだけであると仮定される。必要とされるランダムデータの量が増大するにつれて、ソフトウェアシステムデザイナーが、ランダム値を生成するための専用ハードウェアを必要とする可能性がより高い。
【０１５１】
生データは、データプールから簡単に引き出されることはなく、出力ストリームにおいて目に見えるようにする。その生データは、プールのコンテンツを極めて迅速に暴露する。既に、データプールへの線形アドレス指定に関する問題について承知されている。データプールへの擬似ランダムアドレス指定でさえも、依然として単純化し過ぎており、データプールへの線形アドレス指定とほぼ同じくらい不良である。
【０１５２】
分離プロセス
セーフまたはアンセーフという用語は、データパラドックスに影響する値の属性を説明するために使用される。具体的に、アンセーフ値は、分離プロセスを経ていないが、セーフ値は経ている。分離プロセスの関数は、値の決定性ストリームを値の非決定性ストリームに変換することである。
【０１５３】
データパラドックスを回避する目的は、以下に説明される構成要素の大部分に影響する。分離プロセスは、生データプールメモリアドレスおよびデータをパラドックスセーフ値に変換する。これらの値は、不確定性データをこれらのオリジナル値と混合することによって変換される。セーフ値のみを、データパラドックスの悪影響なしに使用することができる。
【０１５４】
分離プロセスの効果は、仮想データプールサイズを合成的に増大させることである。実質的なデータプールを巨大な仮想プールに劇的に増大させることができる一方で、その無制限なプールサイズには到達していない。明らかに、この仮想増大は、適度なサイズのデータプールに対して機能するに過ぎない。具体的には、データプールが小さ過ぎる状態から開始する場合、合成増大を介して修繕することはできない。
【０１５５】
仮想データプールを形成する場合、そのサイズは、メモリアドレスおよびデータをどれ程活発に分離するかを示す。分離プロセスは、非常に単純に開始するが、必要に応じて、複雑性を増大させる。分離プロセスは、実施形態の範囲全体で、さらに活発になる。
【０１５６】
各実施形態間の移行は、明らかに定義された点ではない。通常、不確定性ランダム値発生器の強度は、生じた１つの追加ランダム値において突然不能にならないが、その中に隠されたデータが目に見えるようになるまで、ゆっくりと脆弱化する。明らかに、それを脆弱化するまで、決して実施形態を実施してはならない。これを回避するため、設計者は、安全のマージンを組み込む必要がある。
【０１５７】
各実施形態に対して、多くの要素が、クラッキングに対する抵抗に影響する。これらの要素のうち、最も明らかなのはデータプールサイズである。データプールサイズに加えて、安全のマージンを駆動する他の主要な要素は、各古典的なブロックにおいて見出されるランダム関数の数、設計内のランダム編集プロセスの総数、プールデータの「鮮度」、および新しいゲノム発生器の総サイクル長を含む。設計者は、ランダム値発生器をシミュレートして、どの要素が安全のマージンに最善の値を提供するかを判断する必要がある。アドレスおよびデータを分離するツールは、以下を含む。
１）不確定性データを伴う排他的ＯＲ（ＸＯＲ）−アドレスおよびデータ
２）不確定性データを伴うマスク発生器−アドレスおよびデータ
３）不確定性データを伴うカオスエンジン−アドレスおよびデータ
４）時間変位−データのみ
アンセーフ擬似ランダムメモリアドレスは、単純ＸＯＲプロセスからカオスエンジン等の複雑なソリューションを含むソリューションの範囲を介して安全にする。プールから引き出されるデータは、生データ（アンセーフ擬似ランダムメモリアドレスを介してアドレス指定される）、アンセーフデータ（セーフメモリアドレスを介してアドレス指定される）、またはセーフデータ（上記プロセスのうちの１つを介して分離される）である。データは、時間変位を通じて、マスク発生器を介してセーフになる。要するに、データプールアドレスは、２つの有効な状態を有する。
１）「パラドックスアンセーフ」−古典的な関数を介して形成されるアドレス
２）「パラドックスセーフ」−分離プロセスを完了したアドレス
一方、データプールデータ要素は、３つの有効な状態を有する。
１）「生」−アンセーフアドレスを介してアクセスされるデータプールデータ
２）「パラドックスアンセーフ」−セーフアドレスを介してアクセスされるデータプールデータ
３）「パラドックスセーフ」−分離プロセスを完了したデータプールデータ
一般的な設計問題
残念なことに、古典的なＰＲＮＧは、制限された機能性を提供する。現行の手段のみが使用可能であるため、これらの制限は、不適切なソリューションを伴う。例えば、クラッキングに対する抵抗は、極めて複雑なＰＲＮＧソリューションを用いてアドレス指定され、高騰するコストをもたらす。多くの設計は秘密裏に構築され、それらの実装を隠す無駄な試みが為される。この秘密の開発ブロックを再検討および再利用するが、それらは決定性であるというＰＲＮＧの重大な欠陥が残る。したがって、任意の現行ＰＲＮＧソリューションは、制限された寿命を有する。
【０１５８】
実施例を理解すると、多くの異なる設計をこれらの標準構成要素から形成することができる。ソリューションのこの構成要素レベルの形成は、コストを制限しながら、任意のソリューションをアプリケーション要件に適切に拡大縮小するのを可能にする。
【０１５９】
非限定例として、２つの不確定性データ値をプールからランダムに選択し、それらを足し合わせて、新しい不確定性値を生じてもよい。この新しい値は、複数の異なる親セットが同一の値を生じることができるとき、その親の値から分離される。したがって、値の単一プールは、第１のプールよりも大きい不確定性の第２世代プールを生成する。「不確定性」の属性は、値の次の世代に進展した。そのため、第１世代不確定性データを明かすべきではないが、それから処理された後次世代を明らかにすることができる。
【０１６０】
不確定性データを用いて行い、追加の不確定性データを生成することができ、不確定性データの次の実施をもたらす「加算」の他に、有効な演算が無制限な数だけある。不確定性データの第１世代は、固定サイズを有するが、後次世代は、恣意的サイズであり得る。
【０１６１】
それでは、不確定性の第１世代プールはどれ程大きいか。これは、依然として当然するべき質問であるが、答えは単純ではない。個別のアプリケーションは、異なる量のランダムデータを要する。目標量のランダムデータが、適度なベースラインサイズを越えて、データプールサイズに与える影響は限られているが、データプールにアクセスするために使用されるアドレス生成に対して重要な影響を有する。意図的に、不確定性プールの最小サイズは定義されていない。この最小サイズ値は重要ではない。メモリの価格は、急速に低下し続けているが、依然として管理されるコストを表す。しかしながら、設計者は、それらの設計のシミュレーションを用いて、データプールサイズを計算することができる。ランダムデータの目標量が増大するにつれて、データプールサイズに対する直接的な影響は、最小のままである。驚くべきことに、チップサイズ対コストに基づいて、データプールサイズに適度な上限がある。そのため、この適度な限界を超えて、データプールサイズが増大することは、費用の増加を正当化しない。
【０１６２】
不確定性の本質的原理は、依然として、最小データプールを使用しない主な理由である。不確定性を最大化することは、任意の所与のデータ値が、データプール内で複数回出現し得ることを暗示する。追加の不確定性を統合するために、データプールにおいて見出される各複製値は、どのメモリアドレスが所与の値を生成したかに関する不確定性を劇的に増大させる。反転プロセスの困難性は、この増大した不確定性に起因して、急激に上昇する。当然のことながら、これは、セッションデータが、依然として検証プロセスに合格し、隠れたままであると仮定する。
【０１６３】
したがって、設計内の不確定性を除去することによって、それを不確定性と置換することができる。アドレス生成のために最低限ほんの一握りの古典的なＰＲＮＧを使用する代わりに、最小数を超える、より大きな古典的な関数群を必要とする。
【０１６４】
ＰＲＮＧは、ＵＲＮＧ内のアドレス生成に使用される。アプリケーションが、適量のランダムデータを要する場合、ＰＲＮＧの割り当てを１回行うことができる。ランダムデータ要件が高まるにつれて、これらのＰＲＮＧを成功裏にモデル化するリスクも高まる。このモデル化に対する良好な防御は、ＰＲＮＧの動的（不確定）選択であろう。ＰＲＮＧのワンタイム使用または動的選択は、複雑性トレードオフ決定となる。ハードウェア設計において、一回のＰＲＮＧ選択を行うためにソフトウェア初期化を要することは、影響を有する。この例において、アドレス関数は、目標アプリケーションランダムデータの要件よりも長いサイクル周期を有し、同一の出力シーケンスの再利用を避けなければならない。追加の複雑性は、適切なアドレス指定サイクル長を保証するために必要とされ得る。
【０１６５】
ＰＲＮＧ寿命の動的（不確定性）選択は、アドレス指定関数、ランレングス、およびシード値の選択／再選択に複雑性を追加する。不確定ランレングスは比較的小さいと仮定すると、最小サイクル長アドレス指定関数を使用することができる。このようにして、アドレス指定関数の動的置換は、ランダムシーケンスが反復されないことを保証する。このランレングス寿命が短い程、発生器が反転することは困難になる。明らかに、これは、大規模または未知のランダムデータ要件に対する好適な設計トレードオフである。
【０１６６】
ＵＲＮＧの不確定性を保護することは、データプールから読み取るために使用されるアドレスおよびデータ自体の両方の分離に依存する。本明細書では、最大の不確定性を保証することに注意した。不確定性のプールに対する直接的な攻撃を除いて、不確定性のプールのコンテンツを拾い集めるための次の最善の方法は、１つ以上のデータプールから読み取るために使用される、ランダムアドレスの成功裏なモデル化である。アドレスは、この形式の攻撃を防ぐために分離する必要もある。
【０１６７】
明らかに、ハードウェア設計は、ユニットあたりのコストに敏感である。しかし、ハードウェア設計は、コストがより高いが、より良い性能の利点も有する。一方、ソフトウェア実装は、コストも性能も低いが、柔軟性が増す。ランダムデータおよび性能要件に基づいて、各設計センターは、他を超える利点を有する。本明細書において、実施例の範囲のみが、可能な実装の開始概要を表す。最低コストのソリューションが、必ずしも各アプリケーションにとって最善のソリューションであるとは限らない。
【０１６８】
時間変位を除いて、すべての分離プロセスは、不確定データを使用して、入力値を分離する。この混合プロセスは、入力値の「旋律」の一部／大部分／すべてを除去する。どの程度「旋律」が除去されるかが、コスト／パフォーマンストレードオフになる。これは、なぜ最低コストのソリューションが最善とならない場合があるかを説明する。どのトレードオフを行うかを慎重に選択することは、なぜ１つのサイズがすべてのアプリケーション要件に適合しないかということである。
【０１６９】
不確定性のプールへのメモリ帯幅は、多くのハードウェアトレードオフを駆動する。発生器あたりの不確定性のプールへのアクセス数が高くなる程、ランダム数発生器の性能を制限する効果をもたらす。幸運なことに、このメモリ帯幅問題に対して、多くのよく知られた次善策があるが（不確定性の複数プール等）、あいにく、これらの次善策のすべては、コストを上昇させる。
【０１７０】
ソフトウェア性能は、メモリ帯幅によって既に制限されているため、入力値のすべての「旋律」を完全に除去することが、推奨設計目標となる。
【０１７１】
各ＵＲＮＧ設計は、アドレスおよびデータの両方を不確定性のプールから分離しなければならない。任意のＵＲＮＧに対するエンジニアリングタスクを定義するとき、努力の有効性は、そのコストに直接比例する。各分離／ランダム編集プロセスの有用性は、効果および複雑性（すなわち、コスト）によって異なる。編集データは、不確定性のプールに由来するため、ランダム編集プロセスは、分離プロセスにアップグレードされる。その広範な効果は、可能性のあるサイクル長および各生成値の相対決定論に対処する。「旋律」のすべてが除去される（値を非決定性にする）場合、唯一の追加の有用な効果は、自然なサイクル長である。設計者は、エンジニアリングトレードオフに従って、これらの広範な効果から選択しなければならない。
【０１７２】
レベル１  分離：（入力ストリームの「旋律」の一部のみを除去する）不確定データ値を有するビットワイズ排他的ＯＲ（ＸＯＲ）。効果は、決定性の低い生成値である。
【０１７３】
レベル２  分離：（入力ストリームの「旋律」のすべてを除去する）不確定マスクを有するマスク発生器。効果は、非決定性生成値（パラドックスセーフ値）である。
【０１７４】
レベル３  分離：（入力ストリームの「旋律」のすべてを除去する）不確定命令およびマスクストリームを有するカオスエンジン。効果は、非決定性であり、極めて長いサイクル長を有する生成値である。
【０１７５】
各ＵＲＮＧの基準概要は、３つのステップを有する。不確定性関数は、非決定性ストリームを生成するために、分離したアドレス（定義域値）およびデータ（値域値）を必要とする。
ａ．ＰＲＮＧを使用してアドレスを生成し、不確定性のプールから読み取る。したがって、生で、パラドックスアンセーフな不確定ストリームを生成する。アンセーフ値として、それらは内部ＵＲＮＧ使用のみに限定される。
ｂ．ＰＲＮＧ生成アドレスは分離され（レベル１＝＞３）、データプールアドレスを生成する。これらのパラドックスセーフアドレス（定義域値）は、不確定性のプールから読み取る。したがって、パラドックスアンセーフデータ（値域値）を不確定性のプールから生成する。
ｃ．パラドックスアンセーフデータ（値域値）は分離され（レベル１＝＞３）、非決定性出力ストリームを生成する。
ＵＲＮＧ設計を使用するすべてのアプリケーションが、支持された発生器の総サイクル長を完全に循環することはないはずである。
【０１７６】
ハードウェア構成要素
ランダム値生成のコストを劇的に低減することが目標の１つである。そのために、公的に検討される標準ハードウェア構成要素（古典的な関数）を各設計に再利用する。これらの要素それぞれは、以下のセクションで説明される単純な概念に基づく。一旦構築されると、これらの要素は、必要に応じて、多くの設計全体で再生成することができる。
【０１７７】
これらの構成要素の多くは、ハードウェアの抽象化として定義される。ハードウェアは、通常このようにして定義されない場合があるが、この場合、抽象化は、その実装において可能な限り広範な余裕を付与するために行われる。これらの抽象化は、固定した実装とは対照的に、この技術の陰の力である。チップ設計の分野における熟練者であれば、本発明の実施形態の範囲内に留まりながら、これらの抽象化を容易に実装することができる。
【０１７８】
構成要素の使用は、必要に応じて、関数を広範なソリューションに混合することを可能にする。これらの実施形態は、様々なアプリケーションの必要に応じて、追加または変更可能な一般的実施例である。設計を過剰に構築しない限り、ランダム値生成のコストを低減するという目標は達成される。
【０１７９】
不確定性ランダム値発生器抽象化は、データ値を１つ以上のデータプールから引き出すこととして説明されている。意図的に曖昧な用語「引き出す」とは、データプールへのアドレス指定が、この抽象化に対してまだ定義されていないことを示す。この曖昧な用語「引き出す」は、ここで、より有用な何かに拡張される。
【０１８０】
データをプールから引き出すために、ランダムアドレスの形成を制御する要素は、アプリケーションに必要とされる総ランダムサイクル長、データプールサイズ、不確定性の一般概念、およびデータパラドックスの効果を含む。オーバーヘッドの大部分は、不確定性ランダム値発生器内でこれらのランダムアドレスを形成するプロセスの間に拡張される。つまり、メモリの読み取りは、依然として、データを取得するための極めて安価な手段である。
【０１８１】
アプリケーション要件を不確定性ランダム値発生器設計に一致させる場合、尋ねるべき第１の質問は、どれだけのランダムデータが必要かということである。この目標値は、最小の総必要サイクル長を表す。所与のアプリケーション要件よりも長いサイクル長を有する、ランダムアドレスを生成しなければならない。１つ以上のランダム編集プロセスを使用することは、このより長いサイクル長を達成する手段を提供する。
【０１８２】
では、データプールはどれ程大きいか。アプリケーションは、異なる量のランダムデータを要する。目標量のランダムデータは、適度なベースラインサイズを超えるデータプールサイズに対して制限された影響を有するが、１つ以上のデータプールへのアクセスに使用されるアドレス生成に重大な影響を及ぼす。したがって、設計者は、シミュレーションを行って、それらのアプリケーションに最適なデータプールサイズを決定する必要がある。
【０１８３】
不確定性ランダム値発生器は、１つ以上のデータプールにおいて、セッションデータから開始する。最小サイズは重要でないため、意図的に、データプールの最小サイズは定義されない。しかしながら、設計者は、自分たちの設計のシミュレーションを用いて、データプールのサイズを計算することができる。ランダムデータの目標量が増大しても、データプールサイズに対する直接的な影響は最小のままである。驚くべきことに、チップサイズ対コストに基づいて、データプールサイズに対する適度な上限がある。そのため、データプールサイズがこの適度な限界を超えて増大することは、費用の増大を正当化しない。
【０１８４】
不確定性の原理は、最小データプールを使用しないことに対する主な正当化である。不確定性を最大化することは、任意の所定データ値が、データプール内で複数回出現することを暗示する。追加の不確定性を統合するために、データプールに追加される各複製値は、どのメモリアドレスが所与の値を生成したかに関する不確定性を劇的に増大させる。反転プロセスの困難性は、この不確定性の増大に起因して、急激に高まる。当然のことながら、これは、セッションデータが、依然として検証プロセスに合格し、隠されたままであると仮定する。
【０１８５】
したがって、設計内の確定性を除去することによって、それを不確定性と置換することができる。最低限ほんの一握りの古典的な関数をランダムアドレス生成に使用する代わりに、より大きい古典的な関数のブロックを定義する一方、ブロックあたり１回に１つの関数のみを使用する。アドレス指定可能な出力経路指定による古典的な関数ブロックの設計および使用は、任意の古典的な関数を、ランダム値発生器設計のすべての部分において使用できることを意味する。すべての古典的な関数選択、シード値、および出力経路指定は、すべて不確定性関数からのデータによって駆動されるという事実は、確定性が不確定性と置換されたことを意味する。これらの特徴は単純かつ実装コストが低いが、それらは、設計の不確定性を劇的に高める。
【０１８６】
古典的なブロック−ハードウェア抽象化
以前に、データプールから読み取りながら、なぜ一方向性関数を有するかについて説明した。同一のセッションデータは、データプールへのアクセスに使用される各一意のアドレス指定方法論に一意のデータストリームを付与する。設計が許し得る限り多くの一意アドレス指定方法論を有することが重要である。
【０１８７】
幸いなことに、ハードウェア線形フィードバックシフトレジスタＬＦＳＲ（古典的なハードウェアランダムビット値発生器）は、実装に必要とされるゲートカウントにおいて、数的に多くも少なくもある。確実に数百、おそらく数千の公開されたハードウェアシフトレジスタが入手可能である。ランダム編集プロセスを使用して、短いサイクル長を有するものから長いサイクルシフトレジスタを構築することができる。古典的なブロックに関する重要な注意事項は、通常、安全でないメモリアドレスを生成するために、各ＬＤＳＲが使用されることである。
【０１８８】
このハードウェア抽象化を定義する際に、我々の目的は、構成要素に対する一般的な抽象化インターフェースを維持する一方で、必要に応じて変化するように、構成要素内の実装を可能にすることである。各古典的なブロックは、４つの必要な入力値、シード値、ブロック内の関数セレクタ、ランレングスカウント、および出力ビットストリームを経路指定するための出力ラインセレクタを有する（リセット、ロードシード等の他の一般的な制御ラインも存在する）。
【０１８９】
すべての古典的なブロックに関する一般的なインターフェース問題
図１４は、本発明の一実施形態に従って、古典的なブロック１２００と関連付けられる一般的なインターフェースを描写するシステム図である。シード値１２０２は、常に同一様式でロードされる。現在のシフトレジスタ関数を実行しながら、次の（新しい）シード値１２０２およびランレングスカウント１２０６をロードすることができる。リセットおよびリロード１２０４は、新しいシード１２０２およびランレングスカウント１２０６の値を切り替えるために必要である。出力ラインセレクタ１２１２を使用して、古典的なブロック１２００からの出力ストリーム１２１０を適切な出力ライン１２１４に切り替える。古典的なブロック１２００内で使用するための適切な古典的な（関数セレクタ）シフトレジスタは、常に同一様式で特定される。一旦、古典的な関数が選択されると、シード値１２０２およびランレングスカウント１２０６値がロードされ、関数は、選択された出力ライン１２１４に経路指定される、出力ストリーム１２１０の生成を開始する。
【０１９０】
ランダム編集プロセスを駆動するために、古典的なブロックは、グループで使用される可能性が高い。一般的なインターフェースは、他のハードウェアをはるかに単純にする。出力ビットストリームを正しいランダム編集プロセスに動的に経路指定されるのを可能にすることによって、データプールへのアクセスに使用される、一意のアドレス指定方法論の数を著しく拡張した。
【０１９１】
各古典的なブロックの初期化は、データプールメモリアドレスで開始する。そのメモリアドレスは、２つの値、シード値およびランレングスカウントを指す。初期化ハードウェアは、２つの値をフェッチする。ランレングスカウントの最後に、次のランダム値は、次のデータプールメモリアドレスになる。次に、このデータプールメモリアドレスにおける値を使用して、古典的なブロックをリスタートするための使用される、新しいシード値およびランレングスカウント値を決定する。
【０１９２】
ここで、設計を抽象化と見る値は、さらに明らかになる。上記古典的なブロックの抽象化において、複数ＬＦＳＲの要件が明らかとなった。抽象化として、この実装は、直接的なソリューションよりもはるかに安い。上述されるとおり、直接的なアプローチは、古典的なブロックを構築するための複数の一意ＬＦＳＲを形成させる。しかしながら、このアプローチは、ゲートカウントにおいて高価となるため、ランダム値の生成コストを低減するという全体目的は失敗する。代わりに、古典的なブロックの抽象化を使用することによって、選択する任意の手段によって、この問題を解決する自由を得る。
【０１９３】
例えば、すべてのそれらのゲートをすべてのＬＦＳＲに費やすのではなく、各古典的なブロックに１つのプログラム可能な構成可能ＬＦＳＲを形成する。不確定性値を使用してＬＦＳＲを選択および構成することは、ゲートカウントに全額を支払うことなく、古典的なブロックの抽象化の機能要件を満たす。再度、このアプローチは、全体アーキテクチャに影響することなく、ランダム値生成のコストを低減するという目的を維持する。
【０１９４】
古典的なブロックへのシフトレジスタのグループ化
シフトレジスタを古典的なブロックにグループ分けする場合は、慎重にならなければならない。表２は、恣意的な名前（この場合は色）、このグループにおけるシフトレジスタのグループサイズ数、グループのサイクル長、および指名された関数グループがマスク発生器であるか否かの決定によってグループ分けされる、一式の古典的なシフトレジスタを表す。
【０１９５】
ランダム編集プロセスは、分化したサイクル長を各入力ストリームに使用される場合に限り、はるかに長いサイクル周期をもたらす。したがって、シフトレジスタは、これらの分化サイクル長を維持するような方法で、グループ分けされなければならない。表中の各Ｐ値または３つのＰ値を掛け合わせた積は、一意の値である。一意のＰ値をこの教示的実施例において見ることはできないが、表は、漸増するＰ値で一般的にフォーマットされる。
【０１９６】
【表２】
0005631312.tif 000013
【０１９７】
マスク発生器は、３つのランダムストリーム、データ０、データ１、およびマスクで形成されることに留意されたい。表２から３つの色を混合する場合、マスク発生器群のサイズは、各色群のサイズに３を掛けた積である。３つの色群のそれぞれにおける各関数は、データ０、データ１、またはマスクストリームとすることができる。例えば、ホワイト−ティール−グレーは、グループサイズが１１＊９＊１３＊３＝３８６１である。各色が、マスク発生器内の３つのストリームすべてにおいて表される限り、同一のマスク発生器サイクル長が生成される。
【０１９８】
一部のサンプルの古典的なブロックをここで構築することができる。各古典的なブロックは、同一の抽象インターフェースを有するが、内部的に異なる可能性があり、現に異なる。上記表から形成される６つの古典的なブロックの実施例は以下のとおりである。
【０１９９】
古典的なブロック１：マジェンタおよびイエロー
ブロックにおける総関数カウント：３２（２２＋１０）
最小、最大サイクル長：Ｐ１０、Ｐ１３
古典的なブロック２：レッド−グリーン−ブルー
ブロックにおける総関数カウント：３２（可能な４０３２のうちの３２）
最小、最大サイクル長：Ｐ１＊Ｐ２＊Ｐ３
古典的なブロック３：バイオレット、パープル−インディゴ−イエロー
ブロックにおける総関数カウント：３２（可能な７６８０のうちの１２＋２０）
最小、最大サイクル長：Ｐ１１、Ｐ８＊Ｐ９＊Ｐ１０
古典的なブロック４：アズール−レッド−パープル
ブロックにおける総関数カウント：３２（可能な７３９２のうちの３２）
最小、最大サイクル長：Ｐ１５＊Ｐ１＊Ｐ８
古典的なブロック５：パープル、アクア、ブラック、オレンジ、および若干のティール
ブロックにおける総関数カウント：６４（９のうちの１６＋１４＋１６＋１４＋６）
最小、最大サイクル長：Ｐ４、Ｐ１４
古典的なブロック６：ホワイト、アズール、グレー、グリーン、レッド、および若干のブルー
ブロックにおける総関数カウント：６４（８のうちの１１＋１１＋１３＋１２＋１４＋３）
最小、最大サイクル長：Ｐ１、Ｐ１５
これらの古典的なブロックについて、留意すべき重要な特性が多数ある。第１に、任意の設計は、これらのブロックを使用することができ、それらが分化したサイクル長を有することを保証することができる。たとえ色がマスク発生器の一部として現れるとしても、組み合わせたサイクル長は、ベースカラーサイクル長に影響しない。各ブロックにおける総関数カウントは、ブロックごとに異なる可能性があり、現に異なる。一般的なインターフェース上の理由から、すべての古典的なブロックは、総関数カウントを２の累乗として有する。
【０２００】
古典的なブロック内で単純なシフトレジスタをマスク発生器と混合することは適切に機能し、これもブロックの最小サイクル長に著しく影響する。古典的なブロック３と４の間の対比に留意されたい。これらのサンプルの古典的なブロックは、どの問題がグループ化プロセスを駆動すべきかを示すように形成された。注意して、極めて良好な古典的なブロックを低ゲートカウントおよび良好なサイクル長で形成することができるが、サイクル長を分化する全体目標を維持する。上記の表において、一覧表示されるマスク発生器は、すべてステージ１発生器である。代替として、より高いステージの発生器を表に追加してもよく、したがって、各古典的なブロックを追加することができる。実際に、これは、不確定性ランダム値発生器における一意関数の総数を増大させる、極めて単純な方法となる。
【０２０１】
古典的なブロックハードウェア抽象化は、これらの関数に対する一般的なインターフェースを提供する一方で、あらゆる種類の構造上のソリューションを開発するための基本的な構築ツールを付与することに留意されたい。
【０２０２】
間接的ランダムストリーム
ここで、生のアンセーフメモリアドレスを生成するための古典的なブロックがあり、データは、１つまたは複数のデータプールから読み取ることができる。データパラドックスアンセーフと定義されると、この方法で読み取られるデータは、内部的にのみ使用され、値の間接的ランダムストリームと称される。通常、この間接的ランダムストリームを適用して、様々な編集プロセスにおいて使用されるランダムデータを引き出す。出力ストリームに直接フィードするために使用してはならない。
【０２０３】
セーフアドレスストリーム
１つまたは複数のデータプールの外に構築される不確定性関数は、強力な解決策である。データプールに対する直接攻撃を除いて、１つまたは複数のデータプールにおいてデータを拾い集める次善策は、１つまたは複数のプールから読み取るために使用されるランダムアドレスをモデル化することである。この形態の攻撃を阻止するために、ランダムアドレスは、アドレスがモデル化され得ない方法で分離しなければならない。
【０２０４】
分離プロセスは、ここで最も単純な変換から開始する。幸運なことに、不確定性関数の正確さは、セーフランダムアドレスを形成する支援となる。古典的なブロックによって生成される各ランダム（生）アドレスは、データ駆動修正プロセスを通じて安全にすることができるに過ぎない。１つ以上のプールからのデータによる擬似ランダムアドレスの修正は、一意のランダムアドレスストリームを付与する。このアドレスストリームは、１つまたは複数のデータプールのコンテンツを最初に知ることなく、モデル化することはできない。これらの決定性アドレスは、不確定データを使用して、分離プロセスを介して非決定性にアップグレードされた。
【０２０５】
図１５は、本発明の一実施形態に従って、アンセーフメモリアドレスの間接的ランダムストリーム１３１４を使用して、値１３１８をデータプール１３１６から引き出す、ハイブリッドアドレス発生器１３００を描くシステムフロー図である。このハイブリッドアドレス発生器１３００は、２つの古典的なブロック１３０２および１３２２を使用して、それぞれデータ０  １３０４およびデータ１  １３２４の入力ストリームを生成する。マスクストリーム１３１８は、データ０ストリーム１３０４およびデータ１ストリーム１３２４上で動作し、結果としてハイブリッドアドレスストリーム１３５０を形成する（１３４０）。ハイブリッドアドレス発生器の動作は、データ値１３１８をデータプール１３１６から引き出す間接的ストリーム１３１４を除いて、マスク発生器４００と同一である。ハイブリッドアドレス発生器１３００は、データパラドックスセーフランダムメモリアドレス１３５０を作成して、１つまたは複数のデータプールから読み取る。ハイブリッドアドレスストリーム１３５０を形成するために、ネットコストは、少なくとも３つの古典的なブロック１３０２、１３１２、および１３２２となる。
【０２０６】
コストが低く、安全ではないが、図１６は、本発明の一実施形態に従って、不確定性関数を適用し、Ｘセーフアドレス発生器１４００と称される、データパラドックスセーフランダムアドレスを作成する、第２の方法を描く、システムフロー図である。１つの古典的なブロック１４０２は、データ０  １４０４入力ストリームを形成するために必要である。同様に、間接的ランダムストリーム１４１８を形成するためには、別の古典的なブロック１４１２を使用しなければならない。第２の古典的なブロック１４１２からの出力ストリーム１４１４を使用して、データプール１４１６にインデックス付けし、データ０ストリーム１４０４を有するビットワイズＸＯＲ１４４０である、間接的ランダムストリーム１４１８を形成する。結果として得られるランダムアドレスストリーム１４５０は、ハイブリッドマスク発生器とほぼ同程度安全となるが、サイクル長はより短い可能性が高い。Ｘセーフアドレスストリーム１４５０を形成するために、ネットコストは、少なくとも２つの古典的なブロックとなる。
【０２０７】
任意の不確定性ランダム値発生器は、発生器の支持される総サイクル長を通して完全にサイクルすることはないはずであると仮定することができる。したがって、ランダムアドレスストリームサイクル長は、総目標アプリケーションランダムデータ要件を超えなければならない。所望のサイクル長に到達するために、ランダム編集プロセスのスタッキングが必要とされる場合がある。このスタッキングは、古典的なブロック内または外で構築することができる。
【０２０８】
セーフランダムデータストリーム−ハードウェア抽象化
分離プロセスは、安全なランダムデータストリームを継続する。パラドックスセーフメモリアドレスを使用して、データプールを読み取ると、３つのランダムデータストリーム、データ０、データ１、およびマスクが形成される。安全なランダムデータストリームは、メモリアドレスおよびデータの分離プロセスを介して、仮想データプールサイズを成功裏に増大させた。１つまたは複数のデータプールは、ここで、データパラドックスからのリスクなしに、ランダムデータの何倍もの量を作成することができる。これは、この発生器にフィードするために少なくとも６つの古典的なブロックを必要とする。入力ストリームの分化したサイクル長で開始すると、次に、安全なランダムデータストリームサイクル長は、各入力サイクル長にデータプールサイズを掛けた積である。
【０２０９】
セッションデータの動的展開
分離プロセスは、セッションデータの動的展開を継続する。固定数のカードで開始するカードゲームは、分離に役立つ隠喩を提供する。１組のトランプをシャッフルすると、取り扱われるカードの新しいシーケンスを設定することによって、新しいゲームを形成する。多くの場合において、次に、１組のトランプを「カット」し、扱われる第１のカードを変更する。１組のトランプをシャッフルおよびカットする行為は、ゲームを行うカードのシーケンスを変更する。
【０２１０】
同様に、同一の原理をセッションデータに適用することができる。この結果は、セッションデータを「リフレッシュする」ことである。セッションデータのリフレッシュは、不確定性を追加するだけでなく、更新されたセッションデータは、データパラドックスを避けるのに役立つ。「仮想」シャッフルおよびカットは、メモリアドレスを用いてのみ行われ、セッションデータにおいて見出される値を再インデックス付けするように作動する。１つまたは複数のプール内のデータは、まだ静止したままであるが、１つまたは複数のプールを読み取るために使用されるアドレスは、「シャッフルおよびカット」をシミュレートする方法で操作される。
【０２１１】
仮想カット−メモリアドレス＋オフセット
例えば、１つまたは複数のデータプールを読み取るために使用されるメモリアドレスのオフセットを追加することは、メモリ範囲の起源を移動させることと同じ効果を有する。これは、正にカードゲームにおいて１組のトランプを「カットすること」と同様に動作する。
【０２１２】
仮想シャッフル−メモリアドレスＸＯＲシャッフル値
メモリアドレスを有するシャッフル値のビットワイズＸＯＲの動作は、適当な位置における素早いシャッフルの効果と比較できる。メモリ範囲は、ＸＯＲ演算によって再発注されている。シャッフルの次にカットすることができ、またはカットの次にシャッフルすることができる。これらの仮想カードトリックは、希望に応じて何度も行うことができる。
【０２１３】
ランダムサブストリーム−メモリアドレスオフセットの使用
メモリアドレスの操作は、一部の極めて有用な副作用を有する。通常、不確定性ランダム値発生器は、１つのランダムストリームのみを生成する。不確定性ランダム値発生器内で使用される各メモリアドレスが、それに追加されるオフセットを有する場合、異なるランダムサブストリームが、それぞれ異なるオフセットに対して生成される。任意の数の恣意的ランダムサブストリームは、メモリオフセット値の選択的追加を介して生成することができる。これは、必要に応じてランダムアドレス指定可能なサブストリームをもたらす。このツールは、多くのアプリケーションにおいて極めて有用である。
【０２１４】
メモリアドレスラインの動的変更
データプールコンテンツを分離する別の方法は、ハードウェアアドレス指定ラインを動的に変更することである。これは、一般的な無制限ハードウェアソリューションである。これは機能するが、多くの設計において使用するには高価すぎる場合がある。
【０２１５】
ランダムネスの第３のプレーンは、ハードウェアの古典的なブロック内でも可能にすることができる。各古典的なブロックは、初期化タイムにおいて、シード値、出力ビットストリームの経路指定選択、およびブロック内でどの関数を使用するかの選択で構成される。ある程度のハードウェア努力により、古典的なブロック内で、シード値の動的ランタイムスイッチング（動的シード関数）および関数選択を追加することができる。この追加努力の利益は、ハードウェア不確定性ランダム値発生器内で、ランダムネスの第３プレーンを可能にすることである。
【０２１６】
完全動的変異
既に読んだとおり、セッションデータの「仮想」展開を行うことは安価である。２つのランダムアドレスストリームを１つまたは複数のデータプール内で形成すること、およびこれらの位置のコンテンツを交換することは、完全動的変異と称される別のソリューションを表す。変化率が十分に低い場合、全体性能に対する影響が制限されるはずである。
【０２１７】
高性能設計は、最大のランダムデータ要件を要求する可能性が高い。各メモリサイクルは、全体的な発生器性能にとって極めて重要となり得る。複数のデータプールにロードされる同一セッションデータを有することは、設計に使用可能なメモリ帯幅において主要なブーストをもたらす。設計の異なる部分は、異なるデータプールを使用して、メモリアクセスを同時に重複させる可能性がある。したがって、重複するメモリアクセスは、メモリ帯幅問題を解決する。
【０２１８】
依然として、メモリ帯幅問題を解決しながら、実際のデータプールシャッフルを完了させることが必要とされ得る。これは、データプールの第２または重複セットにより達成され得る。データプールの第１のセットは、ランダムデータをアクティブに生成するが、第２のセットは、シャッフルされている。一旦シャッフルが完了すると、データ駆動カウントに到達し、「フレッシュな」データプールが切り替えられて、一次データプールになる。ここで、陳腐化したデータプールは、自由にシャッフルされる。このプロセスは、必要に応じて何回でも反復され得る。
【０２１９】
ハードウェア実施例
これらの実施例のそれぞれは、不確定性ゲノムの特徴の一部を示す実施例を表す。セッションデータをデータパラドックスから保護するために使用される分離プロセスの全範囲を示すよう特に注意する。これらの実施例のそれぞれは、単一の不確定ランダム出力ストリームを生成する。可能性のあるソリューションの数は、複数のランダム出力ストリーム、ランダムにアドレス指定可能なサブストリーム（それらは、ソフトウェア実施例において包含される）、セッションデータの動的展開、複数のデータプール、および仮想カットならびに仮想シャッフルを含む実施例に制限されないため、多くの実施例はここで示されていない。
【０２２０】
ハードウェア実施例１
データパラドックス問題の大部分は、擬似ランダム関数を使用して、データプールにアドレス指定することに由来する。データならびにアドレスを分離するために、短サイクルプロセス１１００ａの使用を適用することもできる。図１７は、安全なランダムデータストリーム１１９０を形成するために使用されている、２つの短サイクルプロセス１４００ａおよび１４００ｂから成る、ハードウェア実施例１を描写する、システムフロー図である。第１の短サイクルプロセス１４００ａを使用して、アドレス１１２０ａを形成し、データ値をデータプール１１５０から引き出して、不確定性データ１１７０を形成する。ＸＯＲ１１８０される、データストリーム１１２０ｂを形成する第２の短サイクルプロセス１４００ｂを不確定性データ１１７０と統合することは、不確定性ランダムデータストリーム１１９０を提供する。
【０２２１】
原則として、エンジニアリングは、常に、正確なトレードオフを作成することとの闘いである。ハードウェア実施例１の場合、これらのトレードオフを作成して、ハードウェアコストを最小に低減した。支持されるランダムデータ量のサイズは、定義されていない。ランダムネスの第３プレーンである制御プレーンの概念を使用して、古典的なブロック内の関数を選択し、はるかに速い速度の動的シード関数において、シード値をロードする。多くの場合、新しい関数を再選択するための不確定性データを使用する効果は、追加のハードウェアなしに、アドレスを分離するさらに別の手段となる。
【０２２２】
以下の設計実施例は、それぞれアドレスおよびデータ用の２つの短サイクルブロックを使用する。不確定性（メモリ）および関連グルーのプールを追加して、設計要素を完成させる。この実施例の場合、カウントダウン範囲は、８〜６４の値である。短サイクルブロックは、プログラム可能な３２ビットＬＦＳＲである。各プログラム可能なＬＦＳＲは、８つの一意のＬＦＳＲと同様に機能する。
【０２２３】
【数１１】
0005631312.tif 000014
【０２２４】
出力値あたり、２つの短サイクル（古典的な）ブロックおよび１つのメモリアクセスのみが必要であるが、データプレーン、アドレスプレーン、および制御プレーンという３つのランダムネスのプレーンのすべてがアクティブである。
【０２２５】
ハードウェア実施例２
短サイクルプロセスをハイブリッドマスクＵＲＮＧプロセスと対比する場合、後者は、分離プロセスとして、マスク発生器の追加の安全性を利用する。この増大した安全性は、ある程度低い性能に達する（ハイブリッド設計は、３つの短サイクルブロックに対し、より多くの入力値を必要とする）。ハイブリッドマスクプロセスは、ゲートカウントを増大させる、追加のハードウェア要素（短サイクルブロックおよびマスク発生器）を必要とする。幸いなことに、追加の努力は、より安全なランダムデータの生成の増加を達成する。
【０２２６】
【数１２】
0005631312.tif 000015
【０２２７】
性能は、短サイクルＵＲＮＧからわずかに低下するが、いくつかの明らかなアップグレード、追加の不確定データによる仮想カット／シャッフル（追加パラドックス安全性）、短サイクル入力値を読み取るための専用の古典的なブロック（漸増する機能的セッションデータ選択）も適用する。
【０２２８】
ハードウェア実施例３
「パラドックスセーフ」ＵＲＮＧの目的に達することは、アドレス（定義域値）およびデータ（値域値）の両方から除去される、すべての決定性動作を必要とする。１つの非決定性出力値の生成は、マスクまたはカオスエンジンを使用して、定義域値と値域値とを分離する必要がある。セーフＵＲＮＧは、極めて大量のランダムデータの生成を可能にする。セーフＵＲＮＧの１つの重要な利点は、セッションデータに関する緩和要件である。ほとんどすべての検証されたセッションデータは、セーフＵＲＮＧにより正確に機能する。これは、一意のセッションデータを自動的に生成する、アプリケーションにとって重要であり得る。
【０２２９】
完全な古典的なブロックは、最大の分化したサイクル長ならびに不確定性プール上の良好なアドレス指定被覆を保証するために必要とされる。これは、設計の任意の部分に対する古典的なブロック出力の経路指定を含む。設計者に委ねられる努力として、初期化をステップオーバーするとき、３つの主要なタスクがある。
【０２３０】
各ＵＲＮＧの標準概要に従って、ステップ１では、ＰＲＮＧがアドレスを生成して、不確定性のプールから読み取り、それによって、ＦＩＦＯにおいてキャッシュされる（先入れ先出し）、生のパラドックスアンセーフ不確定ストリームを生成する。ステップ２は、次に分離されて非決定性データプールアドレスを生成するアドレスを生成するように、複数のＰＲＮＧを必要とする。これらのパラドックスセーフアドレス（定義域値）は、不確定性のプールから読み取り、それによって、パラドックスアンセーフデータ（値域値）をそこから生成する。ステップ３において、パラドックスアンセーフデータ（値域値）を分離して、非決定性出力ストリームを生成する。
【０２３１】
安全なＵＲＮＧ設計全体で、生の不確定データが求められる。そのため、ＦＩＦＯを構築して、内部使用のために値をキャッシュする。このＦＩＦＯを満たすために、１つの古典的なブロックを割り当てて、アドレスを生成し、不確定性のプールから読み取る。明らかに、このＦＩＦＯのサイズは、実装依存となる。
【０２３２】
安全なＵＲＮＧの一部の変型例は、カオスエンジンを使用する。これらのエンジンは、不確定データを命令として使用する。各不確定メモリアクセスは、一度に複数の命令をフェッチする。したがって、命令に対するメモリ帯幅要求は、読み取られるメモリあたりの命令数に依存する。
【０２３３】
非決定性メモリアドレス（不確定性関数定義域値）の生成
以下が仮定される。各古典的なブロックは、可能性のあるアドレス範囲の良好な被覆を保証するのに十分長い決定性実行を有する。ＬＦＳＲの自然なサイクル長に到達することはなく、それによって、値の反復シーケンスを生成する。ある時点で、新しいシードベクトルをロードして、アドレスシーケンスを分割する。これらの新しいシードベクトルは、比較的低い変化率を有する。これらの古典的なブロックの出力を使用して、２つの可能性のあるアドレス分離プロセス、ハイブリッドマスク発生器またはアドレスカオスエンジンのうちの１つをフィードする。
【０２３４】
ハイブリッドマスク発生器の場合、２つの異なる古典的なブロックは、データ０およびデータ１値を供給する。マスク値は、不確定性ストリームＦＩＦＯに由来する。これらの３つの値をマスク発生器に対する入力として使用することは、ハイブリッドマスク発生器を付与する。ここで、我々は、非決定性メモリアドレスを生成する手段を有する。
【０２３５】
アドレスカオスエンジンの場合、２つの異なる古典的なブロックは、データ０およびデータ１値を供給する。マスク値は、不確定性ストリームＦＩＦＯに由来する。次の命令は、不確定性命令ワードから取られる。命令ワードが空の場合、新しい命令ワードは、不確定性ストリームＦＩＦＯからフェッチされる。所与の命令を使用して、カオスエンジンに対する入力としてのデータ０、データ１、およびマスク値は、アドレスカオスエンジンを提供する。ここで、我々は、非決定性メモリアドレスを生成する手段を有する。
【０２３６】
データ分離プロセス（不確定性関数値域値）からの結果の生成
２つの非決定性メモリアドレス（定義域値）を仮定して、データ０およびデータ１（値域値）を不確定性のプールから読み取る。マスク値は、不確定性ストリームＦＩＦＯに由来する。これらの３つの値は、２つの方法、データマスク発生器またはデータカオスエンジンのうちの１つにおいて使用される。
１）データマスク発生器の場合：標準分離マスク生成結果を得る。
２）データカオスエンジンの場合：次の命令は、不確定命令ワードから取られる。命令ワードが空の場合、新しい命令ワードは、不確定性ストリームＦＩＦＯからフェッチされる。標準的な３つの値、データ０、データ１、およびマスクは、データカオスエンジンにおいて処理され、したがって、分離されたデータ結果を生成する。
【０２３７】
広範囲のトレードオフを仮定すると、安全なＵＲＮＧの可能性のある実装は、コストおよび性能の両方において異なる。アプリケーションのニーズに応じて、考慮すべき設計アップグレードがある。すなわち、追加の不確定データに対する仮想カット／シャッフル、時間変位、不確定性のプールの複数コピー、マスク発生器／カオスエンジンの混合および一致等である。
【０２３８】
ソフトウェア構成要素
伝統的に、少数パーセンテージのソフトウェアのみが、１秒あたり何千回も実行される。この実行率は、高性能ソフトウェアの設計に影響することができ、現に影響する。そのために、可能性のある限り適度に効率的であることに注意しなければならない。この効率性に対する感度は、古いブロック構造プログラミングスタイルとオブジェクトパラダイムとの間の闘いではない。代わりに、両方のスタイルを慎重に混合して、所望の柔軟性ならびに性能を付与する。
【０２３９】
コンパイラは、ソースをマシン言語に変換する手段をはるかに凌ぐ。すべてのプログラマーは、ランタイムの代わりに、コンパイルタイムにおいてバグを見出すことを評価している。優れたプログラマーは、ドキュメント化ならびに実装の手段として、ソースコードを使用する。このドキュメント化は、後に続き、コードを支持するはずの人々にとって非常に有用である。
【０２４０】
プログラミングのオブジェクトパラダイムにおいて、抽象化およびそれらの関係は、コンパイルタイム中に定義される場合が多い。抽象化間の関係を結合するコンパイルタイムの破壊、およびそれをランタイム結合と置換することは、確定性から不確定性への必要な切替えを提供する。不確定性データを使用して決定プロセスを駆動することは、より広範囲の不確定性乱数発生器が動的に構成されることを可能にする。制御およびデータプレーンの両方からの革新の利点を獲得することは、任意の時点において、不確定性ランダム値発生器の動的再構成を促進する。このように、クラッカーは、決して、コンパイルしたソースから全体システムをモデル化することができない。
【０２４１】
ソフトウェアベースの不確定性ランダム値発生器は、動的に構成される、異なるソフトウェアコンポーネントで構築される。動的構成は、そこから選択するコンポーネントの集合を必要とする。明らかに、そこから選択する可能性のあるコンポーネントのより大きいセットは、不確定性の実質的な増加を意味する。したがって、各集合は、任意の可能性のある構成に必要な最小数のコンポーネントを何倍もしたものでなければならない。これは、より多くのコンポーネントが好ましい、すなわち、確定性が低い単純な例である。
【０２４２】
プログラミングのオブジェクトパラダイムに関する個別の利点は、この哲学を論理的な開始位置とし、不確定性のプールを使用して、ランダム値発生器のランタイムにおいて実装されるプロセス／モジュールを選択する。理想的な設計の柔軟性は、オブジェクトパラダイムオーバーヘッドを支払うことなく、ランタイム関数スイッチングを達成することである。関数結合が、コンパイルタイムではなく、ランタイムにおいて行われることが重要である。このように、クラッカーは、コンパイルソースから全体システムを容易にモデル化することができない。ランタイムオブジェクトに結合する関数を選択するために、プロセスは、データプール（不確定性関数）から駆動されるデータとなる。
【０２４３】
ここで定義されるソフトウェア構成要素は、オブジェクトベース言語ほど的確ではないが、実際、読み取ることが幾分か困難になる。しかしながら、それらは、不確定性ランダム値発生器をもたらすランタイム結合において非常に有効である。完全なリストではなく、必要な部分のみが説明される。これらのインターフェースは、Ｃプログラミング言語でドキュメント化される。
【０２４４】
【数１３】
0005631312.tif 000016
【０２４５】
以下の仮定は、構成要素を論じる前に作成される。
１）どのソフトウェアアーキテクチャ（すなわち、どの実施形態）が選択されたか。
２）セッション／ソース／出力バッファデータは、既にメモリにロードされている。
３）再シャッフルデータが必要とされる場合、必要に応じて、それもデータプールにロードされている。
【０２４６】
古典的なランダム関数の表
幸運なことに、ランダム値を生成するための多数の公開されたソフトウェア関数を有する。このソフトウェアセットは、古典的なハードウェア線形フィードバックシフトレジスタ（ＬＦＳＲ）よりも小さいが、以前として、選択すべき良好な関数が多数ある。ハードウェアシフトレジスタをこの表に含め、追加することもできる。表は、ソフトウェア専用関数および／またはシフトレジスタ実装の混合を有する可能性が高い。ソフトウェア実装のための古典的なランダム関数の表は以下を含む。
・線形合同法
・遅延Ｆｉｂｏｎａｃｃｉ発生器
・Ｂｌｕｍ  Ｂｌｕｍ  Ｓｈｕｂ
・Ｆｏｒｔｕｎａ
・Ｍｅｒｓｅｎｎｅ  Ｔｗｉｓｔｅｒ
・ＳＩＭＤ指向Ｆａｓｔ  Ｍｅｒｓｅｎｎｅ  Ｔｗｉｓｔｅｒ
・ＣｒｙｐｔＧｅｎＲａｎｄｏｍ
・Ｙａｒｒｏｗアルゴリズム
・フリーＢＳＤ
・Ｐａｒｋ−Ｍｉｌｌｅｒ乱数発生器
・反転合同発生器
古典的なランダム関数の表は、ランダム関数ポインタ、関数のサイクル長、および「使用中」フラグの３列の形態をとる。表内の各関数は、それらの「旋律」において次の単一値を生成する。
【０２４７】
古典的なランダム関数の表と古典的なブロックとの間の差は、マスク発生器を有していないことと、複数のエントリが一度に使用されるという事実を含む。「使用中」フラグは、エントリが割り当てられるたびに設定される。サイクル周期長を使用して、同一サイクル長を有するたった１つの関数がアクティブであることを確認する。不確定性ランダム値発生器のこの例において、「使用中」フラグとサイクル長との間で、分化したサイクル長のみが使用されていることを保証することは容易である。これらの「ステートレス」関数は、内部データを有しないことに留意されたい。それらは、単に現行値を取るだけであり、順番に次の値を生成する。
【０２４８】
ランダム編集プロセスの表
多数のランダム編集プロセスは、この説明の範囲内で定義される。ランダム編集プロセスの表は、これらの編集プロセスのランタイム実装を保持する。これらも内部データを有しない「ステートレス」関数であることに留意されたい。
これらの汎用編集プロセスは、一般的なツールとして作動し、目標の実施形態を構築する。これらの関数は、必要に応じて、カオスエンジンに動的にインストールされる。古典的なランダム関数の表とは異なり、１つのカオスエンジン内で、同一の編集プロセスの複数例を制御する定義された方針はない。正当な理由が、同一の編集プロセスの一意または複数例のいずれかの使用を支持する。任意の編集プロセスの一意または複数例を実装するか否かを選択することは、設計者次第である。複数例が支持される場合、これらのプロセスを、性能に悪影響を及ぼさない数に制限することに注意しなければならない。
【０２４９】
擬似ランダム発生器の割り当てルール
古典的な関数の表から擬似ランダム発生器を割り当てる（または再割り当てする）場合、ルールは単純である。アクティブ関数は、不確定性ランダム値発生器のインスタンスあたり１回のみ使用することができる。これらの関数が統計的に割り当てられる場合、各アクティブ関数は、編集プロセスの総ランレングスを最大化するように、異なるサイクル長を有しなければならない。不確定ランレングスを用いて、古典的な関数が動的に割り当てられる場合、２つ以上の擬似ランダム発生器は、同一のサイクル長を用いて割り当てられ得る。この背後にある理由は単純であり、不確定性ランレングスは、自然なサイクル長の前に終了する可能性が高い。明らかに、ランレングスの最後に、擬似ランダム発生器は、割り当て解除され、表に戻される。次に、新しい不確定値を適用して、表から代替の擬似ランダム発生器を選択する。
【０２５０】
構成（または再構成）プロセスにおいて、不確定値は、既に割り当てられた擬似ランダム発生器を指してもよい。この場合、単に値を破棄して、必要とされる擬似発生器のすべてが選択されるまで、別の値を得る。それらを構成するとき、または割り当てプロセスの最後に、これらの関数をシードしてもよい。すべての可能性のあるランレングスが有用であるとは限らない。したがって、すべてのランレングスは、有用範囲に制限されなければならない。例えば、短すぎるランレングスは、過度のオーバーヘッドを追加し、不確定性のプール上に完全なアドレス指定被覆をもたらすのに失敗する。逆に、長すぎるランレングスは、擬似ランダム発生器の自然サイクル長を超える場合がある。
【０２５１】
カオスエンジンの編集プロセスの割り当てルール
任意の所与の編集プロセスは、カオスエンジンのインスタンスあたり１回だけアクティブであり得る（多様性は不確定性を追加する）。しかしながら、同一の編集プロセスは、他のカオスエンジンにおいてアクティブであり、不確定性を最大化し得る。
【０２５２】
各カオスエンジンは、不確定性のプールからロードされるランレングスを有する。明らかに、任意のランレングスの最後に、各編集プロセスは、割り当て解除され、表に戻される。次に、多くの新しい不確定性値を使用して、表から代替の編集プロセスを選択する。一旦カオスエンジンが再構成されると、新しいカオスエンジンランレングスは、不確定性のプールからロードされる。
【０２５３】
一部のプログラマーは、各カオスエンジンのランレングスに加えて、またはその代わりに、各編集プロセスのランレングスを好む場合がある。
【０２５４】
不確定性開始値−公的値
この私的値は、ランダムシーケンスを開始するためのキーを表すため、大部分の古典的なランダム関数のシード値は保護されなければならない。この「シークレットキー」値の保護は、一部の場合において課題となる可能性がある。
【０２５５】
不確定性ランダム値発生器の開始値は、値がデータプールメモリオフセットに過ぎないため、そのような保護を必要としない。保護された値のすべては、データプールへの公的オフセットではなく、データプール自体にある。不確定性ランダム値発生器の初期化プロセスは、データプールメモリオフセット開始値において見出される、データプール値によってシードされる、一時的な古典的な関数で開始する。秘密でない値として、開始値は、リスクなしに誰にも見えるようにすることができる。
【０２５６】
この一時的な古典的な関数を利用して、データプールを読み取ることによって、すべての他の初期化値は、不確定性のプールから生じる。不確定性ランダム値発生器を構成するために、開始値は、どの初期化値が使用されたかを暗示することはできない。一旦初期化プロセスが完了されると、公的開始値が再度使用されることはなく、一時的な古典的な関数は破棄される。
【０２５７】
ソフトウェア実施例
制御プレーンを活発に使用して、新しいソフトウェア構成要素を動的に再選択することは、追加の決定性動作を除去する効果を有し、それによって不確定性を追加する。この追加された不確定性がその利点にもたらすオーバーヘッドは比較的小さい。ハードウェアに優るソフトウェアの利点／不利点は、よく認識されている。ソフトウェア実装は、常にハードウェア実装よりも遅いが、はるかに優れた柔軟性を追加する。
【０２５８】
極めて高性能および／または膨大なランダムデータ要件は、ハードウェア実装を適用する可能性が高いという、以下の仮定を行うことができる。極めて少量のランダムデータ要件は、伝統的なＰＲＮＧによって解決され得る。ソフトウェアベースのＵＲＮＧは、ハードウェア属性を必要としないアプリケーションに最適であるが、依然として、その他のＵＲＮＧ特徴を必要とする。ＵＲＮＧに関して提供されるソフトウェア実施例のすべては、パラドックスセーフであり、したがって、すべての検証されたセッションデータに対して適切に機能する（はずである）。
【０２５９】
ソフトウェア実施例１
ソフトウェア実施例１、マスクＵＲＮＧは、マスク発生器を使用して、不確定性関数のアドレス（定義域値）およびデータ（値域値）の両方を分離する。このように、すべてのアドレスおよびデータが非決定性であるため、出力値は、パラドックスセーフである。ハードウェア実施例と同様に、初期化努力は、開発者に委ねられる。以下は、ソフトウェア実施例１の動作を説明するための実例コードである。
【０２６０】
【数１４】
0005631312.tif 000017
【０２６１】
【数１５】
0005631312.tif 000018
【０２６２】
【数１６】
0005631312.tif 000019
【０２６３】
【数１７】
0005631312.tif 000020
【０２６４】
【数１８】
0005631312.tif 000021
【０２６５】
一部の形態において、マスクＵＲＮＧは、ソフトウェアアプリケーションの最も一般的なソリューションを表す。簡素なＰＲＮＧほど高速にはならないが、ＵＲＮＧ特徴セットに対して良好な性能を提供する。考慮すべき明らかな設計アップグレードは、追加の不確定データによる仮想カット／シャッフル、および時間変位である。マスクＵＲＮＧのサイクル長は大きすぎるため、ユーザの生涯において反復する可能性は低い。したがって、カオスＵＲＮＧは、可能性のあるソフトウェア実施例を完了するように含まれるに過ぎない。
【０２６６】
ソフトウェア実施例２
ソフトウェア実施例２、カオスＵＲＮＧは、カオスエンジンを使用して、アドレスおよびデータの両方を分離する。マスクＵＲＮＧと同様に、すべてのアドレス（定義域値）およびデータ（値域値）は非決定性であるため、出力値は、パラドックスセーフである。ハードウェア実施例と同様に、初期化の努力は、開発者に委ねられる。以下は、ソフトウェア実施例１の動作を説明する実例コードである。
【０２６７】
【数１９】
0005631312.tif 000022
【０２６８】
【数２０】
0005631312.tif 000023
【０２６９】
【数２１】
0005631312.tif 000024
【０２７０】
【数２２】
0005631312.tif 000025
【０２７１】
デジタル著作権管理（ＤＲＭ）
なぜ現行のＤＲＭ設計が問題であるかについて多くの理由がある。それが現在設計されているように、それらは問題の一部を解決するに過ぎないため、一応機能しているに過ぎない。現在のＤＲＭ設計は、他と良好に相互作用しない一意の独立したソリューションである。現在のＤＲＭは、多くの内部秘密を成功裏に隠すことに依存するため、過度に複雑である。公的ロックベースのＤＲＭを使用することは、私的キーを秘密にしておかなければならないことを意味する。より正確には、保護すべき重大な秘密は、これらの私的キーを隠す方法である。秘密性のニーズは自明であり、現在の技術の脆弱性をもたらす。しかしながら、これと同様の秘密性への依存は、他の企業からの製品またはサービスとの相互運用性もブロックする。どのようにして秘密を共有しながら、依然としてその完全性を維持するのかというこの点は、理解しやすい。
【０２７２】
重大な秘密を防御することは、ＤＲＭ設計者とハッカーとの間の激しい競争として説明することができる。公的ロックに対しする私的キーを隠す試みは、ＤＲＭの基軸が、単一の魅力的かつ潜在的に壊滅的な標的を表す限り、不完全であることは避けられない。このＤＲＭを攻撃することに関する費用対効果の分析において、秘密を漏出する報酬は、最小リスクおよび関与する相対努力を上回り続けている。ハッカーが重大な秘密を発見するたびに、結果は、すべての音楽を開錠する単一のキーである。
【０２７３】
現在の技術の弱みから逃れるためには、このゲームの経済性を変更しなければならない。我々は、私的ロックに依存する新しい技術に切り替える。各個人に私的ロックを付与することは、我々が公的キーを使用できることを意味する。したがって、もはやＤＲＭ内に公的キーを隠す必要がなくなる。私的ロックが盗まれたとしても、１つのドアのみが開く一方、すべての他のドアはロックされたままである。私的ロックを破るための報酬は、公的ロックと比較して極めて低い。私的ロックを使用することは、盗まれたロックによる損害が自らを制限するものであることを意味する。大きい秘密をクラックすることは、小さい秘密をクラックすることと同じくらい困難であるが、大きい秘密の喪失は壊滅的であることが明らかであるが、数多くあるうちの１つに過ぎない小さい秘密の喪失は、依然として無視できる。
【０２７４】
私的ロックを用いる別の極めて重要な利点は、それらが完全な相互運用性を支持することである。各ベンダーは、自身のメディアセールスに対して異なる私的ロックを使用することができる。どの時点においても、いかなる者も小さい秘密を超えること知ることはない。この技術は非常に単純であり、同一のハードウェアおよび／またはソフトウェア実装を使用して、一意の小さい秘密ソリューションを各個人に送達する。上述される私的ロックは、本明細書において開示される不確定性ランダム値発生器である。各個人は、自身のメディアを開錠するための独自の私的関数を付与され、各メディアデバイスは、この私的関数が搭載され、すべての自身のメディアの公平な個人使用を可能にする。購入される各メディアには、公的キーが供給され、所有者が、すべてのメディアデバイス上でメディアを開錠、解読することを可能にする。ＤＲＭのプロセスは、図２２において説明されるＭＡＣプロセスと同様に機能する。各ユーザ消費者は、各自の私的関数を有し、一意のキーは、購入される各メディアとともに出荷される。消費者は、それらのメディアデバイスのそれぞれにおいて同一のプライベート関数を有し、メディアを認証および解読する。
【０２７５】
本明細書において説明される機能、特徴、利点、構造等のうちのいずれかは、１つ以上のモジュールにおいて具体化され得る。本明細書において説明される機能的ユニットの多くは、それらの実装独立をより具体的に強調するために、モジュールとして標識されている。例えば、モジュールは、ハードウェア回路として実装されてもよく、カスタムＶＬＳＩ回路またはゲートアレイ、論理チップ等の既製の半導体、トランジスタ、または他の個別のコンポーネントを備える。モジュールは、フィールドプログラム可能なゲートアレイ、プログラム可能なアレイ論理、プログラム可能な論理デバイス等のプログラム可能なハードウェアデバイスにおいて実装されてもよい。
【０２７６】
モジュールは、様々な種類のプロセッサによって実行するために、ソフトウェアにおいて実装されてもよい。プログラム可能または実行可能なコードの識別されたモジュールは、例えば、コンピュータ命令の１つ以上の物理または論理ブロックを備えてもよく、これは、例えば、オブジェクト、手順、または機能として組織化されてもよい。それにもかかわらず、識別されたモジュールの実行可能なものは、物理的に一緒に位置する必要はないが、異なる位置に保存される異なる命令を含んでもよく、これらが論理的に互いに結合されると、モジュールを備え、モジュールに定められた目的を達成する。
【０２７７】
実際に、実行可能なコードのモジュールおよび／またはプログラムは、単一の命令、または多くの命令であってもよく、異なるプログラムの中で、いくつかの異なるコード区分全体、およびいくつかのメモリデバイスに渡って分布されてもよい。同様に、作動データが識別され、本明細書においてモジュール内で説明される場合があり、任意の適切な形態で具体化されて、任意の適切な種類のデータ構造内で組織化されてもよい。作動データは、単一のデータセットとして収集されてもよく、または異なる記憶デバイス全体を含む、異なる位置全体に分布されてもよく、単なる電子シグナルとして、システムまたはネットワーク上に少なくとも部分的に存在し得る。
【０２７８】
本明細書において論じられる、様々なシステムコンポーネントおよび／またはモジュールは、以下の、デジタルデータを処理するためのプロセッサを含む、ホストサーバまたは他のコンピューティングシステム、デジタルデータを記憶するための当該プロセッサに連結されるメモリ、デジタルデータを入力するためのプロセッサに連結される入力デジタイザ、当該メモリに記憶され、当該プロセッサによってアクセス可能な、当該プロセッサによってデジタルデータの処理を指向するためのアプリケーションプログラム、当該プロセッサによって処理されるデジタルデータに由来する情報を表示するためのプロセッサおよびメモリに連結される表示装置、および複数のデータベースのうちの１つ以上を含み得る。本明細書において使用される様々なデータベースは、あらゆる形態の圧縮データ、および／または本発明の操作に有用な同様のデータを含んでもよい。当業者に理解されるように、本明細書において論じられる任意のコンピュータは、操作システム（例えば、Ｗｉｎｄｏｗｓ（登録商標）  Ｖｉｓｔａ、ＮＴ、９５／９８／２０００、ＯＳ２、ＵＮＩＸ（登録商標）、Ｌｉｎｕｘ、Ｓｏｌａｒｉｓ、ＭａｃＯＳ等）ならびに様々な従来のサポートソフトウェア、および通常コンピュータと関連付けられるドライバを含んでもよい。コンピュータは、家庭またはビジネス環境において、ネットワークへのアクセスを有してもよい。例示的な実施形態において、アクセスは、商業的に入手可能なウェブブラウザソフトウェアパッケージによってインターネットを経由する。
【０２７９】
本発明は、機能的ブロックコンポーネント、スクリーンショット、ユーザ相互作用、任意選択、様々な処理ステップ等に関して、本明細書に説明され得る。本明細書においてそのように説明されるものはそれぞれ、本発明の例示的な実施形態における１つ以上のモジュールであってもよい。そのような機能的ブロックは、特定の機能を実行するように構成される任意の数のハードウェアおよび／またはソフトウェアコンポーネントによって実現され得ることを理解されたい。例えば、本発明は、様々な集積回路コンポーネント、例えば、メモリ素子、処理素子、論理素子、ルックアップテーブル等を用いてもよく、それらは、１つ以上のマイクロプロセッサまたは他の制御デバイスの制御下、多様な機能を実行し得る。同様に、本発明のソフトウェア素子は、Ｃ、Ｃ＋＋、Ｊａｖａ（登録商標）、ＣＯＢＯＬ、アセンブラー、ＰＥＲＬ、Ｖｉｓｕａｌ  Ｂａｓｉｃ、ＳＱＬ  Ｓｔｏｒｅｄ  Ｐｒｏｃｅｄｕｒｅｓ、ＡＪＡＸ、拡張マークアップ言語（ＸＭＬ）等の任意のプログラミングまたはスクリプト言語で、データ構造、オブジェクト、プロセス、ルーチン、または他のプログラミング要素の任意の組み合わせで実装されている様々なアルゴリズムを用いて実装されてもよい。さらに、本発明は、データ転送、シグナリング、データ処理、ネットワーク制御等のために任意の数の従来技術を用いてもよいことに留意されたい。なおもさらに、本発明は、Ｊａｖａ（登録商標）Ｓｃｒｉｐｔ、ＶＢＳｃｒｉｐｔ等のクライアントサイドのスクリプト言語を用いて、セキュリティ問題を検出または回避し得る。
【０２８０】
追加的に、本明細書における機能的ユニットおよび／またはモジュールの多くは、他の機能的ユニットおよび／またはモジュールと「連通」していると説明される。「連通」しているとは、コンピュータ、ラップトップコンピュータ、ＰＤＡ、モジュール、および他の種類のハードウェアおよび／またはソフトウェア等であるが、これらに限定されない、機能的ユニットおよび／またはモジュールが、相互に連通し得る任意の様式および／または方法を意味する。一部の非限定例は、ネットワーク、ワイヤレスネットワーク、ディスクドライブ、メディアプレーヤー、携帯電話、ネットワーク接続、ハードウェアロック、ＤＮＡシーケンサ、指紋スキャナ、角膜スキャナ、デジタルカメラ、ソフトウェア、命令、回路、電話線、インターネットライン、衛星シグナル、電気シグナル、電場および磁場、ならびに／またはパルス等を介する、データおよびメタデータの通信、送信、および／または受信を含む。
【０２８１】
本明細書で使用される場合、「ネットワーク」という用語は、そのようなハードウェアおよびソフトウェアコンポーネントの両方を組み込む、任意の電子通信手段を含んでもよい。本発明に従う関係者間の通信は、例えば、電話ネットワーク、エクストラネット、イントラネット、インターネット、ポイントオブインタラクション装置（販売時点管理装置、パーソナルデジタルアシスタント、携帯電話、キオスク等）、オンライン通信、オフライン通信、ワイヤレス通信、トランスポンダ通信、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、ネットワークまたはリンクされたデバイス等の任意の適切な通信チャンネルを通じて達成され得る。さらに、本発明は、ＴＣＰ／ＩＰ通信プロトコルで実装されてもよいが、本発明は、ＩＰＸ、Ａｐｐｌｅｔａｌｋ、ＩＰ−６、ＮｅｔＢＩＯＳ、ＯＳＩまたは任意の数の既存または将来のプロトコルを使用して実装されてもよい。ネットワークが、インターネット等の公的ネットワークの性質を帯びている場合、ネットワークは安全でなく、盗聴者に対してオープンであると仮定することが有利であり得る。インターネットに関連して利用されるプロトコル、基準、およびアプリケーションソフトウェアに関連する特定の情報は、一般に当業者に知られているため、本明細書において詳述する必要はない。例えば、参照することによってその内容が本明細書に組み込まれる、ＤＩＬＩＰ  ＮＡＩＫ，ＩＮＴＥＲＮＥＴ  ＳＴＡＮＤＡＲＤＳ  ＡＮＤ  ＰＲＯＴＯＣＯＬＳ（１９９８）、ＪＡＶＡ（登録商標）  ２  ＣＯＭＰＬＥＴＥ，著者多数（Ｓｙｂｅｘ  １９９９）、ＤＥＢＯＲＡＨ  ＲＡＹ  ＡＮＤ  ＥＲＩＣ  ＲＡＹ，  ＭＡＳＴＥＲＩＮＧ  ＨＴＭＬ４．０（１９９７）、およびＬＯＳＨＩＮ，ＴＣＰ／ＩＰ  ＣＬＥＡＲＬＹ  ＥＸＰＬＡＩＮＥＤ（１９９７）を参照されたい。
【０２８２】
上述の好適な実施形態は、本発明の原理の適用に関する例証に過ぎないことを理解されたい。本発明は、その精神または本質的な特徴から逸脱することなく、他の特定形態において具体化され得る。説明される実施形態は、あらゆる点で、限定としてではなく、単なる例証として考慮されるものである。本発明の範囲は、したがって、前述の説明ではなく、添付の請求項によって示される。請求項の等価の意味および範囲内でもたらされるあらゆる変更は、それらの範囲内に包含されるものである。
【０２８３】
したがって、本発明は、現在、本発明の最も実践的かつ好適な実施形態であると見なされるものに関連して、特異性および詳細とともに完全に上述されたが、請求項において説明されるような本発明の原理および概念から逸脱することなく、サイズ、材料、形状、形態、機能、ならびに操作、アセンブリ、および使用の方法における変化を含むが、これらに限定されない多くの修正を行ってもよいことは、当業者には明らかであろう。さらに、実施形態は、本明細書において説明される機能、特徴、構造、および／または方法のうちの１つ以上から成るか、または本質的にそれを含むことに限定され得ることが意図される。
【図１】
0005631312.tif 000026
【図２】
0005631312.tif 000027
【図３】
0005631312.tif 000028
【図４】
0005631312.tif 000029
【図５】
0005631312.tif 000030
【図６】
0005631312.tif 000031
【図７】
0005631312.tif 000032
【図８】
0005631312.tif 000033
【図９】
0005631312.tif 000034
【図１０】
0005631312.tif 000035
【図１１】
0005631312.tif 000036
【図１２】
0005631312.tif 000037
【図１３】
0005631312.tif 000038
【図１４】
0005631312.tif 000039
【図１５】
0005631312.tif 000040
【図１６】
0005631312.tif 000041
【図１７】
0005631312.tif 000042