不確定性ランダム値発生器
一方向性関数を生成し、それによってランダム値ストリームを生じさせるシステムおよび方法。ステップは、定義域値に従ってアドレス指定される複数のメモリセルを提供することであって、任意の所定定義域値がすべての可能性のある値域値に対してマッピングする、ことと、メモリセルのうちの1つと関連付けられるランダム定義域値を生成することと、生成したランダム定義域値と関連付けられるデータ値を読み取ることと、追加量のデータを提供することによって動的に強化されたデータを生成することと、疑わしい非ランダム部分を除去し、それによってソースデータを形成することと、最小ランダムネス要件に従ってソースデータを検証し、それによって検証されたソースデータを形成することと、マスキング、時間変位、カオスエンジン、XOR、上書き、拡張、除去、制御プレーン、またはアドレスプレーンモジュールである、ランダム編集プロセスを使用して、検証されたソースデータをメモリセル位置と統合することと、を含む。拡張モジュールは、ノイズチャンクを挿入する。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願に対する相互参照
本発明は、参照することによって本明細書に組み込まれる、2008年8月6日に出願されたRossの米国暫定特許出願第61/188,213号、およびPatrick D.Rossによる米国非暫定特許出願第12/533,179号に対する国際条約の下で優先権を主張する。
【0002】
本発明は、乱数を生成するための方法およびシステム、特に、乱数ストリームを生成するための方法およびシステムに関する。
【0003】
産業上の適用性
本発明は、これらに限定されないが、コンピュータゲーム、バンキング、通信、およびメディア開発産業等の産業において適用可能である。そのような産業によって利用されるシステムで使用するためのコンピュータハードウェア/ソフトウェアにおいて実装され得る。
【背景技術】
【0004】
多くのアプリケーションは、それらの内部処理の部分としてランダム値を必要とする。これらのアプリケーションの一部は、値の均一分布、所与のシード値からの再現性、およびそれらが反復する前の極めて長いサイクル等の単純な要件を有する。そのために、多くの論文および書籍は、これらの古典的なランダム値発生器を提供する、良好なハードウェアおよびソフトウェア関数について説明している。古典的なランダム値発生器の属性は、依然として有用でもあり、問題でもある。現在のランダム値発生器のいかなる欠陥にも対処する前に、まずこれらの発生器がどのように機能するかを検討しなければならない。
【0005】
ハードウェアベースであるか、またはソフトウェアベースであるかにかかわらず、すべての古典的なランダム値発生器に共通する特性が多数存在する。古典的なランダム値発生器の基礎は、静的ランダム関数の使用である。これらの関数のそれぞれは、現在の非ゼロデータ値をシーケンスにおける次のランダム値へと処理する。それぞれの新しい値の後次処理は、ランダムシーケンスを形成する。良好な関数が使用されると仮定すると、ランダムシーケンスは、ランダムネスに関するほぼすべての周知の統計的試験に合格する。
【0006】
多数のランダム関数が試験および公開されている。これらの公開された関数の大部分は、ランダム値の同一シーケンスを反復する前に、値の制限されたシーケンスを生成する。これらの短サイクル長は、多くのアプリケーションと互換可能となるには、短すぎる場合がある。ハードウェアにおいて、ランダム関数は、最も頻繁に、線形フィードバックシフトレジスタ(LFSR)として説明される。存在するソフトウェア関数は少ないが、新しいアプリケーションに使用するための、多数の確立された関数が設計者に使用可能である。また大部分のソフトウェアランダム関数は、同一の短サイクル属性を共有する。
【0007】
合格または不合格にかかわらず、サイクル長が、統計的試験と正に同じ程度に重要であることは明らかである。非線形様式で複数の公開された関数を結合することは、サイクル長を増大させるための最も一般的な方法である。関数ベースのランダム値発生器は、正確には擬似ランダム発生器と呼ばれ、依然として容易に「クラック」(反転)する。ランダム値発生器をクラックすることは、アタッカーが、シーケンスにおける値のそれぞれを予測することを可能にする。大まかに言って、古典的なランダム関数の複雑性を倍増させることは、それをクラックするために必要な努力を二乗する効果を有する。ハードウェアおよびしたがってコンピュータの速度が増加するにつれて、ランダム値発生器の設計者とそれらを破ることを望むクラッカーとの間の闘いは激化する。
【0008】
この大体の目安を採用して、ハードウェア設計者は、一層複雑なランダム値発生器関数を採択する。関数駆動パラダイムが不完全であることは避けられないため、設計者とクラッカーとの間の闘争は持続する。それぞれの新しい設計は、時代遅れになる運命にあるため、新しいランダム値発生器を形成、試験、および展開するコストは、それによって無制限である。続いて、チップの高い循環コストは、製品コストに直接変換される。この道筋に沿った末端は未知であるため、設計者は、それらの最新の関数が、どれくらいの期間クラッキングから安全であることを証明するかを予測することはできない。
【0009】
漸増する関数の複雑性のコストは、複数の方法で表される。上述されるように、ハードウェアの激しい競争は、避けられない不完全な問題として持続する。ハードウェア技術の新しい飛躍のそれぞれは、クラッカーに先行するように、新しい対応する発生器設計を必要とする。この上昇するコストは、多くのアプリケーション設計者に、ハードウェアベースのソリューションを差し控えさせる。システムコストを削減するために、多くのアプリケーション設計者は、ソフトウェアベースのランダム値発生器を用いる。多くの場合、ソフトウェアソリューションに移行するプロセスは、性能を受け入れがたいほど遅延させるか、またはCPUコストを増大させる。循環コストは、専用シリコンがなく低いが、ソフトウェア実装は、システム性能全体に重い負担をかける。ソフトウェアの複雑性が増大するにつれて、性能は逆に低下する。
【0010】
クラッキングに抵抗しようとして、多くの設計者は、秘密の(非公開の)設計を用いる。秘密裏の開発は、制限された試験、検討、または再使用を余儀なくされる。あいにく、少量の所与の設計は、常にユニットあたりのコストが高いため、秘密裏の開発は、制限された投資利益を保証する。さらに、秘密性は、誰かがハードウェアまたはソフトウェア実施例を得るまで、これらの設計の完全性を維持するに過ぎない。
【0011】
これらの古典的な関数の最終的な脆弱性は、各ランダム関数がその独自のランダムシーケンスを生成するという単純な不変の事実から生じる。言い換えると、ランダム関数と、それが生成する値の一意のシーケンスとの間には1対1の対応がある。そのシーケンスは、その生成関数に関して、「旋律」のように動作する。ランダム「旋律」は、生成されるときに、値とそれらの値の順序の両方として定義される。シード値は、「旋律」がどこで開始するかを定義するに過ぎない。
【0012】
すべての古典的なランダム値発生器は、スカラ値(非ゼロシードから開始する)を使用して、それらの一意の「旋律」が開始する地点をインデックス付けする。古典的なランダム値発生器は、静的関数ベースの構築物であり、擬似ランダムシーケンスの開始を定義する鍵として動作するため、シード値は保護されなければならない。大部分の場合において、シード値のサイズを使用して、全体サイクル長を示す。すべてのハードウェアおよび大部分のソフトウェアベースの古典ランダム値発生器は、ランダム値の生成を開始するために、非ゼロシード値を必要とする。ほぼすべての場合において、ゼロ値シードは、あらゆるランダムストリームの生成に失敗する。
【0013】
クラッキングに抵抗する無駄な努力において、多くの設計者は、秘密の(非公開の)設計を用いる。秘密裏の開発は、制限された試験、検討、または再使用を余儀なくされる。あいにく、少量の所与の設計は、常にユニットあたりのコストが高いため、秘密裏の開発は、制限された投資利益を保証する。さらに、秘密性は、誰かがハードウェアまたはソフトウェア実施例を得るまで、これらの設計の完全性を維持するに過ぎない。必要とされるものは、真のランダム値発生器であって、真の一方向性関数を実装し、非決定性の値のランダムストリームをもたらすもの、および/または本明細書において説明される問題のうちの1つ以上を解決する方法またはシステム、および/または本明細書に精通するようになると、当業者の注目を集め得る1つ以上の問題である。
【発明の概要】
【発明が解決しようとする課題】
【0014】
本発明は、現在の最新技術に対応して、特に、現在使用可能な乱数発生器によって未だに完全に解決されていない、当該技術分野における問題およびニーズに対応して、開発された。したがって、本発明は、拡張された特徴を有する乱数を生成する方法および/またはシステムを提供するように開発された。
【課題を解決するための手段】
【0015】
一実施形態において、多数の新しい技術に基づく、ランダム値発生器の新しいゲノムがあり、以下のモジュールのうちの1つ以上を含むが、これらに限定されない。
・不確定性関数−一方向性関数
・ランダム編集プロセス
・時間変位
・セッションデータの動的展開
・動的シード関数
・完全動的変異
ランダム値発生器のこの新しいゲノムの実施形態は、1つ、いくつかの、またはすべての知られているアプリケーションにおいて、1つ、いくつかの、またはすべての古典的なランダム値発生器の代替として優れている。現在のアプリケーションが古典的なランダム値発生器を使用するときはいつも、新しい不確定性ランダム値発生器の実施形態を、それに代わるように構成してもよい。
【0016】
別の実施形態において、これらの新しい技術のすべてを併せて、ランダム値を生成するための無制限の構造上のソリューションとする。そのような構造上のモデルは、極めて低コストの製品から極めて要求の厳しいアプリケーションまで、それらのランダムデータ要件に基づいて拡大縮小する。
【0017】
さらに別の実施形態において、デバイスにおいて一方向性関数を生成し、それによって、ランダム値ストリームから利益を享受し得るデバイスにおいて使用するためのランダム値ストリームを生じさせる方法があり、a)定義域値に従ってアドレス指定される複数のメモリセルを提供するステップであって、任意の所与の定義域値は、すべての可能性のある値域値をマッピングするステップと、b)複数のメモリセルのうちの1つに関連付けられるランダム定義域アドレス値を生成するステップと、c)生成されたランダム定義域値と関連付けられるデータ値を読み取るステップと、d)ステップb)〜c)を反復して、それによってランダム値ストリームを提供するステップと、を含む。一方向性関数を生成し、それによってランダム値ストリームを生じさせる方法は、追加として、ランダム値ストリームをオリジナルのメモリセル位置およびデータ値から分離し、それによって非決定性ランダム値ストリームを生じさせる手段を提供するステップを含む。
【0018】
さらに別の実施形態において、適切に実装される不確定性ゲノムの実施例は、同一コストの古典的なゲノム発生器よりも反転させることが困難となり、セッションデータ(後に定義される)は損なわれないと仮定する。これは、誰もが同一の公的ハードウェア/ソフトウェアを使用できるが、依然として、クラッキングからの同様の抵抗を有することを意味する。
【0019】
本明細書全体を通して、特徴、利点、または同様の言語に関する言及は、本発明で実現化されてもよい、特徴および利点のすべてが、本発明の実施形態のいずれかの一つであるべきか、または実際にそうであることを暗示しない。むしろ、特徴および利点を言及する言語は、実施形態に関連して説明される特定の特徴、利点、または特性が、本発明の少なくとも1つの実施形態に含まれることを意味すると理解される。したがって、本明細書全体を通して、特徴および利点、および同様の言語に関する議論は、必ずしもそうではないが、同一の実施形態を言及してもよい。
【0020】
さらに、本発明の説明される特徴、利点、および特性は、1つ以上の実施形態において、任意の適切な様式で組み合わされてもよい。当業者は、特定実施形態の特定の特徴または利点のうちの1つ以上を伴わずに、本発明を実施することができることを認識するであろう。他の例において、追加の特徴および利点は、本発明のすべての実施形態に存在しない場合がある、ある実施形態において認識される場合がある。
【0021】
本発明のこれらの特徴および利点は、以下の説明および添付の請求項からより完全に明らかとなるか、または以下で説明されるように、本発明の実施によって教示され得る。
【0022】
本発明の利点が容易に理解されるようにするために、簡単に上述される本発明のより具体的な説明は、1つまたは複数の添付の図面において説明される、特定の実施形態を参照することによってもたらされる。本発明の図面は、原寸に比例していないことに留意されたい。図面は、単なる概略的表示であり、本発明の特定パラメータを描写するものではない。これらの図面は、本発明の典型的実施形態を描くのみであって、したがって、その範囲を限定するものと見なされないことを理解しながら、本発明は、添付の図面を使用することによって、追加の特異性および詳細とともに記述および説明される。
【図面の簡単な説明】
【0023】
【図1】一方向性関数の単純な抽象化を示す図であり、ランダム値は、本発明の一実施形態に従って、データ値を不確定性関数から引き出すことによって生成される。
【図2】本発明の一実施形態に従う、不確定性ランダム値発生器の3つのランダムプレーン、およびその間の相互関係を描く、斜視ブロック図である。
【図3】本発明の一実施形態に従って、抽象化アプローチを使用し、ランダムデータストリームを生成するプロセスの概要を示すフローチャートである。
【図4】データマイニングモジュール/プロセスの実施形態を描くブロック図であり、本発明の一実施形態に従って、値は圧縮データから引き出され、破棄されるゼロ値に関してチェックされ、ソースデータファイルに書き込まれる。
【図5】本発明の一実施形態に従って、ランダム出力ストリームを生成するためのランダム編集プロセスを描く、システムのブロック図である。
【図6】本発明の一実施形態に従って、ランダム出力ストリームを生成するための複数のランダム編集プロセスを実装するシステムのブロック図である。
【図7】本発明の一実施形態に従って、マスク発生器プロセス中のビット操作を説明する。
【図8】チャンキングプロセスを描くシステムフロー図であり、本発明の一実施形態に従って、データストリームは、可変サイズのチャンクにチャンク化される。
【図9】置換ランダム編集プロセス中のビット操作を示し、データチャンクは、等量のターゲットストリームビットを置換する。
【図10】非破壊的である拡張ランダム編集プロセス中のビット操作を示し、本発明の一実施形態に従って、各チャンクは、ターゲットストリームビットの間に「挿入」される。
【図11】カオスエンジンを表すシステム図であり、本発明の一実施形態に従って、命令は解読され、適切なランダム編集プロセスはREP表から選択される。
【図12】本発明の一実施形態に従って、2つの古典的な関数を使用して、書き込みおよび読み取り(引き出し)アドレスを生成する、時間変位プロセスを表すシステムフロー図である。
【図13】本発明の一実施形態に従って、ランダムアドレスストリームを生成する、短サイクルランダム編集プロセスを描く、システムフロー図である。
【図14】本発明の一実施形態に従って、古典的なブロックと関連付けられる一般的なインターフェースを描く、システム図である。
【図15】本発明の一実施形態に従って、アンセーフメモリアドレスの間接的ランダムストリームを使用して、値をデータプールから引き出す、ハイブリッドアドレス発生器を描くシステムフロー図である。
【図16】本発明の一実施形態に従って、Xセーフアドレス発生器と称される、データパラドックスセーフランダムアドレスを形成するように、不確定性関数を適用する第2の方法を描くシステムフロー図である。
【図17】本発明の一実施形態に従って、セーフランダムデータストリームを形成するのに使用されている2つの短サイクルプロセスで構成される、ハードウェア実施例1を表すシステムフロー図である。
【発明を実施するための形態】
【0024】
本発明の原理の理解を促す目的で、ここで1つまたは複数の図面において説明される例示的実施形態を参照し、特定の言語を使用して、それらを説明する。それにもかかわらず、本発明の範囲の制限は、それによって意図されないことが理解される。本明細書において説明される発明的特徴のいかなる変更、およびさらなる修正、および本明細書において説明されるような本発明の原理に関するいかなる追加の適用は、関連技術分野において熟練し、本開示の所有権を有する者であれば生じると思われ、本発明の範囲内であると見なされる。
【0025】
本明細書全体を通して、「実施形態」、「実施例」または同様の言語に関する言及は、実施形態と関連して説明されるその特定の特徴、構造、特性、またはそれらの組み合わせが、本発明の少なくとも1つの実施形態に含まれることを意味する。したがって、本明細書全体を通して、「実施形態」、「実施例」という語句、および同様の言語の出現は、必ずしもそうではないが、すべての同一の実施形態、異なる実施形態、または図面のうちの1つ以上を参照する。さらに、2つ以上の特徴、要素等に対する「実施形態」、「実施例」等の表現に関する言及は、特徴が必ずしも関連している、類似していない、同一である等を意味しない。
【0026】
実施形態、または実施例の各記述は、各実施形態を特徴付ける類似または同一の言語の任意の使用にかかわらず、実施形態の任意の他の記述から独立していると見なされる。したがって、一実施形態が「別の実施形態」として識別されると、識別された実施形態は、「別の実施形態」という言語によって特徴付けられる任意の他の実施形態から独立している。本明細書において説明される特徴、機能等は、請求項および/または技術が直接または間接的、暗示的または明示的のいずれかで示し得るように、全体または概して部分的に組み合わせることができると考えられる。
【0027】
本明細書で使用される場合、「含む(comprising)」、含む(including)」、含む(containing)」、「である(is)」、「である(are)」、「によって特徴付けられる(characterized by)」、およびそれらの文法的に等しい語は、包括的または無制限の用語であり、追加の引用されない要素または方法ステップを排除しない。「含む、備える(comprising)」は、「から成る(consisting)」および「本質的に〜から成るconsisting essentially of)」というより制限的な用語を含むものとして解釈される。
【0028】
代数の生徒として、我々はこの点を繰り返し続ける各後次の数学の授業で、等号の神聖性を教示される。両辺を等しく保つために、等式の右辺を修正したのと同一様式で等式の左辺を修正しなければならない。我々は、等号の神聖な保存によって、すべて教示、試験、評点、および進級される。したがって、我々の共通の数学訓練は、一方向性関数の概念を思い付くことを困難にする。
【0029】
定義によれば、一方向性関数は、極めて容易に計算を進めることができるが、反転することは極めて困難である。一方向性関数の拡張定義は、多くの教科書において、ならびにオンラインで定義される。
【0030】
最も頻繁に提供される実施例は、トラップドア一方向性関数であり、2つの極めて大きい素数の積である。積は容易に計算されるが、この積の因数分解は、依然として計算が極めて困難である。2つの大きい素数の解の因数分解は、「実証可能に困難な」問題のクラスに分類される。言い換えれば、「実証可能に困難な」という用語は、そのような関数を反転する困難性を反映するベンチマークを表す。800桁の素数と900桁の素数との掛け算を考慮すると、この積を元の2つの素数に因数分解することの困難性を想像できる。
【0031】
「実証可能に困難な」という古い基準は十分ではない。実際の目的は、有用な真の一方向性関数、反転することができないものであるべきある。今日まで、そのような関数は発見されていない。我々は、共通の数学訓練が障害となっているため、等号の神聖性に支配されている。一方向性関数は、数学問題として知られているが、解法は、コンピュータサイエンスから得られる。
【0032】
具体的に、プログラミングのオブジェクトパラダイムに移る。抽象化は、一組の操作要件であり、実装詳細の定義を含まない。これらの要件を満たす任意の実装は、抽象化されたクラスの一員である。これらの2つの単純な文章は、等号の支配を破る手段を提供する。
【0033】
ランダム値発生器の抽象化を、ランダム値を生成するクラスとして定義することから始める。この一般的ベースクラスは、ソリューションの開始点である。次に、ランダム値を生じさせる、それらの公開された古典的なランダム関数に戻る。各公開された関数実装は、上記の抽象化クラスの一員となる。これまでのところ、新しいことは何もない。この抽象化のこれらのバージョンのそれぞれは、すべて古典的なランダム値発生器と同一の問題を有する。
【0034】
関数を使用してランダム値を計算する代わりに、抽象化実装を変更しながら、データ値をデータプール(メモリ階層)から引き出す。プール内のデータがランダムに開始し、プールが十分に大きい場合、抽象化は、ランダムストリームを生じさせ、これは古典的なランダム関数のすべての周知の欠陥を克服する。
【0035】
抽象化のこのバージョンは、最大データプールのサイズまで真の一方向性関数である。プールにデータの正確なコピーを有しない限り、あまり典型的な関数でないため、この関数を反転させることはできない。抽象化は、関数のように見え、関数のように動作するが、関数の他の特徴を含まない。これは、不確定性関数と称され、入手可能な最も単純な実施形態である。図1は、一方向性関数の単純な抽象化を示す図であり、ランダム値120は、本発明のこの単純な実施形態に従って、データ値をデータプール115から引き出す110ことによって生成される。これは、ハードウェア(シリコン)またはソフトウェアのいずれかで容易に実装できる。
【0036】
この単純なデータ駆動不確定性関数は、すべての周知の古典的なランダム値関数、加えてすべての他のランダムシーケンスを(最大データプールサイズ115まで)模倣することができる。データプール115の一意の例の各々は、一意のデータストリームをもたらす。同一のデータプール115は、データプール115にアクセスするために使用される、各一意のアドレス指定方法論に対して、一意のデータストリームを付与する。
【0037】
良好なデータの所与の1つのコピーを用いて、同一順序でメモリにロードされる同一データは、データが同一様式でデータプールから引き出される場合、毎回同一のシーケンスを生じさせる。その同一データが毎回異なる順序でメモリにロードされる場合、生成されるシーケンスも毎回異なる。大量のデータを用いて、この不確定性関数は、同一データからほぼ無制限の数のランダムシーケンスを生じさせることができる。
【0038】
古典的なランダム値発生器は、1つの一意の「旋律」を有する関数に基づいているため、クラッキングされやすいが、一方で、このバージョンの不確定性関数は、データ駆動であり、一意の「旋律」を有しないため、クラッキングに抵抗性である。ランダム値発生器をクラッキングするための技術は、暗示的に、ランダム値発生器が、単一の「旋律」を有する静的関数として実装されると仮定する。しかしながら、ランダム値を生成する基礎関数がない場合、これらのクラッキング技術に何が起こるであろうか。
【0039】
データをデータプールから引き出すことは、ランダム値を生成するための極めて低コストのソリューションである。実際に、ランダムデータを生じさせるための安価な手段を見出すことは非常に困難である。不確定性ランダム値発生器は、広範囲の製品にインストールされるように、同一の公的シリコン/ソフトウェアソリューションを誘う。得られるコスト低減は、多くの製品に波及する。
【0040】
少量(データプールサイズ以下)のランダムデータを必要とするアプリケーションは、この不確定性関数を完全なソリューションとして使用することができる。しかしながら、それを行う前に、線形アドレス指定の危険性、データパラドックスのリスク、およびセッションデータの陳腐化を理解しなければならない。これらの問題は、ソースデータおよびセッションデータが説明された後、以下で論じられる。
【0041】
この一方向性関数の有用性は、多くの異なる方法で現れる。これ以降、この一方向性関数は、不確定性関数と称される。メモリ内のランダム値は、「不確定性のプール」となる。したがって、設計内で任意の非決定性値を必要とする場合はいつも、プールに進み、それらを取得する。非反転可能ランダムデータストリームを生じさせるだけでなく、それを使用して、古典的な擬似ランダム発生器において見出される「旋律」を除去するために使用することもできる(例えば、セーフアドレスストリームを参照)。この一般的な不確定性関数は、極めて単純な設計を使用して、同一設計実装からほぼ無制限の数のランダムストリームを達成することを可能にする。
【0042】
1対1(定義域対値域)モデル
伝統的な関数は、定義域値および値域値の1対1マッピングに従う。定義域は独立変数(入力値)であり、一方値域は従属変数(出力値)である。定義域値および値域値の立場を交換すると、次に、元の関数の反転が得られる。
【0043】
多対1(定義域対値域)モデル
ハッシュ関数は、ある種のデータを比較的小さい整数にマッピングする。ハッシュ関数のプロセスは、複数のデータブロックを同一の値域値にマッピングできるように、定義域データを縮小する。このデータ喪失は、ハッシュ関数の単一反転を形成できないことを意味する。ハッシュ関数モデルを反転することはできないが、その固有の情報喪失は、それが一方向性関数でないことを意味する。
【0044】
1対多(定義域対値域)モデル
一方向性関数は、1対多(定義域対値域)関数モデルを支持しなければならない。不確定性関数を厳重に検査すると、定義域は、1つまたは複数のデータプール内の任意の有効メモリアドレスであるが、値域は、メモリセルに保存される任意の値であることが分かる。これは、各定義域値(メモリアドレス)が、すべての可能性のある値域値を含むことができることを意味する。最初に、任意の所与の定義域値に対して値域値が完全に非決定性であるところで関数を有し、したがって、不確定性関数が一方向性関数であることを証明する。
【0045】
さらに、不確定性関数は、以下を含む暗号プリミティブを形成するための極めて単純な手段も可能にする。
・擬似乱数発生器
・擬似ランダム関数ファミリー
・ビットコミットメントスキーム
・適応選択された暗号文攻撃に対して安全な私的鍵暗号化スキーム
・メッセージ認証コード
・デジタル署名スキーム(適合選択されたメッセージ攻撃に対して安全)
不確定性関数は、真の一方向性関数を呈することをはるかに超える値を有する。メモリセルを使用して、値域値を保持することは、一定スカラ値以外の他の可能性を暗示する。メモリセル内のスカラ値の代わりに、オブジェクトポインタを仮定する。オブジェクトポインタの起動は、動的関数が単純な静的値の代わりに、異なる値を戻すことを可能にする。そのようなオブジェクトポインタの一実施例は、完全に新しい不確定性関数である。
【0046】
アドレス指定する必要がある、ランダム数発生器に使用されるいくつかの用語があり、最初は擬似乱数発生器(PRNG)である。PRNGは、古典的なランダム値発生器を使用して、「ランダム」数のストリームを生成するが、それらは静的関数および固定シード値を使用するため、それらは反転することができる。現在の形態のこれらの種類のランダム発生器は、「数」という用語を使用する。以下の説明において、不確定性ランダム値発生器(URVG)という用語は、本発明を参照して使用される。「値」という用語は、本説明全体を通して使用されるが、不確定性乱数発生器URNGのように、「数」という用語を使用することと同一である。
【0047】
前述されるように、古典的なランダム関数は、多次元問題に対する一次元の解答に過ぎない。不確定性関数の導入は、ここで、データ、アドレス、およびランダムネスの制御プレーンを含む、複数の革新機会を支持する単純な方法を有することを意味する。ランダムネスの各プレーンは、その他のプレーンに影響することなく展開することができる。図2は、本発明の一実施形態に従う、不確定性ランダム値発生器の3つのランダムプレーン、およびその間の相互関係を描く、斜視ブロック図である。
【0048】
ランダムネスのデータプレーン
不確定性関数と称されるデータプレーン210は、1つまたは複数の入力データプール、セッションデータプール215で形成される。データは、アプリケーション要件に応じて、各ランダム値発生器の実行または動的展開(完全動的変異)に対して、依然として静的であり得る。1つまたは複数のデータプールのメモリセルは、値域値を含む。
【0049】
メモリコンテンツ対メモリアドレス指定の独立性は、明らかに、データプレーンをアドレスプレーンから区別される。これは、設計内のアドレス指定に影響することなく、メモリのコンテンツを変更できることを意味する。この革新の影響は劇的であり、同一ハードウェア/ソフトウェア実装を考えると、URNGの各使用は、異なる不確定性のプールを使用することによって一意にすることができる。
【0050】
ランダムネスのアドレスプレーン
ランダム編集プロセスとも称される、ランダムネスのアドレスプレーン220は、データプールメモリアドレス(定義域値)を形成する手段である。全体として、アドレスプレーンの目的は、1セッション実行内で、出力ランダムシーケンスを反復することなく、データプレーン210にインデックス付けすること225である。これは、ランダムアドレスサイクル長は、目標量のランダムデータともに増大し得ることを必要とする。
【0051】
ランダムネスの制御プレーン
ランダム編集プロセスとも称される、ランダムネスの制御プレーン235は、初期化および動的制御プロセス235(プログラムデータ)を含む。ソース/セッションデータ(不確定性のプール)は、値域データおよびプログラムデータの両方を含む。実際に、セッションデータ215内の任意の所与のデータ値は、値域データおよび/またはプログラムデータであり得る。
【0052】
大部分の古典的なランダム値発生器は、公開関数を使用して、ランダム値を生成する。しかしながら、私的ランダムストリームを求める場合、公開関数の典型的な使用は、重大な不利益を有する。私的関数を構築するために、多数の公開関数を、何らかの様式で、(秘密裏に)組み合わせる必要がある。さらに、ユーザは、私的ランダムストリームを形成および維持するために、公開関数のシード値を隠すか、または秘密にしておかなければならない。
【0053】
標準PRNGは、単純なスカラーシード値を有する。正にその性質によって、URNGは、より複雑なシード仕様を必要とする。URNGを開始することは、2つまたは3つの値、どのPRNGを開始するか、そのPRNGのシード値、および任意選択で、そのPRNGのランレングスの選択を必要とする。この複数値セットは、シードベクトルと呼ばれる。
【0054】
シードベクトルは、直接または間接的に付与することができる。各ベクトルタイプは、異なる特性を有する。直接シードベクトルは、値の単純なセットである。直接シードベクトルの利点は、膨大な数の一意のランダムストリームを同一URNGから形成できることである。しかしながら、URNGおよびそれが生成する一意のストリームに関する相当量の情報を暴露するため、このベクトルをあらゆる標準PRNGシード値のように保護しなければならないことが不都合な点である。
【0055】
間接的シードベクトルは、不確定性のプールにおいて見出される。単純な間接的スカラ値は、単なるプールへのオフセットである。この間接的値の利点は、いかなる保護をも必要とせず、したがって、「クリア」で送信できることである。間接的シードベクトルの不利益は、不確定性のプールが、それらを限定数保持できるに過ぎない。暗示的な間接的値は、プール内の周知の場所を指す。
【0056】
一部のアプリケーションにおいて、動的シードベクトルが極めて有用である場合がある。通常のシードベクトルは、一部の時間ベースの関数および/またはトランザクションカウントを有する動的シードベクトルに更新される。更新されたベクトルは、一意のランダムストリームを時間の関数として形成する。この動的シードベクトルは、静的および動的セッションデータの両方を用いて十分に機能する。間接的な動的シードベクトルを使用することは、不確定性のプール内の制限された空間に対する有効な次善策である。明らかに、動的シードベクトルは、不確定性を強化する。
【0057】
一部のアプリケーションは、複数のランダムストリームを必要とする。複数のシードベクトルの使用は、不確定性の同一プールの活用を可能にする。これらのベクトルが特定される方法は、アプリケーションに依存する。しかしながら、1つの方法は、1つのベクトルを特定し、それから複数の「1オフベクトル」を形成するための標準的な手段を定義することである。
【0058】
不確定性関数内の一意のデータは、私的関数を形成して、ランダム値を生成する。これは、公的シード値を使用して、私的ランダムストリームを形成できることを意味する。幸いなことに、このプロセスは、さらに1ステップ先へと進めることができ、公的シード値は、1つまたは複数のデータプールのメモリアドレス(間接的公的シード値)である可能性がある。この方法の下で、一意のセッションデータ215を保持する者は、公的キーの真の値を知る唯一の者である。
【0059】
不確定性ランダム値発生器内で、実装の一部として、異なる古典ランダム値発生器を有する可能性がある。一部の場合において、ほんの少数の古典的な関数のみが、全体セッション実行中に使用されるが、他の例では、異なるランレングスの異なる古典的な関数間に動的スイッチングがある。どの古典的な関数、シード値、およびランレングスをピッキングするかの制御プロセスは、一意のプログラムデータを介して動的に割り当てることができる。各初期化パラメータは、不確定性のプールに由来し、これは不確定データに対する動的依存が、URNGから決定性動作を除去するのを助けることを意味することに留意されたい。不確定性ランダム値発生器は、多次元問題に対する多次元の解答を提供する。
【0060】
図3は、本発明の一実施形態に従って、抽象化アプローチを使用し、ランダムデータストリームを生成するプロセスの概要を示すフローチャートである。任意のランダムデータソースは、ソースデータの形成に使用され得る。これらのソースは、放射性崩壊、半導体における熱雑音、雑音環境において取られる音サンプル、およびさらにはラーヴァランプのデジタル画像等の物理現象を測定することによって決定される、予測できない乱数を含んでもよい。
【0061】
他のより容易に得られる擬似ランダムデータの候補は、MPEG、JPEG、および他の圧縮ファイルから成る圧縮ファイルである。擬似ランダムデータ310は、圧縮データファイルとして、大部分のコンピュータメモリ階層に豊富に含まれ、ランダムデータプールを形成するためのソースとして使用することができる。データマイニングプロセス320は、擬似ランダムデータ310から値をランダムに引き出し、それらをソースデータ340ファイルにランダムに書き込む。すべての値は、ゼロ値330に対して試験され、ゼロ値を有するデータは破棄される335。ソースデータ340を使用してランダム値ストリームを形成する前に、最初にそれを検証(350)しなければならない。検証プロセス500後、有効なソースデータ360を使用して、ランダムデータストリーム395を形成することができる。有効なソースデータ360データマイニング370が存在すると、有効なソースデータ360は、セッションデータ380を形成する。このセッションデータ380は、依然としてハッカーから完全に隠されず、分離プロセス390を行わなければならない。
【0062】
分離プロセス390中、セッションデータ380と得られるランダム値ストリーム395との間の関係が破壊される。セッションデータ380には、動的セッションデータプールと静的セッションデータプールの2種類がある。動的セッションデータプールは、一度使用されると破棄される。動的セッションデータプールの適用は、通話、インターネット取引、クレジットカード取引、2者以上の間の任意の種類の通信を含む。静的セッションデータプールの使用の実施例には、これらに限定されないが、メディアプレーヤー装置におけるデータの暗号化、およびデジタル著作権管理(DRM)アプリケーションが挙げられる。静的ランダムデータプールは保管され、データの暗号化および解読に使用される。
【0063】
ソースデータの形成
すべてのデータを試験したとき、良好なランダムデータは、バイナリデータにおいて、ほぼ等しい数のゼロおよび1を有するはずである。バイナリレベルにおいて、圧倒的多数のゼロまたは1は、我々が求めている均衡データとは見なされない。このプロセスにおける我々の全体的な目的は、未知の形成「旋律」を有するセッションデータであることに留意されたい。全体的な目的に留意する限り、ランダムデータを見出する場所は広大である。そのような場所の1つは、前述されるような圧縮データである。これらのファイルは、バイナリデータにおいて、等確率のゼロおよび1を有する。当然のことながら、これは、圧縮ファイルにおいて見出されるファイル構造情報をカウントすることではない。
【0064】
ファイル構造をステップオーバーしながら、データマイニング圧縮ファイルのプロセスは、ソースデータを効果的に形成する。データマイニングできる多くの方法があるにもかかわらず、1つの方法は、複数の圧縮ファイルを開き、ソースデータの形成を完了するまで、開いたファイル間でランダムにサンプリングすることである。最良の結果を得るために、1回に1バイトがサンプリングサイズであるべきである。ソースデータは、不確定性ランダム値発生器によって利用される、すべての可能性のあるデータを含むファイルとして定義される。
【0065】
圧縮データのみをマイニングするために、マイニングソフトウェアは、ファイル形式を知らなければならない。言い換えれば、ファイル構造情報をデータとして、圧縮ファイル内の唯一のデータとしてピックアップしないよう注意しなければならない。ソースデータ340を形成するデータマイニングプロセスは、いかなるゼロ値もファイルに入れることを回避する。あらゆるゼロ値は、ハードウェアおよびソフトウェア機能の大部分において無効である。ゼロ値をソースデータ340に入れるべきではない。
【0066】
図4は、データマイニングモジュール/プロセス400の実施形態を描くブロック図であり、本発明の一実施形態に従って、値は圧縮データ410から引き出され、破棄される(464)ゼロ値をチェック(463)した後、ソースデータファイル490に書き込む(482)。ソースデータ490の形成は、アドレス読み取り(引き出し)する古典的な関数440を中心に展開する。入力は、制御シグナル、シード値428、ランレングスカウント値438を含む。初期シードインデックス420を使用して、メモリコンテンツ412を引き出し、これが現行のシード値428となる。初期ランレングスカウントインデックス430を使用して、現行のランレングスカウント値438となるメモリコンテンツ414を引き出す。次に、現行の古典的な関数440は、アドレスインデックスストリーム442を生じさせ始め、それを使用して、複数の圧縮データファイル470のうちの1つから値を引き出す(466)。複数の圧縮データファイルが使用される場合、ソースデータセレクタ460は、圧縮データ470のプールにおいて、適切な圧縮データファイル410a〜410nに接続する。この接続を決定する多くの方法があり、これらに限定されないが、圧縮データファイルを連続的にサイクルすること、または異なる圧縮データファイル470にランダムに接続することを含む。現行の読み取り(引き出し)アドレスインデックス442を使用して、選択した圧縮データファイル410から値を引き出す。圧縮データファイル410から引き出される各値467をチェックして、値がゼロ463に等しいか否かを決定し、いかなるゼロ値464も破棄する。ソースデータは、起こった順番にソースファイル490に書き込まれる。データファイルサイズ適合ユニット480は、いつソースファイル490が満たされるか、またはさらなるデータを必要とし、シグナル446をアドレス読み取り(引き出し)の古典的な関数440にフィードバックするかを決定する。
【0067】
このプロセスに対するオプションは、古典的な関数を読み取り(引き出し)アドレス古典的な関数440に動的に変更することである。動的変更の別の方法は、データマイニングプロセス400を通じて、シードインデックス428およびランレングスカウントインデックス438を変更することを含む。再初期化ユニット450は、データファイルサイズ適合ユニット480から命令を受信し得る。再初期化ユニット450は、シード値再初期化値426をシードユニット429に伝送し、ランレングスカウント再初期化値436をランレングスカウントユニット439に伝送する。
【0068】
ソースデータ490の構成後、検証プロセス350を開始する。様々な良好な統計試験スイートを利用して、ランダムデータを検証することができる。米国標準技術局(NIST)は、1つのそのようなパッケージを作成している(NIST Special Publication SP800−22)。任意の検証プロセス350の失敗は、このソースデータ490を無効化するのに十分であり、この場合、別のものを形成する必要がある。検証試験は以下を含む。
・NIST試験スイート
・Maurerの普遍統計則
・Lempel−Ziv複雑性
・近似エントロピー
この検証プロセス350を完了すると、ソースデータ490が検証される。多数の機能不全データセットを不適格とする検証プロセス350を通して、実質的に無制限の数の有効なソースデータ490が適切に機能することも確認する。検証ソースデータ490のサイズは固定されない。唯一の要件は、良好なランダムストリームを形成するのに十分大きいことを含む。
【0069】
セッションデータの形成
経時的に、不確定性ランダム値発生器における同一データを常に使用することは問題を生じる。同一データプールの反復使用によって、クラッカーは、そのデータセットが使用されているかを判定する場合がある。データプールにおいて陳腐化したデータのリフレッシュを達成する方法は多数あるが、新しいステップが提案されている。有効なソースデータ360をマイニングして(370)、不確定性ランダム値発生器の各使用のための新しいセッションデータを形成する。ネームセッションデータ380は、1回だけ(または多くても数回)使用された後、破棄されるため、データを正確に記述する。またセッションデータ380は、有効なソースデータ360と同様の方法で検証され得る(350)。このようにして、不確定性ランダム値発生器におけるデータは、フレッシュなままであり、したがって解読できない。
【0070】
セッションデータ380は、不確定性ランダム値発生器の各実行に使用される、ソースデータ360の適切なサブセットである。有効なソースデータ360のサイズとセッションデータ380との間に暗黙の依存性は存在しない。例えば、ソースデータ360は、セッションデータ380要件よりも大きいと仮定する人もいるかもしれない。しかしながら、それは絶対ではない。必要とされるセッションデータ380よりも小さいソースデータ360を有する場合、マイニングプロセス370は、セッションデータ380要件が満たされるまで継続する。したがって、ソースデータ360は、セッションデータ380よりも小さいか、または大きい場合がある。ハードウェアまたはソフトウェアは、異なるサイズのセッションデータ380セットを支持し得る。セッションデータ380セットサイズは、目標のアプリケーションによって変化する可能性が高い。しかしながら、私的なランダムストリームが所望される場合、公開関数の典型的な使用は、深刻な不利益を有する。私的な関数を構築することは、多数の公的な関数をなんらかの方法で(秘密裏に)組み合わせる必要がある。さらに、ユーザは、私的なランダムストリームを形成および維持するために、公開関数のシード値を隠すか、または秘密にしなければならない。未知の形成「旋律」を有する良好なデータを有すると、進行する準備ができる。
【0071】
各一意のハードウェアまたはソフトウェア不確定性ランダム値発生器設計は、異なる方法で、一意のセッションデータ380と相互作用する。所定の不確定性ランダム値発生器設計から「検証した」出力データを作成できない「検証した」セッションデータ380を有することができる。したがって、この問題を最小化するために、ランダム編集プロセス(以下のランダム編集プロセスを参照)およびセッションデータ380の両方を慎重に調整しなければならない。形成される可能性があるすべての可能性のあるソース/セッションデータセットのうち、一部のみが正常に機能する。
【0072】
ランダム編集モジュール/プロセス
上述されるように、古典的な一次元ランダム値発生器は、多次元問題を解決することができない。代わりに、この問題は、不確定ランダムネスを確立するソリューションを必要とする。これは、無制限のソリューションセットの基礎を築く、単純概念によって達成され、いくつかの実施例が提供される。1つ以上のランダム編集モジュール/プロセスの適用は、任意の下層「旋律」を破壊することによって、不確定ランダムネスを得る。ランダム編集モジュール/プロセスを使用して、追加のランダムネスを、1つ以上のランダム入力ストリームのセットに統合する。複数のランダムストリームを合わせて混合することは、入力ストリームの「旋律」の一部/大部分/すべてを除去する傾向がある。ランダム編集プロセスは、1つ以上のランダムストリームを必要とし、そのうちの1つは「編集ストリーム」として定義される。編集ストリームデータは、ビットまたは他の入力ストリームからの値の順序を変更するためだけに使用され、そうでなければ出力ストリームにおいて目に見えることはない。実際に、編集プロセスは、すでにランダムな入力ストリームを新たなランダム出力ストリームに変異させる。
【0073】
図5は、本発明の一実施形態に従って、ランダム出力ストリーム540を生じさせるためのランダム編集プロセスを描写する、システムのブロック図である。入力ストリームのうちの少なくとも1つは、編集ストリーム510でなければならない。ランダム編集モジュール/プロセス500は、1つ以上の入力データストリーム520を変更し、この編集ストリーム510データは、出力ストリーム540から分離されたままである。編集という用語は、1つ以上の入力データストリーム上で取られる動作を説明する。編集プロセス500は、1つ以上のすでにランダムな入力ストリーム520を新しいランダム出力ストリーム540に変異させる。
【0074】
図6は、本発明の一実施形態に従って、ランダム出力ストリームを生成するための複数ランダム編集プロセスを実装する、システムのブロック図である。いくつかのランダム編集プロセス500a〜500nは、入力ストリーム540a〜540nを別のランダム編集プロセス500mに提供する。入力ストリームのうちの1つは、編集ストリームでなければならない。複数レベルのランダム編集モジュール/プロセス500は、ユーザが、必要に応じて単純または複雑なシステムを設計できるようにする。抽象化アプローチと組み合わされる共通インターフェースは、容易に拡張されるアーキテクチャをもたらす。
【0075】
簡単に表現すれば、ランダム編集モジュール/プロセス500は、付加的ランダムネスを追加する。編集プロセスは、これらの入力ストリームを、ランダム編集プロセスで動的に変更し、付加的ランダムネスをもたらす。全体的な結果は、任意の入力ストリームの「旋律」をもはや含まない、新しいランダム出力ストリームである。いかなるデータも編集ストリームに由来することは決してないため、編集ストリームを識別するための「法医学的な証拠」はない。言い換えれば、出力ストリームは、入力ストリームにおける旋律の「メモリ」を喪失した。
【0076】
ランダム編集モジュール/プロセス500の第1の使用は、データプールにランダムにアドレス指定して、データを引き出すことである。新しいランダムストリームが生じると、いかなる編集法医学的証拠をも残すことなく、オリジナルの「旋律」(セッションデータの複製)が喪失する(不可視になる)。オリジナルのランダムストリーム(セッションデータ)は、ランダムネスの一意のストリームに変異されている。ランダムネスのこれらのプレーンのそれぞれは、他に影響することなく、個別に展開することができる。
【0077】
線形アドレスを使用して、データプールからデータを引き出すことは、最大データプールサイズのランダムストリームを生じさせる。これは、極めて小さいランダムデータ要件に対しては機能するが、データプールコンテンツを暴露する。線形アドレス指定は、データプールへのアクセスには決して使用されてはならない。本明細書で説明される機能、特徴、利益、構造等のいずれかは、プロセスとも称される1つ以上のモジュールにおいて具体化され得る。
【0078】
マスク発生器
ここに、稼動中のランダム編集プロセスの別の実施例がある。図7は、結果ストリーム650を形成するため(640)のビットごとのプロセスを示す、本発明の一実施形態に従う、マスク発生器プロセス600中のビット操作を説明する。データ0 612、データ1 622、およびマスクストリーム602と呼ばれる3つのランダムストリームは、マスク発生器に対する入力ストリームである。1つのストリームは編集に使用され、マスクストリーム602と称される。他の2つのストリーム、データ0 612およびデータ1 622は、マスクストリーム602によって編集され、結果ストリーム650を形成する。各マスクビット「0」604は、対応するデータ0ビット630をデータ0ストリーム612から選択する。各マスクビット「1」606は、対応するデータ1ビット632をデータ1 622から選択する。各結果ビットが決定されると、それは結果ストリーム650に連続的に追加される。以下のCプログラミング言語コードは、マスク発生器プロセスを示す。
【0079】
【数1】
【0080】
マスクストリーム602は、2つの異なる入力値からデータを破壊的に「編集する」ために利用されるに過ぎず、そのため、マスク値が出力値において目に見えることはない。ビットの一部をデータ0ストリーム612から、残りのビットをデータ1ストリーム622からランダムに取ることによって、いかなるマスクビットも出力に追加することなく、編集プロセスは、入力または出力に関して未知である(目に見えない)。これらの3つのストリームから得た次の3つの値は、さらに別の未知値を生じる。
【0081】
マスク発生器600は、入力ストリームの「旋律」を分離する単純な方法として優れている。これらの3つのランダムストリームが相互作用すると、それらは、二次「旋律」を生じさせるが、一次旋律のすべての痕跡は喪失する。一次旋律を解体することは全体的な「旋律」問題を部分的に解決するに過ぎない。二次「旋律」も解体されなければならない。単一のランダム編集プロセスは、完全なソリューションにならないが、一次旋律を破壊する方法を教示する。ビットレベルでマスク発生器を見ることは、ランダム編集プロセスの結果を説明する。
【0082】
より長いサイクル周期
ランダム編集プロセスには別の利点がある。すなわち、はるかに長いサイクル周期である。より長いサイクル長は、分化したサイクル長を入力ストリーム上で使用する場合、各サイクル長の産物に到達するまで、各入力ストリームは他と同期しないという単純な概念に基づく。入力ストリームに対して分化したサイクル長で開始する場合、次に、ランダム編集プロセスは、極めて長いサイクル周期を促進する。それぞれ異なるサイクル周期を有する3つのランダムな古典的な関数で開始し、これらの異なる周期の長さをP1、P2、およびP3と標識する。マスク発生器は、全体期間P1*P2*P3を有し、この積はS1と標識される。この単一ステージマスク発生器は、3つの入力ストリームで形成され、入力ストリーム期間と比較して極めて長いサイクル周期を有する。
【0083】
しかしながら、一部のアプリケーションは、さらに長いサイクル周期を要する。これは、分化したサイクル長S1、S2、およびS3を有する、3つの単一ステージマスク発生器で構成することができる。これらのマスク発生器を、第2ステージマスク発生器を構成する別のマスク発生器に対する入力として使用する。これは、非常に大きい数の全体サイクル周期S1*S2*S3を有する。したがって、マスク発生器をスタッキングするパターン、または任意の他のランダム編集プロセスを定義して、任意の恣意的期間を形成する。
【0084】
一般的な経験則として、分化したサイクル長の各追加ランダム編集プロセスは、乗算される別の項を追加して、発生器の全体サイクル周期を計算する。以下のCプログラミング言語コードは、第2ステージマスク発生器の実施例である。
【0085】
【数2】
【0086】
この特徴の背後にいくつかの実数がある。最も単純なソフトウェアランダム値発生器(線形合同)を最大周期近くで利用すると、ステージ1マスク発生器の全体期間は、約295となる。第2ステージマスク発生器の場合、サイクルは約2288となり、一方、第3ステージマスク発生器は、約2850となる。これらの値は、共通の32ビット計算を仮定する。64ビット計算の場合、ステージ1は約2191であり、ステージ2は約2575となり、一方、ステージ3は約21725となる。これは、恣意的に長いサイクル周期を生じさせる極めて低コストの手段である。
【0087】
マスク発生器のスタッキングは、ソフトウェアにおいていくらかかるか。単純な線形合同発生器は、1回の乗算、1回の加算、および1回の係数(除算)演算で構築される。総コストは、いくらかのメモリ負荷および保管を伴う3回の演算である。ステージ1マスク発生器は、そのコストの3倍に4つのビットワイズ論理演算を加えたものである。50未満の命令の場合、良好な非常に長いサイクルのランダム値発生器をもたらす。ステージ2マスク発生器は、150未満の命令を要する。最後に、目標サイクルを選択するだけでよく、プロセッサに応じて、可能な計算(16、32、または64ビット)を同様に選択する。等しく低コストのソリューションをハードウェアにおいて見出すことができる。古典的な公開された線形フィードバックシフトレジスタを利用することによって、対応して長いサイクル周期を有する、極めて良好なビット発生器を構築することができる。
【0088】
マスク発生器は、古典的な関数を越える重要な改良である。それらは高速で使用コストが低い。それらは、恣意的サイクル周期を支持する、極めて単純な手段を有する。最も重要なことに、不確定データがマスク値として使用される場合、古典的なランダム関数よりもクラックすることがより困難である。
【0089】
マスク発生器は、そのようなランダム編集プロセスの無制限クラスの第2の実施例である。追加の代表例は以下に一覧表示され、任意の好適な実施形態において使用されてもよい。通常のソフトウェアおよび/またはハードウェア設計ツールにおいて訓練された任意の人物に指示して、好適な実施形態から逸脱することなく、追加の編集プロセスを構築するために、これらの編集プロセスは使用される。
【0090】
各追加ランダム編集プロセスは、全体サイクル長に対して同様の影響を有するが、一部の好適な実施形態は、適用要件に応じて、数回のみ使用し、一方他の実施形態は何回も使用する。
【0091】
追加ランダム編集プロセス
また各ランダム編集プロセスは、ランダム入力ストリームを変異させる命令として見ることができる。これらの命令は、単純なものから極めて複雑なものに及び得る。これらの命令の一部は、追加値をほとんど提供しないが、教示目的で、より大きいセットが一覧表示される。命令はランダム編集プロセスであるが、マスク値は、任意選択の使用のための命令に対する追加データを表す。
【0092】
各編集プロセスは、考えられる最も単純な手段で説明される。多くの場合、これはCプログラミング言語であるが、他の場合、これはグラフィクスで描かれる。ハードウェアおよび/またはソフトウェアにおける当業者は、編集プロセスの意図される効果について教示されることに留意されたい。現在、これらの編集プロセスは、3つのランダムストリームに基づく。追加のランダムストリームは、ランダム編集プロセスの全体理論に影響することなく、追加することができる。以下のコードは、編集プロセスを示す。
【0093】
【数3】
【0094】
マスク発生器は、2つのランダム値の間の破壊性編集から生じる。破壊されたデータが破棄される限り、マスク値は、目に見えないままである。したがって、生成される各マスク値に、1つの形態のマスク発生器のみを使用する必要がある。
【0095】
【数4】
【0096】
逆演算ランダム編集プロセス
補数演算子のように、逆演算もデータ0、データ1、またはマスク等の任意の値に適用することができる、単項演算である。
【0097】
【数5】
【0098】
ここで、逆演算(ROP)を定義し、ROPによりマスク発生器のセットを再形成する。
【0099】
【数6】
【0100】
この時点で、別の単項演算としてのROPは、優れたランダム編集プロセスを形成する。
回転ランダム編集プロセス
マスク値からのビットの一部を使用して、ビット数を選択し、右または左に回転させる。補数演算と同様に、「回転」は、逆演算も任意の値、データ0、データ1、またはマスクに適用することができる、単項演算である。ROTL_MASKは、マスク値から、ビット数でxだけ左に回転すると定義する。ROTR_MASKは、マスク値から、ビット数で「x」だけ右に回転すると定義する。
【0101】
【数7】
【0102】
元に戻り、マスク発生器とともにこれを使用することさえもできる。
【0103】
【数8】
【0104】
注記:回転させた後で補足するか、または補足した後で回転させることができる。
データ要素であるデータ0、データ1、またはマスクあたり、好きなだけ多くの単項演算を混合することができる。全体効果は、可能なランダム編集プロセスの真に無制限のセットである。
【0105】
数学演算ランダム編集プロセス
【0106】
【数9】
【0107】
ランダムストリームビット密度の構築
複数のランダムストリームの支援を得て、1またはゼロのいずれかである、ほぼ恣意的なビット密度のランダムストリームを形成することが可能である。2つの単純な仮定から始める。
・各ランダムストリームは、他のランダムストリームのすべてに直交する。
・各ランダムストリームは、バイナリレベル(ゼロまたは1)で等しい可能性を有する。
【0108】
これら2つの仮定を用いて、表1に示されるように、異なるビット密度を有する、広範囲のランダムストリームを構築することができる。
【0109】
【表1】
【0110】
2つのランダムストリーム間で「論理ビットワイズor」を行うと、1ビットの0.75の確率を得る。2つのランダムストリーム間で「論理ビットワイズand」を行うと、1ビットの0.25の確率を得る。上記の表1は、より多くのランダムストリームを一緒に処理すると起こるものである。
【0111】
複数のストリームを、「論理or」ならびに「論理and」と一緒に混合することによって、広範囲の選択ランダムビット密度を達成することができる。例えば、0.75*0.00391は、ランダムストリームにおける二進法の1の確率0.0029325をもたらす。ランダムストリームの選択ビット密度を形成するこのプロセスは、アンバランスランダムストリームとして定義される。
【0112】
アンバランスランダムストリームをマスクストリームとして使用することは、ランダム編集プロセスにおいて、入力ランダムデータストリームをどれ程活発に編集するかの管理を可能にする。
【0113】
チャンク、チャンカー、およびチャンキング
ニブル、バイト、ワード等として知られるビットの固定されたサイズのグループには共通の名前がある。この議論のために、「チャンク」という用語は、ゼロ以上の隣接ビットとして定義される。明らかに、ゼロビットのサイズは、空のチャンクである。
【0114】
以前に、ランダムストリームを、古典的なおよび/または不確定性ランダム値発生器の任意の組み合わせによって実装される、上記抽象化クラスの任意の構成要素として定義した。ここで、データストリームを任意の入力データストリームと定義する(ランダムであるか否か)。データストリームを、チャンクとして知られる様々なサイズのビットグループにダイシングするという概念を使用して、固定の境界またはサイズなしに隣接ビットを可視化する。
【0115】
データストリームをチャンクに切断するプロセスは、チャンキングと呼ばれ、これを行うツールは、チャンカーとなる。チャンクは、2つのモード、1)ターゲットストリームをサンプリング(チャンク)するサンプリングモード、または2)チャンクストリームをチャンクする消費モードのうちの1つで、連続するデータストリームから取られる。
・消費モード−ターゲットストリームチャンカーは、ターゲットストリームにおけるすべてのデータを1回に1チャンクにダイシングする。
・サンプリングモード−チャンクストリームチャンカーは、結果ストリームが完了し、データの残りが破棄されるまで、チャンクによってチャンクストリームチャンクのサブセットを取る。
【0116】
上述されるように、チャンカーは、データストリームをサンプリングまたは消費することができる。「チャンク」という用語がチャンカーとして必要とされる理由は、それが生成すべきチャンクのサイズを示す。チャンクサイズは、チャンカーの使用の間で変化する場合が多い。
【0117】
消費チャンカーは、ターゲットストリーム全体を可変サイズのチャンクにダイシングする。チャンクが除去されるとき、ターゲットストリームビットはこのプロセスにおいて喪失されない。消費チャンカーに対する入力変数は、チャンクサイズである。
【0118】
図8は、チャンキングプロセス900を描写するシステムフロー図であり、データストリーム912は、本発明の一実施形態に従って、可変サイズのチャンクにチャンクされる。チャンカー905は、入力データストリーム912からデータを受信し、チャンカー905は、入力データストリーム912からのデータを可変サイズのチャンク931、932、および933にチャンクする。制御シグナル、チャンクサイズ902、および操作モード904は、チャンカー905に命令を提供する。チャンカー出力930は、チャンク0 931、チャンク1 932、およびチャンク2 933として表される一連のチャンクである。可変サイズのチャンクが、図9に表されているが、チャンクはすべて同一サイズであってもよい。
【0119】
ハードウェアおよびソフトウェアは、バイト、ワード、および場合によってビット等の固定サイズ単位に最適化される。サンプリングチャンカーは、データストリーム912をサンプリングし、可変サイズのチャンクを生成する一方で、あらゆる未使用の部分を破棄する。2つの入力値、チャンクサイズ902およびユニットサイズ904がある。チャンキングプロセス900は、置換および拡張ランダム編集プロセスにおいて使用される。
【0120】
「置換」ランダム編集プロセス
置換ランダム編集プロセスは、結果ストリームのサイズを拡張することなく、ターゲットストリームを編集する、破壊的プロセスである。各チャンクが挿入されると、対応するターゲットストリームビットは置換される。重要な効果は、ターゲットストリームのサイズを変更しないことである。
【0121】
図9は、置換ランダム編集プロセス1000a中のビット操作を説明し、チャンクストリーム1028のチャンクは、等量のターゲットストリーム1008ビットを置換する。マスクプロセスと同様に、置換プロセスは、少なくとも3つの入力ランダムストリーム、1)マスクストリーム1018、2)ターゲットストリーム1008、および3)チャンクストリーム1028で開始する。マスクストリーム1018を使用して、ターゲットストリーム1008を編集する。各マスクビット「0」1004は、対応する目標ビット値1010をターゲットストリーム1008から選択する。マスクストリーム1018におけるマスクビット「1」1006ビットは、置換プロセスに命令して、適切なチャンク1030をチャンクされたストリーム1028から取り、適切なターゲットストリームビットを挿入点の左右に置換する。
【0122】
図9の上部分は、識別される最初の2つのチャンク、チャンク1030aおよびチャンク1030bを有するチャンクストリーム1028を示す。この実施形態において、チャンカー905は、サンプリングモードに設定される。第1のマスクストリーム1018マスクビット1 1006aは、置換プロセスに命令して、チャンク1030aを取らせ、マスクビット1010aによって示される、挿入点の右/左にターゲットストリーム1008ビットを置換する。ターゲットストリーム1008および結果ストリーム1050は、残りのターゲットストリームビット1008に対する、チャンクストリーム1028チャンク1030aおよび1030bの関係を示す。ターゲットストリーム1008、チャンクストリーム1028、マスクストリーム1018、挿入右(または左)、およびチャンクサイズという5つの入力パラメータがある。
【0123】
明らかに、チャンクサイズまたはマスク値ゼロは、演算がNOPとなるように、目標ビットを単に戻すことを意味する。ワードサイズは、ターゲットストリーム1008、チャンクストリーム1028、マスクストリーム1018、チャンクサイズ、および結果ストリーム1050の上限であると仮定される。
【0124】
置換プロセス1000aは、挿入点の左または右のいずれかで起こり得る。マスクストリーム1018における各「1」ビットは、マスクサイズまたはチャンクサイズがゼロであり、次に置換がない場合に、可能な置換点を表す。チャンクサイズが増大するにつれて、結果値を満たす前に、先頭の置換点のみが使用される。チャンクがチャンクストリーム1028チャンクから構築されると、結果ストリーム1050は、ターゲットストリーム1008から構築される。チャンクが結果ストリーム1050に追加されると、ターゲットストリーム1008は、同一量のデータを喪失する。一旦、結果ストリーム1050が完成すると、置換プロセスは終了する。
注記:チャンクの一部分のみを使用して、結果構築を完了させてもよく、残りは破棄される。
【0125】
「拡張」ランダム編集プロセス
図10は、非破壊性である、拡張ランダム編集プロセス1000b中のビット操作を示し、本発明の一実施形態に従って、各チャンクは、ターゲットストリーム1008ビットの間に「挿入」される。挿入点は、マスク値によって定義される。目標ランダムストリーム1008に追加される各チャンクは、対応する量だけターゲットストリーム1008のサイズを増大させる。
【0126】
置換ランダム編集プロセス1000aは、結果のサイズを拡張しないが、拡張ランダム編集プロセス1000bは拡張する。多くの方法において、拡張ランダム編集プロセス1000bは、マスクランダム編集プロセス600に類似している。例えば、主な目的は、いかなるデータビットもターゲットストリーム1008から喪失しないことである。チャンクストリーム1028からのチャンクが目標ビットの間に挿入されると、結果ストリーム1050は、対応する量だけサイズを増大させる。ターゲットストリーム1008、チャンクストリーム1028、マスクストリーム1018、拡張右(または左)、およびチャンクサイズという5つの入力パラメータがある。明らかに、チャンクサイズまたはマスク値ゼロは、演算がNOPとなるように、対応するターゲットストリームビットを単に戻すことを意味する。
【0127】
拡張ランダム編集プロセス1000bは、入力パラメータのサイズまたは結果のサイズのいずれかに対する実世界の制限に関係なく、ドキュメント化される。明らかに、これは、実世界において同様ではない。各実装は、それらに設計に対する適度な上限を設定しなければならない。それを行う際に、これらの上限は、副作用をもたらし得る。ワードサイズは、目標データストリーム1008、チャンクデータストリーム1028、マスク1018、およびチャンクサイズの上限であると仮定されるが、結果1050は、結果サイズによって限定される。
【0128】
拡張は、挿入点の左または右のいずれかで行うことができる。マスクストリーム1018における各「1」ビットは、挿入点を表す。結果値1050は、チャンクがチャンクデータストリーム1028から取られると、目標データストリーム1008から構築される。以下の、マスクはそれ以上の挿入点を有しない、またはターゲットストリーム1008はそれ以上のビットを有しないという条件のうちの1つが満たされると、拡張は完了する。多くの追加の3オペランド編集関数は、このアーキテクチャ内で適合する。これは、容易に拡張できる無制限アーキテクチャである。
【0129】
「除去」ランダム編集プロセス
同一の入力マスクランダムストリーム1018を仮定すると、拡張/除去ランダム編集プロセスは、左右対称の反対同士である。拡張ランダム編集プロセス1000bを介して、目標入力ストリーム1008に追加される各チャンクは、除去ランダム編集プロセスを介して除去され、同一のマスク編集ストリームが両方の演算に使用されると仮定する。このように、目標入力ストリーム1008は、偽性データチャンクまたは「ノイズ」の中に隠され、次に、「ノイズ」を除去した後に復帰する。
【0130】
ランダム編集プロセスのまとめ
すべてのランダム編集プロセスがすべての設計に意味を成すとは限らない。明らかに、ソフトウェアは、数学およびシフト演算を効率的にする、ALU(演算論理ユニット)およびBarrelシフター等の有用な特徴を有する。しかしながら、同一の特徴を有する負担ハードウェア設計は、費用効率が高くならない。そのため、設計者は、それらの製品に費用効率が高いランダム編集プロセスのみを使用することが推奨される。「過剰構築」ソフトウェア設計のコストは、過剰構築ハードウェア設計と比較して、極めて低い。一旦開発されると、ソフトウェアのコストは、ランタイムおよびメモリスペースの両方において非常に低いままである。
【0131】
本文書内で、多くのランダム編集プロセスは、教示ツールとして論じられる。ここで、どのように且つなぜランダム編集プロセスが機能するかが論じられ、通常の技術において訓練を受けた者であればだれでも、多くの追加ランダム編集プロセスを構築することができ、依然として、好適な実施形態の範囲内である。
【0132】
カオスエンジン
1)各ランダム編集プロセスは、ランダム入力ストリームを変異させる命令として見ることができる。命令間の動的スイッチングは、CPUに類似したものである、カオスエンジンを定義する。必要とされるランダムデータ容量が劇的に増加すると、分離プロセスは、プール内のデータを十分に分離するように、より活発にならなければならない。これは、単純なマスク発生器をカオスエンジンと置換することを意味する。データを隠すための1つの静的ランダム編集プロセスの代わりに、カオスエンジンは、複数のランダム編集プロセスを動的に切り替え、データを分離する。明らかに、カオスエンジンを使用して、メモリアドレスまたはデータのいずれかを分離することができる。カオスエンジン内の各ランダム編集プロセスは、その入力値に基づいて、異なる出力を与える。
2)図11は、カオスエンジン700を表すシステム図であり、命令710は解読され(715)、適切なランダム編集プロセス750は、本発明の一実施形態に従って、REP表のサブセットであるカオスエンジンREP命令セット720から選択される。カオスエンジン700内の各ランダム編集プロセス750は、その入力値に基づいて、異なる結果760を与える。
【0133】
カオスエンジン700は、少なくとも4つのランダムストリームを入力として有する。これらのストリームのうちの少なくとも1つは、命令ストリーム710として指定されなければならない。命令ストリーム710を解読して(715)、どの命令706を実行するかを選択する。大部分のランダム編集プロセス750と同様に、入力として、データ0 730、データ1 732、およびマスク734がある。明らかに、命令ストリーム710は、間接ランダムストリームまたはいくつかの他のデータ駆動ソースのように、データプールからの追加のランダムストリームである。カオスエンジン700は、究極のRISC(縮小命令セットコンピュータ)プロセッサに類似するものとなった。ほんの少数の単純命令であるが、結果は完全にデータプールを覆う。
【0134】
すべてのランダム編集プロセスのように、命令も編集ストリームも出力ストリームにおいて目に見えない。単純な16命令(4ビット命令)カオスエンジンの実施例は以下のとおりである。
【0135】
【数10】
【0136】
驚くべきことに、マスク発生器よりも多くのゲートを表すが、全体として、達成するゲートはほとんど有しない。この単純カオスエンジンは、はるかに大きいランダムデータ要件を対象としたプール内のデータを分離し、その容量の必要データに対してだけ使用すべきである。
【0137】
ここで定義されるこれらの16を超えて、好適な実施形態内に留まりながら、異なるおよび/または追加の命令(ランダム編集プロセス)を使用することができる。分化したサイクル長の入力ストリームで開始する場合、次にカオスエンジンサイクル長は、各入力サイクル長とデータプールサイズとを掛けた積である。命令として、不確定性のプールからビットを解読することを仮定すると、カオスエンジンあたりの命令数は2の累乗である。
【0138】
短サイクルカオスエンジン
上述のとおり、カオスエンジンは、不確定データを命令として使用し、処理関数の間で動的に選択する。短サイクルカオスエンジンは、制御プレーンも分離プロセスの一部として起動する。各処理関数は、依然として不確定データを入力パラメータとして必要とする。上記カオスエンジンは、1つの結果をもたらすために1つの命令を仮定するが、短サイクルカオスエンジンは、複数の結果をもたらす1つの命令に基づく。名前が暗示するとおり、一続きの結果は、比較的短い数であると仮定され、これらの複数の結果は、内部使用のみに限定される(すなわち、それらはパラドックスアンセーフである)。複数の結果を内部使用のみに限定することは、これらのシーケンスの可能性のあるモデリングを回避する必要があり、そうでなければ、攻撃者は、不確定性のプールに関する洞察を得る可能性がある。
【0139】
以下は、短サイクルカオスエンジンの実施例である。一群の線形フィードバックシフトレジスタ(LFSR)は、どのLFSRを開始するかを選択するために、共通のシード値、短サイクルカウント、および選択値を使用するように定義される。これらの入力パラメータのそれぞれは、不確定性のプールに由来する。所定のシーケンスの最後で、次のLFSR値は、不確定性プールへのメモリアドレスとして使用され、次のシード値、ランカウント、および選択値を読み取る。このようにして、短サイクルカオスエンジンは、「短い」数の比較的不確定な値の不確定シード値を拡張し、次に、新しいシード値、関数セレクタ、およびシーケンスカウントを選択して、別の未知の短いシーケンスを形成する。このプロセスが継続するにつれて、「比較的不確定なストリーム」が生じる。このストリームは、アドレスおよび不確定データソースとして使用することができる。
【0140】
時間変位
マスク発生器の形態のランダム編集プロセスは、一次「旋律」を破壊する単純な手段である。一次「旋律」を排除する間、二次「旋律」を構築した。評価のために、「旋律」は、ランダム値発生器からの再現可能な出力であり、値およびそれらが形成される順序の両方を含む。出力メモリバッファを有する2つ以上のPRNGアドレス発生器の追加は、二次「旋律」を破壊するための別のツールを提供する。このツールは、時間変位と呼ばれる。
【0141】
図12は、本発明の一実施形態に従って、2つの古典的な関数を使用し、ランダム書き込みおよび読み取り(引き出し)アドレスを生成する、時間変位プロセス800を表すシステムフロー図である。第1の古典的な関数803は、ランダム書き込みアドレスストリーム804を生成する。ランダム値発生器802によって生成されるデータ値806は、対応する書き込みアドレスにおいて、出力メモリデータプール810に書き込まれる。第2の古典的な関数812は、出力メモリデータプール810の対応するアドレスから出力値814を引き出すために使用される、異なるランダムアドレスストリーム813を生成する。これは、出力値814の新しいランダムデータストリームを形成し、この出力値は、ランダム値発生器802の出力806から分離される。
【0142】
出力ストリーム806において生成される各値は、1つ以上の出力データプール810にランダムに保存される。異なるランダムアドレス813を使用して、出力メモリプール810から値を引き出す。ランダムアドレス指定の知的使用によって、これらの出力値の可視性から出力値の形成順序を分離することによって、残りの「旋律」を粉砕することができる。出力プールの一部の有用な副作用は以下のとおりである。
・ランダム値発生器からの出力は、それが出力ストリームにおいて目に見える前に上書きされ得る。
・同一の出力プールアドレスは、それが新しい値で上書きされる前に、複数回引き出され得る。
・ランダム値発生器からのすべての出力は、それが形成された時に関して、ランダムに時間変位されるか、または破壊される。
【0143】
時間変位によって、1つまたは複数の出力データプールを使用することによって、「旋律」の最後を取り除いたが、データプールは覆われたままである。1つ以上の出力プールの初期化は、データプールがロードされると同時に行われる。
【0144】
短サイクルプロセス
図13は、本発明の一実施形態に従って、ランダムアドレスシステム1120を生成する、短サイクルプロセス1100aを表すシステムフロー図である。複数の入力制御値を有する古典的なブロック1105、関数選択1126、シード値1122、およびカウントダウン値1124は、短サイクルプロセス1100aの基礎を形成する。各短サイクルプロセス1100aは、別の関数再選択1126が行われる前に、いくつのアドレス(または値)が生成されるかのために、小さいカウントダウンカウンタ1110を有する。再選択1126が行われるたびに、新しい不確定性シード値1122も使用される。このようにして、攻撃者は、データプールから値を引き出すために使用されるランダムアドレス1120をモデル化することはできない。また、再選択プロセスは、新しいカウントダウン値1124を再ロードする。初期開始値1128は、制御ユニット1130に対する入力であり、関数選択値1126、シード値1122、およびカウントダウン値1124を計算する。カウントダウンカウンタが特定のカウントダウン値1124の最後に到達すると、カウントダウンカウンタは、ランダムアドレスストリーム1120の最後の出力値が生成された制御ユニット1130に通信する。各カウントダウン実行の最後の出力値1132は、制御ユニットによって使用され、制御値、シード値1122、関数選択1126、およびカウントダウン値1124の次のセットを計算する。
【0145】
なぜ短サイクルプロセス1100aが、アドレスおよびデータを効果的に分離するかは明らかであり、変化率は、依然として高速過ぎるため、どのランダム関数1105がアドレス1120を生成しているかをモデル化することはできない。さらに、関数カウントダウン値1132、ランレングスカウント1124を定義するための不確定性データの使用は、アドレス指定をモデル化することはできないことを意味する。この少量の不確定性データは、通常の擬似ランダム関数におけるシグナルの大部分を除去した。不確定性データの使用は、これらの静的関数内で定義された確定性の大部分を置換した。
【0146】
データパラドックスの解決
プール内のデータが依然として隠されている限り、データプールの外で構築される不確定性関数はソリューションである。明らかに、データプールへの線形アドレス指定は、可能な限り回避すべきである。プールのコンテンツを暴露することなく、どのようにしてデータプールからデータを引き出すかという逆説的状況に直面している。これは、データパラドックスとして定義される。良好なランダムデータを有する無限のデータプールを有する場合、パラドックスは存在しない。プール内の「無限」データの最後に達することはないため、プールの完全なコンテンツを暴露することはない。1つまたは複数のプールにおける不確定性ランダムデータは、問題の一部であると同時に、解法の一部であるという、データパラドックス問題/解法の皮肉な曲解に気付くであろう。
【0147】
実世界において、制限されたデータプールサイズおよび厳しいランダムデータ要件に対処することを余儀なくされる。目標アプリケーションに必要なランダムデータが、データプールサイズと比較して適度である場合、パラドックスは有意ではない。目標アプリケーションによって必要とされるランダムデータが増大するにつれて、データパラドックスのリスクも増大する。明らかに、1つ以上のデータプールの実際のサイズが増大するとすぐに、無効になる。
【0148】
アプリケーション要件を変更することはできないため、データパラドックスの効果に応答して、1つ以上の仮想データプールサイズを何らかのかたちで「合成的に増大させる」必要がある。ランダムデータ要件が増大すると、アプリケーションは、それぞれの現行ソリューションから最終的には成長して、より複雑なアーキテクチャへのアップグレードを必要とする。各アップグレードは、不確定性関数の強度を保存する、より高コストのソリューションを必要とする。
【0149】
好適な実施形態は、システム要件に応じて、単純なアーキテクチャからより複雑なソリューションに及ぶ。各アップグレードは、不確定性関数の強度を保存するよりも高コストのソリューションを要する。経済的な理由から、正しい実施形態に対してアプリケーションをサイズ調整するよう注意する必要がある。
【0150】
ソフトウェアソリューションのアップグレードは、ハードウェアソリューションと比較して、低コストのソリューションを達成する。したがって、大部分のソフトウェアアプリケーションは、より複雑なソリューションで開始し、全体的なシステム性能が問題となる場合に限り、何か他のものにダウングレードするだけであると仮定される。必要とされるランダムデータの量が増大するにつれて、ソフトウェアシステムデザイナーが、ランダム値を生成するための専用ハードウェアを必要とする可能性がより高い。
【0151】
生データは、データプールから簡単に引き出されることはなく、出力ストリームにおいて目に見えるようにする。その生データは、プールのコンテンツを極めて迅速に暴露する。既に、データプールへの線形アドレス指定に関する問題について承知されている。データプールへの擬似ランダムアドレス指定でさえも、依然として単純化し過ぎており、データプールへの線形アドレス指定とほぼ同じくらい不良である。
【0152】
分離プロセス
セーフまたはアンセーフという用語は、データパラドックスに影響する値の属性を説明するために使用される。具体的に、アンセーフ値は、分離プロセスを経ていないが、セーフ値は経ている。分離プロセスの関数は、値の決定性ストリームを値の非決定性ストリームに変換することである。
【0153】
データパラドックスを回避する目的は、以下に説明される構成要素の大部分に影響する。分離プロセスは、生データプールメモリアドレスおよびデータをパラドックスセーフ値に変換する。これらの値は、不確定性データをこれらのオリジナル値と混合することによって変換される。セーフ値のみを、データパラドックスの悪影響なしに使用することができる。
【0154】
分離プロセスの効果は、仮想データプールサイズを合成的に増大させることである。実質的なデータプールを巨大な仮想プールに劇的に増大させることができる一方で、その無制限なプールサイズには到達していない。明らかに、この仮想増大は、適度なサイズのデータプールに対して機能するに過ぎない。具体的には、データプールが小さ過ぎる状態から開始する場合、合成増大を介して修繕することはできない。
【0155】
仮想データプールを形成する場合、そのサイズは、メモリアドレスおよびデータをどれ程活発に分離するかを示す。分離プロセスは、非常に単純に開始するが、必要に応じて、複雑性を増大させる。分離プロセスは、実施形態の範囲全体で、さらに活発になる。
【0156】
各実施形態間の移行は、明らかに定義された点ではない。通常、不確定性ランダム値発生器の強度は、生じた1つの追加ランダム値において突然不能にならないが、その中に隠されたデータが目に見えるようになるまで、ゆっくりと脆弱化する。明らかに、それを脆弱化するまで、決して実施形態を実施してはならない。これを回避するため、設計者は、安全のマージンを組み込む必要がある。
【0157】
各実施形態に対して、多くの要素が、クラッキングに対する抵抗に影響する。これらの要素のうち、最も明らかなのはデータプールサイズである。データプールサイズに加えて、安全のマージンを駆動する他の主要な要素は、各古典的なブロックにおいて見出されるランダム関数の数、設計内のランダム編集プロセスの総数、プールデータの「鮮度」、および新しいゲノム発生器の総サイクル長を含む。設計者は、ランダム値発生器をシミュレートして、どの要素が安全のマージンに最善の値を提供するかを判断する必要がある。アドレスおよびデータを分離するツールは、以下を含む。
1)不確定性データを伴う排他的OR(XOR)−アドレスおよびデータ
2)不確定性データを伴うマスク発生器−アドレスおよびデータ
3)不確定性データを伴うカオスエンジン−アドレスおよびデータ
4)時間変位−データのみ
アンセーフ擬似ランダムメモリアドレスは、単純XORプロセスからカオスエンジン等の複雑なソリューションを含むソリューションの範囲を介して安全にする。プールから引き出されるデータは、生データ(アンセーフ擬似ランダムメモリアドレスを介してアドレス指定される)、アンセーフデータ(セーフメモリアドレスを介してアドレス指定される)、またはセーフデータ(上記プロセスのうちの1つを介して分離される)である。データは、時間変位を通じて、マスク発生器を介してセーフになる。要するに、データプールアドレスは、2つの有効な状態を有する。
1)「パラドックスアンセーフ」−古典的な関数を介して形成されるアドレス
2)「パラドックスセーフ」−分離プロセスを完了したアドレス
一方、データプールデータ要素は、3つの有効な状態を有する。
1)「生」−アンセーフアドレスを介してアクセスされるデータプールデータ
2)「パラドックスアンセーフ」−セーフアドレスを介してアクセスされるデータプールデータ
3)「パラドックスセーフ」−分離プロセスを完了したデータプールデータ
一般的な設計問題
残念なことに、古典的なPRNGは、制限された機能性を提供する。現行の手段のみが使用可能であるため、これらの制限は、不適切なソリューションを伴う。例えば、クラッキングに対する抵抗は、極めて複雑なPRNGソリューションを用いてアドレス指定され、高騰するコストをもたらす。多くの設計は秘密裏に構築され、それらの実装を隠す無駄な試みが為される。この秘密の開発ブロックを再検討および再利用するが、それらは決定性であるというPRNGの重大な欠陥が残る。したがって、任意の現行PRNGソリューションは、制限された寿命を有する。
【0158】
実施例を理解すると、多くの異なる設計をこれらの標準構成要素から形成することができる。ソリューションのこの構成要素レベルの形成は、コストを制限しながら、任意のソリューションをアプリケーション要件に適切に拡大縮小するのを可能にする。
【0159】
非限定例として、2つの不確定性データ値をプールからランダムに選択し、それらを足し合わせて、新しい不確定性値を生じてもよい。この新しい値は、複数の異なる親セットが同一の値を生じることができるとき、その親の値から分離される。したがって、値の単一プールは、第1のプールよりも大きい不確定性の第2世代プールを生成する。「不確定性」の属性は、値の次の世代に進展した。そのため、第1世代不確定性データを明かすべきではないが、それから処理された後次世代を明らかにすることができる。
【0160】
不確定性データを用いて行い、追加の不確定性データを生成することができ、不確定性データの次の実施をもたらす「加算」の他に、有効な演算が無制限な数だけある。不確定性データの第1世代は、固定サイズを有するが、後次世代は、恣意的サイズであり得る。
【0161】
それでは、不確定性の第1世代プールはどれ程大きいか。これは、依然として当然するべき質問であるが、答えは単純ではない。個別のアプリケーションは、異なる量のランダムデータを要する。目標量のランダムデータが、適度なベースラインサイズを越えて、データプールサイズに与える影響は限られているが、データプールにアクセスするために使用されるアドレス生成に対して重要な影響を有する。意図的に、不確定性プールの最小サイズは定義されていない。この最小サイズ値は重要ではない。メモリの価格は、急速に低下し続けているが、依然として管理されるコストを表す。しかしながら、設計者は、それらの設計のシミュレーションを用いて、データプールサイズを計算することができる。ランダムデータの目標量が増大するにつれて、データプールサイズに対する直接的な影響は、最小のままである。驚くべきことに、チップサイズ対コストに基づいて、データプールサイズに適度な上限がある。そのため、この適度な限界を超えて、データプールサイズが増大することは、費用の増加を正当化しない。
【0162】
不確定性の本質的原理は、依然として、最小データプールを使用しない主な理由である。不確定性を最大化することは、任意の所与のデータ値が、データプール内で複数回出現し得ることを暗示する。追加の不確定性を統合するために、データプールにおいて見出される各複製値は、どのメモリアドレスが所与の値を生成したかに関する不確定性を劇的に増大させる。反転プロセスの困難性は、この増大した不確定性に起因して、急激に上昇する。当然のことながら、これは、セッションデータが、依然として検証プロセスに合格し、隠れたままであると仮定する。
【0163】
したがって、設計内の不確定性を除去することによって、それを不確定性と置換することができる。アドレス生成のために最低限ほんの一握りの古典的なPRNGを使用する代わりに、最小数を超える、より大きな古典的な関数群を必要とする。
【0164】
PRNGは、URNG内のアドレス生成に使用される。アプリケーションが、適量のランダムデータを要する場合、PRNGの割り当てを1回行うことができる。ランダムデータ要件が高まるにつれて、これらのPRNGを成功裏にモデル化するリスクも高まる。このモデル化に対する良好な防御は、PRNGの動的(不確定)選択であろう。PRNGのワンタイム使用または動的選択は、複雑性トレードオフ決定となる。ハードウェア設計において、一回のPRNG選択を行うためにソフトウェア初期化を要することは、影響を有する。この例において、アドレス関数は、目標アプリケーションランダムデータの要件よりも長いサイクル周期を有し、同一の出力シーケンスの再利用を避けなければならない。追加の複雑性は、適切なアドレス指定サイクル長を保証するために必要とされ得る。
【0165】
PRNG寿命の動的(不確定性)選択は、アドレス指定関数、ランレングス、およびシード値の選択/再選択に複雑性を追加する。不確定ランレングスは比較的小さいと仮定すると、最小サイクル長アドレス指定関数を使用することができる。このようにして、アドレス指定関数の動的置換は、ランダムシーケンスが反復されないことを保証する。このランレングス寿命が短い程、発生器が反転することは困難になる。明らかに、これは、大規模または未知のランダムデータ要件に対する好適な設計トレードオフである。
【0166】
URNGの不確定性を保護することは、データプールから読み取るために使用されるアドレスおよびデータ自体の両方の分離に依存する。本明細書では、最大の不確定性を保証することに注意した。不確定性のプールに対する直接的な攻撃を除いて、不確定性のプールのコンテンツを拾い集めるための次の最善の方法は、1つ以上のデータプールから読み取るために使用される、ランダムアドレスの成功裏なモデル化である。アドレスは、この形式の攻撃を防ぐために分離する必要もある。
【0167】
明らかに、ハードウェア設計は、ユニットあたりのコストに敏感である。しかし、ハードウェア設計は、コストがより高いが、より良い性能の利点も有する。一方、ソフトウェア実装は、コストも性能も低いが、柔軟性が増す。ランダムデータおよび性能要件に基づいて、各設計センターは、他を超える利点を有する。本明細書において、実施例の範囲のみが、可能な実装の開始概要を表す。最低コストのソリューションが、必ずしも各アプリケーションにとって最善のソリューションであるとは限らない。
【0168】
時間変位を除いて、すべての分離プロセスは、不確定データを使用して、入力値を分離する。この混合プロセスは、入力値の「旋律」の一部/大部分/すべてを除去する。どの程度「旋律」が除去されるかが、コスト/パフォーマンストレードオフになる。これは、なぜ最低コストのソリューションが最善とならない場合があるかを説明する。どのトレードオフを行うかを慎重に選択することは、なぜ1つのサイズがすべてのアプリケーション要件に適合しないかということである。
【0169】
不確定性のプールへのメモリ帯幅は、多くのハードウェアトレードオフを駆動する。発生器あたりの不確定性のプールへのアクセス数が高くなる程、ランダム数発生器の性能を制限する効果をもたらす。幸運なことに、このメモリ帯幅問題に対して、多くのよく知られた次善策があるが(不確定性の複数プール等)、あいにく、これらの次善策のすべては、コストを上昇させる。
【0170】
ソフトウェア性能は、メモリ帯幅によって既に制限されているため、入力値のすべての「旋律」を完全に除去することが、推奨設計目標となる。
【0171】
各URNG設計は、アドレスおよびデータの両方を不確定性のプールから分離しなければならない。任意のURNGに対するエンジニアリングタスクを定義するとき、努力の有効性は、そのコストに直接比例する。各分離/ランダム編集プロセスの有用性は、効果および複雑性(すなわち、コスト)によって異なる。編集データは、不確定性のプールに由来するため、ランダム編集プロセスは、分離プロセスにアップグレードされる。その広範な効果は、可能性のあるサイクル長および各生成値の相対決定論に対処する。「旋律」のすべてが除去される(値を非決定性にする)場合、唯一の追加の有用な効果は、自然なサイクル長である。設計者は、エンジニアリングトレードオフに従って、これらの広範な効果から選択しなければならない。
【0172】
レベル1 分離:(入力ストリームの「旋律」の一部のみを除去する)不確定データ値を有するビットワイズ排他的OR(XOR)。効果は、決定性の低い生成値である。
【0173】
レベル2 分離:(入力ストリームの「旋律」のすべてを除去する)不確定マスクを有するマスク発生器。効果は、非決定性生成値(パラドックスセーフ値)である。
【0174】
レベル3 分離:(入力ストリームの「旋律」のすべてを除去する)不確定命令およびマスクストリームを有するカオスエンジン。効果は、非決定性であり、極めて長いサイクル長を有する生成値である。
【0175】
各URNGの基準概要は、3つのステップを有する。不確定性関数は、非決定性ストリームを生成するために、分離したアドレス(定義域値)およびデータ(値域値)を必要とする。
a.PRNGを使用してアドレスを生成し、不確定性のプールから読み取る。したがって、生で、パラドックスアンセーフな不確定ストリームを生成する。アンセーフ値として、それらは内部URNG使用のみに限定される。
b.PRNG生成アドレスは分離され(レベル1=>3)、データプールアドレスを生成する。これらのパラドックスセーフアドレス(定義域値)は、不確定性のプールから読み取る。したがって、パラドックスアンセーフデータ(値域値)を不確定性のプールから生成する。
c.パラドックスアンセーフデータ(値域値)は分離され(レベル1=>3)、非決定性出力ストリームを生成する。
URNG設計を使用するすべてのアプリケーションが、支持された発生器の総サイクル長を完全に循環することはないはずである。
【0176】
ハードウェア構成要素
ランダム値生成のコストを劇的に低減することが目標の1つである。そのために、公的に検討される標準ハードウェア構成要素(古典的な関数)を各設計に再利用する。これらの要素それぞれは、以下のセクションで説明される単純な概念に基づく。一旦構築されると、これらの要素は、必要に応じて、多くの設計全体で再生成することができる。
【0177】
これらの構成要素の多くは、ハードウェアの抽象化として定義される。ハードウェアは、通常このようにして定義されない場合があるが、この場合、抽象化は、その実装において可能な限り広範な余裕を付与するために行われる。これらの抽象化は、固定した実装とは対照的に、この技術の陰の力である。チップ設計の分野における熟練者であれば、本発明の実施形態の範囲内に留まりながら、これらの抽象化を容易に実装することができる。
【0178】
構成要素の使用は、必要に応じて、関数を広範なソリューションに混合することを可能にする。これらの実施形態は、様々なアプリケーションの必要に応じて、追加または変更可能な一般的実施例である。設計を過剰に構築しない限り、ランダム値生成のコストを低減するという目標は達成される。
【0179】
不確定性ランダム値発生器抽象化は、データ値を1つ以上のデータプールから引き出すこととして説明されている。意図的に曖昧な用語「引き出す」とは、データプールへのアドレス指定が、この抽象化に対してまだ定義されていないことを示す。この曖昧な用語「引き出す」は、ここで、より有用な何かに拡張される。
【0180】
データをプールから引き出すために、ランダムアドレスの形成を制御する要素は、アプリケーションに必要とされる総ランダムサイクル長、データプールサイズ、不確定性の一般概念、およびデータパラドックスの効果を含む。オーバーヘッドの大部分は、不確定性ランダム値発生器内でこれらのランダムアドレスを形成するプロセスの間に拡張される。つまり、メモリの読み取りは、依然として、データを取得するための極めて安価な手段である。
【0181】
アプリケーション要件を不確定性ランダム値発生器設計に一致させる場合、尋ねるべき第1の質問は、どれだけのランダムデータが必要かということである。この目標値は、最小の総必要サイクル長を表す。所与のアプリケーション要件よりも長いサイクル長を有する、ランダムアドレスを生成しなければならない。1つ以上のランダム編集プロセスを使用することは、このより長いサイクル長を達成する手段を提供する。
【0182】
では、データプールはどれ程大きいか。アプリケーションは、異なる量のランダムデータを要する。目標量のランダムデータは、適度なベースラインサイズを超えるデータプールサイズに対して制限された影響を有するが、1つ以上のデータプールへのアクセスに使用されるアドレス生成に重大な影響を及ぼす。したがって、設計者は、シミュレーションを行って、それらのアプリケーションに最適なデータプールサイズを決定する必要がある。
【0183】
不確定性ランダム値発生器は、1つ以上のデータプールにおいて、セッションデータから開始する。最小サイズは重要でないため、意図的に、データプールの最小サイズは定義されない。しかしながら、設計者は、自分たちの設計のシミュレーションを用いて、データプールのサイズを計算することができる。ランダムデータの目標量が増大しても、データプールサイズに対する直接的な影響は最小のままである。驚くべきことに、チップサイズ対コストに基づいて、データプールサイズに対する適度な上限がある。そのため、データプールサイズがこの適度な限界を超えて増大することは、費用の増大を正当化しない。
【0184】
不確定性の原理は、最小データプールを使用しないことに対する主な正当化である。不確定性を最大化することは、任意の所定データ値が、データプール内で複数回出現することを暗示する。追加の不確定性を統合するために、データプールに追加される各複製値は、どのメモリアドレスが所与の値を生成したかに関する不確定性を劇的に増大させる。反転プロセスの困難性は、この不確定性の増大に起因して、急激に高まる。当然のことながら、これは、セッションデータが、依然として検証プロセスに合格し、隠されたままであると仮定する。
【0185】
したがって、設計内の確定性を除去することによって、それを不確定性と置換することができる。最低限ほんの一握りの古典的な関数をランダムアドレス生成に使用する代わりに、より大きい古典的な関数のブロックを定義する一方、ブロックあたり1回に1つの関数のみを使用する。アドレス指定可能な出力経路指定による古典的な関数ブロックの設計および使用は、任意の古典的な関数を、ランダム値発生器設計のすべての部分において使用できることを意味する。すべての古典的な関数選択、シード値、および出力経路指定は、すべて不確定性関数からのデータによって駆動されるという事実は、確定性が不確定性と置換されたことを意味する。これらの特徴は単純かつ実装コストが低いが、それらは、設計の不確定性を劇的に高める。
【0186】
古典的なブロック−ハードウェア抽象化
以前に、データプールから読み取りながら、なぜ一方向性関数を有するかについて説明した。同一のセッションデータは、データプールへのアクセスに使用される各一意のアドレス指定方法論に一意のデータストリームを付与する。設計が許し得る限り多くの一意アドレス指定方法論を有することが重要である。
【0187】
幸いなことに、ハードウェア線形フィードバックシフトレジスタLFSR(古典的なハードウェアランダムビット値発生器)は、実装に必要とされるゲートカウントにおいて、数的に多くも少なくもある。確実に数百、おそらく数千の公開されたハードウェアシフトレジスタが入手可能である。ランダム編集プロセスを使用して、短いサイクル長を有するものから長いサイクルシフトレジスタを構築することができる。古典的なブロックに関する重要な注意事項は、通常、安全でないメモリアドレスを生成するために、各LDSRが使用されることである。
【0188】
このハードウェア抽象化を定義する際に、我々の目的は、構成要素に対する一般的な抽象化インターフェースを維持する一方で、必要に応じて変化するように、構成要素内の実装を可能にすることである。各古典的なブロックは、4つの必要な入力値、シード値、ブロック内の関数セレクタ、ランレングスカウント、および出力ビットストリームを経路指定するための出力ラインセレクタを有する(リセット、ロードシード等の他の一般的な制御ラインも存在する)。
【0189】
すべての古典的なブロックに関する一般的なインターフェース問題
図14は、本発明の一実施形態に従って、古典的なブロック1200と関連付けられる一般的なインターフェースを描写するシステム図である。シード値1202は、常に同一様式でロードされる。現在のシフトレジスタ関数を実行しながら、次の(新しい)シード値1202およびランレングスカウント1206をロードすることができる。リセットおよびリロード1204は、新しいシード1202およびランレングスカウント1206の値を切り替えるために必要である。出力ラインセレクタ1212を使用して、古典的なブロック1200からの出力ストリーム1210を適切な出力ライン1214に切り替える。古典的なブロック1200内で使用するための適切な古典的な(関数セレクタ)シフトレジスタは、常に同一様式で特定される。一旦、古典的な関数が選択されると、シード値1202およびランレングスカウント1206値がロードされ、関数は、選択された出力ライン1214に経路指定される、出力ストリーム1210の生成を開始する。
【0190】
ランダム編集プロセスを駆動するために、古典的なブロックは、グループで使用される可能性が高い。一般的なインターフェースは、他のハードウェアをはるかに単純にする。出力ビットストリームを正しいランダム編集プロセスに動的に経路指定されるのを可能にすることによって、データプールへのアクセスに使用される、一意のアドレス指定方法論の数を著しく拡張した。
【0191】
各古典的なブロックの初期化は、データプールメモリアドレスで開始する。そのメモリアドレスは、2つの値、シード値およびランレングスカウントを指す。初期化ハードウェアは、2つの値をフェッチする。ランレングスカウントの最後に、次のランダム値は、次のデータプールメモリアドレスになる。次に、このデータプールメモリアドレスにおける値を使用して、古典的なブロックをリスタートするための使用される、新しいシード値およびランレングスカウント値を決定する。
【0192】
ここで、設計を抽象化と見る値は、さらに明らかになる。上記古典的なブロックの抽象化において、複数LFSRの要件が明らかとなった。抽象化として、この実装は、直接的なソリューションよりもはるかに安い。上述されるとおり、直接的なアプローチは、古典的なブロックを構築するための複数の一意LFSRを形成させる。しかしながら、このアプローチは、ゲートカウントにおいて高価となるため、ランダム値の生成コストを低減するという全体目的は失敗する。代わりに、古典的なブロックの抽象化を使用することによって、選択する任意の手段によって、この問題を解決する自由を得る。
【0193】
例えば、すべてのそれらのゲートをすべてのLFSRに費やすのではなく、各古典的なブロックに1つのプログラム可能な構成可能LFSRを形成する。不確定性値を使用してLFSRを選択および構成することは、ゲートカウントに全額を支払うことなく、古典的なブロックの抽象化の機能要件を満たす。再度、このアプローチは、全体アーキテクチャに影響することなく、ランダム値生成のコストを低減するという目的を維持する。
【0194】
古典的なブロックへのシフトレジスタのグループ化
シフトレジスタを古典的なブロックにグループ分けする場合は、慎重にならなければならない。表2は、恣意的な名前(この場合は色)、このグループにおけるシフトレジスタのグループサイズ数、グループのサイクル長、および指名された関数グループがマスク発生器であるか否かの決定によってグループ分けされる、一式の古典的なシフトレジスタを表す。
【0195】
ランダム編集プロセスは、分化したサイクル長を各入力ストリームに使用される場合に限り、はるかに長いサイクル周期をもたらす。したがって、シフトレジスタは、これらの分化サイクル長を維持するような方法で、グループ分けされなければならない。表中の各P値または3つのP値を掛け合わせた積は、一意の値である。一意のP値をこの教示的実施例において見ることはできないが、表は、漸増するP値で一般的にフォーマットされる。
【0196】
【表2】
【0197】
マスク発生器は、3つのランダムストリーム、データ0、データ1、およびマスクで形成されることに留意されたい。表2から3つの色を混合する場合、マスク発生器群のサイズは、各色群のサイズに3を掛けた積である。3つの色群のそれぞれにおける各関数は、データ0、データ1、またはマスクストリームとすることができる。例えば、ホワイト−ティール−グレーは、グループサイズが11*9*13*3=3861である。各色が、マスク発生器内の3つのストリームすべてにおいて表される限り、同一のマスク発生器サイクル長が生成される。
【0198】
一部のサンプルの古典的なブロックをここで構築することができる。各古典的なブロックは、同一の抽象インターフェースを有するが、内部的に異なる可能性があり、現に異なる。上記表から形成される6つの古典的なブロックの実施例は以下のとおりである。
【0199】
古典的なブロック1:マジェンタおよびイエロー
ブロックにおける総関数カウント:32(22+10)
最小、最大サイクル長:P10、P13
古典的なブロック2:レッド−グリーン−ブルー
ブロックにおける総関数カウント:32(可能な4032のうちの32)
最小、最大サイクル長:P1*P2*P3
古典的なブロック3:バイオレット、パープル−インディゴ−イエロー
ブロックにおける総関数カウント:32(可能な7680のうちの12+20)
最小、最大サイクル長:P11、P8*P9*P10
古典的なブロック4:アズール−レッド−パープル
ブロックにおける総関数カウント:32(可能な7392のうちの32)
最小、最大サイクル長:P15*P1*P8
古典的なブロック5:パープル、アクア、ブラック、オレンジ、および若干のティール
ブロックにおける総関数カウント:64(9のうちの16+14+16+14+6)
最小、最大サイクル長:P4、P14
古典的なブロック6:ホワイト、アズール、グレー、グリーン、レッド、および若干のブルー
ブロックにおける総関数カウント:64(8のうちの11+11+13+12+14+3)
最小、最大サイクル長:P1、P15
これらの古典的なブロックについて、留意すべき重要な特性が多数ある。第1に、任意の設計は、これらのブロックを使用することができ、それらが分化したサイクル長を有することを保証することができる。たとえ色がマスク発生器の一部として現れるとしても、組み合わせたサイクル長は、ベースカラーサイクル長に影響しない。各ブロックにおける総関数カウントは、ブロックごとに異なる可能性があり、現に異なる。一般的なインターフェース上の理由から、すべての古典的なブロックは、総関数カウントを2の累乗として有する。
【0200】
古典的なブロック内で単純なシフトレジスタをマスク発生器と混合することは適切に機能し、これもブロックの最小サイクル長に著しく影響する。古典的なブロック3と4の間の対比に留意されたい。これらのサンプルの古典的なブロックは、どの問題がグループ化プロセスを駆動すべきかを示すように形成された。注意して、極めて良好な古典的なブロックを低ゲートカウントおよび良好なサイクル長で形成することができるが、サイクル長を分化する全体目標を維持する。上記の表において、一覧表示されるマスク発生器は、すべてステージ1発生器である。代替として、より高いステージの発生器を表に追加してもよく、したがって、各古典的なブロックを追加することができる。実際に、これは、不確定性ランダム値発生器における一意関数の総数を増大させる、極めて単純な方法となる。
【0201】
古典的なブロックハードウェア抽象化は、これらの関数に対する一般的なインターフェースを提供する一方で、あらゆる種類の構造上のソリューションを開発するための基本的な構築ツールを付与することに留意されたい。
【0202】
間接的ランダムストリーム
ここで、生のアンセーフメモリアドレスを生成するための古典的なブロックがあり、データは、1つまたは複数のデータプールから読み取ることができる。データパラドックスアンセーフと定義されると、この方法で読み取られるデータは、内部的にのみ使用され、値の間接的ランダムストリームと称される。通常、この間接的ランダムストリームを適用して、様々な編集プロセスにおいて使用されるランダムデータを引き出す。出力ストリームに直接フィードするために使用してはならない。
【0203】
セーフアドレスストリーム
1つまたは複数のデータプールの外に構築される不確定性関数は、強力な解決策である。データプールに対する直接攻撃を除いて、1つまたは複数のデータプールにおいてデータを拾い集める次善策は、1つまたは複数のプールから読み取るために使用されるランダムアドレスをモデル化することである。この形態の攻撃を阻止するために、ランダムアドレスは、アドレスがモデル化され得ない方法で分離しなければならない。
【0204】
分離プロセスは、ここで最も単純な変換から開始する。幸運なことに、不確定性関数の正確さは、セーフランダムアドレスを形成する支援となる。古典的なブロックによって生成される各ランダム(生)アドレスは、データ駆動修正プロセスを通じて安全にすることができるに過ぎない。1つ以上のプールからのデータによる擬似ランダムアドレスの修正は、一意のランダムアドレスストリームを付与する。このアドレスストリームは、1つまたは複数のデータプールのコンテンツを最初に知ることなく、モデル化することはできない。これらの決定性アドレスは、不確定データを使用して、分離プロセスを介して非決定性にアップグレードされた。
【0205】
図15は、本発明の一実施形態に従って、アンセーフメモリアドレスの間接的ランダムストリーム1314を使用して、値1318をデータプール1316から引き出す、ハイブリッドアドレス発生器1300を描くシステムフロー図である。このハイブリッドアドレス発生器1300は、2つの古典的なブロック1302および1322を使用して、それぞれデータ0 1304およびデータ1 1324の入力ストリームを生成する。マスクストリーム1318は、データ0ストリーム1304およびデータ1ストリーム1324上で動作し、結果としてハイブリッドアドレスストリーム1350を形成する(1340)。ハイブリッドアドレス発生器の動作は、データ値1318をデータプール1316から引き出す間接的ストリーム1314を除いて、マスク発生器400と同一である。ハイブリッドアドレス発生器1300は、データパラドックスセーフランダムメモリアドレス1350を作成して、1つまたは複数のデータプールから読み取る。ハイブリッドアドレスストリーム1350を形成するために、ネットコストは、少なくとも3つの古典的なブロック1302、1312、および1322となる。
【0206】
コストが低く、安全ではないが、図16は、本発明の一実施形態に従って、不確定性関数を適用し、Xセーフアドレス発生器1400と称される、データパラドックスセーフランダムアドレスを作成する、第2の方法を描く、システムフロー図である。1つの古典的なブロック1402は、データ0 1404入力ストリームを形成するために必要である。同様に、間接的ランダムストリーム1418を形成するためには、別の古典的なブロック1412を使用しなければならない。第2の古典的なブロック1412からの出力ストリーム1414を使用して、データプール1416にインデックス付けし、データ0ストリーム1404を有するビットワイズXOR1440である、間接的ランダムストリーム1418を形成する。結果として得られるランダムアドレスストリーム1450は、ハイブリッドマスク発生器とほぼ同程度安全となるが、サイクル長はより短い可能性が高い。Xセーフアドレスストリーム1450を形成するために、ネットコストは、少なくとも2つの古典的なブロックとなる。
【0207】
任意の不確定性ランダム値発生器は、発生器の支持される総サイクル長を通して完全にサイクルすることはないはずであると仮定することができる。したがって、ランダムアドレスストリームサイクル長は、総目標アプリケーションランダムデータ要件を超えなければならない。所望のサイクル長に到達するために、ランダム編集プロセスのスタッキングが必要とされる場合がある。このスタッキングは、古典的なブロック内または外で構築することができる。
【0208】
セーフランダムデータストリーム−ハードウェア抽象化
分離プロセスは、安全なランダムデータストリームを継続する。パラドックスセーフメモリアドレスを使用して、データプールを読み取ると、3つのランダムデータストリーム、データ0、データ1、およびマスクが形成される。安全なランダムデータストリームは、メモリアドレスおよびデータの分離プロセスを介して、仮想データプールサイズを成功裏に増大させた。1つまたは複数のデータプールは、ここで、データパラドックスからのリスクなしに、ランダムデータの何倍もの量を作成することができる。これは、この発生器にフィードするために少なくとも6つの古典的なブロックを必要とする。入力ストリームの分化したサイクル長で開始すると、次に、安全なランダムデータストリームサイクル長は、各入力サイクル長にデータプールサイズを掛けた積である。
【0209】
セッションデータの動的展開
分離プロセスは、セッションデータの動的展開を継続する。固定数のカードで開始するカードゲームは、分離に役立つ隠喩を提供する。1組のトランプをシャッフルすると、取り扱われるカードの新しいシーケンスを設定することによって、新しいゲームを形成する。多くの場合において、次に、1組のトランプを「カット」し、扱われる第1のカードを変更する。1組のトランプをシャッフルおよびカットする行為は、ゲームを行うカードのシーケンスを変更する。
【0210】
同様に、同一の原理をセッションデータに適用することができる。この結果は、セッションデータを「リフレッシュする」ことである。セッションデータのリフレッシュは、不確定性を追加するだけでなく、更新されたセッションデータは、データパラドックスを避けるのに役立つ。「仮想」シャッフルおよびカットは、メモリアドレスを用いてのみ行われ、セッションデータにおいて見出される値を再インデックス付けするように作動する。1つまたは複数のプール内のデータは、まだ静止したままであるが、1つまたは複数のプールを読み取るために使用されるアドレスは、「シャッフルおよびカット」をシミュレートする方法で操作される。
【0211】
仮想カット−メモリアドレス+オフセット
例えば、1つまたは複数のデータプールを読み取るために使用されるメモリアドレスのオフセットを追加することは、メモリ範囲の起源を移動させることと同じ効果を有する。これは、正にカードゲームにおいて1組のトランプを「カットすること」と同様に動作する。
【0212】
仮想シャッフル−メモリアドレスXORシャッフル値
メモリアドレスを有するシャッフル値のビットワイズXORの動作は、適当な位置における素早いシャッフルの効果と比較できる。メモリ範囲は、XOR演算によって再発注されている。シャッフルの次にカットすることができ、またはカットの次にシャッフルすることができる。これらの仮想カードトリックは、希望に応じて何度も行うことができる。
【0213】
ランダムサブストリーム−メモリアドレスオフセットの使用
メモリアドレスの操作は、一部の極めて有用な副作用を有する。通常、不確定性ランダム値発生器は、1つのランダムストリームのみを生成する。不確定性ランダム値発生器内で使用される各メモリアドレスが、それに追加されるオフセットを有する場合、異なるランダムサブストリームが、それぞれ異なるオフセットに対して生成される。任意の数の恣意的ランダムサブストリームは、メモリオフセット値の選択的追加を介して生成することができる。これは、必要に応じてランダムアドレス指定可能なサブストリームをもたらす。このツールは、多くのアプリケーションにおいて極めて有用である。
【0214】
メモリアドレスラインの動的変更
データプールコンテンツを分離する別の方法は、ハードウェアアドレス指定ラインを動的に変更することである。これは、一般的な無制限ハードウェアソリューションである。これは機能するが、多くの設計において使用するには高価すぎる場合がある。
【0215】
ランダムネスの第3のプレーンは、ハードウェアの古典的なブロック内でも可能にすることができる。各古典的なブロックは、初期化タイムにおいて、シード値、出力ビットストリームの経路指定選択、およびブロック内でどの関数を使用するかの選択で構成される。ある程度のハードウェア努力により、古典的なブロック内で、シード値の動的ランタイムスイッチング(動的シード関数)および関数選択を追加することができる。この追加努力の利益は、ハードウェア不確定性ランダム値発生器内で、ランダムネスの第3プレーンを可能にすることである。
【0216】
完全動的変異
既に読んだとおり、セッションデータの「仮想」展開を行うことは安価である。2つのランダムアドレスストリームを1つまたは複数のデータプール内で形成すること、およびこれらの位置のコンテンツを交換することは、完全動的変異と称される別のソリューションを表す。変化率が十分に低い場合、全体性能に対する影響が制限されるはずである。
【0217】
高性能設計は、最大のランダムデータ要件を要求する可能性が高い。各メモリサイクルは、全体的な発生器性能にとって極めて重要となり得る。複数のデータプールにロードされる同一セッションデータを有することは、設計に使用可能なメモリ帯幅において主要なブーストをもたらす。設計の異なる部分は、異なるデータプールを使用して、メモリアクセスを同時に重複させる可能性がある。したがって、重複するメモリアクセスは、メモリ帯幅問題を解決する。
【0218】
依然として、メモリ帯幅問題を解決しながら、実際のデータプールシャッフルを完了させることが必要とされ得る。これは、データプールの第2または重複セットにより達成され得る。データプールの第1のセットは、ランダムデータをアクティブに生成するが、第2のセットは、シャッフルされている。一旦シャッフルが完了すると、データ駆動カウントに到達し、「フレッシュな」データプールが切り替えられて、一次データプールになる。ここで、陳腐化したデータプールは、自由にシャッフルされる。このプロセスは、必要に応じて何回でも反復され得る。
【0219】
ハードウェア実施例
これらの実施例のそれぞれは、不確定性ゲノムの特徴の一部を示す実施例を表す。セッションデータをデータパラドックスから保護するために使用される分離プロセスの全範囲を示すよう特に注意する。これらの実施例のそれぞれは、単一の不確定ランダム出力ストリームを生成する。可能性のあるソリューションの数は、複数のランダム出力ストリーム、ランダムにアドレス指定可能なサブストリーム(それらは、ソフトウェア実施例において包含される)、セッションデータの動的展開、複数のデータプール、および仮想カットならびに仮想シャッフルを含む実施例に制限されないため、多くの実施例はここで示されていない。
【0220】
ハードウェア実施例1
データパラドックス問題の大部分は、擬似ランダム関数を使用して、データプールにアドレス指定することに由来する。データならびにアドレスを分離するために、短サイクルプロセス1100aの使用を適用することもできる。図17は、安全なランダムデータストリーム1190を形成するために使用されている、2つの短サイクルプロセス1400aおよび1400bから成る、ハードウェア実施例1を描写する、システムフロー図である。第1の短サイクルプロセス1400aを使用して、アドレス1120aを形成し、データ値をデータプール1150から引き出して、不確定性データ1170を形成する。XOR1180される、データストリーム1120bを形成する第2の短サイクルプロセス1400bを不確定性データ1170と統合することは、不確定性ランダムデータストリーム1190を提供する。
【0221】
原則として、エンジニアリングは、常に、正確なトレードオフを作成することとの闘いである。ハードウェア実施例1の場合、これらのトレードオフを作成して、ハードウェアコストを最小に低減した。支持されるランダムデータ量のサイズは、定義されていない。ランダムネスの第3プレーンである制御プレーンの概念を使用して、古典的なブロック内の関数を選択し、はるかに速い速度の動的シード関数において、シード値をロードする。多くの場合、新しい関数を再選択するための不確定性データを使用する効果は、追加のハードウェアなしに、アドレスを分離するさらに別の手段となる。
【0222】
以下の設計実施例は、それぞれアドレスおよびデータ用の2つの短サイクルブロックを使用する。不確定性(メモリ)および関連グルーのプールを追加して、設計要素を完成させる。この実施例の場合、カウントダウン範囲は、8〜64の値である。短サイクルブロックは、プログラム可能な32ビットLFSRである。各プログラム可能なLFSRは、8つの一意のLFSRと同様に機能する。
【0223】
【数11】
【0224】
出力値あたり、2つの短サイクル(古典的な)ブロックおよび1つのメモリアクセスのみが必要であるが、データプレーン、アドレスプレーン、および制御プレーンという3つのランダムネスのプレーンのすべてがアクティブである。
【0225】
ハードウェア実施例2
短サイクルプロセスをハイブリッドマスクURNGプロセスと対比する場合、後者は、分離プロセスとして、マスク発生器の追加の安全性を利用する。この増大した安全性は、ある程度低い性能に達する(ハイブリッド設計は、3つの短サイクルブロックに対し、より多くの入力値を必要とする)。ハイブリッドマスクプロセスは、ゲートカウントを増大させる、追加のハードウェア要素(短サイクルブロックおよびマスク発生器)を必要とする。幸いなことに、追加の努力は、より安全なランダムデータの生成の増加を達成する。
【0226】
【数12】
【0227】
性能は、短サイクルURNGからわずかに低下するが、いくつかの明らかなアップグレード、追加の不確定データによる仮想カット/シャッフル(追加パラドックス安全性)、短サイクル入力値を読み取るための専用の古典的なブロック(漸増する機能的セッションデータ選択)も適用する。
【0228】
ハードウェア実施例3
「パラドックスセーフ」URNGの目的に達することは、アドレス(定義域値)およびデータ(値域値)の両方から除去される、すべての決定性動作を必要とする。1つの非決定性出力値の生成は、マスクまたはカオスエンジンを使用して、定義域値と値域値とを分離する必要がある。セーフURNGは、極めて大量のランダムデータの生成を可能にする。セーフURNGの1つの重要な利点は、セッションデータに関する緩和要件である。ほとんどすべての検証されたセッションデータは、セーフURNGにより正確に機能する。これは、一意のセッションデータを自動的に生成する、アプリケーションにとって重要であり得る。
【0229】
完全な古典的なブロックは、最大の分化したサイクル長ならびに不確定性プール上の良好なアドレス指定被覆を保証するために必要とされる。これは、設計の任意の部分に対する古典的なブロック出力の経路指定を含む。設計者に委ねられる努力として、初期化をステップオーバーするとき、3つの主要なタスクがある。
【0230】
各URNGの標準概要に従って、ステップ1では、PRNGがアドレスを生成して、不確定性のプールから読み取り、それによって、FIFOにおいてキャッシュされる(先入れ先出し)、生のパラドックスアンセーフ不確定ストリームを生成する。ステップ2は、次に分離されて非決定性データプールアドレスを生成するアドレスを生成するように、複数のPRNGを必要とする。これらのパラドックスセーフアドレス(定義域値)は、不確定性のプールから読み取り、それによって、パラドックスアンセーフデータ(値域値)をそこから生成する。ステップ3において、パラドックスアンセーフデータ(値域値)を分離して、非決定性出力ストリームを生成する。
【0231】
安全なURNG設計全体で、生の不確定データが求められる。そのため、FIFOを構築して、内部使用のために値をキャッシュする。このFIFOを満たすために、1つの古典的なブロックを割り当てて、アドレスを生成し、不確定性のプールから読み取る。明らかに、このFIFOのサイズは、実装依存となる。
【0232】
安全なURNGの一部の変型例は、カオスエンジンを使用する。これらのエンジンは、不確定データを命令として使用する。各不確定メモリアクセスは、一度に複数の命令をフェッチする。したがって、命令に対するメモリ帯幅要求は、読み取られるメモリあたりの命令数に依存する。
【0233】
非決定性メモリアドレス(不確定性関数定義域値)の生成
以下が仮定される。各古典的なブロックは、可能性のあるアドレス範囲の良好な被覆を保証するのに十分長い決定性実行を有する。LFSRの自然なサイクル長に到達することはなく、それによって、値の反復シーケンスを生成する。ある時点で、新しいシードベクトルをロードして、アドレスシーケンスを分割する。これらの新しいシードベクトルは、比較的低い変化率を有する。これらの古典的なブロックの出力を使用して、2つの可能性のあるアドレス分離プロセス、ハイブリッドマスク発生器またはアドレスカオスエンジンのうちの1つをフィードする。
【0234】
ハイブリッドマスク発生器の場合、2つの異なる古典的なブロックは、データ0およびデータ1値を供給する。マスク値は、不確定性ストリームFIFOに由来する。これらの3つの値をマスク発生器に対する入力として使用することは、ハイブリッドマスク発生器を付与する。ここで、我々は、非決定性メモリアドレスを生成する手段を有する。
【0235】
アドレスカオスエンジンの場合、2つの異なる古典的なブロックは、データ0およびデータ1値を供給する。マスク値は、不確定性ストリームFIFOに由来する。次の命令は、不確定性命令ワードから取られる。命令ワードが空の場合、新しい命令ワードは、不確定性ストリームFIFOからフェッチされる。所与の命令を使用して、カオスエンジンに対する入力としてのデータ0、データ1、およびマスク値は、アドレスカオスエンジンを提供する。ここで、我々は、非決定性メモリアドレスを生成する手段を有する。
【0236】
データ分離プロセス(不確定性関数値域値)からの結果の生成
2つの非決定性メモリアドレス(定義域値)を仮定して、データ0およびデータ1(値域値)を不確定性のプールから読み取る。マスク値は、不確定性ストリームFIFOに由来する。これらの3つの値は、2つの方法、データマスク発生器またはデータカオスエンジンのうちの1つにおいて使用される。
1)データマスク発生器の場合:標準分離マスク生成結果を得る。
2)データカオスエンジンの場合:次の命令は、不確定命令ワードから取られる。命令ワードが空の場合、新しい命令ワードは、不確定性ストリームFIFOからフェッチされる。標準的な3つの値、データ0、データ1、およびマスクは、データカオスエンジンにおいて処理され、したがって、分離されたデータ結果を生成する。
【0237】
広範囲のトレードオフを仮定すると、安全なURNGの可能性のある実装は、コストおよび性能の両方において異なる。アプリケーションのニーズに応じて、考慮すべき設計アップグレードがある。すなわち、追加の不確定データに対する仮想カット/シャッフル、時間変位、不確定性のプールの複数コピー、マスク発生器/カオスエンジンの混合および一致等である。
【0238】
ソフトウェア構成要素
伝統的に、少数パーセンテージのソフトウェアのみが、1秒あたり何千回も実行される。この実行率は、高性能ソフトウェアの設計に影響することができ、現に影響する。そのために、可能性のある限り適度に効率的であることに注意しなければならない。この効率性に対する感度は、古いブロック構造プログラミングスタイルとオブジェクトパラダイムとの間の闘いではない。代わりに、両方のスタイルを慎重に混合して、所望の柔軟性ならびに性能を付与する。
【0239】
コンパイラは、ソースをマシン言語に変換する手段をはるかに凌ぐ。すべてのプログラマーは、ランタイムの代わりに、コンパイルタイムにおいてバグを見出すことを評価している。優れたプログラマーは、ドキュメント化ならびに実装の手段として、ソースコードを使用する。このドキュメント化は、後に続き、コードを支持するはずの人々にとって非常に有用である。
【0240】
プログラミングのオブジェクトパラダイムにおいて、抽象化およびそれらの関係は、コンパイルタイム中に定義される場合が多い。抽象化間の関係を結合するコンパイルタイムの破壊、およびそれをランタイム結合と置換することは、確定性から不確定性への必要な切替えを提供する。不確定性データを使用して決定プロセスを駆動することは、より広範囲の不確定性乱数発生器が動的に構成されることを可能にする。制御およびデータプレーンの両方からの革新の利点を獲得することは、任意の時点において、不確定性ランダム値発生器の動的再構成を促進する。このように、クラッカーは、決して、コンパイルしたソースから全体システムをモデル化することができない。
【0241】
ソフトウェアベースの不確定性ランダム値発生器は、動的に構成される、異なるソフトウェアコンポーネントで構築される。動的構成は、そこから選択するコンポーネントの集合を必要とする。明らかに、そこから選択する可能性のあるコンポーネントのより大きいセットは、不確定性の実質的な増加を意味する。したがって、各集合は、任意の可能性のある構成に必要な最小数のコンポーネントを何倍もしたものでなければならない。これは、より多くのコンポーネントが好ましい、すなわち、確定性が低い単純な例である。
【0242】
プログラミングのオブジェクトパラダイムに関する個別の利点は、この哲学を論理的な開始位置とし、不確定性のプールを使用して、ランダム値発生器のランタイムにおいて実装されるプロセス/モジュールを選択する。理想的な設計の柔軟性は、オブジェクトパラダイムオーバーヘッドを支払うことなく、ランタイム関数スイッチングを達成することである。関数結合が、コンパイルタイムではなく、ランタイムにおいて行われることが重要である。このように、クラッカーは、コンパイルソースから全体システムを容易にモデル化することができない。ランタイムオブジェクトに結合する関数を選択するために、プロセスは、データプール(不確定性関数)から駆動されるデータとなる。
【0243】
ここで定義されるソフトウェア構成要素は、オブジェクトベース言語ほど的確ではないが、実際、読み取ることが幾分か困難になる。しかしながら、それらは、不確定性ランダム値発生器をもたらすランタイム結合において非常に有効である。完全なリストではなく、必要な部分のみが説明される。これらのインターフェースは、Cプログラミング言語でドキュメント化される。
【0244】
【数13】
【0245】
以下の仮定は、構成要素を論じる前に作成される。
1)どのソフトウェアアーキテクチャ(すなわち、どの実施形態)が選択されたか。
2)セッション/ソース/出力バッファデータは、既にメモリにロードされている。
3)再シャッフルデータが必要とされる場合、必要に応じて、それもデータプールにロードされている。
【0246】
古典的なランダム関数の表
幸運なことに、ランダム値を生成するための多数の公開されたソフトウェア関数を有する。このソフトウェアセットは、古典的なハードウェア線形フィードバックシフトレジスタ(LFSR)よりも小さいが、以前として、選択すべき良好な関数が多数ある。ハードウェアシフトレジスタをこの表に含め、追加することもできる。表は、ソフトウェア専用関数および/またはシフトレジスタ実装の混合を有する可能性が高い。ソフトウェア実装のための古典的なランダム関数の表は以下を含む。
・線形合同法
・遅延Fibonacci発生器
・Blum Blum Shub
・Fortuna
・Mersenne Twister
・SIMD指向Fast Mersenne Twister
・CryptGenRandom
・Yarrowアルゴリズム
・フリーBSD
・Park−Miller乱数発生器
・反転合同発生器
古典的なランダム関数の表は、ランダム関数ポインタ、関数のサイクル長、および「使用中」フラグの3列の形態をとる。表内の各関数は、それらの「旋律」において次の単一値を生成する。
【0247】
古典的なランダム関数の表と古典的なブロックとの間の差は、マスク発生器を有していないことと、複数のエントリが一度に使用されるという事実を含む。「使用中」フラグは、エントリが割り当てられるたびに設定される。サイクル周期長を使用して、同一サイクル長を有するたった1つの関数がアクティブであることを確認する。不確定性ランダム値発生器のこの例において、「使用中」フラグとサイクル長との間で、分化したサイクル長のみが使用されていることを保証することは容易である。これらの「ステートレス」関数は、内部データを有しないことに留意されたい。それらは、単に現行値を取るだけであり、順番に次の値を生成する。
【0248】
ランダム編集プロセスの表
多数のランダム編集プロセスは、この説明の範囲内で定義される。ランダム編集プロセスの表は、これらの編集プロセスのランタイム実装を保持する。これらも内部データを有しない「ステートレス」関数であることに留意されたい。
これらの汎用編集プロセスは、一般的なツールとして作動し、目標の実施形態を構築する。これらの関数は、必要に応じて、カオスエンジンに動的にインストールされる。古典的なランダム関数の表とは異なり、1つのカオスエンジン内で、同一の編集プロセスの複数例を制御する定義された方針はない。正当な理由が、同一の編集プロセスの一意または複数例のいずれかの使用を支持する。任意の編集プロセスの一意または複数例を実装するか否かを選択することは、設計者次第である。複数例が支持される場合、これらのプロセスを、性能に悪影響を及ぼさない数に制限することに注意しなければならない。
【0249】
擬似ランダム発生器の割り当てルール
古典的な関数の表から擬似ランダム発生器を割り当てる(または再割り当てする)場合、ルールは単純である。アクティブ関数は、不確定性ランダム値発生器のインスタンスあたり1回のみ使用することができる。これらの関数が統計的に割り当てられる場合、各アクティブ関数は、編集プロセスの総ランレングスを最大化するように、異なるサイクル長を有しなければならない。不確定ランレングスを用いて、古典的な関数が動的に割り当てられる場合、2つ以上の擬似ランダム発生器は、同一のサイクル長を用いて割り当てられ得る。この背後にある理由は単純であり、不確定性ランレングスは、自然なサイクル長の前に終了する可能性が高い。明らかに、ランレングスの最後に、擬似ランダム発生器は、割り当て解除され、表に戻される。次に、新しい不確定値を適用して、表から代替の擬似ランダム発生器を選択する。
【0250】
構成(または再構成)プロセスにおいて、不確定値は、既に割り当てられた擬似ランダム発生器を指してもよい。この場合、単に値を破棄して、必要とされる擬似発生器のすべてが選択されるまで、別の値を得る。それらを構成するとき、または割り当てプロセスの最後に、これらの関数をシードしてもよい。すべての可能性のあるランレングスが有用であるとは限らない。したがって、すべてのランレングスは、有用範囲に制限されなければならない。例えば、短すぎるランレングスは、過度のオーバーヘッドを追加し、不確定性のプール上に完全なアドレス指定被覆をもたらすのに失敗する。逆に、長すぎるランレングスは、擬似ランダム発生器の自然サイクル長を超える場合がある。
【0251】
カオスエンジンの編集プロセスの割り当てルール
任意の所与の編集プロセスは、カオスエンジンのインスタンスあたり1回だけアクティブであり得る(多様性は不確定性を追加する)。しかしながら、同一の編集プロセスは、他のカオスエンジンにおいてアクティブであり、不確定性を最大化し得る。
【0252】
各カオスエンジンは、不確定性のプールからロードされるランレングスを有する。明らかに、任意のランレングスの最後に、各編集プロセスは、割り当て解除され、表に戻される。次に、多くの新しい不確定性値を使用して、表から代替の編集プロセスを選択する。一旦カオスエンジンが再構成されると、新しいカオスエンジンランレングスは、不確定性のプールからロードされる。
【0253】
一部のプログラマーは、各カオスエンジンのランレングスに加えて、またはその代わりに、各編集プロセスのランレングスを好む場合がある。
【0254】
不確定性開始値−公的値
この私的値は、ランダムシーケンスを開始するためのキーを表すため、大部分の古典的なランダム関数のシード値は保護されなければならない。この「シークレットキー」値の保護は、一部の場合において課題となる可能性がある。
【0255】
不確定性ランダム値発生器の開始値は、値がデータプールメモリオフセットに過ぎないため、そのような保護を必要としない。保護された値のすべては、データプールへの公的オフセットではなく、データプール自体にある。不確定性ランダム値発生器の初期化プロセスは、データプールメモリオフセット開始値において見出される、データプール値によってシードされる、一時的な古典的な関数で開始する。秘密でない値として、開始値は、リスクなしに誰にも見えるようにすることができる。
【0256】
この一時的な古典的な関数を利用して、データプールを読み取ることによって、すべての他の初期化値は、不確定性のプールから生じる。不確定性ランダム値発生器を構成するために、開始値は、どの初期化値が使用されたかを暗示することはできない。一旦初期化プロセスが完了されると、公的開始値が再度使用されることはなく、一時的な古典的な関数は破棄される。
【0257】
ソフトウェア実施例
制御プレーンを活発に使用して、新しいソフトウェア構成要素を動的に再選択することは、追加の決定性動作を除去する効果を有し、それによって不確定性を追加する。この追加された不確定性がその利点にもたらすオーバーヘッドは比較的小さい。ハードウェアに優るソフトウェアの利点/不利点は、よく認識されている。ソフトウェア実装は、常にハードウェア実装よりも遅いが、はるかに優れた柔軟性を追加する。
【0258】
極めて高性能および/または膨大なランダムデータ要件は、ハードウェア実装を適用する可能性が高いという、以下の仮定を行うことができる。極めて少量のランダムデータ要件は、伝統的なPRNGによって解決され得る。ソフトウェアベースのURNGは、ハードウェア属性を必要としないアプリケーションに最適であるが、依然として、その他のURNG特徴を必要とする。URNGに関して提供されるソフトウェア実施例のすべては、パラドックスセーフであり、したがって、すべての検証されたセッションデータに対して適切に機能する(はずである)。
【0259】
ソフトウェア実施例1
ソフトウェア実施例1、マスクURNGは、マスク発生器を使用して、不確定性関数のアドレス(定義域値)およびデータ(値域値)の両方を分離する。このように、すべてのアドレスおよびデータが非決定性であるため、出力値は、パラドックスセーフである。ハードウェア実施例と同様に、初期化努力は、開発者に委ねられる。以下は、ソフトウェア実施例1の動作を説明するための実例コードである。
【0260】
【数14】
【0261】
【数15】
【0262】
【数16】
【0263】
【数17】
【0264】
【数18】
【0265】
一部の形態において、マスクURNGは、ソフトウェアアプリケーションの最も一般的なソリューションを表す。簡素なPRNGほど高速にはならないが、URNG特徴セットに対して良好な性能を提供する。考慮すべき明らかな設計アップグレードは、追加の不確定データによる仮想カット/シャッフル、および時間変位である。マスクURNGのサイクル長は大きすぎるため、ユーザの生涯において反復する可能性は低い。したがって、カオスURNGは、可能性のあるソフトウェア実施例を完了するように含まれるに過ぎない。
【0266】
ソフトウェア実施例2
ソフトウェア実施例2、カオスURNGは、カオスエンジンを使用して、アドレスおよびデータの両方を分離する。マスクURNGと同様に、すべてのアドレス(定義域値)およびデータ(値域値)は非決定性であるため、出力値は、パラドックスセーフである。ハードウェア実施例と同様に、初期化の努力は、開発者に委ねられる。以下は、ソフトウェア実施例1の動作を説明する実例コードである。
【0267】
【数19】
【0268】
【数20】
【0269】
【数21】
【0270】
【数22】
【0271】
デジタル著作権管理(DRM)
なぜ現行のDRM設計が問題であるかについて多くの理由がある。それが現在設計されているように、それらは問題の一部を解決するに過ぎないため、一応機能しているに過ぎない。現在のDRM設計は、他と良好に相互作用しない一意の独立したソリューションである。現在のDRMは、多くの内部秘密を成功裏に隠すことに依存するため、過度に複雑である。公的ロックベースのDRMを使用することは、私的キーを秘密にしておかなければならないことを意味する。より正確には、保護すべき重大な秘密は、これらの私的キーを隠す方法である。秘密性のニーズは自明であり、現在の技術の脆弱性をもたらす。しかしながら、これと同様の秘密性への依存は、他の企業からの製品またはサービスとの相互運用性もブロックする。どのようにして秘密を共有しながら、依然としてその完全性を維持するのかというこの点は、理解しやすい。
【0272】
重大な秘密を防御することは、DRM設計者とハッカーとの間の激しい競争として説明することができる。公的ロックに対しする私的キーを隠す試みは、DRMの基軸が、単一の魅力的かつ潜在的に壊滅的な標的を表す限り、不完全であることは避けられない。このDRMを攻撃することに関する費用対効果の分析において、秘密を漏出する報酬は、最小リスクおよび関与する相対努力を上回り続けている。ハッカーが重大な秘密を発見するたびに、結果は、すべての音楽を開錠する単一のキーである。
【0273】
現在の技術の弱みから逃れるためには、このゲームの経済性を変更しなければならない。我々は、私的ロックに依存する新しい技術に切り替える。各個人に私的ロックを付与することは、我々が公的キーを使用できることを意味する。したがって、もはやDRM内に公的キーを隠す必要がなくなる。私的ロックが盗まれたとしても、1つのドアのみが開く一方、すべての他のドアはロックされたままである。私的ロックを破るための報酬は、公的ロックと比較して極めて低い。私的ロックを使用することは、盗まれたロックによる損害が自らを制限するものであることを意味する。大きい秘密をクラックすることは、小さい秘密をクラックすることと同じくらい困難であるが、大きい秘密の喪失は壊滅的であることが明らかであるが、数多くあるうちの1つに過ぎない小さい秘密の喪失は、依然として無視できる。
【0274】
私的ロックを用いる別の極めて重要な利点は、それらが完全な相互運用性を支持することである。各ベンダーは、自身のメディアセールスに対して異なる私的ロックを使用することができる。どの時点においても、いかなる者も小さい秘密を超えること知ることはない。この技術は非常に単純であり、同一のハードウェアおよび/またはソフトウェア実装を使用して、一意の小さい秘密ソリューションを各個人に送達する。上述される私的ロックは、本明細書において開示される不確定性ランダム値発生器である。各個人は、自身のメディアを開錠するための独自の私的関数を付与され、各メディアデバイスは、この私的関数が搭載され、すべての自身のメディアの公平な個人使用を可能にする。購入される各メディアには、公的キーが供給され、所有者が、すべてのメディアデバイス上でメディアを開錠、解読することを可能にする。DRMのプロセスは、図22において説明されるMACプロセスと同様に機能する。各ユーザ消費者は、各自の私的関数を有し、一意のキーは、購入される各メディアとともに出荷される。消費者は、それらのメディアデバイスのそれぞれにおいて同一のプライベート関数を有し、メディアを認証および解読する。
【0275】
本明細書において説明される機能、特徴、利点、構造等のうちのいずれかは、1つ以上のモジュールにおいて具体化され得る。本明細書において説明される機能的ユニットの多くは、それらの実装独立をより具体的に強調するために、モジュールとして標識されている。例えば、モジュールは、ハードウェア回路として実装されてもよく、カスタムVLSI回路またはゲートアレイ、論理チップ等の既製の半導体、トランジスタ、または他の個別のコンポーネントを備える。モジュールは、フィールドプログラム可能なゲートアレイ、プログラム可能なアレイ論理、プログラム可能な論理デバイス等のプログラム可能なハードウェアデバイスにおいて実装されてもよい。
【0276】
モジュールは、様々な種類のプロセッサによって実行するために、ソフトウェアにおいて実装されてもよい。プログラム可能または実行可能なコードの識別されたモジュールは、例えば、コンピュータ命令の1つ以上の物理または論理ブロックを備えてもよく、これは、例えば、オブジェクト、手順、または機能として組織化されてもよい。それにもかかわらず、識別されたモジュールの実行可能なものは、物理的に一緒に位置する必要はないが、異なる位置に保存される異なる命令を含んでもよく、これらが論理的に互いに結合されると、モジュールを備え、モジュールに定められた目的を達成する。
【0277】
実際に、実行可能なコードのモジュールおよび/またはプログラムは、単一の命令、または多くの命令であってもよく、異なるプログラムの中で、いくつかの異なるコード区分全体、およびいくつかのメモリデバイスに渡って分布されてもよい。同様に、作動データが識別され、本明細書においてモジュール内で説明される場合があり、任意の適切な形態で具体化されて、任意の適切な種類のデータ構造内で組織化されてもよい。作動データは、単一のデータセットとして収集されてもよく、または異なる記憶デバイス全体を含む、異なる位置全体に分布されてもよく、単なる電子シグナルとして、システムまたはネットワーク上に少なくとも部分的に存在し得る。
【0278】
本明細書において論じられる、様々なシステムコンポーネントおよび/またはモジュールは、以下の、デジタルデータを処理するためのプロセッサを含む、ホストサーバまたは他のコンピューティングシステム、デジタルデータを記憶するための当該プロセッサに連結されるメモリ、デジタルデータを入力するためのプロセッサに連結される入力デジタイザ、当該メモリに記憶され、当該プロセッサによってアクセス可能な、当該プロセッサによってデジタルデータの処理を指向するためのアプリケーションプログラム、当該プロセッサによって処理されるデジタルデータに由来する情報を表示するためのプロセッサおよびメモリに連結される表示装置、および複数のデータベースのうちの1つ以上を含み得る。本明細書において使用される様々なデータベースは、あらゆる形態の圧縮データ、および/または本発明の操作に有用な同様のデータを含んでもよい。当業者に理解されるように、本明細書において論じられる任意のコンピュータは、操作システム(例えば、Windows(登録商標) Vista、NT、95/98/2000、OS2、UNIX(登録商標)、Linux、Solaris、MacOS等)ならびに様々な従来のサポートソフトウェア、および通常コンピュータと関連付けられるドライバを含んでもよい。コンピュータは、家庭またはビジネス環境において、ネットワークへのアクセスを有してもよい。例示的な実施形態において、アクセスは、商業的に入手可能なウェブブラウザソフトウェアパッケージによってインターネットを経由する。
【0279】
本発明は、機能的ブロックコンポーネント、スクリーンショット、ユーザ相互作用、任意選択、様々な処理ステップ等に関して、本明細書に説明され得る。本明細書においてそのように説明されるものはそれぞれ、本発明の例示的な実施形態における1つ以上のモジュールであってもよい。そのような機能的ブロックは、特定の機能を実行するように構成される任意の数のハードウェアおよび/またはソフトウェアコンポーネントによって実現され得ることを理解されたい。例えば、本発明は、様々な集積回路コンポーネント、例えば、メモリ素子、処理素子、論理素子、ルックアップテーブル等を用いてもよく、それらは、1つ以上のマイクロプロセッサまたは他の制御デバイスの制御下、多様な機能を実行し得る。同様に、本発明のソフトウェア素子は、C、C++、Java(登録商標)、COBOL、アセンブラー、PERL、Visual Basic、SQL Stored Procedures、AJAX、拡張マークアップ言語(XML)等の任意のプログラミングまたはスクリプト言語で、データ構造、オブジェクト、プロセス、ルーチン、または他のプログラミング要素の任意の組み合わせで実装されている様々なアルゴリズムを用いて実装されてもよい。さらに、本発明は、データ転送、シグナリング、データ処理、ネットワーク制御等のために任意の数の従来技術を用いてもよいことに留意されたい。なおもさらに、本発明は、Java(登録商標)Script、VBScript等のクライアントサイドのスクリプト言語を用いて、セキュリティ問題を検出または回避し得る。
【0280】
追加的に、本明細書における機能的ユニットおよび/またはモジュールの多くは、他の機能的ユニットおよび/またはモジュールと「連通」していると説明される。「連通」しているとは、コンピュータ、ラップトップコンピュータ、PDA、モジュール、および他の種類のハードウェアおよび/またはソフトウェア等であるが、これらに限定されない、機能的ユニットおよび/またはモジュールが、相互に連通し得る任意の様式および/または方法を意味する。一部の非限定例は、ネットワーク、ワイヤレスネットワーク、ディスクドライブ、メディアプレーヤー、携帯電話、ネットワーク接続、ハードウェアロック、DNAシーケンサ、指紋スキャナ、角膜スキャナ、デジタルカメラ、ソフトウェア、命令、回路、電話線、インターネットライン、衛星シグナル、電気シグナル、電場および磁場、ならびに/またはパルス等を介する、データおよびメタデータの通信、送信、および/または受信を含む。
【0281】
本明細書で使用される場合、「ネットワーク」という用語は、そのようなハードウェアおよびソフトウェアコンポーネントの両方を組み込む、任意の電子通信手段を含んでもよい。本発明に従う関係者間の通信は、例えば、電話ネットワーク、エクストラネット、イントラネット、インターネット、ポイントオブインタラクション装置(販売時点管理装置、パーソナルデジタルアシスタント、携帯電話、キオスク等)、オンライン通信、オフライン通信、ワイヤレス通信、トランスポンダ通信、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、ネットワークまたはリンクされたデバイス等の任意の適切な通信チャンネルを通じて達成され得る。さらに、本発明は、TCP/IP通信プロトコルで実装されてもよいが、本発明は、IPX、Appletalk、IP−6、NetBIOS、OSIまたは任意の数の既存または将来のプロトコルを使用して実装されてもよい。ネットワークが、インターネット等の公的ネットワークの性質を帯びている場合、ネットワークは安全でなく、盗聴者に対してオープンであると仮定することが有利であり得る。インターネットに関連して利用されるプロトコル、基準、およびアプリケーションソフトウェアに関連する特定の情報は、一般に当業者に知られているため、本明細書において詳述する必要はない。例えば、参照することによってその内容が本明細書に組み込まれる、DILIP NAIK,INTERNET STANDARDS AND PROTOCOLS(1998)、JAVA(登録商標) 2 COMPLETE,著者多数(Sybex 1999)、DEBORAH RAY AND ERIC RAY, MASTERING HTML4.0(1997)、およびLOSHIN,TCP/IP CLEARLY EXPLAINED(1997)を参照されたい。
【0282】
上述の好適な実施形態は、本発明の原理の適用に関する例証に過ぎないことを理解されたい。本発明は、その精神または本質的な特徴から逸脱することなく、他の特定形態において具体化され得る。説明される実施形態は、あらゆる点で、限定としてではなく、単なる例証として考慮されるものである。本発明の範囲は、したがって、前述の説明ではなく、添付の請求項によって示される。請求項の等価の意味および範囲内でもたらされるあらゆる変更は、それらの範囲内に包含されるものである。
【0283】
したがって、本発明は、現在、本発明の最も実践的かつ好適な実施形態であると見なされるものに関連して、特異性および詳細とともに完全に上述されたが、請求項において説明されるような本発明の原理および概念から逸脱することなく、サイズ、材料、形状、形態、機能、ならびに操作、アセンブリ、および使用の方法における変化を含むが、これらに限定されない多くの修正を行ってもよいことは、当業者には明らかであろう。さらに、実施形態は、本明細書において説明される機能、特徴、構造、および/または方法のうちの1つ以上から成るか、または本質的にそれを含むことに限定され得ることが意図される。
【技術分野】
【0001】
関連出願に対する相互参照
本発明は、参照することによって本明細書に組み込まれる、2008年8月6日に出願されたRossの米国暫定特許出願第61/188,213号、およびPatrick D.Rossによる米国非暫定特許出願第12/533,179号に対する国際条約の下で優先権を主張する。
【0002】
本発明は、乱数を生成するための方法およびシステム、特に、乱数ストリームを生成するための方法およびシステムに関する。
【0003】
産業上の適用性
本発明は、これらに限定されないが、コンピュータゲーム、バンキング、通信、およびメディア開発産業等の産業において適用可能である。そのような産業によって利用されるシステムで使用するためのコンピュータハードウェア/ソフトウェアにおいて実装され得る。
【背景技術】
【0004】
多くのアプリケーションは、それらの内部処理の部分としてランダム値を必要とする。これらのアプリケーションの一部は、値の均一分布、所与のシード値からの再現性、およびそれらが反復する前の極めて長いサイクル等の単純な要件を有する。そのために、多くの論文および書籍は、これらの古典的なランダム値発生器を提供する、良好なハードウェアおよびソフトウェア関数について説明している。古典的なランダム値発生器の属性は、依然として有用でもあり、問題でもある。現在のランダム値発生器のいかなる欠陥にも対処する前に、まずこれらの発生器がどのように機能するかを検討しなければならない。
【0005】
ハードウェアベースであるか、またはソフトウェアベースであるかにかかわらず、すべての古典的なランダム値発生器に共通する特性が多数存在する。古典的なランダム値発生器の基礎は、静的ランダム関数の使用である。これらの関数のそれぞれは、現在の非ゼロデータ値をシーケンスにおける次のランダム値へと処理する。それぞれの新しい値の後次処理は、ランダムシーケンスを形成する。良好な関数が使用されると仮定すると、ランダムシーケンスは、ランダムネスに関するほぼすべての周知の統計的試験に合格する。
【0006】
多数のランダム関数が試験および公開されている。これらの公開された関数の大部分は、ランダム値の同一シーケンスを反復する前に、値の制限されたシーケンスを生成する。これらの短サイクル長は、多くのアプリケーションと互換可能となるには、短すぎる場合がある。ハードウェアにおいて、ランダム関数は、最も頻繁に、線形フィードバックシフトレジスタ(LFSR)として説明される。存在するソフトウェア関数は少ないが、新しいアプリケーションに使用するための、多数の確立された関数が設計者に使用可能である。また大部分のソフトウェアランダム関数は、同一の短サイクル属性を共有する。
【0007】
合格または不合格にかかわらず、サイクル長が、統計的試験と正に同じ程度に重要であることは明らかである。非線形様式で複数の公開された関数を結合することは、サイクル長を増大させるための最も一般的な方法である。関数ベースのランダム値発生器は、正確には擬似ランダム発生器と呼ばれ、依然として容易に「クラック」(反転)する。ランダム値発生器をクラックすることは、アタッカーが、シーケンスにおける値のそれぞれを予測することを可能にする。大まかに言って、古典的なランダム関数の複雑性を倍増させることは、それをクラックするために必要な努力を二乗する効果を有する。ハードウェアおよびしたがってコンピュータの速度が増加するにつれて、ランダム値発生器の設計者とそれらを破ることを望むクラッカーとの間の闘いは激化する。
【0008】
この大体の目安を採用して、ハードウェア設計者は、一層複雑なランダム値発生器関数を採択する。関数駆動パラダイムが不完全であることは避けられないため、設計者とクラッカーとの間の闘争は持続する。それぞれの新しい設計は、時代遅れになる運命にあるため、新しいランダム値発生器を形成、試験、および展開するコストは、それによって無制限である。続いて、チップの高い循環コストは、製品コストに直接変換される。この道筋に沿った末端は未知であるため、設計者は、それらの最新の関数が、どれくらいの期間クラッキングから安全であることを証明するかを予測することはできない。
【0009】
漸増する関数の複雑性のコストは、複数の方法で表される。上述されるように、ハードウェアの激しい競争は、避けられない不完全な問題として持続する。ハードウェア技術の新しい飛躍のそれぞれは、クラッカーに先行するように、新しい対応する発生器設計を必要とする。この上昇するコストは、多くのアプリケーション設計者に、ハードウェアベースのソリューションを差し控えさせる。システムコストを削減するために、多くのアプリケーション設計者は、ソフトウェアベースのランダム値発生器を用いる。多くの場合、ソフトウェアソリューションに移行するプロセスは、性能を受け入れがたいほど遅延させるか、またはCPUコストを増大させる。循環コストは、専用シリコンがなく低いが、ソフトウェア実装は、システム性能全体に重い負担をかける。ソフトウェアの複雑性が増大するにつれて、性能は逆に低下する。
【0010】
クラッキングに抵抗しようとして、多くの設計者は、秘密の(非公開の)設計を用いる。秘密裏の開発は、制限された試験、検討、または再使用を余儀なくされる。あいにく、少量の所与の設計は、常にユニットあたりのコストが高いため、秘密裏の開発は、制限された投資利益を保証する。さらに、秘密性は、誰かがハードウェアまたはソフトウェア実施例を得るまで、これらの設計の完全性を維持するに過ぎない。
【0011】
これらの古典的な関数の最終的な脆弱性は、各ランダム関数がその独自のランダムシーケンスを生成するという単純な不変の事実から生じる。言い換えると、ランダム関数と、それが生成する値の一意のシーケンスとの間には1対1の対応がある。そのシーケンスは、その生成関数に関して、「旋律」のように動作する。ランダム「旋律」は、生成されるときに、値とそれらの値の順序の両方として定義される。シード値は、「旋律」がどこで開始するかを定義するに過ぎない。
【0012】
すべての古典的なランダム値発生器は、スカラ値(非ゼロシードから開始する)を使用して、それらの一意の「旋律」が開始する地点をインデックス付けする。古典的なランダム値発生器は、静的関数ベースの構築物であり、擬似ランダムシーケンスの開始を定義する鍵として動作するため、シード値は保護されなければならない。大部分の場合において、シード値のサイズを使用して、全体サイクル長を示す。すべてのハードウェアおよび大部分のソフトウェアベースの古典ランダム値発生器は、ランダム値の生成を開始するために、非ゼロシード値を必要とする。ほぼすべての場合において、ゼロ値シードは、あらゆるランダムストリームの生成に失敗する。
【0013】
クラッキングに抵抗する無駄な努力において、多くの設計者は、秘密の(非公開の)設計を用いる。秘密裏の開発は、制限された試験、検討、または再使用を余儀なくされる。あいにく、少量の所与の設計は、常にユニットあたりのコストが高いため、秘密裏の開発は、制限された投資利益を保証する。さらに、秘密性は、誰かがハードウェアまたはソフトウェア実施例を得るまで、これらの設計の完全性を維持するに過ぎない。必要とされるものは、真のランダム値発生器であって、真の一方向性関数を実装し、非決定性の値のランダムストリームをもたらすもの、および/または本明細書において説明される問題のうちの1つ以上を解決する方法またはシステム、および/または本明細書に精通するようになると、当業者の注目を集め得る1つ以上の問題である。
【発明の概要】
【発明が解決しようとする課題】
【0014】
本発明は、現在の最新技術に対応して、特に、現在使用可能な乱数発生器によって未だに完全に解決されていない、当該技術分野における問題およびニーズに対応して、開発された。したがって、本発明は、拡張された特徴を有する乱数を生成する方法および/またはシステムを提供するように開発された。
【課題を解決するための手段】
【0015】
一実施形態において、多数の新しい技術に基づく、ランダム値発生器の新しいゲノムがあり、以下のモジュールのうちの1つ以上を含むが、これらに限定されない。
・不確定性関数−一方向性関数
・ランダム編集プロセス
・時間変位
・セッションデータの動的展開
・動的シード関数
・完全動的変異
ランダム値発生器のこの新しいゲノムの実施形態は、1つ、いくつかの、またはすべての知られているアプリケーションにおいて、1つ、いくつかの、またはすべての古典的なランダム値発生器の代替として優れている。現在のアプリケーションが古典的なランダム値発生器を使用するときはいつも、新しい不確定性ランダム値発生器の実施形態を、それに代わるように構成してもよい。
【0016】
別の実施形態において、これらの新しい技術のすべてを併せて、ランダム値を生成するための無制限の構造上のソリューションとする。そのような構造上のモデルは、極めて低コストの製品から極めて要求の厳しいアプリケーションまで、それらのランダムデータ要件に基づいて拡大縮小する。
【0017】
さらに別の実施形態において、デバイスにおいて一方向性関数を生成し、それによって、ランダム値ストリームから利益を享受し得るデバイスにおいて使用するためのランダム値ストリームを生じさせる方法があり、a)定義域値に従ってアドレス指定される複数のメモリセルを提供するステップであって、任意の所与の定義域値は、すべての可能性のある値域値をマッピングするステップと、b)複数のメモリセルのうちの1つに関連付けられるランダム定義域アドレス値を生成するステップと、c)生成されたランダム定義域値と関連付けられるデータ値を読み取るステップと、d)ステップb)〜c)を反復して、それによってランダム値ストリームを提供するステップと、を含む。一方向性関数を生成し、それによってランダム値ストリームを生じさせる方法は、追加として、ランダム値ストリームをオリジナルのメモリセル位置およびデータ値から分離し、それによって非決定性ランダム値ストリームを生じさせる手段を提供するステップを含む。
【0018】
さらに別の実施形態において、適切に実装される不確定性ゲノムの実施例は、同一コストの古典的なゲノム発生器よりも反転させることが困難となり、セッションデータ(後に定義される)は損なわれないと仮定する。これは、誰もが同一の公的ハードウェア/ソフトウェアを使用できるが、依然として、クラッキングからの同様の抵抗を有することを意味する。
【0019】
本明細書全体を通して、特徴、利点、または同様の言語に関する言及は、本発明で実現化されてもよい、特徴および利点のすべてが、本発明の実施形態のいずれかの一つであるべきか、または実際にそうであることを暗示しない。むしろ、特徴および利点を言及する言語は、実施形態に関連して説明される特定の特徴、利点、または特性が、本発明の少なくとも1つの実施形態に含まれることを意味すると理解される。したがって、本明細書全体を通して、特徴および利点、および同様の言語に関する議論は、必ずしもそうではないが、同一の実施形態を言及してもよい。
【0020】
さらに、本発明の説明される特徴、利点、および特性は、1つ以上の実施形態において、任意の適切な様式で組み合わされてもよい。当業者は、特定実施形態の特定の特徴または利点のうちの1つ以上を伴わずに、本発明を実施することができることを認識するであろう。他の例において、追加の特徴および利点は、本発明のすべての実施形態に存在しない場合がある、ある実施形態において認識される場合がある。
【0021】
本発明のこれらの特徴および利点は、以下の説明および添付の請求項からより完全に明らかとなるか、または以下で説明されるように、本発明の実施によって教示され得る。
【0022】
本発明の利点が容易に理解されるようにするために、簡単に上述される本発明のより具体的な説明は、1つまたは複数の添付の図面において説明される、特定の実施形態を参照することによってもたらされる。本発明の図面は、原寸に比例していないことに留意されたい。図面は、単なる概略的表示であり、本発明の特定パラメータを描写するものではない。これらの図面は、本発明の典型的実施形態を描くのみであって、したがって、その範囲を限定するものと見なされないことを理解しながら、本発明は、添付の図面を使用することによって、追加の特異性および詳細とともに記述および説明される。
【図面の簡単な説明】
【0023】
【図1】一方向性関数の単純な抽象化を示す図であり、ランダム値は、本発明の一実施形態に従って、データ値を不確定性関数から引き出すことによって生成される。
【図2】本発明の一実施形態に従う、不確定性ランダム値発生器の3つのランダムプレーン、およびその間の相互関係を描く、斜視ブロック図である。
【図3】本発明の一実施形態に従って、抽象化アプローチを使用し、ランダムデータストリームを生成するプロセスの概要を示すフローチャートである。
【図4】データマイニングモジュール/プロセスの実施形態を描くブロック図であり、本発明の一実施形態に従って、値は圧縮データから引き出され、破棄されるゼロ値に関してチェックされ、ソースデータファイルに書き込まれる。
【図5】本発明の一実施形態に従って、ランダム出力ストリームを生成するためのランダム編集プロセスを描く、システムのブロック図である。
【図6】本発明の一実施形態に従って、ランダム出力ストリームを生成するための複数のランダム編集プロセスを実装するシステムのブロック図である。
【図7】本発明の一実施形態に従って、マスク発生器プロセス中のビット操作を説明する。
【図8】チャンキングプロセスを描くシステムフロー図であり、本発明の一実施形態に従って、データストリームは、可変サイズのチャンクにチャンク化される。
【図9】置換ランダム編集プロセス中のビット操作を示し、データチャンクは、等量のターゲットストリームビットを置換する。
【図10】非破壊的である拡張ランダム編集プロセス中のビット操作を示し、本発明の一実施形態に従って、各チャンクは、ターゲットストリームビットの間に「挿入」される。
【図11】カオスエンジンを表すシステム図であり、本発明の一実施形態に従って、命令は解読され、適切なランダム編集プロセスはREP表から選択される。
【図12】本発明の一実施形態に従って、2つの古典的な関数を使用して、書き込みおよび読み取り(引き出し)アドレスを生成する、時間変位プロセスを表すシステムフロー図である。
【図13】本発明の一実施形態に従って、ランダムアドレスストリームを生成する、短サイクルランダム編集プロセスを描く、システムフロー図である。
【図14】本発明の一実施形態に従って、古典的なブロックと関連付けられる一般的なインターフェースを描く、システム図である。
【図15】本発明の一実施形態に従って、アンセーフメモリアドレスの間接的ランダムストリームを使用して、値をデータプールから引き出す、ハイブリッドアドレス発生器を描くシステムフロー図である。
【図16】本発明の一実施形態に従って、Xセーフアドレス発生器と称される、データパラドックスセーフランダムアドレスを形成するように、不確定性関数を適用する第2の方法を描くシステムフロー図である。
【図17】本発明の一実施形態に従って、セーフランダムデータストリームを形成するのに使用されている2つの短サイクルプロセスで構成される、ハードウェア実施例1を表すシステムフロー図である。
【発明を実施するための形態】
【0024】
本発明の原理の理解を促す目的で、ここで1つまたは複数の図面において説明される例示的実施形態を参照し、特定の言語を使用して、それらを説明する。それにもかかわらず、本発明の範囲の制限は、それによって意図されないことが理解される。本明細書において説明される発明的特徴のいかなる変更、およびさらなる修正、および本明細書において説明されるような本発明の原理に関するいかなる追加の適用は、関連技術分野において熟練し、本開示の所有権を有する者であれば生じると思われ、本発明の範囲内であると見なされる。
【0025】
本明細書全体を通して、「実施形態」、「実施例」または同様の言語に関する言及は、実施形態と関連して説明されるその特定の特徴、構造、特性、またはそれらの組み合わせが、本発明の少なくとも1つの実施形態に含まれることを意味する。したがって、本明細書全体を通して、「実施形態」、「実施例」という語句、および同様の言語の出現は、必ずしもそうではないが、すべての同一の実施形態、異なる実施形態、または図面のうちの1つ以上を参照する。さらに、2つ以上の特徴、要素等に対する「実施形態」、「実施例」等の表現に関する言及は、特徴が必ずしも関連している、類似していない、同一である等を意味しない。
【0026】
実施形態、または実施例の各記述は、各実施形態を特徴付ける類似または同一の言語の任意の使用にかかわらず、実施形態の任意の他の記述から独立していると見なされる。したがって、一実施形態が「別の実施形態」として識別されると、識別された実施形態は、「別の実施形態」という言語によって特徴付けられる任意の他の実施形態から独立している。本明細書において説明される特徴、機能等は、請求項および/または技術が直接または間接的、暗示的または明示的のいずれかで示し得るように、全体または概して部分的に組み合わせることができると考えられる。
【0027】
本明細書で使用される場合、「含む(comprising)」、含む(including)」、含む(containing)」、「である(is)」、「である(are)」、「によって特徴付けられる(characterized by)」、およびそれらの文法的に等しい語は、包括的または無制限の用語であり、追加の引用されない要素または方法ステップを排除しない。「含む、備える(comprising)」は、「から成る(consisting)」および「本質的に〜から成るconsisting essentially of)」というより制限的な用語を含むものとして解釈される。
【0028】
代数の生徒として、我々はこの点を繰り返し続ける各後次の数学の授業で、等号の神聖性を教示される。両辺を等しく保つために、等式の右辺を修正したのと同一様式で等式の左辺を修正しなければならない。我々は、等号の神聖な保存によって、すべて教示、試験、評点、および進級される。したがって、我々の共通の数学訓練は、一方向性関数の概念を思い付くことを困難にする。
【0029】
定義によれば、一方向性関数は、極めて容易に計算を進めることができるが、反転することは極めて困難である。一方向性関数の拡張定義は、多くの教科書において、ならびにオンラインで定義される。
【0030】
最も頻繁に提供される実施例は、トラップドア一方向性関数であり、2つの極めて大きい素数の積である。積は容易に計算されるが、この積の因数分解は、依然として計算が極めて困難である。2つの大きい素数の解の因数分解は、「実証可能に困難な」問題のクラスに分類される。言い換えれば、「実証可能に困難な」という用語は、そのような関数を反転する困難性を反映するベンチマークを表す。800桁の素数と900桁の素数との掛け算を考慮すると、この積を元の2つの素数に因数分解することの困難性を想像できる。
【0031】
「実証可能に困難な」という古い基準は十分ではない。実際の目的は、有用な真の一方向性関数、反転することができないものであるべきある。今日まで、そのような関数は発見されていない。我々は、共通の数学訓練が障害となっているため、等号の神聖性に支配されている。一方向性関数は、数学問題として知られているが、解法は、コンピュータサイエンスから得られる。
【0032】
具体的に、プログラミングのオブジェクトパラダイムに移る。抽象化は、一組の操作要件であり、実装詳細の定義を含まない。これらの要件を満たす任意の実装は、抽象化されたクラスの一員である。これらの2つの単純な文章は、等号の支配を破る手段を提供する。
【0033】
ランダム値発生器の抽象化を、ランダム値を生成するクラスとして定義することから始める。この一般的ベースクラスは、ソリューションの開始点である。次に、ランダム値を生じさせる、それらの公開された古典的なランダム関数に戻る。各公開された関数実装は、上記の抽象化クラスの一員となる。これまでのところ、新しいことは何もない。この抽象化のこれらのバージョンのそれぞれは、すべて古典的なランダム値発生器と同一の問題を有する。
【0034】
関数を使用してランダム値を計算する代わりに、抽象化実装を変更しながら、データ値をデータプール(メモリ階層)から引き出す。プール内のデータがランダムに開始し、プールが十分に大きい場合、抽象化は、ランダムストリームを生じさせ、これは古典的なランダム関数のすべての周知の欠陥を克服する。
【0035】
抽象化のこのバージョンは、最大データプールのサイズまで真の一方向性関数である。プールにデータの正確なコピーを有しない限り、あまり典型的な関数でないため、この関数を反転させることはできない。抽象化は、関数のように見え、関数のように動作するが、関数の他の特徴を含まない。これは、不確定性関数と称され、入手可能な最も単純な実施形態である。図1は、一方向性関数の単純な抽象化を示す図であり、ランダム値120は、本発明のこの単純な実施形態に従って、データ値をデータプール115から引き出す110ことによって生成される。これは、ハードウェア(シリコン)またはソフトウェアのいずれかで容易に実装できる。
【0036】
この単純なデータ駆動不確定性関数は、すべての周知の古典的なランダム値関数、加えてすべての他のランダムシーケンスを(最大データプールサイズ115まで)模倣することができる。データプール115の一意の例の各々は、一意のデータストリームをもたらす。同一のデータプール115は、データプール115にアクセスするために使用される、各一意のアドレス指定方法論に対して、一意のデータストリームを付与する。
【0037】
良好なデータの所与の1つのコピーを用いて、同一順序でメモリにロードされる同一データは、データが同一様式でデータプールから引き出される場合、毎回同一のシーケンスを生じさせる。その同一データが毎回異なる順序でメモリにロードされる場合、生成されるシーケンスも毎回異なる。大量のデータを用いて、この不確定性関数は、同一データからほぼ無制限の数のランダムシーケンスを生じさせることができる。
【0038】
古典的なランダム値発生器は、1つの一意の「旋律」を有する関数に基づいているため、クラッキングされやすいが、一方で、このバージョンの不確定性関数は、データ駆動であり、一意の「旋律」を有しないため、クラッキングに抵抗性である。ランダム値発生器をクラッキングするための技術は、暗示的に、ランダム値発生器が、単一の「旋律」を有する静的関数として実装されると仮定する。しかしながら、ランダム値を生成する基礎関数がない場合、これらのクラッキング技術に何が起こるであろうか。
【0039】
データをデータプールから引き出すことは、ランダム値を生成するための極めて低コストのソリューションである。実際に、ランダムデータを生じさせるための安価な手段を見出すことは非常に困難である。不確定性ランダム値発生器は、広範囲の製品にインストールされるように、同一の公的シリコン/ソフトウェアソリューションを誘う。得られるコスト低減は、多くの製品に波及する。
【0040】
少量(データプールサイズ以下)のランダムデータを必要とするアプリケーションは、この不確定性関数を完全なソリューションとして使用することができる。しかしながら、それを行う前に、線形アドレス指定の危険性、データパラドックスのリスク、およびセッションデータの陳腐化を理解しなければならない。これらの問題は、ソースデータおよびセッションデータが説明された後、以下で論じられる。
【0041】
この一方向性関数の有用性は、多くの異なる方法で現れる。これ以降、この一方向性関数は、不確定性関数と称される。メモリ内のランダム値は、「不確定性のプール」となる。したがって、設計内で任意の非決定性値を必要とする場合はいつも、プールに進み、それらを取得する。非反転可能ランダムデータストリームを生じさせるだけでなく、それを使用して、古典的な擬似ランダム発生器において見出される「旋律」を除去するために使用することもできる(例えば、セーフアドレスストリームを参照)。この一般的な不確定性関数は、極めて単純な設計を使用して、同一設計実装からほぼ無制限の数のランダムストリームを達成することを可能にする。
【0042】
1対1(定義域対値域)モデル
伝統的な関数は、定義域値および値域値の1対1マッピングに従う。定義域は独立変数(入力値)であり、一方値域は従属変数(出力値)である。定義域値および値域値の立場を交換すると、次に、元の関数の反転が得られる。
【0043】
多対1(定義域対値域)モデル
ハッシュ関数は、ある種のデータを比較的小さい整数にマッピングする。ハッシュ関数のプロセスは、複数のデータブロックを同一の値域値にマッピングできるように、定義域データを縮小する。このデータ喪失は、ハッシュ関数の単一反転を形成できないことを意味する。ハッシュ関数モデルを反転することはできないが、その固有の情報喪失は、それが一方向性関数でないことを意味する。
【0044】
1対多(定義域対値域)モデル
一方向性関数は、1対多(定義域対値域)関数モデルを支持しなければならない。不確定性関数を厳重に検査すると、定義域は、1つまたは複数のデータプール内の任意の有効メモリアドレスであるが、値域は、メモリセルに保存される任意の値であることが分かる。これは、各定義域値(メモリアドレス)が、すべての可能性のある値域値を含むことができることを意味する。最初に、任意の所与の定義域値に対して値域値が完全に非決定性であるところで関数を有し、したがって、不確定性関数が一方向性関数であることを証明する。
【0045】
さらに、不確定性関数は、以下を含む暗号プリミティブを形成するための極めて単純な手段も可能にする。
・擬似乱数発生器
・擬似ランダム関数ファミリー
・ビットコミットメントスキーム
・適応選択された暗号文攻撃に対して安全な私的鍵暗号化スキーム
・メッセージ認証コード
・デジタル署名スキーム(適合選択されたメッセージ攻撃に対して安全)
不確定性関数は、真の一方向性関数を呈することをはるかに超える値を有する。メモリセルを使用して、値域値を保持することは、一定スカラ値以外の他の可能性を暗示する。メモリセル内のスカラ値の代わりに、オブジェクトポインタを仮定する。オブジェクトポインタの起動は、動的関数が単純な静的値の代わりに、異なる値を戻すことを可能にする。そのようなオブジェクトポインタの一実施例は、完全に新しい不確定性関数である。
【0046】
アドレス指定する必要がある、ランダム数発生器に使用されるいくつかの用語があり、最初は擬似乱数発生器(PRNG)である。PRNGは、古典的なランダム値発生器を使用して、「ランダム」数のストリームを生成するが、それらは静的関数および固定シード値を使用するため、それらは反転することができる。現在の形態のこれらの種類のランダム発生器は、「数」という用語を使用する。以下の説明において、不確定性ランダム値発生器(URVG)という用語は、本発明を参照して使用される。「値」という用語は、本説明全体を通して使用されるが、不確定性乱数発生器URNGのように、「数」という用語を使用することと同一である。
【0047】
前述されるように、古典的なランダム関数は、多次元問題に対する一次元の解答に過ぎない。不確定性関数の導入は、ここで、データ、アドレス、およびランダムネスの制御プレーンを含む、複数の革新機会を支持する単純な方法を有することを意味する。ランダムネスの各プレーンは、その他のプレーンに影響することなく展開することができる。図2は、本発明の一実施形態に従う、不確定性ランダム値発生器の3つのランダムプレーン、およびその間の相互関係を描く、斜視ブロック図である。
【0048】
ランダムネスのデータプレーン
不確定性関数と称されるデータプレーン210は、1つまたは複数の入力データプール、セッションデータプール215で形成される。データは、アプリケーション要件に応じて、各ランダム値発生器の実行または動的展開(完全動的変異)に対して、依然として静的であり得る。1つまたは複数のデータプールのメモリセルは、値域値を含む。
【0049】
メモリコンテンツ対メモリアドレス指定の独立性は、明らかに、データプレーンをアドレスプレーンから区別される。これは、設計内のアドレス指定に影響することなく、メモリのコンテンツを変更できることを意味する。この革新の影響は劇的であり、同一ハードウェア/ソフトウェア実装を考えると、URNGの各使用は、異なる不確定性のプールを使用することによって一意にすることができる。
【0050】
ランダムネスのアドレスプレーン
ランダム編集プロセスとも称される、ランダムネスのアドレスプレーン220は、データプールメモリアドレス(定義域値)を形成する手段である。全体として、アドレスプレーンの目的は、1セッション実行内で、出力ランダムシーケンスを反復することなく、データプレーン210にインデックス付けすること225である。これは、ランダムアドレスサイクル長は、目標量のランダムデータともに増大し得ることを必要とする。
【0051】
ランダムネスの制御プレーン
ランダム編集プロセスとも称される、ランダムネスの制御プレーン235は、初期化および動的制御プロセス235(プログラムデータ)を含む。ソース/セッションデータ(不確定性のプール)は、値域データおよびプログラムデータの両方を含む。実際に、セッションデータ215内の任意の所与のデータ値は、値域データおよび/またはプログラムデータであり得る。
【0052】
大部分の古典的なランダム値発生器は、公開関数を使用して、ランダム値を生成する。しかしながら、私的ランダムストリームを求める場合、公開関数の典型的な使用は、重大な不利益を有する。私的関数を構築するために、多数の公開関数を、何らかの様式で、(秘密裏に)組み合わせる必要がある。さらに、ユーザは、私的ランダムストリームを形成および維持するために、公開関数のシード値を隠すか、または秘密にしておかなければならない。
【0053】
標準PRNGは、単純なスカラーシード値を有する。正にその性質によって、URNGは、より複雑なシード仕様を必要とする。URNGを開始することは、2つまたは3つの値、どのPRNGを開始するか、そのPRNGのシード値、および任意選択で、そのPRNGのランレングスの選択を必要とする。この複数値セットは、シードベクトルと呼ばれる。
【0054】
シードベクトルは、直接または間接的に付与することができる。各ベクトルタイプは、異なる特性を有する。直接シードベクトルは、値の単純なセットである。直接シードベクトルの利点は、膨大な数の一意のランダムストリームを同一URNGから形成できることである。しかしながら、URNGおよびそれが生成する一意のストリームに関する相当量の情報を暴露するため、このベクトルをあらゆる標準PRNGシード値のように保護しなければならないことが不都合な点である。
【0055】
間接的シードベクトルは、不確定性のプールにおいて見出される。単純な間接的スカラ値は、単なるプールへのオフセットである。この間接的値の利点は、いかなる保護をも必要とせず、したがって、「クリア」で送信できることである。間接的シードベクトルの不利益は、不確定性のプールが、それらを限定数保持できるに過ぎない。暗示的な間接的値は、プール内の周知の場所を指す。
【0056】
一部のアプリケーションにおいて、動的シードベクトルが極めて有用である場合がある。通常のシードベクトルは、一部の時間ベースの関数および/またはトランザクションカウントを有する動的シードベクトルに更新される。更新されたベクトルは、一意のランダムストリームを時間の関数として形成する。この動的シードベクトルは、静的および動的セッションデータの両方を用いて十分に機能する。間接的な動的シードベクトルを使用することは、不確定性のプール内の制限された空間に対する有効な次善策である。明らかに、動的シードベクトルは、不確定性を強化する。
【0057】
一部のアプリケーションは、複数のランダムストリームを必要とする。複数のシードベクトルの使用は、不確定性の同一プールの活用を可能にする。これらのベクトルが特定される方法は、アプリケーションに依存する。しかしながら、1つの方法は、1つのベクトルを特定し、それから複数の「1オフベクトル」を形成するための標準的な手段を定義することである。
【0058】
不確定性関数内の一意のデータは、私的関数を形成して、ランダム値を生成する。これは、公的シード値を使用して、私的ランダムストリームを形成できることを意味する。幸いなことに、このプロセスは、さらに1ステップ先へと進めることができ、公的シード値は、1つまたは複数のデータプールのメモリアドレス(間接的公的シード値)である可能性がある。この方法の下で、一意のセッションデータ215を保持する者は、公的キーの真の値を知る唯一の者である。
【0059】
不確定性ランダム値発生器内で、実装の一部として、異なる古典ランダム値発生器を有する可能性がある。一部の場合において、ほんの少数の古典的な関数のみが、全体セッション実行中に使用されるが、他の例では、異なるランレングスの異なる古典的な関数間に動的スイッチングがある。どの古典的な関数、シード値、およびランレングスをピッキングするかの制御プロセスは、一意のプログラムデータを介して動的に割り当てることができる。各初期化パラメータは、不確定性のプールに由来し、これは不確定データに対する動的依存が、URNGから決定性動作を除去するのを助けることを意味することに留意されたい。不確定性ランダム値発生器は、多次元問題に対する多次元の解答を提供する。
【0060】
図3は、本発明の一実施形態に従って、抽象化アプローチを使用し、ランダムデータストリームを生成するプロセスの概要を示すフローチャートである。任意のランダムデータソースは、ソースデータの形成に使用され得る。これらのソースは、放射性崩壊、半導体における熱雑音、雑音環境において取られる音サンプル、およびさらにはラーヴァランプのデジタル画像等の物理現象を測定することによって決定される、予測できない乱数を含んでもよい。
【0061】
他のより容易に得られる擬似ランダムデータの候補は、MPEG、JPEG、および他の圧縮ファイルから成る圧縮ファイルである。擬似ランダムデータ310は、圧縮データファイルとして、大部分のコンピュータメモリ階層に豊富に含まれ、ランダムデータプールを形成するためのソースとして使用することができる。データマイニングプロセス320は、擬似ランダムデータ310から値をランダムに引き出し、それらをソースデータ340ファイルにランダムに書き込む。すべての値は、ゼロ値330に対して試験され、ゼロ値を有するデータは破棄される335。ソースデータ340を使用してランダム値ストリームを形成する前に、最初にそれを検証(350)しなければならない。検証プロセス500後、有効なソースデータ360を使用して、ランダムデータストリーム395を形成することができる。有効なソースデータ360データマイニング370が存在すると、有効なソースデータ360は、セッションデータ380を形成する。このセッションデータ380は、依然としてハッカーから完全に隠されず、分離プロセス390を行わなければならない。
【0062】
分離プロセス390中、セッションデータ380と得られるランダム値ストリーム395との間の関係が破壊される。セッションデータ380には、動的セッションデータプールと静的セッションデータプールの2種類がある。動的セッションデータプールは、一度使用されると破棄される。動的セッションデータプールの適用は、通話、インターネット取引、クレジットカード取引、2者以上の間の任意の種類の通信を含む。静的セッションデータプールの使用の実施例には、これらに限定されないが、メディアプレーヤー装置におけるデータの暗号化、およびデジタル著作権管理(DRM)アプリケーションが挙げられる。静的ランダムデータプールは保管され、データの暗号化および解読に使用される。
【0063】
ソースデータの形成
すべてのデータを試験したとき、良好なランダムデータは、バイナリデータにおいて、ほぼ等しい数のゼロおよび1を有するはずである。バイナリレベルにおいて、圧倒的多数のゼロまたは1は、我々が求めている均衡データとは見なされない。このプロセスにおける我々の全体的な目的は、未知の形成「旋律」を有するセッションデータであることに留意されたい。全体的な目的に留意する限り、ランダムデータを見出する場所は広大である。そのような場所の1つは、前述されるような圧縮データである。これらのファイルは、バイナリデータにおいて、等確率のゼロおよび1を有する。当然のことながら、これは、圧縮ファイルにおいて見出されるファイル構造情報をカウントすることではない。
【0064】
ファイル構造をステップオーバーしながら、データマイニング圧縮ファイルのプロセスは、ソースデータを効果的に形成する。データマイニングできる多くの方法があるにもかかわらず、1つの方法は、複数の圧縮ファイルを開き、ソースデータの形成を完了するまで、開いたファイル間でランダムにサンプリングすることである。最良の結果を得るために、1回に1バイトがサンプリングサイズであるべきである。ソースデータは、不確定性ランダム値発生器によって利用される、すべての可能性のあるデータを含むファイルとして定義される。
【0065】
圧縮データのみをマイニングするために、マイニングソフトウェアは、ファイル形式を知らなければならない。言い換えれば、ファイル構造情報をデータとして、圧縮ファイル内の唯一のデータとしてピックアップしないよう注意しなければならない。ソースデータ340を形成するデータマイニングプロセスは、いかなるゼロ値もファイルに入れることを回避する。あらゆるゼロ値は、ハードウェアおよびソフトウェア機能の大部分において無効である。ゼロ値をソースデータ340に入れるべきではない。
【0066】
図4は、データマイニングモジュール/プロセス400の実施形態を描くブロック図であり、本発明の一実施形態に従って、値は圧縮データ410から引き出され、破棄される(464)ゼロ値をチェック(463)した後、ソースデータファイル490に書き込む(482)。ソースデータ490の形成は、アドレス読み取り(引き出し)する古典的な関数440を中心に展開する。入力は、制御シグナル、シード値428、ランレングスカウント値438を含む。初期シードインデックス420を使用して、メモリコンテンツ412を引き出し、これが現行のシード値428となる。初期ランレングスカウントインデックス430を使用して、現行のランレングスカウント値438となるメモリコンテンツ414を引き出す。次に、現行の古典的な関数440は、アドレスインデックスストリーム442を生じさせ始め、それを使用して、複数の圧縮データファイル470のうちの1つから値を引き出す(466)。複数の圧縮データファイルが使用される場合、ソースデータセレクタ460は、圧縮データ470のプールにおいて、適切な圧縮データファイル410a〜410nに接続する。この接続を決定する多くの方法があり、これらに限定されないが、圧縮データファイルを連続的にサイクルすること、または異なる圧縮データファイル470にランダムに接続することを含む。現行の読み取り(引き出し)アドレスインデックス442を使用して、選択した圧縮データファイル410から値を引き出す。圧縮データファイル410から引き出される各値467をチェックして、値がゼロ463に等しいか否かを決定し、いかなるゼロ値464も破棄する。ソースデータは、起こった順番にソースファイル490に書き込まれる。データファイルサイズ適合ユニット480は、いつソースファイル490が満たされるか、またはさらなるデータを必要とし、シグナル446をアドレス読み取り(引き出し)の古典的な関数440にフィードバックするかを決定する。
【0067】
このプロセスに対するオプションは、古典的な関数を読み取り(引き出し)アドレス古典的な関数440に動的に変更することである。動的変更の別の方法は、データマイニングプロセス400を通じて、シードインデックス428およびランレングスカウントインデックス438を変更することを含む。再初期化ユニット450は、データファイルサイズ適合ユニット480から命令を受信し得る。再初期化ユニット450は、シード値再初期化値426をシードユニット429に伝送し、ランレングスカウント再初期化値436をランレングスカウントユニット439に伝送する。
【0068】
ソースデータ490の構成後、検証プロセス350を開始する。様々な良好な統計試験スイートを利用して、ランダムデータを検証することができる。米国標準技術局(NIST)は、1つのそのようなパッケージを作成している(NIST Special Publication SP800−22)。任意の検証プロセス350の失敗は、このソースデータ490を無効化するのに十分であり、この場合、別のものを形成する必要がある。検証試験は以下を含む。
・NIST試験スイート
・Maurerの普遍統計則
・Lempel−Ziv複雑性
・近似エントロピー
この検証プロセス350を完了すると、ソースデータ490が検証される。多数の機能不全データセットを不適格とする検証プロセス350を通して、実質的に無制限の数の有効なソースデータ490が適切に機能することも確認する。検証ソースデータ490のサイズは固定されない。唯一の要件は、良好なランダムストリームを形成するのに十分大きいことを含む。
【0069】
セッションデータの形成
経時的に、不確定性ランダム値発生器における同一データを常に使用することは問題を生じる。同一データプールの反復使用によって、クラッカーは、そのデータセットが使用されているかを判定する場合がある。データプールにおいて陳腐化したデータのリフレッシュを達成する方法は多数あるが、新しいステップが提案されている。有効なソースデータ360をマイニングして(370)、不確定性ランダム値発生器の各使用のための新しいセッションデータを形成する。ネームセッションデータ380は、1回だけ(または多くても数回)使用された後、破棄されるため、データを正確に記述する。またセッションデータ380は、有効なソースデータ360と同様の方法で検証され得る(350)。このようにして、不確定性ランダム値発生器におけるデータは、フレッシュなままであり、したがって解読できない。
【0070】
セッションデータ380は、不確定性ランダム値発生器の各実行に使用される、ソースデータ360の適切なサブセットである。有効なソースデータ360のサイズとセッションデータ380との間に暗黙の依存性は存在しない。例えば、ソースデータ360は、セッションデータ380要件よりも大きいと仮定する人もいるかもしれない。しかしながら、それは絶対ではない。必要とされるセッションデータ380よりも小さいソースデータ360を有する場合、マイニングプロセス370は、セッションデータ380要件が満たされるまで継続する。したがって、ソースデータ360は、セッションデータ380よりも小さいか、または大きい場合がある。ハードウェアまたはソフトウェアは、異なるサイズのセッションデータ380セットを支持し得る。セッションデータ380セットサイズは、目標のアプリケーションによって変化する可能性が高い。しかしながら、私的なランダムストリームが所望される場合、公開関数の典型的な使用は、深刻な不利益を有する。私的な関数を構築することは、多数の公的な関数をなんらかの方法で(秘密裏に)組み合わせる必要がある。さらに、ユーザは、私的なランダムストリームを形成および維持するために、公開関数のシード値を隠すか、または秘密にしなければならない。未知の形成「旋律」を有する良好なデータを有すると、進行する準備ができる。
【0071】
各一意のハードウェアまたはソフトウェア不確定性ランダム値発生器設計は、異なる方法で、一意のセッションデータ380と相互作用する。所定の不確定性ランダム値発生器設計から「検証した」出力データを作成できない「検証した」セッションデータ380を有することができる。したがって、この問題を最小化するために、ランダム編集プロセス(以下のランダム編集プロセスを参照)およびセッションデータ380の両方を慎重に調整しなければならない。形成される可能性があるすべての可能性のあるソース/セッションデータセットのうち、一部のみが正常に機能する。
【0072】
ランダム編集モジュール/プロセス
上述されるように、古典的な一次元ランダム値発生器は、多次元問題を解決することができない。代わりに、この問題は、不確定ランダムネスを確立するソリューションを必要とする。これは、無制限のソリューションセットの基礎を築く、単純概念によって達成され、いくつかの実施例が提供される。1つ以上のランダム編集モジュール/プロセスの適用は、任意の下層「旋律」を破壊することによって、不確定ランダムネスを得る。ランダム編集モジュール/プロセスを使用して、追加のランダムネスを、1つ以上のランダム入力ストリームのセットに統合する。複数のランダムストリームを合わせて混合することは、入力ストリームの「旋律」の一部/大部分/すべてを除去する傾向がある。ランダム編集プロセスは、1つ以上のランダムストリームを必要とし、そのうちの1つは「編集ストリーム」として定義される。編集ストリームデータは、ビットまたは他の入力ストリームからの値の順序を変更するためだけに使用され、そうでなければ出力ストリームにおいて目に見えることはない。実際に、編集プロセスは、すでにランダムな入力ストリームを新たなランダム出力ストリームに変異させる。
【0073】
図5は、本発明の一実施形態に従って、ランダム出力ストリーム540を生じさせるためのランダム編集プロセスを描写する、システムのブロック図である。入力ストリームのうちの少なくとも1つは、編集ストリーム510でなければならない。ランダム編集モジュール/プロセス500は、1つ以上の入力データストリーム520を変更し、この編集ストリーム510データは、出力ストリーム540から分離されたままである。編集という用語は、1つ以上の入力データストリーム上で取られる動作を説明する。編集プロセス500は、1つ以上のすでにランダムな入力ストリーム520を新しいランダム出力ストリーム540に変異させる。
【0074】
図6は、本発明の一実施形態に従って、ランダム出力ストリームを生成するための複数ランダム編集プロセスを実装する、システムのブロック図である。いくつかのランダム編集プロセス500a〜500nは、入力ストリーム540a〜540nを別のランダム編集プロセス500mに提供する。入力ストリームのうちの1つは、編集ストリームでなければならない。複数レベルのランダム編集モジュール/プロセス500は、ユーザが、必要に応じて単純または複雑なシステムを設計できるようにする。抽象化アプローチと組み合わされる共通インターフェースは、容易に拡張されるアーキテクチャをもたらす。
【0075】
簡単に表現すれば、ランダム編集モジュール/プロセス500は、付加的ランダムネスを追加する。編集プロセスは、これらの入力ストリームを、ランダム編集プロセスで動的に変更し、付加的ランダムネスをもたらす。全体的な結果は、任意の入力ストリームの「旋律」をもはや含まない、新しいランダム出力ストリームである。いかなるデータも編集ストリームに由来することは決してないため、編集ストリームを識別するための「法医学的な証拠」はない。言い換えれば、出力ストリームは、入力ストリームにおける旋律の「メモリ」を喪失した。
【0076】
ランダム編集モジュール/プロセス500の第1の使用は、データプールにランダムにアドレス指定して、データを引き出すことである。新しいランダムストリームが生じると、いかなる編集法医学的証拠をも残すことなく、オリジナルの「旋律」(セッションデータの複製)が喪失する(不可視になる)。オリジナルのランダムストリーム(セッションデータ)は、ランダムネスの一意のストリームに変異されている。ランダムネスのこれらのプレーンのそれぞれは、他に影響することなく、個別に展開することができる。
【0077】
線形アドレスを使用して、データプールからデータを引き出すことは、最大データプールサイズのランダムストリームを生じさせる。これは、極めて小さいランダムデータ要件に対しては機能するが、データプールコンテンツを暴露する。線形アドレス指定は、データプールへのアクセスには決して使用されてはならない。本明細書で説明される機能、特徴、利益、構造等のいずれかは、プロセスとも称される1つ以上のモジュールにおいて具体化され得る。
【0078】
マスク発生器
ここに、稼動中のランダム編集プロセスの別の実施例がある。図7は、結果ストリーム650を形成するため(640)のビットごとのプロセスを示す、本発明の一実施形態に従う、マスク発生器プロセス600中のビット操作を説明する。データ0 612、データ1 622、およびマスクストリーム602と呼ばれる3つのランダムストリームは、マスク発生器に対する入力ストリームである。1つのストリームは編集に使用され、マスクストリーム602と称される。他の2つのストリーム、データ0 612およびデータ1 622は、マスクストリーム602によって編集され、結果ストリーム650を形成する。各マスクビット「0」604は、対応するデータ0ビット630をデータ0ストリーム612から選択する。各マスクビット「1」606は、対応するデータ1ビット632をデータ1 622から選択する。各結果ビットが決定されると、それは結果ストリーム650に連続的に追加される。以下のCプログラミング言語コードは、マスク発生器プロセスを示す。
【0079】
【数1】
【0080】
マスクストリーム602は、2つの異なる入力値からデータを破壊的に「編集する」ために利用されるに過ぎず、そのため、マスク値が出力値において目に見えることはない。ビットの一部をデータ0ストリーム612から、残りのビットをデータ1ストリーム622からランダムに取ることによって、いかなるマスクビットも出力に追加することなく、編集プロセスは、入力または出力に関して未知である(目に見えない)。これらの3つのストリームから得た次の3つの値は、さらに別の未知値を生じる。
【0081】
マスク発生器600は、入力ストリームの「旋律」を分離する単純な方法として優れている。これらの3つのランダムストリームが相互作用すると、それらは、二次「旋律」を生じさせるが、一次旋律のすべての痕跡は喪失する。一次旋律を解体することは全体的な「旋律」問題を部分的に解決するに過ぎない。二次「旋律」も解体されなければならない。単一のランダム編集プロセスは、完全なソリューションにならないが、一次旋律を破壊する方法を教示する。ビットレベルでマスク発生器を見ることは、ランダム編集プロセスの結果を説明する。
【0082】
より長いサイクル周期
ランダム編集プロセスには別の利点がある。すなわち、はるかに長いサイクル周期である。より長いサイクル長は、分化したサイクル長を入力ストリーム上で使用する場合、各サイクル長の産物に到達するまで、各入力ストリームは他と同期しないという単純な概念に基づく。入力ストリームに対して分化したサイクル長で開始する場合、次に、ランダム編集プロセスは、極めて長いサイクル周期を促進する。それぞれ異なるサイクル周期を有する3つのランダムな古典的な関数で開始し、これらの異なる周期の長さをP1、P2、およびP3と標識する。マスク発生器は、全体期間P1*P2*P3を有し、この積はS1と標識される。この単一ステージマスク発生器は、3つの入力ストリームで形成され、入力ストリーム期間と比較して極めて長いサイクル周期を有する。
【0083】
しかしながら、一部のアプリケーションは、さらに長いサイクル周期を要する。これは、分化したサイクル長S1、S2、およびS3を有する、3つの単一ステージマスク発生器で構成することができる。これらのマスク発生器を、第2ステージマスク発生器を構成する別のマスク発生器に対する入力として使用する。これは、非常に大きい数の全体サイクル周期S1*S2*S3を有する。したがって、マスク発生器をスタッキングするパターン、または任意の他のランダム編集プロセスを定義して、任意の恣意的期間を形成する。
【0084】
一般的な経験則として、分化したサイクル長の各追加ランダム編集プロセスは、乗算される別の項を追加して、発生器の全体サイクル周期を計算する。以下のCプログラミング言語コードは、第2ステージマスク発生器の実施例である。
【0085】
【数2】
【0086】
この特徴の背後にいくつかの実数がある。最も単純なソフトウェアランダム値発生器(線形合同)を最大周期近くで利用すると、ステージ1マスク発生器の全体期間は、約295となる。第2ステージマスク発生器の場合、サイクルは約2288となり、一方、第3ステージマスク発生器は、約2850となる。これらの値は、共通の32ビット計算を仮定する。64ビット計算の場合、ステージ1は約2191であり、ステージ2は約2575となり、一方、ステージ3は約21725となる。これは、恣意的に長いサイクル周期を生じさせる極めて低コストの手段である。
【0087】
マスク発生器のスタッキングは、ソフトウェアにおいていくらかかるか。単純な線形合同発生器は、1回の乗算、1回の加算、および1回の係数(除算)演算で構築される。総コストは、いくらかのメモリ負荷および保管を伴う3回の演算である。ステージ1マスク発生器は、そのコストの3倍に4つのビットワイズ論理演算を加えたものである。50未満の命令の場合、良好な非常に長いサイクルのランダム値発生器をもたらす。ステージ2マスク発生器は、150未満の命令を要する。最後に、目標サイクルを選択するだけでよく、プロセッサに応じて、可能な計算(16、32、または64ビット)を同様に選択する。等しく低コストのソリューションをハードウェアにおいて見出すことができる。古典的な公開された線形フィードバックシフトレジスタを利用することによって、対応して長いサイクル周期を有する、極めて良好なビット発生器を構築することができる。
【0088】
マスク発生器は、古典的な関数を越える重要な改良である。それらは高速で使用コストが低い。それらは、恣意的サイクル周期を支持する、極めて単純な手段を有する。最も重要なことに、不確定データがマスク値として使用される場合、古典的なランダム関数よりもクラックすることがより困難である。
【0089】
マスク発生器は、そのようなランダム編集プロセスの無制限クラスの第2の実施例である。追加の代表例は以下に一覧表示され、任意の好適な実施形態において使用されてもよい。通常のソフトウェアおよび/またはハードウェア設計ツールにおいて訓練された任意の人物に指示して、好適な実施形態から逸脱することなく、追加の編集プロセスを構築するために、これらの編集プロセスは使用される。
【0090】
各追加ランダム編集プロセスは、全体サイクル長に対して同様の影響を有するが、一部の好適な実施形態は、適用要件に応じて、数回のみ使用し、一方他の実施形態は何回も使用する。
【0091】
追加ランダム編集プロセス
また各ランダム編集プロセスは、ランダム入力ストリームを変異させる命令として見ることができる。これらの命令は、単純なものから極めて複雑なものに及び得る。これらの命令の一部は、追加値をほとんど提供しないが、教示目的で、より大きいセットが一覧表示される。命令はランダム編集プロセスであるが、マスク値は、任意選択の使用のための命令に対する追加データを表す。
【0092】
各編集プロセスは、考えられる最も単純な手段で説明される。多くの場合、これはCプログラミング言語であるが、他の場合、これはグラフィクスで描かれる。ハードウェアおよび/またはソフトウェアにおける当業者は、編集プロセスの意図される効果について教示されることに留意されたい。現在、これらの編集プロセスは、3つのランダムストリームに基づく。追加のランダムストリームは、ランダム編集プロセスの全体理論に影響することなく、追加することができる。以下のコードは、編集プロセスを示す。
【0093】
【数3】
【0094】
マスク発生器は、2つのランダム値の間の破壊性編集から生じる。破壊されたデータが破棄される限り、マスク値は、目に見えないままである。したがって、生成される各マスク値に、1つの形態のマスク発生器のみを使用する必要がある。
【0095】
【数4】
【0096】
逆演算ランダム編集プロセス
補数演算子のように、逆演算もデータ0、データ1、またはマスク等の任意の値に適用することができる、単項演算である。
【0097】
【数5】
【0098】
ここで、逆演算(ROP)を定義し、ROPによりマスク発生器のセットを再形成する。
【0099】
【数6】
【0100】
この時点で、別の単項演算としてのROPは、優れたランダム編集プロセスを形成する。
回転ランダム編集プロセス
マスク値からのビットの一部を使用して、ビット数を選択し、右または左に回転させる。補数演算と同様に、「回転」は、逆演算も任意の値、データ0、データ1、またはマスクに適用することができる、単項演算である。ROTL_MASKは、マスク値から、ビット数でxだけ左に回転すると定義する。ROTR_MASKは、マスク値から、ビット数で「x」だけ右に回転すると定義する。
【0101】
【数7】
【0102】
元に戻り、マスク発生器とともにこれを使用することさえもできる。
【0103】
【数8】
【0104】
注記:回転させた後で補足するか、または補足した後で回転させることができる。
データ要素であるデータ0、データ1、またはマスクあたり、好きなだけ多くの単項演算を混合することができる。全体効果は、可能なランダム編集プロセスの真に無制限のセットである。
【0105】
数学演算ランダム編集プロセス
【0106】
【数9】
【0107】
ランダムストリームビット密度の構築
複数のランダムストリームの支援を得て、1またはゼロのいずれかである、ほぼ恣意的なビット密度のランダムストリームを形成することが可能である。2つの単純な仮定から始める。
・各ランダムストリームは、他のランダムストリームのすべてに直交する。
・各ランダムストリームは、バイナリレベル(ゼロまたは1)で等しい可能性を有する。
【0108】
これら2つの仮定を用いて、表1に示されるように、異なるビット密度を有する、広範囲のランダムストリームを構築することができる。
【0109】
【表1】
【0110】
2つのランダムストリーム間で「論理ビットワイズor」を行うと、1ビットの0.75の確率を得る。2つのランダムストリーム間で「論理ビットワイズand」を行うと、1ビットの0.25の確率を得る。上記の表1は、より多くのランダムストリームを一緒に処理すると起こるものである。
【0111】
複数のストリームを、「論理or」ならびに「論理and」と一緒に混合することによって、広範囲の選択ランダムビット密度を達成することができる。例えば、0.75*0.00391は、ランダムストリームにおける二進法の1の確率0.0029325をもたらす。ランダムストリームの選択ビット密度を形成するこのプロセスは、アンバランスランダムストリームとして定義される。
【0112】
アンバランスランダムストリームをマスクストリームとして使用することは、ランダム編集プロセスにおいて、入力ランダムデータストリームをどれ程活発に編集するかの管理を可能にする。
【0113】
チャンク、チャンカー、およびチャンキング
ニブル、バイト、ワード等として知られるビットの固定されたサイズのグループには共通の名前がある。この議論のために、「チャンク」という用語は、ゼロ以上の隣接ビットとして定義される。明らかに、ゼロビットのサイズは、空のチャンクである。
【0114】
以前に、ランダムストリームを、古典的なおよび/または不確定性ランダム値発生器の任意の組み合わせによって実装される、上記抽象化クラスの任意の構成要素として定義した。ここで、データストリームを任意の入力データストリームと定義する(ランダムであるか否か)。データストリームを、チャンクとして知られる様々なサイズのビットグループにダイシングするという概念を使用して、固定の境界またはサイズなしに隣接ビットを可視化する。
【0115】
データストリームをチャンクに切断するプロセスは、チャンキングと呼ばれ、これを行うツールは、チャンカーとなる。チャンクは、2つのモード、1)ターゲットストリームをサンプリング(チャンク)するサンプリングモード、または2)チャンクストリームをチャンクする消費モードのうちの1つで、連続するデータストリームから取られる。
・消費モード−ターゲットストリームチャンカーは、ターゲットストリームにおけるすべてのデータを1回に1チャンクにダイシングする。
・サンプリングモード−チャンクストリームチャンカーは、結果ストリームが完了し、データの残りが破棄されるまで、チャンクによってチャンクストリームチャンクのサブセットを取る。
【0116】
上述されるように、チャンカーは、データストリームをサンプリングまたは消費することができる。「チャンク」という用語がチャンカーとして必要とされる理由は、それが生成すべきチャンクのサイズを示す。チャンクサイズは、チャンカーの使用の間で変化する場合が多い。
【0117】
消費チャンカーは、ターゲットストリーム全体を可変サイズのチャンクにダイシングする。チャンクが除去されるとき、ターゲットストリームビットはこのプロセスにおいて喪失されない。消費チャンカーに対する入力変数は、チャンクサイズである。
【0118】
図8は、チャンキングプロセス900を描写するシステムフロー図であり、データストリーム912は、本発明の一実施形態に従って、可変サイズのチャンクにチャンクされる。チャンカー905は、入力データストリーム912からデータを受信し、チャンカー905は、入力データストリーム912からのデータを可変サイズのチャンク931、932、および933にチャンクする。制御シグナル、チャンクサイズ902、および操作モード904は、チャンカー905に命令を提供する。チャンカー出力930は、チャンク0 931、チャンク1 932、およびチャンク2 933として表される一連のチャンクである。可変サイズのチャンクが、図9に表されているが、チャンクはすべて同一サイズであってもよい。
【0119】
ハードウェアおよびソフトウェアは、バイト、ワード、および場合によってビット等の固定サイズ単位に最適化される。サンプリングチャンカーは、データストリーム912をサンプリングし、可変サイズのチャンクを生成する一方で、あらゆる未使用の部分を破棄する。2つの入力値、チャンクサイズ902およびユニットサイズ904がある。チャンキングプロセス900は、置換および拡張ランダム編集プロセスにおいて使用される。
【0120】
「置換」ランダム編集プロセス
置換ランダム編集プロセスは、結果ストリームのサイズを拡張することなく、ターゲットストリームを編集する、破壊的プロセスである。各チャンクが挿入されると、対応するターゲットストリームビットは置換される。重要な効果は、ターゲットストリームのサイズを変更しないことである。
【0121】
図9は、置換ランダム編集プロセス1000a中のビット操作を説明し、チャンクストリーム1028のチャンクは、等量のターゲットストリーム1008ビットを置換する。マスクプロセスと同様に、置換プロセスは、少なくとも3つの入力ランダムストリーム、1)マスクストリーム1018、2)ターゲットストリーム1008、および3)チャンクストリーム1028で開始する。マスクストリーム1018を使用して、ターゲットストリーム1008を編集する。各マスクビット「0」1004は、対応する目標ビット値1010をターゲットストリーム1008から選択する。マスクストリーム1018におけるマスクビット「1」1006ビットは、置換プロセスに命令して、適切なチャンク1030をチャンクされたストリーム1028から取り、適切なターゲットストリームビットを挿入点の左右に置換する。
【0122】
図9の上部分は、識別される最初の2つのチャンク、チャンク1030aおよびチャンク1030bを有するチャンクストリーム1028を示す。この実施形態において、チャンカー905は、サンプリングモードに設定される。第1のマスクストリーム1018マスクビット1 1006aは、置換プロセスに命令して、チャンク1030aを取らせ、マスクビット1010aによって示される、挿入点の右/左にターゲットストリーム1008ビットを置換する。ターゲットストリーム1008および結果ストリーム1050は、残りのターゲットストリームビット1008に対する、チャンクストリーム1028チャンク1030aおよび1030bの関係を示す。ターゲットストリーム1008、チャンクストリーム1028、マスクストリーム1018、挿入右(または左)、およびチャンクサイズという5つの入力パラメータがある。
【0123】
明らかに、チャンクサイズまたはマスク値ゼロは、演算がNOPとなるように、目標ビットを単に戻すことを意味する。ワードサイズは、ターゲットストリーム1008、チャンクストリーム1028、マスクストリーム1018、チャンクサイズ、および結果ストリーム1050の上限であると仮定される。
【0124】
置換プロセス1000aは、挿入点の左または右のいずれかで起こり得る。マスクストリーム1018における各「1」ビットは、マスクサイズまたはチャンクサイズがゼロであり、次に置換がない場合に、可能な置換点を表す。チャンクサイズが増大するにつれて、結果値を満たす前に、先頭の置換点のみが使用される。チャンクがチャンクストリーム1028チャンクから構築されると、結果ストリーム1050は、ターゲットストリーム1008から構築される。チャンクが結果ストリーム1050に追加されると、ターゲットストリーム1008は、同一量のデータを喪失する。一旦、結果ストリーム1050が完成すると、置換プロセスは終了する。
注記:チャンクの一部分のみを使用して、結果構築を完了させてもよく、残りは破棄される。
【0125】
「拡張」ランダム編集プロセス
図10は、非破壊性である、拡張ランダム編集プロセス1000b中のビット操作を示し、本発明の一実施形態に従って、各チャンクは、ターゲットストリーム1008ビットの間に「挿入」される。挿入点は、マスク値によって定義される。目標ランダムストリーム1008に追加される各チャンクは、対応する量だけターゲットストリーム1008のサイズを増大させる。
【0126】
置換ランダム編集プロセス1000aは、結果のサイズを拡張しないが、拡張ランダム編集プロセス1000bは拡張する。多くの方法において、拡張ランダム編集プロセス1000bは、マスクランダム編集プロセス600に類似している。例えば、主な目的は、いかなるデータビットもターゲットストリーム1008から喪失しないことである。チャンクストリーム1028からのチャンクが目標ビットの間に挿入されると、結果ストリーム1050は、対応する量だけサイズを増大させる。ターゲットストリーム1008、チャンクストリーム1028、マスクストリーム1018、拡張右(または左)、およびチャンクサイズという5つの入力パラメータがある。明らかに、チャンクサイズまたはマスク値ゼロは、演算がNOPとなるように、対応するターゲットストリームビットを単に戻すことを意味する。
【0127】
拡張ランダム編集プロセス1000bは、入力パラメータのサイズまたは結果のサイズのいずれかに対する実世界の制限に関係なく、ドキュメント化される。明らかに、これは、実世界において同様ではない。各実装は、それらに設計に対する適度な上限を設定しなければならない。それを行う際に、これらの上限は、副作用をもたらし得る。ワードサイズは、目標データストリーム1008、チャンクデータストリーム1028、マスク1018、およびチャンクサイズの上限であると仮定されるが、結果1050は、結果サイズによって限定される。
【0128】
拡張は、挿入点の左または右のいずれかで行うことができる。マスクストリーム1018における各「1」ビットは、挿入点を表す。結果値1050は、チャンクがチャンクデータストリーム1028から取られると、目標データストリーム1008から構築される。以下の、マスクはそれ以上の挿入点を有しない、またはターゲットストリーム1008はそれ以上のビットを有しないという条件のうちの1つが満たされると、拡張は完了する。多くの追加の3オペランド編集関数は、このアーキテクチャ内で適合する。これは、容易に拡張できる無制限アーキテクチャである。
【0129】
「除去」ランダム編集プロセス
同一の入力マスクランダムストリーム1018を仮定すると、拡張/除去ランダム編集プロセスは、左右対称の反対同士である。拡張ランダム編集プロセス1000bを介して、目標入力ストリーム1008に追加される各チャンクは、除去ランダム編集プロセスを介して除去され、同一のマスク編集ストリームが両方の演算に使用されると仮定する。このように、目標入力ストリーム1008は、偽性データチャンクまたは「ノイズ」の中に隠され、次に、「ノイズ」を除去した後に復帰する。
【0130】
ランダム編集プロセスのまとめ
すべてのランダム編集プロセスがすべての設計に意味を成すとは限らない。明らかに、ソフトウェアは、数学およびシフト演算を効率的にする、ALU(演算論理ユニット)およびBarrelシフター等の有用な特徴を有する。しかしながら、同一の特徴を有する負担ハードウェア設計は、費用効率が高くならない。そのため、設計者は、それらの製品に費用効率が高いランダム編集プロセスのみを使用することが推奨される。「過剰構築」ソフトウェア設計のコストは、過剰構築ハードウェア設計と比較して、極めて低い。一旦開発されると、ソフトウェアのコストは、ランタイムおよびメモリスペースの両方において非常に低いままである。
【0131】
本文書内で、多くのランダム編集プロセスは、教示ツールとして論じられる。ここで、どのように且つなぜランダム編集プロセスが機能するかが論じられ、通常の技術において訓練を受けた者であればだれでも、多くの追加ランダム編集プロセスを構築することができ、依然として、好適な実施形態の範囲内である。
【0132】
カオスエンジン
1)各ランダム編集プロセスは、ランダム入力ストリームを変異させる命令として見ることができる。命令間の動的スイッチングは、CPUに類似したものである、カオスエンジンを定義する。必要とされるランダムデータ容量が劇的に増加すると、分離プロセスは、プール内のデータを十分に分離するように、より活発にならなければならない。これは、単純なマスク発生器をカオスエンジンと置換することを意味する。データを隠すための1つの静的ランダム編集プロセスの代わりに、カオスエンジンは、複数のランダム編集プロセスを動的に切り替え、データを分離する。明らかに、カオスエンジンを使用して、メモリアドレスまたはデータのいずれかを分離することができる。カオスエンジン内の各ランダム編集プロセスは、その入力値に基づいて、異なる出力を与える。
2)図11は、カオスエンジン700を表すシステム図であり、命令710は解読され(715)、適切なランダム編集プロセス750は、本発明の一実施形態に従って、REP表のサブセットであるカオスエンジンREP命令セット720から選択される。カオスエンジン700内の各ランダム編集プロセス750は、その入力値に基づいて、異なる結果760を与える。
【0133】
カオスエンジン700は、少なくとも4つのランダムストリームを入力として有する。これらのストリームのうちの少なくとも1つは、命令ストリーム710として指定されなければならない。命令ストリーム710を解読して(715)、どの命令706を実行するかを選択する。大部分のランダム編集プロセス750と同様に、入力として、データ0 730、データ1 732、およびマスク734がある。明らかに、命令ストリーム710は、間接ランダムストリームまたはいくつかの他のデータ駆動ソースのように、データプールからの追加のランダムストリームである。カオスエンジン700は、究極のRISC(縮小命令セットコンピュータ)プロセッサに類似するものとなった。ほんの少数の単純命令であるが、結果は完全にデータプールを覆う。
【0134】
すべてのランダム編集プロセスのように、命令も編集ストリームも出力ストリームにおいて目に見えない。単純な16命令(4ビット命令)カオスエンジンの実施例は以下のとおりである。
【0135】
【数10】
【0136】
驚くべきことに、マスク発生器よりも多くのゲートを表すが、全体として、達成するゲートはほとんど有しない。この単純カオスエンジンは、はるかに大きいランダムデータ要件を対象としたプール内のデータを分離し、その容量の必要データに対してだけ使用すべきである。
【0137】
ここで定義されるこれらの16を超えて、好適な実施形態内に留まりながら、異なるおよび/または追加の命令(ランダム編集プロセス)を使用することができる。分化したサイクル長の入力ストリームで開始する場合、次にカオスエンジンサイクル長は、各入力サイクル長とデータプールサイズとを掛けた積である。命令として、不確定性のプールからビットを解読することを仮定すると、カオスエンジンあたりの命令数は2の累乗である。
【0138】
短サイクルカオスエンジン
上述のとおり、カオスエンジンは、不確定データを命令として使用し、処理関数の間で動的に選択する。短サイクルカオスエンジンは、制御プレーンも分離プロセスの一部として起動する。各処理関数は、依然として不確定データを入力パラメータとして必要とする。上記カオスエンジンは、1つの結果をもたらすために1つの命令を仮定するが、短サイクルカオスエンジンは、複数の結果をもたらす1つの命令に基づく。名前が暗示するとおり、一続きの結果は、比較的短い数であると仮定され、これらの複数の結果は、内部使用のみに限定される(すなわち、それらはパラドックスアンセーフである)。複数の結果を内部使用のみに限定することは、これらのシーケンスの可能性のあるモデリングを回避する必要があり、そうでなければ、攻撃者は、不確定性のプールに関する洞察を得る可能性がある。
【0139】
以下は、短サイクルカオスエンジンの実施例である。一群の線形フィードバックシフトレジスタ(LFSR)は、どのLFSRを開始するかを選択するために、共通のシード値、短サイクルカウント、および選択値を使用するように定義される。これらの入力パラメータのそれぞれは、不確定性のプールに由来する。所定のシーケンスの最後で、次のLFSR値は、不確定性プールへのメモリアドレスとして使用され、次のシード値、ランカウント、および選択値を読み取る。このようにして、短サイクルカオスエンジンは、「短い」数の比較的不確定な値の不確定シード値を拡張し、次に、新しいシード値、関数セレクタ、およびシーケンスカウントを選択して、別の未知の短いシーケンスを形成する。このプロセスが継続するにつれて、「比較的不確定なストリーム」が生じる。このストリームは、アドレスおよび不確定データソースとして使用することができる。
【0140】
時間変位
マスク発生器の形態のランダム編集プロセスは、一次「旋律」を破壊する単純な手段である。一次「旋律」を排除する間、二次「旋律」を構築した。評価のために、「旋律」は、ランダム値発生器からの再現可能な出力であり、値およびそれらが形成される順序の両方を含む。出力メモリバッファを有する2つ以上のPRNGアドレス発生器の追加は、二次「旋律」を破壊するための別のツールを提供する。このツールは、時間変位と呼ばれる。
【0141】
図12は、本発明の一実施形態に従って、2つの古典的な関数を使用し、ランダム書き込みおよび読み取り(引き出し)アドレスを生成する、時間変位プロセス800を表すシステムフロー図である。第1の古典的な関数803は、ランダム書き込みアドレスストリーム804を生成する。ランダム値発生器802によって生成されるデータ値806は、対応する書き込みアドレスにおいて、出力メモリデータプール810に書き込まれる。第2の古典的な関数812は、出力メモリデータプール810の対応するアドレスから出力値814を引き出すために使用される、異なるランダムアドレスストリーム813を生成する。これは、出力値814の新しいランダムデータストリームを形成し、この出力値は、ランダム値発生器802の出力806から分離される。
【0142】
出力ストリーム806において生成される各値は、1つ以上の出力データプール810にランダムに保存される。異なるランダムアドレス813を使用して、出力メモリプール810から値を引き出す。ランダムアドレス指定の知的使用によって、これらの出力値の可視性から出力値の形成順序を分離することによって、残りの「旋律」を粉砕することができる。出力プールの一部の有用な副作用は以下のとおりである。
・ランダム値発生器からの出力は、それが出力ストリームにおいて目に見える前に上書きされ得る。
・同一の出力プールアドレスは、それが新しい値で上書きされる前に、複数回引き出され得る。
・ランダム値発生器からのすべての出力は、それが形成された時に関して、ランダムに時間変位されるか、または破壊される。
【0143】
時間変位によって、1つまたは複数の出力データプールを使用することによって、「旋律」の最後を取り除いたが、データプールは覆われたままである。1つ以上の出力プールの初期化は、データプールがロードされると同時に行われる。
【0144】
短サイクルプロセス
図13は、本発明の一実施形態に従って、ランダムアドレスシステム1120を生成する、短サイクルプロセス1100aを表すシステムフロー図である。複数の入力制御値を有する古典的なブロック1105、関数選択1126、シード値1122、およびカウントダウン値1124は、短サイクルプロセス1100aの基礎を形成する。各短サイクルプロセス1100aは、別の関数再選択1126が行われる前に、いくつのアドレス(または値)が生成されるかのために、小さいカウントダウンカウンタ1110を有する。再選択1126が行われるたびに、新しい不確定性シード値1122も使用される。このようにして、攻撃者は、データプールから値を引き出すために使用されるランダムアドレス1120をモデル化することはできない。また、再選択プロセスは、新しいカウントダウン値1124を再ロードする。初期開始値1128は、制御ユニット1130に対する入力であり、関数選択値1126、シード値1122、およびカウントダウン値1124を計算する。カウントダウンカウンタが特定のカウントダウン値1124の最後に到達すると、カウントダウンカウンタは、ランダムアドレスストリーム1120の最後の出力値が生成された制御ユニット1130に通信する。各カウントダウン実行の最後の出力値1132は、制御ユニットによって使用され、制御値、シード値1122、関数選択1126、およびカウントダウン値1124の次のセットを計算する。
【0145】
なぜ短サイクルプロセス1100aが、アドレスおよびデータを効果的に分離するかは明らかであり、変化率は、依然として高速過ぎるため、どのランダム関数1105がアドレス1120を生成しているかをモデル化することはできない。さらに、関数カウントダウン値1132、ランレングスカウント1124を定義するための不確定性データの使用は、アドレス指定をモデル化することはできないことを意味する。この少量の不確定性データは、通常の擬似ランダム関数におけるシグナルの大部分を除去した。不確定性データの使用は、これらの静的関数内で定義された確定性の大部分を置換した。
【0146】
データパラドックスの解決
プール内のデータが依然として隠されている限り、データプールの外で構築される不確定性関数はソリューションである。明らかに、データプールへの線形アドレス指定は、可能な限り回避すべきである。プールのコンテンツを暴露することなく、どのようにしてデータプールからデータを引き出すかという逆説的状況に直面している。これは、データパラドックスとして定義される。良好なランダムデータを有する無限のデータプールを有する場合、パラドックスは存在しない。プール内の「無限」データの最後に達することはないため、プールの完全なコンテンツを暴露することはない。1つまたは複数のプールにおける不確定性ランダムデータは、問題の一部であると同時に、解法の一部であるという、データパラドックス問題/解法の皮肉な曲解に気付くであろう。
【0147】
実世界において、制限されたデータプールサイズおよび厳しいランダムデータ要件に対処することを余儀なくされる。目標アプリケーションに必要なランダムデータが、データプールサイズと比較して適度である場合、パラドックスは有意ではない。目標アプリケーションによって必要とされるランダムデータが増大するにつれて、データパラドックスのリスクも増大する。明らかに、1つ以上のデータプールの実際のサイズが増大するとすぐに、無効になる。
【0148】
アプリケーション要件を変更することはできないため、データパラドックスの効果に応答して、1つ以上の仮想データプールサイズを何らかのかたちで「合成的に増大させる」必要がある。ランダムデータ要件が増大すると、アプリケーションは、それぞれの現行ソリューションから最終的には成長して、より複雑なアーキテクチャへのアップグレードを必要とする。各アップグレードは、不確定性関数の強度を保存する、より高コストのソリューションを必要とする。
【0149】
好適な実施形態は、システム要件に応じて、単純なアーキテクチャからより複雑なソリューションに及ぶ。各アップグレードは、不確定性関数の強度を保存するよりも高コストのソリューションを要する。経済的な理由から、正しい実施形態に対してアプリケーションをサイズ調整するよう注意する必要がある。
【0150】
ソフトウェアソリューションのアップグレードは、ハードウェアソリューションと比較して、低コストのソリューションを達成する。したがって、大部分のソフトウェアアプリケーションは、より複雑なソリューションで開始し、全体的なシステム性能が問題となる場合に限り、何か他のものにダウングレードするだけであると仮定される。必要とされるランダムデータの量が増大するにつれて、ソフトウェアシステムデザイナーが、ランダム値を生成するための専用ハードウェアを必要とする可能性がより高い。
【0151】
生データは、データプールから簡単に引き出されることはなく、出力ストリームにおいて目に見えるようにする。その生データは、プールのコンテンツを極めて迅速に暴露する。既に、データプールへの線形アドレス指定に関する問題について承知されている。データプールへの擬似ランダムアドレス指定でさえも、依然として単純化し過ぎており、データプールへの線形アドレス指定とほぼ同じくらい不良である。
【0152】
分離プロセス
セーフまたはアンセーフという用語は、データパラドックスに影響する値の属性を説明するために使用される。具体的に、アンセーフ値は、分離プロセスを経ていないが、セーフ値は経ている。分離プロセスの関数は、値の決定性ストリームを値の非決定性ストリームに変換することである。
【0153】
データパラドックスを回避する目的は、以下に説明される構成要素の大部分に影響する。分離プロセスは、生データプールメモリアドレスおよびデータをパラドックスセーフ値に変換する。これらの値は、不確定性データをこれらのオリジナル値と混合することによって変換される。セーフ値のみを、データパラドックスの悪影響なしに使用することができる。
【0154】
分離プロセスの効果は、仮想データプールサイズを合成的に増大させることである。実質的なデータプールを巨大な仮想プールに劇的に増大させることができる一方で、その無制限なプールサイズには到達していない。明らかに、この仮想増大は、適度なサイズのデータプールに対して機能するに過ぎない。具体的には、データプールが小さ過ぎる状態から開始する場合、合成増大を介して修繕することはできない。
【0155】
仮想データプールを形成する場合、そのサイズは、メモリアドレスおよびデータをどれ程活発に分離するかを示す。分離プロセスは、非常に単純に開始するが、必要に応じて、複雑性を増大させる。分離プロセスは、実施形態の範囲全体で、さらに活発になる。
【0156】
各実施形態間の移行は、明らかに定義された点ではない。通常、不確定性ランダム値発生器の強度は、生じた1つの追加ランダム値において突然不能にならないが、その中に隠されたデータが目に見えるようになるまで、ゆっくりと脆弱化する。明らかに、それを脆弱化するまで、決して実施形態を実施してはならない。これを回避するため、設計者は、安全のマージンを組み込む必要がある。
【0157】
各実施形態に対して、多くの要素が、クラッキングに対する抵抗に影響する。これらの要素のうち、最も明らかなのはデータプールサイズである。データプールサイズに加えて、安全のマージンを駆動する他の主要な要素は、各古典的なブロックにおいて見出されるランダム関数の数、設計内のランダム編集プロセスの総数、プールデータの「鮮度」、および新しいゲノム発生器の総サイクル長を含む。設計者は、ランダム値発生器をシミュレートして、どの要素が安全のマージンに最善の値を提供するかを判断する必要がある。アドレスおよびデータを分離するツールは、以下を含む。
1)不確定性データを伴う排他的OR(XOR)−アドレスおよびデータ
2)不確定性データを伴うマスク発生器−アドレスおよびデータ
3)不確定性データを伴うカオスエンジン−アドレスおよびデータ
4)時間変位−データのみ
アンセーフ擬似ランダムメモリアドレスは、単純XORプロセスからカオスエンジン等の複雑なソリューションを含むソリューションの範囲を介して安全にする。プールから引き出されるデータは、生データ(アンセーフ擬似ランダムメモリアドレスを介してアドレス指定される)、アンセーフデータ(セーフメモリアドレスを介してアドレス指定される)、またはセーフデータ(上記プロセスのうちの1つを介して分離される)である。データは、時間変位を通じて、マスク発生器を介してセーフになる。要するに、データプールアドレスは、2つの有効な状態を有する。
1)「パラドックスアンセーフ」−古典的な関数を介して形成されるアドレス
2)「パラドックスセーフ」−分離プロセスを完了したアドレス
一方、データプールデータ要素は、3つの有効な状態を有する。
1)「生」−アンセーフアドレスを介してアクセスされるデータプールデータ
2)「パラドックスアンセーフ」−セーフアドレスを介してアクセスされるデータプールデータ
3)「パラドックスセーフ」−分離プロセスを完了したデータプールデータ
一般的な設計問題
残念なことに、古典的なPRNGは、制限された機能性を提供する。現行の手段のみが使用可能であるため、これらの制限は、不適切なソリューションを伴う。例えば、クラッキングに対する抵抗は、極めて複雑なPRNGソリューションを用いてアドレス指定され、高騰するコストをもたらす。多くの設計は秘密裏に構築され、それらの実装を隠す無駄な試みが為される。この秘密の開発ブロックを再検討および再利用するが、それらは決定性であるというPRNGの重大な欠陥が残る。したがって、任意の現行PRNGソリューションは、制限された寿命を有する。
【0158】
実施例を理解すると、多くの異なる設計をこれらの標準構成要素から形成することができる。ソリューションのこの構成要素レベルの形成は、コストを制限しながら、任意のソリューションをアプリケーション要件に適切に拡大縮小するのを可能にする。
【0159】
非限定例として、2つの不確定性データ値をプールからランダムに選択し、それらを足し合わせて、新しい不確定性値を生じてもよい。この新しい値は、複数の異なる親セットが同一の値を生じることができるとき、その親の値から分離される。したがって、値の単一プールは、第1のプールよりも大きい不確定性の第2世代プールを生成する。「不確定性」の属性は、値の次の世代に進展した。そのため、第1世代不確定性データを明かすべきではないが、それから処理された後次世代を明らかにすることができる。
【0160】
不確定性データを用いて行い、追加の不確定性データを生成することができ、不確定性データの次の実施をもたらす「加算」の他に、有効な演算が無制限な数だけある。不確定性データの第1世代は、固定サイズを有するが、後次世代は、恣意的サイズであり得る。
【0161】
それでは、不確定性の第1世代プールはどれ程大きいか。これは、依然として当然するべき質問であるが、答えは単純ではない。個別のアプリケーションは、異なる量のランダムデータを要する。目標量のランダムデータが、適度なベースラインサイズを越えて、データプールサイズに与える影響は限られているが、データプールにアクセスするために使用されるアドレス生成に対して重要な影響を有する。意図的に、不確定性プールの最小サイズは定義されていない。この最小サイズ値は重要ではない。メモリの価格は、急速に低下し続けているが、依然として管理されるコストを表す。しかしながら、設計者は、それらの設計のシミュレーションを用いて、データプールサイズを計算することができる。ランダムデータの目標量が増大するにつれて、データプールサイズに対する直接的な影響は、最小のままである。驚くべきことに、チップサイズ対コストに基づいて、データプールサイズに適度な上限がある。そのため、この適度な限界を超えて、データプールサイズが増大することは、費用の増加を正当化しない。
【0162】
不確定性の本質的原理は、依然として、最小データプールを使用しない主な理由である。不確定性を最大化することは、任意の所与のデータ値が、データプール内で複数回出現し得ることを暗示する。追加の不確定性を統合するために、データプールにおいて見出される各複製値は、どのメモリアドレスが所与の値を生成したかに関する不確定性を劇的に増大させる。反転プロセスの困難性は、この増大した不確定性に起因して、急激に上昇する。当然のことながら、これは、セッションデータが、依然として検証プロセスに合格し、隠れたままであると仮定する。
【0163】
したがって、設計内の不確定性を除去することによって、それを不確定性と置換することができる。アドレス生成のために最低限ほんの一握りの古典的なPRNGを使用する代わりに、最小数を超える、より大きな古典的な関数群を必要とする。
【0164】
PRNGは、URNG内のアドレス生成に使用される。アプリケーションが、適量のランダムデータを要する場合、PRNGの割り当てを1回行うことができる。ランダムデータ要件が高まるにつれて、これらのPRNGを成功裏にモデル化するリスクも高まる。このモデル化に対する良好な防御は、PRNGの動的(不確定)選択であろう。PRNGのワンタイム使用または動的選択は、複雑性トレードオフ決定となる。ハードウェア設計において、一回のPRNG選択を行うためにソフトウェア初期化を要することは、影響を有する。この例において、アドレス関数は、目標アプリケーションランダムデータの要件よりも長いサイクル周期を有し、同一の出力シーケンスの再利用を避けなければならない。追加の複雑性は、適切なアドレス指定サイクル長を保証するために必要とされ得る。
【0165】
PRNG寿命の動的(不確定性)選択は、アドレス指定関数、ランレングス、およびシード値の選択/再選択に複雑性を追加する。不確定ランレングスは比較的小さいと仮定すると、最小サイクル長アドレス指定関数を使用することができる。このようにして、アドレス指定関数の動的置換は、ランダムシーケンスが反復されないことを保証する。このランレングス寿命が短い程、発生器が反転することは困難になる。明らかに、これは、大規模または未知のランダムデータ要件に対する好適な設計トレードオフである。
【0166】
URNGの不確定性を保護することは、データプールから読み取るために使用されるアドレスおよびデータ自体の両方の分離に依存する。本明細書では、最大の不確定性を保証することに注意した。不確定性のプールに対する直接的な攻撃を除いて、不確定性のプールのコンテンツを拾い集めるための次の最善の方法は、1つ以上のデータプールから読み取るために使用される、ランダムアドレスの成功裏なモデル化である。アドレスは、この形式の攻撃を防ぐために分離する必要もある。
【0167】
明らかに、ハードウェア設計は、ユニットあたりのコストに敏感である。しかし、ハードウェア設計は、コストがより高いが、より良い性能の利点も有する。一方、ソフトウェア実装は、コストも性能も低いが、柔軟性が増す。ランダムデータおよび性能要件に基づいて、各設計センターは、他を超える利点を有する。本明細書において、実施例の範囲のみが、可能な実装の開始概要を表す。最低コストのソリューションが、必ずしも各アプリケーションにとって最善のソリューションであるとは限らない。
【0168】
時間変位を除いて、すべての分離プロセスは、不確定データを使用して、入力値を分離する。この混合プロセスは、入力値の「旋律」の一部/大部分/すべてを除去する。どの程度「旋律」が除去されるかが、コスト/パフォーマンストレードオフになる。これは、なぜ最低コストのソリューションが最善とならない場合があるかを説明する。どのトレードオフを行うかを慎重に選択することは、なぜ1つのサイズがすべてのアプリケーション要件に適合しないかということである。
【0169】
不確定性のプールへのメモリ帯幅は、多くのハードウェアトレードオフを駆動する。発生器あたりの不確定性のプールへのアクセス数が高くなる程、ランダム数発生器の性能を制限する効果をもたらす。幸運なことに、このメモリ帯幅問題に対して、多くのよく知られた次善策があるが(不確定性の複数プール等)、あいにく、これらの次善策のすべては、コストを上昇させる。
【0170】
ソフトウェア性能は、メモリ帯幅によって既に制限されているため、入力値のすべての「旋律」を完全に除去することが、推奨設計目標となる。
【0171】
各URNG設計は、アドレスおよびデータの両方を不確定性のプールから分離しなければならない。任意のURNGに対するエンジニアリングタスクを定義するとき、努力の有効性は、そのコストに直接比例する。各分離/ランダム編集プロセスの有用性は、効果および複雑性(すなわち、コスト)によって異なる。編集データは、不確定性のプールに由来するため、ランダム編集プロセスは、分離プロセスにアップグレードされる。その広範な効果は、可能性のあるサイクル長および各生成値の相対決定論に対処する。「旋律」のすべてが除去される(値を非決定性にする)場合、唯一の追加の有用な効果は、自然なサイクル長である。設計者は、エンジニアリングトレードオフに従って、これらの広範な効果から選択しなければならない。
【0172】
レベル1 分離:(入力ストリームの「旋律」の一部のみを除去する)不確定データ値を有するビットワイズ排他的OR(XOR)。効果は、決定性の低い生成値である。
【0173】
レベル2 分離:(入力ストリームの「旋律」のすべてを除去する)不確定マスクを有するマスク発生器。効果は、非決定性生成値(パラドックスセーフ値)である。
【0174】
レベル3 分離:(入力ストリームの「旋律」のすべてを除去する)不確定命令およびマスクストリームを有するカオスエンジン。効果は、非決定性であり、極めて長いサイクル長を有する生成値である。
【0175】
各URNGの基準概要は、3つのステップを有する。不確定性関数は、非決定性ストリームを生成するために、分離したアドレス(定義域値)およびデータ(値域値)を必要とする。
a.PRNGを使用してアドレスを生成し、不確定性のプールから読み取る。したがって、生で、パラドックスアンセーフな不確定ストリームを生成する。アンセーフ値として、それらは内部URNG使用のみに限定される。
b.PRNG生成アドレスは分離され(レベル1=>3)、データプールアドレスを生成する。これらのパラドックスセーフアドレス(定義域値)は、不確定性のプールから読み取る。したがって、パラドックスアンセーフデータ(値域値)を不確定性のプールから生成する。
c.パラドックスアンセーフデータ(値域値)は分離され(レベル1=>3)、非決定性出力ストリームを生成する。
URNG設計を使用するすべてのアプリケーションが、支持された発生器の総サイクル長を完全に循環することはないはずである。
【0176】
ハードウェア構成要素
ランダム値生成のコストを劇的に低減することが目標の1つである。そのために、公的に検討される標準ハードウェア構成要素(古典的な関数)を各設計に再利用する。これらの要素それぞれは、以下のセクションで説明される単純な概念に基づく。一旦構築されると、これらの要素は、必要に応じて、多くの設計全体で再生成することができる。
【0177】
これらの構成要素の多くは、ハードウェアの抽象化として定義される。ハードウェアは、通常このようにして定義されない場合があるが、この場合、抽象化は、その実装において可能な限り広範な余裕を付与するために行われる。これらの抽象化は、固定した実装とは対照的に、この技術の陰の力である。チップ設計の分野における熟練者であれば、本発明の実施形態の範囲内に留まりながら、これらの抽象化を容易に実装することができる。
【0178】
構成要素の使用は、必要に応じて、関数を広範なソリューションに混合することを可能にする。これらの実施形態は、様々なアプリケーションの必要に応じて、追加または変更可能な一般的実施例である。設計を過剰に構築しない限り、ランダム値生成のコストを低減するという目標は達成される。
【0179】
不確定性ランダム値発生器抽象化は、データ値を1つ以上のデータプールから引き出すこととして説明されている。意図的に曖昧な用語「引き出す」とは、データプールへのアドレス指定が、この抽象化に対してまだ定義されていないことを示す。この曖昧な用語「引き出す」は、ここで、より有用な何かに拡張される。
【0180】
データをプールから引き出すために、ランダムアドレスの形成を制御する要素は、アプリケーションに必要とされる総ランダムサイクル長、データプールサイズ、不確定性の一般概念、およびデータパラドックスの効果を含む。オーバーヘッドの大部分は、不確定性ランダム値発生器内でこれらのランダムアドレスを形成するプロセスの間に拡張される。つまり、メモリの読み取りは、依然として、データを取得するための極めて安価な手段である。
【0181】
アプリケーション要件を不確定性ランダム値発生器設計に一致させる場合、尋ねるべき第1の質問は、どれだけのランダムデータが必要かということである。この目標値は、最小の総必要サイクル長を表す。所与のアプリケーション要件よりも長いサイクル長を有する、ランダムアドレスを生成しなければならない。1つ以上のランダム編集プロセスを使用することは、このより長いサイクル長を達成する手段を提供する。
【0182】
では、データプールはどれ程大きいか。アプリケーションは、異なる量のランダムデータを要する。目標量のランダムデータは、適度なベースラインサイズを超えるデータプールサイズに対して制限された影響を有するが、1つ以上のデータプールへのアクセスに使用されるアドレス生成に重大な影響を及ぼす。したがって、設計者は、シミュレーションを行って、それらのアプリケーションに最適なデータプールサイズを決定する必要がある。
【0183】
不確定性ランダム値発生器は、1つ以上のデータプールにおいて、セッションデータから開始する。最小サイズは重要でないため、意図的に、データプールの最小サイズは定義されない。しかしながら、設計者は、自分たちの設計のシミュレーションを用いて、データプールのサイズを計算することができる。ランダムデータの目標量が増大しても、データプールサイズに対する直接的な影響は最小のままである。驚くべきことに、チップサイズ対コストに基づいて、データプールサイズに対する適度な上限がある。そのため、データプールサイズがこの適度な限界を超えて増大することは、費用の増大を正当化しない。
【0184】
不確定性の原理は、最小データプールを使用しないことに対する主な正当化である。不確定性を最大化することは、任意の所定データ値が、データプール内で複数回出現することを暗示する。追加の不確定性を統合するために、データプールに追加される各複製値は、どのメモリアドレスが所与の値を生成したかに関する不確定性を劇的に増大させる。反転プロセスの困難性は、この不確定性の増大に起因して、急激に高まる。当然のことながら、これは、セッションデータが、依然として検証プロセスに合格し、隠されたままであると仮定する。
【0185】
したがって、設計内の確定性を除去することによって、それを不確定性と置換することができる。最低限ほんの一握りの古典的な関数をランダムアドレス生成に使用する代わりに、より大きい古典的な関数のブロックを定義する一方、ブロックあたり1回に1つの関数のみを使用する。アドレス指定可能な出力経路指定による古典的な関数ブロックの設計および使用は、任意の古典的な関数を、ランダム値発生器設計のすべての部分において使用できることを意味する。すべての古典的な関数選択、シード値、および出力経路指定は、すべて不確定性関数からのデータによって駆動されるという事実は、確定性が不確定性と置換されたことを意味する。これらの特徴は単純かつ実装コストが低いが、それらは、設計の不確定性を劇的に高める。
【0186】
古典的なブロック−ハードウェア抽象化
以前に、データプールから読み取りながら、なぜ一方向性関数を有するかについて説明した。同一のセッションデータは、データプールへのアクセスに使用される各一意のアドレス指定方法論に一意のデータストリームを付与する。設計が許し得る限り多くの一意アドレス指定方法論を有することが重要である。
【0187】
幸いなことに、ハードウェア線形フィードバックシフトレジスタLFSR(古典的なハードウェアランダムビット値発生器)は、実装に必要とされるゲートカウントにおいて、数的に多くも少なくもある。確実に数百、おそらく数千の公開されたハードウェアシフトレジスタが入手可能である。ランダム編集プロセスを使用して、短いサイクル長を有するものから長いサイクルシフトレジスタを構築することができる。古典的なブロックに関する重要な注意事項は、通常、安全でないメモリアドレスを生成するために、各LDSRが使用されることである。
【0188】
このハードウェア抽象化を定義する際に、我々の目的は、構成要素に対する一般的な抽象化インターフェースを維持する一方で、必要に応じて変化するように、構成要素内の実装を可能にすることである。各古典的なブロックは、4つの必要な入力値、シード値、ブロック内の関数セレクタ、ランレングスカウント、および出力ビットストリームを経路指定するための出力ラインセレクタを有する(リセット、ロードシード等の他の一般的な制御ラインも存在する)。
【0189】
すべての古典的なブロックに関する一般的なインターフェース問題
図14は、本発明の一実施形態に従って、古典的なブロック1200と関連付けられる一般的なインターフェースを描写するシステム図である。シード値1202は、常に同一様式でロードされる。現在のシフトレジスタ関数を実行しながら、次の(新しい)シード値1202およびランレングスカウント1206をロードすることができる。リセットおよびリロード1204は、新しいシード1202およびランレングスカウント1206の値を切り替えるために必要である。出力ラインセレクタ1212を使用して、古典的なブロック1200からの出力ストリーム1210を適切な出力ライン1214に切り替える。古典的なブロック1200内で使用するための適切な古典的な(関数セレクタ)シフトレジスタは、常に同一様式で特定される。一旦、古典的な関数が選択されると、シード値1202およびランレングスカウント1206値がロードされ、関数は、選択された出力ライン1214に経路指定される、出力ストリーム1210の生成を開始する。
【0190】
ランダム編集プロセスを駆動するために、古典的なブロックは、グループで使用される可能性が高い。一般的なインターフェースは、他のハードウェアをはるかに単純にする。出力ビットストリームを正しいランダム編集プロセスに動的に経路指定されるのを可能にすることによって、データプールへのアクセスに使用される、一意のアドレス指定方法論の数を著しく拡張した。
【0191】
各古典的なブロックの初期化は、データプールメモリアドレスで開始する。そのメモリアドレスは、2つの値、シード値およびランレングスカウントを指す。初期化ハードウェアは、2つの値をフェッチする。ランレングスカウントの最後に、次のランダム値は、次のデータプールメモリアドレスになる。次に、このデータプールメモリアドレスにおける値を使用して、古典的なブロックをリスタートするための使用される、新しいシード値およびランレングスカウント値を決定する。
【0192】
ここで、設計を抽象化と見る値は、さらに明らかになる。上記古典的なブロックの抽象化において、複数LFSRの要件が明らかとなった。抽象化として、この実装は、直接的なソリューションよりもはるかに安い。上述されるとおり、直接的なアプローチは、古典的なブロックを構築するための複数の一意LFSRを形成させる。しかしながら、このアプローチは、ゲートカウントにおいて高価となるため、ランダム値の生成コストを低減するという全体目的は失敗する。代わりに、古典的なブロックの抽象化を使用することによって、選択する任意の手段によって、この問題を解決する自由を得る。
【0193】
例えば、すべてのそれらのゲートをすべてのLFSRに費やすのではなく、各古典的なブロックに1つのプログラム可能な構成可能LFSRを形成する。不確定性値を使用してLFSRを選択および構成することは、ゲートカウントに全額を支払うことなく、古典的なブロックの抽象化の機能要件を満たす。再度、このアプローチは、全体アーキテクチャに影響することなく、ランダム値生成のコストを低減するという目的を維持する。
【0194】
古典的なブロックへのシフトレジスタのグループ化
シフトレジスタを古典的なブロックにグループ分けする場合は、慎重にならなければならない。表2は、恣意的な名前(この場合は色)、このグループにおけるシフトレジスタのグループサイズ数、グループのサイクル長、および指名された関数グループがマスク発生器であるか否かの決定によってグループ分けされる、一式の古典的なシフトレジスタを表す。
【0195】
ランダム編集プロセスは、分化したサイクル長を各入力ストリームに使用される場合に限り、はるかに長いサイクル周期をもたらす。したがって、シフトレジスタは、これらの分化サイクル長を維持するような方法で、グループ分けされなければならない。表中の各P値または3つのP値を掛け合わせた積は、一意の値である。一意のP値をこの教示的実施例において見ることはできないが、表は、漸増するP値で一般的にフォーマットされる。
【0196】
【表2】
【0197】
マスク発生器は、3つのランダムストリーム、データ0、データ1、およびマスクで形成されることに留意されたい。表2から3つの色を混合する場合、マスク発生器群のサイズは、各色群のサイズに3を掛けた積である。3つの色群のそれぞれにおける各関数は、データ0、データ1、またはマスクストリームとすることができる。例えば、ホワイト−ティール−グレーは、グループサイズが11*9*13*3=3861である。各色が、マスク発生器内の3つのストリームすべてにおいて表される限り、同一のマスク発生器サイクル長が生成される。
【0198】
一部のサンプルの古典的なブロックをここで構築することができる。各古典的なブロックは、同一の抽象インターフェースを有するが、内部的に異なる可能性があり、現に異なる。上記表から形成される6つの古典的なブロックの実施例は以下のとおりである。
【0199】
古典的なブロック1:マジェンタおよびイエロー
ブロックにおける総関数カウント:32(22+10)
最小、最大サイクル長:P10、P13
古典的なブロック2:レッド−グリーン−ブルー
ブロックにおける総関数カウント:32(可能な4032のうちの32)
最小、最大サイクル長:P1*P2*P3
古典的なブロック3:バイオレット、パープル−インディゴ−イエロー
ブロックにおける総関数カウント:32(可能な7680のうちの12+20)
最小、最大サイクル長:P11、P8*P9*P10
古典的なブロック4:アズール−レッド−パープル
ブロックにおける総関数カウント:32(可能な7392のうちの32)
最小、最大サイクル長:P15*P1*P8
古典的なブロック5:パープル、アクア、ブラック、オレンジ、および若干のティール
ブロックにおける総関数カウント:64(9のうちの16+14+16+14+6)
最小、最大サイクル長:P4、P14
古典的なブロック6:ホワイト、アズール、グレー、グリーン、レッド、および若干のブルー
ブロックにおける総関数カウント:64(8のうちの11+11+13+12+14+3)
最小、最大サイクル長:P1、P15
これらの古典的なブロックについて、留意すべき重要な特性が多数ある。第1に、任意の設計は、これらのブロックを使用することができ、それらが分化したサイクル長を有することを保証することができる。たとえ色がマスク発生器の一部として現れるとしても、組み合わせたサイクル長は、ベースカラーサイクル長に影響しない。各ブロックにおける総関数カウントは、ブロックごとに異なる可能性があり、現に異なる。一般的なインターフェース上の理由から、すべての古典的なブロックは、総関数カウントを2の累乗として有する。
【0200】
古典的なブロック内で単純なシフトレジスタをマスク発生器と混合することは適切に機能し、これもブロックの最小サイクル長に著しく影響する。古典的なブロック3と4の間の対比に留意されたい。これらのサンプルの古典的なブロックは、どの問題がグループ化プロセスを駆動すべきかを示すように形成された。注意して、極めて良好な古典的なブロックを低ゲートカウントおよび良好なサイクル長で形成することができるが、サイクル長を分化する全体目標を維持する。上記の表において、一覧表示されるマスク発生器は、すべてステージ1発生器である。代替として、より高いステージの発生器を表に追加してもよく、したがって、各古典的なブロックを追加することができる。実際に、これは、不確定性ランダム値発生器における一意関数の総数を増大させる、極めて単純な方法となる。
【0201】
古典的なブロックハードウェア抽象化は、これらの関数に対する一般的なインターフェースを提供する一方で、あらゆる種類の構造上のソリューションを開発するための基本的な構築ツールを付与することに留意されたい。
【0202】
間接的ランダムストリーム
ここで、生のアンセーフメモリアドレスを生成するための古典的なブロックがあり、データは、1つまたは複数のデータプールから読み取ることができる。データパラドックスアンセーフと定義されると、この方法で読み取られるデータは、内部的にのみ使用され、値の間接的ランダムストリームと称される。通常、この間接的ランダムストリームを適用して、様々な編集プロセスにおいて使用されるランダムデータを引き出す。出力ストリームに直接フィードするために使用してはならない。
【0203】
セーフアドレスストリーム
1つまたは複数のデータプールの外に構築される不確定性関数は、強力な解決策である。データプールに対する直接攻撃を除いて、1つまたは複数のデータプールにおいてデータを拾い集める次善策は、1つまたは複数のプールから読み取るために使用されるランダムアドレスをモデル化することである。この形態の攻撃を阻止するために、ランダムアドレスは、アドレスがモデル化され得ない方法で分離しなければならない。
【0204】
分離プロセスは、ここで最も単純な変換から開始する。幸運なことに、不確定性関数の正確さは、セーフランダムアドレスを形成する支援となる。古典的なブロックによって生成される各ランダム(生)アドレスは、データ駆動修正プロセスを通じて安全にすることができるに過ぎない。1つ以上のプールからのデータによる擬似ランダムアドレスの修正は、一意のランダムアドレスストリームを付与する。このアドレスストリームは、1つまたは複数のデータプールのコンテンツを最初に知ることなく、モデル化することはできない。これらの決定性アドレスは、不確定データを使用して、分離プロセスを介して非決定性にアップグレードされた。
【0205】
図15は、本発明の一実施形態に従って、アンセーフメモリアドレスの間接的ランダムストリーム1314を使用して、値1318をデータプール1316から引き出す、ハイブリッドアドレス発生器1300を描くシステムフロー図である。このハイブリッドアドレス発生器1300は、2つの古典的なブロック1302および1322を使用して、それぞれデータ0 1304およびデータ1 1324の入力ストリームを生成する。マスクストリーム1318は、データ0ストリーム1304およびデータ1ストリーム1324上で動作し、結果としてハイブリッドアドレスストリーム1350を形成する(1340)。ハイブリッドアドレス発生器の動作は、データ値1318をデータプール1316から引き出す間接的ストリーム1314を除いて、マスク発生器400と同一である。ハイブリッドアドレス発生器1300は、データパラドックスセーフランダムメモリアドレス1350を作成して、1つまたは複数のデータプールから読み取る。ハイブリッドアドレスストリーム1350を形成するために、ネットコストは、少なくとも3つの古典的なブロック1302、1312、および1322となる。
【0206】
コストが低く、安全ではないが、図16は、本発明の一実施形態に従って、不確定性関数を適用し、Xセーフアドレス発生器1400と称される、データパラドックスセーフランダムアドレスを作成する、第2の方法を描く、システムフロー図である。1つの古典的なブロック1402は、データ0 1404入力ストリームを形成するために必要である。同様に、間接的ランダムストリーム1418を形成するためには、別の古典的なブロック1412を使用しなければならない。第2の古典的なブロック1412からの出力ストリーム1414を使用して、データプール1416にインデックス付けし、データ0ストリーム1404を有するビットワイズXOR1440である、間接的ランダムストリーム1418を形成する。結果として得られるランダムアドレスストリーム1450は、ハイブリッドマスク発生器とほぼ同程度安全となるが、サイクル長はより短い可能性が高い。Xセーフアドレスストリーム1450を形成するために、ネットコストは、少なくとも2つの古典的なブロックとなる。
【0207】
任意の不確定性ランダム値発生器は、発生器の支持される総サイクル長を通して完全にサイクルすることはないはずであると仮定することができる。したがって、ランダムアドレスストリームサイクル長は、総目標アプリケーションランダムデータ要件を超えなければならない。所望のサイクル長に到達するために、ランダム編集プロセスのスタッキングが必要とされる場合がある。このスタッキングは、古典的なブロック内または外で構築することができる。
【0208】
セーフランダムデータストリーム−ハードウェア抽象化
分離プロセスは、安全なランダムデータストリームを継続する。パラドックスセーフメモリアドレスを使用して、データプールを読み取ると、3つのランダムデータストリーム、データ0、データ1、およびマスクが形成される。安全なランダムデータストリームは、メモリアドレスおよびデータの分離プロセスを介して、仮想データプールサイズを成功裏に増大させた。1つまたは複数のデータプールは、ここで、データパラドックスからのリスクなしに、ランダムデータの何倍もの量を作成することができる。これは、この発生器にフィードするために少なくとも6つの古典的なブロックを必要とする。入力ストリームの分化したサイクル長で開始すると、次に、安全なランダムデータストリームサイクル長は、各入力サイクル長にデータプールサイズを掛けた積である。
【0209】
セッションデータの動的展開
分離プロセスは、セッションデータの動的展開を継続する。固定数のカードで開始するカードゲームは、分離に役立つ隠喩を提供する。1組のトランプをシャッフルすると、取り扱われるカードの新しいシーケンスを設定することによって、新しいゲームを形成する。多くの場合において、次に、1組のトランプを「カット」し、扱われる第1のカードを変更する。1組のトランプをシャッフルおよびカットする行為は、ゲームを行うカードのシーケンスを変更する。
【0210】
同様に、同一の原理をセッションデータに適用することができる。この結果は、セッションデータを「リフレッシュする」ことである。セッションデータのリフレッシュは、不確定性を追加するだけでなく、更新されたセッションデータは、データパラドックスを避けるのに役立つ。「仮想」シャッフルおよびカットは、メモリアドレスを用いてのみ行われ、セッションデータにおいて見出される値を再インデックス付けするように作動する。1つまたは複数のプール内のデータは、まだ静止したままであるが、1つまたは複数のプールを読み取るために使用されるアドレスは、「シャッフルおよびカット」をシミュレートする方法で操作される。
【0211】
仮想カット−メモリアドレス+オフセット
例えば、1つまたは複数のデータプールを読み取るために使用されるメモリアドレスのオフセットを追加することは、メモリ範囲の起源を移動させることと同じ効果を有する。これは、正にカードゲームにおいて1組のトランプを「カットすること」と同様に動作する。
【0212】
仮想シャッフル−メモリアドレスXORシャッフル値
メモリアドレスを有するシャッフル値のビットワイズXORの動作は、適当な位置における素早いシャッフルの効果と比較できる。メモリ範囲は、XOR演算によって再発注されている。シャッフルの次にカットすることができ、またはカットの次にシャッフルすることができる。これらの仮想カードトリックは、希望に応じて何度も行うことができる。
【0213】
ランダムサブストリーム−メモリアドレスオフセットの使用
メモリアドレスの操作は、一部の極めて有用な副作用を有する。通常、不確定性ランダム値発生器は、1つのランダムストリームのみを生成する。不確定性ランダム値発生器内で使用される各メモリアドレスが、それに追加されるオフセットを有する場合、異なるランダムサブストリームが、それぞれ異なるオフセットに対して生成される。任意の数の恣意的ランダムサブストリームは、メモリオフセット値の選択的追加を介して生成することができる。これは、必要に応じてランダムアドレス指定可能なサブストリームをもたらす。このツールは、多くのアプリケーションにおいて極めて有用である。
【0214】
メモリアドレスラインの動的変更
データプールコンテンツを分離する別の方法は、ハードウェアアドレス指定ラインを動的に変更することである。これは、一般的な無制限ハードウェアソリューションである。これは機能するが、多くの設計において使用するには高価すぎる場合がある。
【0215】
ランダムネスの第3のプレーンは、ハードウェアの古典的なブロック内でも可能にすることができる。各古典的なブロックは、初期化タイムにおいて、シード値、出力ビットストリームの経路指定選択、およびブロック内でどの関数を使用するかの選択で構成される。ある程度のハードウェア努力により、古典的なブロック内で、シード値の動的ランタイムスイッチング(動的シード関数)および関数選択を追加することができる。この追加努力の利益は、ハードウェア不確定性ランダム値発生器内で、ランダムネスの第3プレーンを可能にすることである。
【0216】
完全動的変異
既に読んだとおり、セッションデータの「仮想」展開を行うことは安価である。2つのランダムアドレスストリームを1つまたは複数のデータプール内で形成すること、およびこれらの位置のコンテンツを交換することは、完全動的変異と称される別のソリューションを表す。変化率が十分に低い場合、全体性能に対する影響が制限されるはずである。
【0217】
高性能設計は、最大のランダムデータ要件を要求する可能性が高い。各メモリサイクルは、全体的な発生器性能にとって極めて重要となり得る。複数のデータプールにロードされる同一セッションデータを有することは、設計に使用可能なメモリ帯幅において主要なブーストをもたらす。設計の異なる部分は、異なるデータプールを使用して、メモリアクセスを同時に重複させる可能性がある。したがって、重複するメモリアクセスは、メモリ帯幅問題を解決する。
【0218】
依然として、メモリ帯幅問題を解決しながら、実際のデータプールシャッフルを完了させることが必要とされ得る。これは、データプールの第2または重複セットにより達成され得る。データプールの第1のセットは、ランダムデータをアクティブに生成するが、第2のセットは、シャッフルされている。一旦シャッフルが完了すると、データ駆動カウントに到達し、「フレッシュな」データプールが切り替えられて、一次データプールになる。ここで、陳腐化したデータプールは、自由にシャッフルされる。このプロセスは、必要に応じて何回でも反復され得る。
【0219】
ハードウェア実施例
これらの実施例のそれぞれは、不確定性ゲノムの特徴の一部を示す実施例を表す。セッションデータをデータパラドックスから保護するために使用される分離プロセスの全範囲を示すよう特に注意する。これらの実施例のそれぞれは、単一の不確定ランダム出力ストリームを生成する。可能性のあるソリューションの数は、複数のランダム出力ストリーム、ランダムにアドレス指定可能なサブストリーム(それらは、ソフトウェア実施例において包含される)、セッションデータの動的展開、複数のデータプール、および仮想カットならびに仮想シャッフルを含む実施例に制限されないため、多くの実施例はここで示されていない。
【0220】
ハードウェア実施例1
データパラドックス問題の大部分は、擬似ランダム関数を使用して、データプールにアドレス指定することに由来する。データならびにアドレスを分離するために、短サイクルプロセス1100aの使用を適用することもできる。図17は、安全なランダムデータストリーム1190を形成するために使用されている、2つの短サイクルプロセス1400aおよび1400bから成る、ハードウェア実施例1を描写する、システムフロー図である。第1の短サイクルプロセス1400aを使用して、アドレス1120aを形成し、データ値をデータプール1150から引き出して、不確定性データ1170を形成する。XOR1180される、データストリーム1120bを形成する第2の短サイクルプロセス1400bを不確定性データ1170と統合することは、不確定性ランダムデータストリーム1190を提供する。
【0221】
原則として、エンジニアリングは、常に、正確なトレードオフを作成することとの闘いである。ハードウェア実施例1の場合、これらのトレードオフを作成して、ハードウェアコストを最小に低減した。支持されるランダムデータ量のサイズは、定義されていない。ランダムネスの第3プレーンである制御プレーンの概念を使用して、古典的なブロック内の関数を選択し、はるかに速い速度の動的シード関数において、シード値をロードする。多くの場合、新しい関数を再選択するための不確定性データを使用する効果は、追加のハードウェアなしに、アドレスを分離するさらに別の手段となる。
【0222】
以下の設計実施例は、それぞれアドレスおよびデータ用の2つの短サイクルブロックを使用する。不確定性(メモリ)および関連グルーのプールを追加して、設計要素を完成させる。この実施例の場合、カウントダウン範囲は、8〜64の値である。短サイクルブロックは、プログラム可能な32ビットLFSRである。各プログラム可能なLFSRは、8つの一意のLFSRと同様に機能する。
【0223】
【数11】
【0224】
出力値あたり、2つの短サイクル(古典的な)ブロックおよび1つのメモリアクセスのみが必要であるが、データプレーン、アドレスプレーン、および制御プレーンという3つのランダムネスのプレーンのすべてがアクティブである。
【0225】
ハードウェア実施例2
短サイクルプロセスをハイブリッドマスクURNGプロセスと対比する場合、後者は、分離プロセスとして、マスク発生器の追加の安全性を利用する。この増大した安全性は、ある程度低い性能に達する(ハイブリッド設計は、3つの短サイクルブロックに対し、より多くの入力値を必要とする)。ハイブリッドマスクプロセスは、ゲートカウントを増大させる、追加のハードウェア要素(短サイクルブロックおよびマスク発生器)を必要とする。幸いなことに、追加の努力は、より安全なランダムデータの生成の増加を達成する。
【0226】
【数12】
【0227】
性能は、短サイクルURNGからわずかに低下するが、いくつかの明らかなアップグレード、追加の不確定データによる仮想カット/シャッフル(追加パラドックス安全性)、短サイクル入力値を読み取るための専用の古典的なブロック(漸増する機能的セッションデータ選択)も適用する。
【0228】
ハードウェア実施例3
「パラドックスセーフ」URNGの目的に達することは、アドレス(定義域値)およびデータ(値域値)の両方から除去される、すべての決定性動作を必要とする。1つの非決定性出力値の生成は、マスクまたはカオスエンジンを使用して、定義域値と値域値とを分離する必要がある。セーフURNGは、極めて大量のランダムデータの生成を可能にする。セーフURNGの1つの重要な利点は、セッションデータに関する緩和要件である。ほとんどすべての検証されたセッションデータは、セーフURNGにより正確に機能する。これは、一意のセッションデータを自動的に生成する、アプリケーションにとって重要であり得る。
【0229】
完全な古典的なブロックは、最大の分化したサイクル長ならびに不確定性プール上の良好なアドレス指定被覆を保証するために必要とされる。これは、設計の任意の部分に対する古典的なブロック出力の経路指定を含む。設計者に委ねられる努力として、初期化をステップオーバーするとき、3つの主要なタスクがある。
【0230】
各URNGの標準概要に従って、ステップ1では、PRNGがアドレスを生成して、不確定性のプールから読み取り、それによって、FIFOにおいてキャッシュされる(先入れ先出し)、生のパラドックスアンセーフ不確定ストリームを生成する。ステップ2は、次に分離されて非決定性データプールアドレスを生成するアドレスを生成するように、複数のPRNGを必要とする。これらのパラドックスセーフアドレス(定義域値)は、不確定性のプールから読み取り、それによって、パラドックスアンセーフデータ(値域値)をそこから生成する。ステップ3において、パラドックスアンセーフデータ(値域値)を分離して、非決定性出力ストリームを生成する。
【0231】
安全なURNG設計全体で、生の不確定データが求められる。そのため、FIFOを構築して、内部使用のために値をキャッシュする。このFIFOを満たすために、1つの古典的なブロックを割り当てて、アドレスを生成し、不確定性のプールから読み取る。明らかに、このFIFOのサイズは、実装依存となる。
【0232】
安全なURNGの一部の変型例は、カオスエンジンを使用する。これらのエンジンは、不確定データを命令として使用する。各不確定メモリアクセスは、一度に複数の命令をフェッチする。したがって、命令に対するメモリ帯幅要求は、読み取られるメモリあたりの命令数に依存する。
【0233】
非決定性メモリアドレス(不確定性関数定義域値)の生成
以下が仮定される。各古典的なブロックは、可能性のあるアドレス範囲の良好な被覆を保証するのに十分長い決定性実行を有する。LFSRの自然なサイクル長に到達することはなく、それによって、値の反復シーケンスを生成する。ある時点で、新しいシードベクトルをロードして、アドレスシーケンスを分割する。これらの新しいシードベクトルは、比較的低い変化率を有する。これらの古典的なブロックの出力を使用して、2つの可能性のあるアドレス分離プロセス、ハイブリッドマスク発生器またはアドレスカオスエンジンのうちの1つをフィードする。
【0234】
ハイブリッドマスク発生器の場合、2つの異なる古典的なブロックは、データ0およびデータ1値を供給する。マスク値は、不確定性ストリームFIFOに由来する。これらの3つの値をマスク発生器に対する入力として使用することは、ハイブリッドマスク発生器を付与する。ここで、我々は、非決定性メモリアドレスを生成する手段を有する。
【0235】
アドレスカオスエンジンの場合、2つの異なる古典的なブロックは、データ0およびデータ1値を供給する。マスク値は、不確定性ストリームFIFOに由来する。次の命令は、不確定性命令ワードから取られる。命令ワードが空の場合、新しい命令ワードは、不確定性ストリームFIFOからフェッチされる。所与の命令を使用して、カオスエンジンに対する入力としてのデータ0、データ1、およびマスク値は、アドレスカオスエンジンを提供する。ここで、我々は、非決定性メモリアドレスを生成する手段を有する。
【0236】
データ分離プロセス(不確定性関数値域値)からの結果の生成
2つの非決定性メモリアドレス(定義域値)を仮定して、データ0およびデータ1(値域値)を不確定性のプールから読み取る。マスク値は、不確定性ストリームFIFOに由来する。これらの3つの値は、2つの方法、データマスク発生器またはデータカオスエンジンのうちの1つにおいて使用される。
1)データマスク発生器の場合:標準分離マスク生成結果を得る。
2)データカオスエンジンの場合:次の命令は、不確定命令ワードから取られる。命令ワードが空の場合、新しい命令ワードは、不確定性ストリームFIFOからフェッチされる。標準的な3つの値、データ0、データ1、およびマスクは、データカオスエンジンにおいて処理され、したがって、分離されたデータ結果を生成する。
【0237】
広範囲のトレードオフを仮定すると、安全なURNGの可能性のある実装は、コストおよび性能の両方において異なる。アプリケーションのニーズに応じて、考慮すべき設計アップグレードがある。すなわち、追加の不確定データに対する仮想カット/シャッフル、時間変位、不確定性のプールの複数コピー、マスク発生器/カオスエンジンの混合および一致等である。
【0238】
ソフトウェア構成要素
伝統的に、少数パーセンテージのソフトウェアのみが、1秒あたり何千回も実行される。この実行率は、高性能ソフトウェアの設計に影響することができ、現に影響する。そのために、可能性のある限り適度に効率的であることに注意しなければならない。この効率性に対する感度は、古いブロック構造プログラミングスタイルとオブジェクトパラダイムとの間の闘いではない。代わりに、両方のスタイルを慎重に混合して、所望の柔軟性ならびに性能を付与する。
【0239】
コンパイラは、ソースをマシン言語に変換する手段をはるかに凌ぐ。すべてのプログラマーは、ランタイムの代わりに、コンパイルタイムにおいてバグを見出すことを評価している。優れたプログラマーは、ドキュメント化ならびに実装の手段として、ソースコードを使用する。このドキュメント化は、後に続き、コードを支持するはずの人々にとって非常に有用である。
【0240】
プログラミングのオブジェクトパラダイムにおいて、抽象化およびそれらの関係は、コンパイルタイム中に定義される場合が多い。抽象化間の関係を結合するコンパイルタイムの破壊、およびそれをランタイム結合と置換することは、確定性から不確定性への必要な切替えを提供する。不確定性データを使用して決定プロセスを駆動することは、より広範囲の不確定性乱数発生器が動的に構成されることを可能にする。制御およびデータプレーンの両方からの革新の利点を獲得することは、任意の時点において、不確定性ランダム値発生器の動的再構成を促進する。このように、クラッカーは、決して、コンパイルしたソースから全体システムをモデル化することができない。
【0241】
ソフトウェアベースの不確定性ランダム値発生器は、動的に構成される、異なるソフトウェアコンポーネントで構築される。動的構成は、そこから選択するコンポーネントの集合を必要とする。明らかに、そこから選択する可能性のあるコンポーネントのより大きいセットは、不確定性の実質的な増加を意味する。したがって、各集合は、任意の可能性のある構成に必要な最小数のコンポーネントを何倍もしたものでなければならない。これは、より多くのコンポーネントが好ましい、すなわち、確定性が低い単純な例である。
【0242】
プログラミングのオブジェクトパラダイムに関する個別の利点は、この哲学を論理的な開始位置とし、不確定性のプールを使用して、ランダム値発生器のランタイムにおいて実装されるプロセス/モジュールを選択する。理想的な設計の柔軟性は、オブジェクトパラダイムオーバーヘッドを支払うことなく、ランタイム関数スイッチングを達成することである。関数結合が、コンパイルタイムではなく、ランタイムにおいて行われることが重要である。このように、クラッカーは、コンパイルソースから全体システムを容易にモデル化することができない。ランタイムオブジェクトに結合する関数を選択するために、プロセスは、データプール(不確定性関数)から駆動されるデータとなる。
【0243】
ここで定義されるソフトウェア構成要素は、オブジェクトベース言語ほど的確ではないが、実際、読み取ることが幾分か困難になる。しかしながら、それらは、不確定性ランダム値発生器をもたらすランタイム結合において非常に有効である。完全なリストではなく、必要な部分のみが説明される。これらのインターフェースは、Cプログラミング言語でドキュメント化される。
【0244】
【数13】
【0245】
以下の仮定は、構成要素を論じる前に作成される。
1)どのソフトウェアアーキテクチャ(すなわち、どの実施形態)が選択されたか。
2)セッション/ソース/出力バッファデータは、既にメモリにロードされている。
3)再シャッフルデータが必要とされる場合、必要に応じて、それもデータプールにロードされている。
【0246】
古典的なランダム関数の表
幸運なことに、ランダム値を生成するための多数の公開されたソフトウェア関数を有する。このソフトウェアセットは、古典的なハードウェア線形フィードバックシフトレジスタ(LFSR)よりも小さいが、以前として、選択すべき良好な関数が多数ある。ハードウェアシフトレジスタをこの表に含め、追加することもできる。表は、ソフトウェア専用関数および/またはシフトレジスタ実装の混合を有する可能性が高い。ソフトウェア実装のための古典的なランダム関数の表は以下を含む。
・線形合同法
・遅延Fibonacci発生器
・Blum Blum Shub
・Fortuna
・Mersenne Twister
・SIMD指向Fast Mersenne Twister
・CryptGenRandom
・Yarrowアルゴリズム
・フリーBSD
・Park−Miller乱数発生器
・反転合同発生器
古典的なランダム関数の表は、ランダム関数ポインタ、関数のサイクル長、および「使用中」フラグの3列の形態をとる。表内の各関数は、それらの「旋律」において次の単一値を生成する。
【0247】
古典的なランダム関数の表と古典的なブロックとの間の差は、マスク発生器を有していないことと、複数のエントリが一度に使用されるという事実を含む。「使用中」フラグは、エントリが割り当てられるたびに設定される。サイクル周期長を使用して、同一サイクル長を有するたった1つの関数がアクティブであることを確認する。不確定性ランダム値発生器のこの例において、「使用中」フラグとサイクル長との間で、分化したサイクル長のみが使用されていることを保証することは容易である。これらの「ステートレス」関数は、内部データを有しないことに留意されたい。それらは、単に現行値を取るだけであり、順番に次の値を生成する。
【0248】
ランダム編集プロセスの表
多数のランダム編集プロセスは、この説明の範囲内で定義される。ランダム編集プロセスの表は、これらの編集プロセスのランタイム実装を保持する。これらも内部データを有しない「ステートレス」関数であることに留意されたい。
これらの汎用編集プロセスは、一般的なツールとして作動し、目標の実施形態を構築する。これらの関数は、必要に応じて、カオスエンジンに動的にインストールされる。古典的なランダム関数の表とは異なり、1つのカオスエンジン内で、同一の編集プロセスの複数例を制御する定義された方針はない。正当な理由が、同一の編集プロセスの一意または複数例のいずれかの使用を支持する。任意の編集プロセスの一意または複数例を実装するか否かを選択することは、設計者次第である。複数例が支持される場合、これらのプロセスを、性能に悪影響を及ぼさない数に制限することに注意しなければならない。
【0249】
擬似ランダム発生器の割り当てルール
古典的な関数の表から擬似ランダム発生器を割り当てる(または再割り当てする)場合、ルールは単純である。アクティブ関数は、不確定性ランダム値発生器のインスタンスあたり1回のみ使用することができる。これらの関数が統計的に割り当てられる場合、各アクティブ関数は、編集プロセスの総ランレングスを最大化するように、異なるサイクル長を有しなければならない。不確定ランレングスを用いて、古典的な関数が動的に割り当てられる場合、2つ以上の擬似ランダム発生器は、同一のサイクル長を用いて割り当てられ得る。この背後にある理由は単純であり、不確定性ランレングスは、自然なサイクル長の前に終了する可能性が高い。明らかに、ランレングスの最後に、擬似ランダム発生器は、割り当て解除され、表に戻される。次に、新しい不確定値を適用して、表から代替の擬似ランダム発生器を選択する。
【0250】
構成(または再構成)プロセスにおいて、不確定値は、既に割り当てられた擬似ランダム発生器を指してもよい。この場合、単に値を破棄して、必要とされる擬似発生器のすべてが選択されるまで、別の値を得る。それらを構成するとき、または割り当てプロセスの最後に、これらの関数をシードしてもよい。すべての可能性のあるランレングスが有用であるとは限らない。したがって、すべてのランレングスは、有用範囲に制限されなければならない。例えば、短すぎるランレングスは、過度のオーバーヘッドを追加し、不確定性のプール上に完全なアドレス指定被覆をもたらすのに失敗する。逆に、長すぎるランレングスは、擬似ランダム発生器の自然サイクル長を超える場合がある。
【0251】
カオスエンジンの編集プロセスの割り当てルール
任意の所与の編集プロセスは、カオスエンジンのインスタンスあたり1回だけアクティブであり得る(多様性は不確定性を追加する)。しかしながら、同一の編集プロセスは、他のカオスエンジンにおいてアクティブであり、不確定性を最大化し得る。
【0252】
各カオスエンジンは、不確定性のプールからロードされるランレングスを有する。明らかに、任意のランレングスの最後に、各編集プロセスは、割り当て解除され、表に戻される。次に、多くの新しい不確定性値を使用して、表から代替の編集プロセスを選択する。一旦カオスエンジンが再構成されると、新しいカオスエンジンランレングスは、不確定性のプールからロードされる。
【0253】
一部のプログラマーは、各カオスエンジンのランレングスに加えて、またはその代わりに、各編集プロセスのランレングスを好む場合がある。
【0254】
不確定性開始値−公的値
この私的値は、ランダムシーケンスを開始するためのキーを表すため、大部分の古典的なランダム関数のシード値は保護されなければならない。この「シークレットキー」値の保護は、一部の場合において課題となる可能性がある。
【0255】
不確定性ランダム値発生器の開始値は、値がデータプールメモリオフセットに過ぎないため、そのような保護を必要としない。保護された値のすべては、データプールへの公的オフセットではなく、データプール自体にある。不確定性ランダム値発生器の初期化プロセスは、データプールメモリオフセット開始値において見出される、データプール値によってシードされる、一時的な古典的な関数で開始する。秘密でない値として、開始値は、リスクなしに誰にも見えるようにすることができる。
【0256】
この一時的な古典的な関数を利用して、データプールを読み取ることによって、すべての他の初期化値は、不確定性のプールから生じる。不確定性ランダム値発生器を構成するために、開始値は、どの初期化値が使用されたかを暗示することはできない。一旦初期化プロセスが完了されると、公的開始値が再度使用されることはなく、一時的な古典的な関数は破棄される。
【0257】
ソフトウェア実施例
制御プレーンを活発に使用して、新しいソフトウェア構成要素を動的に再選択することは、追加の決定性動作を除去する効果を有し、それによって不確定性を追加する。この追加された不確定性がその利点にもたらすオーバーヘッドは比較的小さい。ハードウェアに優るソフトウェアの利点/不利点は、よく認識されている。ソフトウェア実装は、常にハードウェア実装よりも遅いが、はるかに優れた柔軟性を追加する。
【0258】
極めて高性能および/または膨大なランダムデータ要件は、ハードウェア実装を適用する可能性が高いという、以下の仮定を行うことができる。極めて少量のランダムデータ要件は、伝統的なPRNGによって解決され得る。ソフトウェアベースのURNGは、ハードウェア属性を必要としないアプリケーションに最適であるが、依然として、その他のURNG特徴を必要とする。URNGに関して提供されるソフトウェア実施例のすべては、パラドックスセーフであり、したがって、すべての検証されたセッションデータに対して適切に機能する(はずである)。
【0259】
ソフトウェア実施例1
ソフトウェア実施例1、マスクURNGは、マスク発生器を使用して、不確定性関数のアドレス(定義域値)およびデータ(値域値)の両方を分離する。このように、すべてのアドレスおよびデータが非決定性であるため、出力値は、パラドックスセーフである。ハードウェア実施例と同様に、初期化努力は、開発者に委ねられる。以下は、ソフトウェア実施例1の動作を説明するための実例コードである。
【0260】
【数14】
【0261】
【数15】
【0262】
【数16】
【0263】
【数17】
【0264】
【数18】
【0265】
一部の形態において、マスクURNGは、ソフトウェアアプリケーションの最も一般的なソリューションを表す。簡素なPRNGほど高速にはならないが、URNG特徴セットに対して良好な性能を提供する。考慮すべき明らかな設計アップグレードは、追加の不確定データによる仮想カット/シャッフル、および時間変位である。マスクURNGのサイクル長は大きすぎるため、ユーザの生涯において反復する可能性は低い。したがって、カオスURNGは、可能性のあるソフトウェア実施例を完了するように含まれるに過ぎない。
【0266】
ソフトウェア実施例2
ソフトウェア実施例2、カオスURNGは、カオスエンジンを使用して、アドレスおよびデータの両方を分離する。マスクURNGと同様に、すべてのアドレス(定義域値)およびデータ(値域値)は非決定性であるため、出力値は、パラドックスセーフである。ハードウェア実施例と同様に、初期化の努力は、開発者に委ねられる。以下は、ソフトウェア実施例1の動作を説明する実例コードである。
【0267】
【数19】
【0268】
【数20】
【0269】
【数21】
【0270】
【数22】
【0271】
デジタル著作権管理(DRM)
なぜ現行のDRM設計が問題であるかについて多くの理由がある。それが現在設計されているように、それらは問題の一部を解決するに過ぎないため、一応機能しているに過ぎない。現在のDRM設計は、他と良好に相互作用しない一意の独立したソリューションである。現在のDRMは、多くの内部秘密を成功裏に隠すことに依存するため、過度に複雑である。公的ロックベースのDRMを使用することは、私的キーを秘密にしておかなければならないことを意味する。より正確には、保護すべき重大な秘密は、これらの私的キーを隠す方法である。秘密性のニーズは自明であり、現在の技術の脆弱性をもたらす。しかしながら、これと同様の秘密性への依存は、他の企業からの製品またはサービスとの相互運用性もブロックする。どのようにして秘密を共有しながら、依然としてその完全性を維持するのかというこの点は、理解しやすい。
【0272】
重大な秘密を防御することは、DRM設計者とハッカーとの間の激しい競争として説明することができる。公的ロックに対しする私的キーを隠す試みは、DRMの基軸が、単一の魅力的かつ潜在的に壊滅的な標的を表す限り、不完全であることは避けられない。このDRMを攻撃することに関する費用対効果の分析において、秘密を漏出する報酬は、最小リスクおよび関与する相対努力を上回り続けている。ハッカーが重大な秘密を発見するたびに、結果は、すべての音楽を開錠する単一のキーである。
【0273】
現在の技術の弱みから逃れるためには、このゲームの経済性を変更しなければならない。我々は、私的ロックに依存する新しい技術に切り替える。各個人に私的ロックを付与することは、我々が公的キーを使用できることを意味する。したがって、もはやDRM内に公的キーを隠す必要がなくなる。私的ロックが盗まれたとしても、1つのドアのみが開く一方、すべての他のドアはロックされたままである。私的ロックを破るための報酬は、公的ロックと比較して極めて低い。私的ロックを使用することは、盗まれたロックによる損害が自らを制限するものであることを意味する。大きい秘密をクラックすることは、小さい秘密をクラックすることと同じくらい困難であるが、大きい秘密の喪失は壊滅的であることが明らかであるが、数多くあるうちの1つに過ぎない小さい秘密の喪失は、依然として無視できる。
【0274】
私的ロックを用いる別の極めて重要な利点は、それらが完全な相互運用性を支持することである。各ベンダーは、自身のメディアセールスに対して異なる私的ロックを使用することができる。どの時点においても、いかなる者も小さい秘密を超えること知ることはない。この技術は非常に単純であり、同一のハードウェアおよび/またはソフトウェア実装を使用して、一意の小さい秘密ソリューションを各個人に送達する。上述される私的ロックは、本明細書において開示される不確定性ランダム値発生器である。各個人は、自身のメディアを開錠するための独自の私的関数を付与され、各メディアデバイスは、この私的関数が搭載され、すべての自身のメディアの公平な個人使用を可能にする。購入される各メディアには、公的キーが供給され、所有者が、すべてのメディアデバイス上でメディアを開錠、解読することを可能にする。DRMのプロセスは、図22において説明されるMACプロセスと同様に機能する。各ユーザ消費者は、各自の私的関数を有し、一意のキーは、購入される各メディアとともに出荷される。消費者は、それらのメディアデバイスのそれぞれにおいて同一のプライベート関数を有し、メディアを認証および解読する。
【0275】
本明細書において説明される機能、特徴、利点、構造等のうちのいずれかは、1つ以上のモジュールにおいて具体化され得る。本明細書において説明される機能的ユニットの多くは、それらの実装独立をより具体的に強調するために、モジュールとして標識されている。例えば、モジュールは、ハードウェア回路として実装されてもよく、カスタムVLSI回路またはゲートアレイ、論理チップ等の既製の半導体、トランジスタ、または他の個別のコンポーネントを備える。モジュールは、フィールドプログラム可能なゲートアレイ、プログラム可能なアレイ論理、プログラム可能な論理デバイス等のプログラム可能なハードウェアデバイスにおいて実装されてもよい。
【0276】
モジュールは、様々な種類のプロセッサによって実行するために、ソフトウェアにおいて実装されてもよい。プログラム可能または実行可能なコードの識別されたモジュールは、例えば、コンピュータ命令の1つ以上の物理または論理ブロックを備えてもよく、これは、例えば、オブジェクト、手順、または機能として組織化されてもよい。それにもかかわらず、識別されたモジュールの実行可能なものは、物理的に一緒に位置する必要はないが、異なる位置に保存される異なる命令を含んでもよく、これらが論理的に互いに結合されると、モジュールを備え、モジュールに定められた目的を達成する。
【0277】
実際に、実行可能なコードのモジュールおよび/またはプログラムは、単一の命令、または多くの命令であってもよく、異なるプログラムの中で、いくつかの異なるコード区分全体、およびいくつかのメモリデバイスに渡って分布されてもよい。同様に、作動データが識別され、本明細書においてモジュール内で説明される場合があり、任意の適切な形態で具体化されて、任意の適切な種類のデータ構造内で組織化されてもよい。作動データは、単一のデータセットとして収集されてもよく、または異なる記憶デバイス全体を含む、異なる位置全体に分布されてもよく、単なる電子シグナルとして、システムまたはネットワーク上に少なくとも部分的に存在し得る。
【0278】
本明細書において論じられる、様々なシステムコンポーネントおよび/またはモジュールは、以下の、デジタルデータを処理するためのプロセッサを含む、ホストサーバまたは他のコンピューティングシステム、デジタルデータを記憶するための当該プロセッサに連結されるメモリ、デジタルデータを入力するためのプロセッサに連結される入力デジタイザ、当該メモリに記憶され、当該プロセッサによってアクセス可能な、当該プロセッサによってデジタルデータの処理を指向するためのアプリケーションプログラム、当該プロセッサによって処理されるデジタルデータに由来する情報を表示するためのプロセッサおよびメモリに連結される表示装置、および複数のデータベースのうちの1つ以上を含み得る。本明細書において使用される様々なデータベースは、あらゆる形態の圧縮データ、および/または本発明の操作に有用な同様のデータを含んでもよい。当業者に理解されるように、本明細書において論じられる任意のコンピュータは、操作システム(例えば、Windows(登録商標) Vista、NT、95/98/2000、OS2、UNIX(登録商標)、Linux、Solaris、MacOS等)ならびに様々な従来のサポートソフトウェア、および通常コンピュータと関連付けられるドライバを含んでもよい。コンピュータは、家庭またはビジネス環境において、ネットワークへのアクセスを有してもよい。例示的な実施形態において、アクセスは、商業的に入手可能なウェブブラウザソフトウェアパッケージによってインターネットを経由する。
【0279】
本発明は、機能的ブロックコンポーネント、スクリーンショット、ユーザ相互作用、任意選択、様々な処理ステップ等に関して、本明細書に説明され得る。本明細書においてそのように説明されるものはそれぞれ、本発明の例示的な実施形態における1つ以上のモジュールであってもよい。そのような機能的ブロックは、特定の機能を実行するように構成される任意の数のハードウェアおよび/またはソフトウェアコンポーネントによって実現され得ることを理解されたい。例えば、本発明は、様々な集積回路コンポーネント、例えば、メモリ素子、処理素子、論理素子、ルックアップテーブル等を用いてもよく、それらは、1つ以上のマイクロプロセッサまたは他の制御デバイスの制御下、多様な機能を実行し得る。同様に、本発明のソフトウェア素子は、C、C++、Java(登録商標)、COBOL、アセンブラー、PERL、Visual Basic、SQL Stored Procedures、AJAX、拡張マークアップ言語(XML)等の任意のプログラミングまたはスクリプト言語で、データ構造、オブジェクト、プロセス、ルーチン、または他のプログラミング要素の任意の組み合わせで実装されている様々なアルゴリズムを用いて実装されてもよい。さらに、本発明は、データ転送、シグナリング、データ処理、ネットワーク制御等のために任意の数の従来技術を用いてもよいことに留意されたい。なおもさらに、本発明は、Java(登録商標)Script、VBScript等のクライアントサイドのスクリプト言語を用いて、セキュリティ問題を検出または回避し得る。
【0280】
追加的に、本明細書における機能的ユニットおよび/またはモジュールの多くは、他の機能的ユニットおよび/またはモジュールと「連通」していると説明される。「連通」しているとは、コンピュータ、ラップトップコンピュータ、PDA、モジュール、および他の種類のハードウェアおよび/またはソフトウェア等であるが、これらに限定されない、機能的ユニットおよび/またはモジュールが、相互に連通し得る任意の様式および/または方法を意味する。一部の非限定例は、ネットワーク、ワイヤレスネットワーク、ディスクドライブ、メディアプレーヤー、携帯電話、ネットワーク接続、ハードウェアロック、DNAシーケンサ、指紋スキャナ、角膜スキャナ、デジタルカメラ、ソフトウェア、命令、回路、電話線、インターネットライン、衛星シグナル、電気シグナル、電場および磁場、ならびに/またはパルス等を介する、データおよびメタデータの通信、送信、および/または受信を含む。
【0281】
本明細書で使用される場合、「ネットワーク」という用語は、そのようなハードウェアおよびソフトウェアコンポーネントの両方を組み込む、任意の電子通信手段を含んでもよい。本発明に従う関係者間の通信は、例えば、電話ネットワーク、エクストラネット、イントラネット、インターネット、ポイントオブインタラクション装置(販売時点管理装置、パーソナルデジタルアシスタント、携帯電話、キオスク等)、オンライン通信、オフライン通信、ワイヤレス通信、トランスポンダ通信、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、ネットワークまたはリンクされたデバイス等の任意の適切な通信チャンネルを通じて達成され得る。さらに、本発明は、TCP/IP通信プロトコルで実装されてもよいが、本発明は、IPX、Appletalk、IP−6、NetBIOS、OSIまたは任意の数の既存または将来のプロトコルを使用して実装されてもよい。ネットワークが、インターネット等の公的ネットワークの性質を帯びている場合、ネットワークは安全でなく、盗聴者に対してオープンであると仮定することが有利であり得る。インターネットに関連して利用されるプロトコル、基準、およびアプリケーションソフトウェアに関連する特定の情報は、一般に当業者に知られているため、本明細書において詳述する必要はない。例えば、参照することによってその内容が本明細書に組み込まれる、DILIP NAIK,INTERNET STANDARDS AND PROTOCOLS(1998)、JAVA(登録商標) 2 COMPLETE,著者多数(Sybex 1999)、DEBORAH RAY AND ERIC RAY, MASTERING HTML4.0(1997)、およびLOSHIN,TCP/IP CLEARLY EXPLAINED(1997)を参照されたい。
【0282】
上述の好適な実施形態は、本発明の原理の適用に関する例証に過ぎないことを理解されたい。本発明は、その精神または本質的な特徴から逸脱することなく、他の特定形態において具体化され得る。説明される実施形態は、あらゆる点で、限定としてではなく、単なる例証として考慮されるものである。本発明の範囲は、したがって、前述の説明ではなく、添付の請求項によって示される。請求項の等価の意味および範囲内でもたらされるあらゆる変更は、それらの範囲内に包含されるものである。
【0283】
したがって、本発明は、現在、本発明の最も実践的かつ好適な実施形態であると見なされるものに関連して、特異性および詳細とともに完全に上述されたが、請求項において説明されるような本発明の原理および概念から逸脱することなく、サイズ、材料、形状、形態、機能、ならびに操作、アセンブリ、および使用の方法における変化を含むが、これらに限定されない多くの修正を行ってもよいことは、当業者には明らかであろう。さらに、実施形態は、本明細書において説明される機能、特徴、構造、および/または方法のうちの1つ以上から成るか、または本質的にそれを含むことに限定され得ることが意図される。
【特許請求の範囲】
【請求項1】
デバイスにおいて一方向性関数を生成し、それによって、ランダム値ストリームから利益を享受することができる前記デバイスにおいて使用するためのランダム値ストリームを生じさせる方法であって、
a)定義域値に従ってアドレス指定される複数のメモリセルを提供するステップであって、任意の所定定義域値は、すべての可能性のある値域値をマッピングするステップと、
b)前記複数のメモリセルのうちの1つと関連付けられるランダム定義域アドレス値を生成するステップと、
c)前記生成されたランダム定義域値と関連付けられるデータ値を読み取るステップと、
d)ステップb)〜c)を繰り返し、それによってランダム値ストリームを提供するステップと、を含む、方法。
【請求項2】
前記ランダム値ストリームを前記オリジナルメモリセル位置およびデータ値から分離し、それによって非決定性ランダム値ストリームを生じさせるステップをさらに含む、請求項1または26のうちのいずれか1項に記載の方法。
【請求項3】
前記ランダム値ストリームを前記オリジナルメモリセル位置およびデータ値から分離する前記ステップは、ランダム編集プロセスを使用して、分離を提供することを含む、請求項2に記載の方法。
【請求項4】
複数のメモリセルを提供する前記ステップは、
a)追加量のデータを提供することと、
b)疑わしい非ランダム部分を除去し、それによってソースデータを形成することと、
c)最小ランダムネス要件に従って前記ソースデータを検証し、それによって検証されたソースデータを形成することと、
d)前記検証されたソースデータを前記複数のメモリセル位置と統合することと、を含む、動的に強化されたデータを生成することをさらに含む、請求項1、2、3、または26のうちのいずれか1項に記載の方法。
【請求項5】
前記追加量のランダムデータは、圧縮データを含む、請求項4に記載の方法。
【請求項6】
前記検証されたソースデータは、インデックス付きのデータプール内に含まれ、前記検証されたソースデータを前記複数のメモリセル位置と統合する前記ステップは、前記インデックス付きのデータプールを再度インデックス付けすることをさらに含む、請求項4または5のうちのいずれか1項に記載の方法。
【請求項7】
疑わしい非ランダム部分を除去する前記ステップは、ゼロ値部分およびファイル情報を除去することをさらに含む、請求項4、5、または6のうちのいずれか1項に記載の方法。
【請求項8】
前記検証されたソースデータを前記複数のメモリセル位置と統合する前記ステップは、ランダム編集プロセスを使用して、前記検証されたソースデータを編集ストリームで処理することをさらに含む、請求項4、5、6、または7のうちのいずれか1項に記載の方法。
【請求項9】
前記ランダム編集プロセスは、マスキングモジュール、時間変位モジュール、カオスエンジンモジュール、XORモジュール、上書きモジュール、拡張モジュール、除去モジュール、制御プレーンモジュール、およびアドレスプレーンモジュールから成るモジュール群から選択されるモジュールを含む、請求項3に記載の方法。
【請求項10】
前記選択したモジュールは、拡張モジュールであり、前記拡張モジュールは、ノイズチャンクを挿入する、請求項9に記載の方法。
【請求項11】
前記選択したモジュールは、制御プレーンモジュールであり、命令として機能するプログラムデータ値を含む、請求項9または10のうちのいずれか1項に記載の方法。
【請求項12】
動的に強化されたデータを生成する前記ステップは、セッションデータとして使用される、前記検証されたソースデータのサブセットを選択することをさらに含む、請求項4、5、6、7、または8のうちのいずれか1項に記載の方法。
【請求項13】
動的に強化されたデータを生成する前記ステップは、
a)第2の量の擬似ランダムデータを提供することと、
b)請求項4のステップb)〜c)を繰り返し、それによって強化された特徴を有する検証されたソースデータを提供することと、をさらに含む、請求項4、5、6、7、8、または12のうちのいずれか1項に記載の方法。
【請求項14】
ランダム値ストリームから利益を享受することができるデバイスにおいて使用するための、一方向性関数を通じて、前記デバイスにおいて前記ランダム値ストリームを生成する方法であって、
a)検証されたランダム値ストリームを提供するステップと、
b)前記検証されたランダム値ストリームと相関しない、編集ストリームを提供するステップと、
c)前記検証されたランダム値ストリームを前記デバイスの変換モジュールにおいて前記編集ストリームで変換し、それによって分離した非決定性ランダム値ストリームを生成するステップと、を含む、方法。
【請求項15】
検証されたランダム値ストリームを提供する前記ステップは、認められる物理現象と相関する値を生成することを含む、請求項14に記載の方法。
【請求項16】
前記編集ストリームは、ランダム値ストリームを生成するように構成される古典的な関数を含む、請求項14または15のうちのいずれか1項に記載の方法。
【請求項17】
前記変換するステップは、マスキング、時間変位、上書き、拡張、XOR変換、カオスエンジン変換、除去変換、制御プレーン変換、およびアドレス変換から成る変換群から選択される変換を含む、請求項14、15、または16のうちのいずれか1項に記載の方法。
【請求項18】
ランダム値ストリームから利益を享受し得るデバイスによって使用可能なランダム値ストリームを自動的に生成するように構成される、一方向性関数システムであって、
a)メモリモジュールであって、
i)複数のメモリセルと、
ii)それぞれメモリセルと関連付けられる複数の定義域値と、
iii)前記メモリセル内に記憶される複数のランダム値域値であって、任意の所与の定義域値が、すべての可能性のある値域の値をマッピングする、ランダム値域値と、
を備える、メモリモジュールと、
b)前記メモリモジュールの前記定義域値と相関しないランダム値ストリームを生成するように構成される、ランダム編集プロセスモジュールと、
を備える、システム。
【請求項19】
前記一方向性関数システムは、前記メモリモジュールおよび前記ランダム編集プロセスモジュールと連通し、前記ランダム値ストリームを前記オリジナルメモリセル位置およびデータ値から分離し、それによって分離した非決定性ランダムストリームを生成するように構成される、変換モジュールをさらに備える、請求項18に記載のシステム。
【請求項20】
前記ランダム編集プロセスモジュールは、マスキングモジュール、時間変位モジュール、カオスエンジンモジュール、XORモジュール、上書きモジュール、拡張モジュール、除去モジュール、制御プレーンモジュール、およびアドレスプレーンモジュールを含む、モジュール群から選択されるモジュールを含む、請求項18または19のうちのいずれか1項に記載のシステム。
【請求項21】
前記変換モジュールは、再インデックス付けモジュールをさらに含む、請求項19に記載のシステム。
【請求項22】
前記複数のランダム値域値は、処理された圧縮データを含む、請求項18、19、または20のうちのいずれか1項に記載のシステム。
【請求項23】
前記複数のランダム値域値は、物理現象と関連付けられる処理値を含む、請求項18、19、20、または22のうちのいずれか1項に記載のシステム。
【請求項24】
複数の追加ランダム値域値を生成し、それらを前記メモリモジュールに記憶するように構成される動的メモリモジュールをさらに含む、請求項17に記載のシステム。
【請求項25】
前記メモリモジュールは、前記追加のランダム値域値を、追加の定義域値を有する複数の追加メモリセルに記憶し、それによって前記メモリモジュールの前記データプールサイズを増大させる、請求項17または24のうちのいずれか1項に記載のシステム。
【請求項26】
ランダム値ストリームを生成する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記命令は、
a)定義域値に従ってアドレス指定される複数のメモリセルを提供するステップであって、任意の所与の定義域値は、すべての可能性のある値域値をマッピングするステップと、
b)前記複数のメモリセルのうちの1つと関連付けられるランダム定義域アドレス値を生成するステップと、
c)前記生成したランダム定義域アドレス値と関連付けられるデータ値を読み取るステップと、
d)ステップb)〜c)を繰り返し、それによってランダム値ストリームを提供するステップと、
を含む、コンピュータ可読媒体。
【請求項1】
デバイスにおいて一方向性関数を生成し、それによって、ランダム値ストリームから利益を享受することができる前記デバイスにおいて使用するためのランダム値ストリームを生じさせる方法であって、
a)定義域値に従ってアドレス指定される複数のメモリセルを提供するステップであって、任意の所定定義域値は、すべての可能性のある値域値をマッピングするステップと、
b)前記複数のメモリセルのうちの1つと関連付けられるランダム定義域アドレス値を生成するステップと、
c)前記生成されたランダム定義域値と関連付けられるデータ値を読み取るステップと、
d)ステップb)〜c)を繰り返し、それによってランダム値ストリームを提供するステップと、を含む、方法。
【請求項2】
前記ランダム値ストリームを前記オリジナルメモリセル位置およびデータ値から分離し、それによって非決定性ランダム値ストリームを生じさせるステップをさらに含む、請求項1または26のうちのいずれか1項に記載の方法。
【請求項3】
前記ランダム値ストリームを前記オリジナルメモリセル位置およびデータ値から分離する前記ステップは、ランダム編集プロセスを使用して、分離を提供することを含む、請求項2に記載の方法。
【請求項4】
複数のメモリセルを提供する前記ステップは、
a)追加量のデータを提供することと、
b)疑わしい非ランダム部分を除去し、それによってソースデータを形成することと、
c)最小ランダムネス要件に従って前記ソースデータを検証し、それによって検証されたソースデータを形成することと、
d)前記検証されたソースデータを前記複数のメモリセル位置と統合することと、を含む、動的に強化されたデータを生成することをさらに含む、請求項1、2、3、または26のうちのいずれか1項に記載の方法。
【請求項5】
前記追加量のランダムデータは、圧縮データを含む、請求項4に記載の方法。
【請求項6】
前記検証されたソースデータは、インデックス付きのデータプール内に含まれ、前記検証されたソースデータを前記複数のメモリセル位置と統合する前記ステップは、前記インデックス付きのデータプールを再度インデックス付けすることをさらに含む、請求項4または5のうちのいずれか1項に記載の方法。
【請求項7】
疑わしい非ランダム部分を除去する前記ステップは、ゼロ値部分およびファイル情報を除去することをさらに含む、請求項4、5、または6のうちのいずれか1項に記載の方法。
【請求項8】
前記検証されたソースデータを前記複数のメモリセル位置と統合する前記ステップは、ランダム編集プロセスを使用して、前記検証されたソースデータを編集ストリームで処理することをさらに含む、請求項4、5、6、または7のうちのいずれか1項に記載の方法。
【請求項9】
前記ランダム編集プロセスは、マスキングモジュール、時間変位モジュール、カオスエンジンモジュール、XORモジュール、上書きモジュール、拡張モジュール、除去モジュール、制御プレーンモジュール、およびアドレスプレーンモジュールから成るモジュール群から選択されるモジュールを含む、請求項3に記載の方法。
【請求項10】
前記選択したモジュールは、拡張モジュールであり、前記拡張モジュールは、ノイズチャンクを挿入する、請求項9に記載の方法。
【請求項11】
前記選択したモジュールは、制御プレーンモジュールであり、命令として機能するプログラムデータ値を含む、請求項9または10のうちのいずれか1項に記載の方法。
【請求項12】
動的に強化されたデータを生成する前記ステップは、セッションデータとして使用される、前記検証されたソースデータのサブセットを選択することをさらに含む、請求項4、5、6、7、または8のうちのいずれか1項に記載の方法。
【請求項13】
動的に強化されたデータを生成する前記ステップは、
a)第2の量の擬似ランダムデータを提供することと、
b)請求項4のステップb)〜c)を繰り返し、それによって強化された特徴を有する検証されたソースデータを提供することと、をさらに含む、請求項4、5、6、7、8、または12のうちのいずれか1項に記載の方法。
【請求項14】
ランダム値ストリームから利益を享受することができるデバイスにおいて使用するための、一方向性関数を通じて、前記デバイスにおいて前記ランダム値ストリームを生成する方法であって、
a)検証されたランダム値ストリームを提供するステップと、
b)前記検証されたランダム値ストリームと相関しない、編集ストリームを提供するステップと、
c)前記検証されたランダム値ストリームを前記デバイスの変換モジュールにおいて前記編集ストリームで変換し、それによって分離した非決定性ランダム値ストリームを生成するステップと、を含む、方法。
【請求項15】
検証されたランダム値ストリームを提供する前記ステップは、認められる物理現象と相関する値を生成することを含む、請求項14に記載の方法。
【請求項16】
前記編集ストリームは、ランダム値ストリームを生成するように構成される古典的な関数を含む、請求項14または15のうちのいずれか1項に記載の方法。
【請求項17】
前記変換するステップは、マスキング、時間変位、上書き、拡張、XOR変換、カオスエンジン変換、除去変換、制御プレーン変換、およびアドレス変換から成る変換群から選択される変換を含む、請求項14、15、または16のうちのいずれか1項に記載の方法。
【請求項18】
ランダム値ストリームから利益を享受し得るデバイスによって使用可能なランダム値ストリームを自動的に生成するように構成される、一方向性関数システムであって、
a)メモリモジュールであって、
i)複数のメモリセルと、
ii)それぞれメモリセルと関連付けられる複数の定義域値と、
iii)前記メモリセル内に記憶される複数のランダム値域値であって、任意の所与の定義域値が、すべての可能性のある値域の値をマッピングする、ランダム値域値と、
を備える、メモリモジュールと、
b)前記メモリモジュールの前記定義域値と相関しないランダム値ストリームを生成するように構成される、ランダム編集プロセスモジュールと、
を備える、システム。
【請求項19】
前記一方向性関数システムは、前記メモリモジュールおよび前記ランダム編集プロセスモジュールと連通し、前記ランダム値ストリームを前記オリジナルメモリセル位置およびデータ値から分離し、それによって分離した非決定性ランダムストリームを生成するように構成される、変換モジュールをさらに備える、請求項18に記載のシステム。
【請求項20】
前記ランダム編集プロセスモジュールは、マスキングモジュール、時間変位モジュール、カオスエンジンモジュール、XORモジュール、上書きモジュール、拡張モジュール、除去モジュール、制御プレーンモジュール、およびアドレスプレーンモジュールを含む、モジュール群から選択されるモジュールを含む、請求項18または19のうちのいずれか1項に記載のシステム。
【請求項21】
前記変換モジュールは、再インデックス付けモジュールをさらに含む、請求項19に記載のシステム。
【請求項22】
前記複数のランダム値域値は、処理された圧縮データを含む、請求項18、19、または20のうちのいずれか1項に記載のシステム。
【請求項23】
前記複数のランダム値域値は、物理現象と関連付けられる処理値を含む、請求項18、19、20、または22のうちのいずれか1項に記載のシステム。
【請求項24】
複数の追加ランダム値域値を生成し、それらを前記メモリモジュールに記憶するように構成される動的メモリモジュールをさらに含む、請求項17に記載のシステム。
【請求項25】
前記メモリモジュールは、前記追加のランダム値域値を、追加の定義域値を有する複数の追加メモリセルに記憶し、それによって前記メモリモジュールの前記データプールサイズを増大させる、請求項17または24のうちのいずれか1項に記載のシステム。
【請求項26】
ランダム値ストリームを生成する方法を実行するためのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記命令は、
a)定義域値に従ってアドレス指定される複数のメモリセルを提供するステップであって、任意の所与の定義域値は、すべての可能性のある値域値をマッピングするステップと、
b)前記複数のメモリセルのうちの1つと関連付けられるランダム定義域アドレス値を生成するステップと、
c)前記生成したランダム定義域アドレス値と関連付けられるデータ値を読み取るステップと、
d)ステップb)〜c)を繰り返し、それによってランダム値ストリームを提供するステップと、
を含む、コンピュータ可読媒体。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公表番号】特表2011−530719(P2011−530719A)
【公表日】平成23年12月22日(2011.12.22)
【国際特許分類】
【出願番号】特願2011−522225(P2011−522225)
【出願日】平成21年8月5日(2009.8.5)
【国際出願番号】PCT/US2009/052889
【国際公開番号】WO2010/017320
【国際公開日】平成22年2月11日(2010.2.11)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(511031788)キャシー・ホールディングス・リミテッド・ライアビリティ・カンパニー (1)
【氏名又は名称原語表記】CASSY HOLDINGS LLC
【Fターム(参考)】
【公表日】平成23年12月22日(2011.12.22)
【国際特許分類】
【出願日】平成21年8月5日(2009.8.5)
【国際出願番号】PCT/US2009/052889
【国際公開番号】WO2010/017320
【国際公開日】平成22年2月11日(2010.2.11)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(511031788)キャシー・ホールディングス・リミテッド・ライアビリティ・カンパニー (1)
【氏名又は名称原語表記】CASSY HOLDINGS LLC
【Fターム(参考)】
[ Back to top ]