(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-02-28
(54)【発明の名称】高クロック効率乱数生成システムおよび方法
(51)【国際特許分類】
G06F 7/58 20060101AFI20240220BHJP
【FI】
G06F7/58 680
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023549643
(86)(22)【出願日】2022-02-16
(85)【翻訳文提出日】2023-09-27
(86)【国際出願番号】 US2022016587
(87)【国際公開番号】W WO2022177984
(87)【国際公開日】2022-08-25
(32)【優先日】2021-02-16
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2022-02-15
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】511031788
【氏名又は名称】キャシー・ホールディングス・リミテッド・ライアビリティ・カンパニー
【氏名又は名称原語表記】CASSY HOLDINGS LLC
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ロス,パトリック・ディ
(57)【要約】
コンピューティングシステムにおいて乱数のソースから一連の乱数を迅速かつ効率的に生成するシステムおよび方法。ステップは、ランダムデータのソースからのランダムデータを用いてデータループ(インデックスを有する記憶された値のループ状配列)をロードするステップと、次いで、インデックスに関連してデータループから値を読み出すステップと、マルチビット値に対して動作し、それによって導出乱数を出力するステップと、ループ状配列に対してインデックスを移動させるステップと、を含む。データループは、直接メモリアクセス(DMA)によってロードされたシフトレジスタとすることができる単純なフィードバックループとすることができる。演算は、1つまたは複数のデータフィードによって供給されてもよく、XOR、マスク生成器、データMUX、および/またはMODを実行してもよい1つまたは複数の算術論理演算装置(ALU)によって実行されてもよい。
【特許請求の範囲】
【請求項1】
コンピューティングシステムにおいて乱数のソースから一連の乱数を迅速かつ効率的に生成する方法であって、
a.ランダムデータのソースからランダムデータを用いてデータループをロードするステップであって、前記データループは、
i.記憶された値のループ状配列、および
ii.インデックス
を含む、データループをロードするステップと、
b.前記ループ状配列内の前記インデックスの位置に関連して前記データループからマルチビット値を読み出すステップと、
c.前記マルチビット値に対して第1のデータ演算を実行し、それによって前記マルチビット値から導出乱数を導出するステップと、
d.前記ループ状配列に関連して前記インデックスを前記ループ状配列内の異なる位置に移動させるステップと、
e.ステップb~dを繰り返し、それによって一連の導出乱数を生成するステップと、
を含む、方法。
【請求項2】
前記データループはシフトレジスタである、請求項1に記載の方法。
【請求項3】
前記異なる位置は隣接する位置である、請求項1に記載の方法。
【請求項4】
前記ランダムデータの前記ソースは、請求項1に記載の方法の出力である、請求項1に記載の方法。
【請求項5】
前記データループをロードするステップは、直接メモリアクセスによって実行される、請求項1に記載の方法。
【請求項6】
前記第1のデータ演算を実行するステップと同時に、前記マルチビット値に対して第2のデータ演算を実行し、それによって前記マルチビット値から第2の導出乱数を導出するステップをさらに含む、請求項1に記載の方法。
【請求項7】
第2のコンピューティングシステムは、請求項1に記載のステップを、実質的に同一のランダムデータのソースを使用して独立して実行することにより、前記第2のコンピューティングシステムの前記データループが、請求項1に記載の前記データループと同一にロードし、結果として生じる導出乱数が請求項1に記載のものと同じになるように、実質的に同一のデータ演算を実行し、それによって、請求項1に記載の前記一連の導出乱数と同一である第2の一連の導出乱数を生成する、請求項1に記載の方法。
【請求項8】
前記第2のコンピューティングシステムは、データループ、読み出し演算子、シフタ、コントローラタイプ、およびデータループローダのタイプのうちの少なくとも1つにおいて、請求項1に記載のコンピューティングシステムと構造的に異なる、請求項7に記載の方法。
【請求項9】
前記データ演算は、前記マルチビット値を分子とし、前記マルチビット値より少ないビット数の分母で実行されるMOD演算である、請求項1に記載の方法。
【請求項10】
前記分母は、前記ランダムデータのソースから直接得られるか、または導出される値である、請求項9に記載の方法。
【請求項11】
乱数のストリームを効率的に生成するためのコンピュータ化されたシステムであって、
a.データループであって、
i.ランダムデータの単純フィードバックループ状配列、
ii.インデックス、および
iii.前記単純フィードバックループ状配列に対する前記インデックスの相対位置に基づいて前記単純フィードバックループ状配列から値を読み出す出力ポート、
を含むデータループと、
b.データ演算子であって、
i.入力、および
ii.前記データ演算子からの出力値へのアクセスを提供する出力を有し、前記出力ポートからの値が入力値として前記データ演算子に供給されるように前記出力ポートに機能的に結合される、データ演算子と、
c.前記単純フィードバックループ状配列に対して前記インデックスをシフトさせる、前記データループに機能的に結合されたインクリメンタと、
を備える、システム。
【請求項12】
前記データループは入力ポートをさらに含む、請求項16に記載のシステム。
【請求項13】
前記出力ポートからの値はマルチビット値である、請求項16に記載のシステム。
【請求項14】
前記データループはユニバーサルシフトレジスタである、請求項16に記載のシステム。
【請求項15】
第2のデータループであって、前記データ演算子からの出力値が前記第2のデータループに入力されるように、前記データ演算子の前記出力に機能的に結合された入力ポートを有する、第2のデータループをさらに備える、請求項16に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
背景技術
関連出願の相互参照
本発明は、特許協力条約およびパリ条約の下で、2021年2月16日に出願されたPatrick D.Rossに対する米国仮特許出願第63/149,751号および同出願を通じて、2022年2月15日に出願されたPatrick D.Rossに対する米国非仮特許出願第17/672,656号の優先権を主張し、これらの両方は参照により本明細書に組み込まれる。
【0002】
技術分野
本発明は、乱数を生成するための方法およびシステムに関し、具体的には、コンピュータ生成乱数に関する。
【0003】
産業上の利用可能性
本発明は、様々な方法で様々な産業に適用可能である。本発明は、同じハードウェアまたはサードパーティデバイスによって消費され得る乱数のソースとしてコンピュータハードウェア内で使用され得る。本発明は、シリコン堆積技術を含むコンピュータ回路製造技術を利用して製造することができる。
【背景技術】
【0004】
関連技術の説明
コンピューティングシステムおよび演算は、ゲーム、シミュレーション、モデリング、セキュリティ、シーディングなど、およびそれらの組み合わせを含むがこれらに限定されない、様々な目的のために乱数または擬似乱数(ランダムであるように見えるが実際にはランダムではない決定論的な数)を生成および/または利用するために必要とされるときがある。乱数および擬似乱数のストリームは、様々な品質のランダム性を有し、それらの使用のいくつかの用途は、品質の最低基準を必要とする。NIST特別公開800-22は、乱数および擬似乱数生成器のための規格の主要部の一例であり、様々なタイプの非ランダム性についての16の異なるテストを含む、ランダム性、予測不可能性などについて数のストリームをテストするための方法を含む。乱数/擬似乱数ストリームの様々なソースは、特定の品質のストリームを生成し、高品質ストリームは、信頼できる/一貫した品質で生成するおよび/または生成することが特に困難/高価であることが多い。
【0005】
乱数ストリームの物理ソースの例には、電子回路内のノイズ、放射性核の自然崩壊、日付/時間ベクトル、マウスの動き、キーボード押圧間の遅延、およびそれらの組み合わせが含まれる。擬似乱数ストリームのソースの例には、シードPRNG関数(例えば、中二乗法、レーマー生成器、線形合同生成器(LCG)、線形フィードバックシフトレジスタ(LFSR)、非線形フィードバックシフトレジスタ、逆合同生成器(ICG))、暗号アルゴリズム、暗号ハッシュ、およびそれらの組み合わせ(いくつかの非常に複雑な組み合わせを含む)が含まれる。
【0006】
従来、コンピューティングシステムを使用して乱数/擬似乱数のオンデマンドストリームを生成することが知られている。ランダム値ストリームの必要性に応えるために、様々なハードウェア、ソフトウェア、およびハイブリッドシステムが開発されている。この分野ではいくつかの改良がなされている。本発明に関連する参考文献の例は、それ自体の言葉で以下に記載されており、各参考文献の裏付けとなる教示は、参照により本明細書に組み込まれる。
【0007】
TRUE RANDOM NUMBER GENERATORと題する中国特許出願第CN101515228号明細書は、確率的ソースモジュールと後処理モジュールとを備える真の乱数生成器を教示している。確率的ソースモジュールは、ランダムな特性を有するデジタル信号を生成し、デジタル信号を後処理モジュールに提供するために使用される。後処理モジュールがループ符号誤り訂正方法を用いてデジタル信号に対して後処理を行うことにより、データ信号のバイアスを除去して乱数系列が得られる。確率的ソースモジュールは複数組のインバータ発振リングから構成することができ、後処理モジュールは線形フィードバックシフトレジスタ(LFSR)によって実現される。TRNG(真の乱数生成器)は単純な構造を有し、一般的なデジタル論理デバイスのみが使用されるので、真の乱数生成器は良好な技術的に弱い相関を有し、プロトタイプ検証が行われた後に集積回路設計フローに迅速に移植することができ、それによってモジュール設計の効率を改善し、開発リスクを低減する。
【0008】
Carlsonらに発行された米国特許第6,954,770号明細書は、ランダムソースに依存する出力信号を有する発振器と、発振器からの出力信号をサンプリングしてサンプリングされた発振器出力を得るサンプリング装置と、サンプリングされた発振器出力を受信し、LFSRの出力において乱数を提供するためにデジタルゲートを介してサンプリング装置に通信可能に結合された固定周波数クロック駆動線形フィードバックシフトレジスタ(LFSR)とを備える乱数生成器を開示している。さらに、乱数生成器は、LFSRに通信可能に結合されて乱数を読み出し、乱数をアルゴリズムに挿入してロバストな乱数を取得する任意選択の混合関数を備えてもよい。
【0009】
Wanらによる米国特許出願公開第20050036607号明細書は、特定の周期性を有する線形フィードバックシフトレジスタの出力シーケンスをサンプリングすることによって擬似乱数を生成する方法を開示している。一実施形態では、線形フィードバックシフトレジスタを使用した擬似乱数の生成は、複数の線形フィードバックシフトレジスタによって生成された反復出力を周期的に切り替えることによって達成される。一実施形態では、線形フィードバックシフトレジスタによって生成された擬似乱数を暗号化する方法は、非線形演算子を使用することを含む。一実施形態では、擬似乱数をさらに暗号化する方法は、1つまたは複数の変数で動作する関数によって初期値が経時的に変化するハッシュ関数を使用することによって達成される。一実施形態では、線形フィードバックシフトレジスタを使用して擬似乱数を生成するための装置は、デジタルハードウェアを備える。
【0010】
これまでに知られている本発明は、低速であること、非効率であること、ランダム性の品質基準を低下させるかまたは維持しないこと、初期生成サイクルを超える追加のランダム値に対して指数関数的に増加するコストを有すること、ランダム値を生成するために多くのクロックサイクルを必要とすること、決定論的値を生成すること、および実際のランダムストリームを生成することができないことを含む多くの欠点を抱えている。
【0011】
必要とされているのは、本明細書に記載されている1つ以上の問題および/または本明細書に精通すると当業者が注目し得る1つ以上の問題を解決する方法および/またはシステムである。
【発明の概要】
【発明が解決しようとする課題】
【0012】
発明の開示
本発明は、現在の技術水準に応じて、特に、乱数を生成するための現在利用可能な方法およびシステムによってまだ完全には解決されていない当技術分野における問題およびニーズに応じて開発された。したがって、本発明は、乱数を生成するシステムおよび/または方法を提供するために開発された。
【課題を解決するための手段】
【0013】
1つの非限定的な実施形態によれば、コンピューティングシステムにおいて乱数のソースから一連の乱数を迅速かつ効率的に生成する方法がある。本方法は、ランダムデータのソースからのものであり得るランダムデータを用いてデータループをロードするステップであって、データループは、記憶された値のループ状配列およびインデックスのうちの1つまたは複数を含む、データループをロードするステップ、ループ状配列内のインデックスの位置に関連してデータループからマルチビットであり得る値を読み出すステップ、値に対して第1のデータ演算を実行し、それによってマルチビット値から導出乱数を導出するステップ、ループ状配列に関連してインデックスをループ状配列内の異なる位置に移動させるステップ、および/またはこれらのステップのうちの1つまたは複数を繰り返し、それによって一連の導出乱数を生成するステップのうちの1つまたは複数を含む。
【0014】
データループはシフトレジスタであってもよい。シフトレジスタは、ユニバーサルシフトレジスタであってもよい。異なる位置は隣接する位置であってもよい。データ演算は、XOR、マスク生成器、データMUX、URNG、およびMODからなる群から選択され得る分離演算であってもよい。ランダムデータのソースは、本明細書に記載の1つまたは複数の方法/ステップの出力であってもよい。データループをロードするステップは、直接メモリアクセスによって実行されてもよい。データ演算は、マルチビット値を分子とし、マルチビット値より少ないビット数の分母で実行されるMOD演算であってもよい。分母は、ランダムデータのソースから得られる、直接得られる、または導出される値であってもよい。分母は、導出乱数の所望の範囲よりも大きくてもよい。コントローラは、プログラマブル論理回路、スクリプト、およびドライバのうちの1つまたは複数を含むことができる。
【0015】
コントローラに応じて複数の分離演算から分離演算を自動的に選択するステップがあってもよい。第1のデータ演算を実行するステップと同時に、マルチビット値に対して第2のデータ演算を実行し、それによってマルチビット値から第2の導出乱数を導出するステップがあってもよい。さらに、第2の/2次コンピューティングシステムは、第2のコンピューティングシステムのデータループが1次システムのデータループと同一にロードするように、1次コンピューティングシステムとして実質的に同一のランダムデータのソースを使用して本明細書に記載の1つまたは複数のステップを独立して実行し、結果の導出乱数が1次システム/方法によって導出されたものと同じになるように、それと実質的に同一のデータ演算を行い、それによって1次システムの一連の導出乱数と同一である第2の一連の導出乱数を生成することができる。
【0016】
第2のコンピューティングシステムは、データループ、読み出し演算子、シフタ、コントローラタイプ、およびデータループローダのタイプのうちの少なくとも1つにおいて1次コンピューティングシステムと構造的に異なることがあってもよい。
【0017】
別の非限定的な実施形態では、乱数のストリームを効率的に生成するためのコンピュータ化されたシステムがあってもよい。システムは、データループであって、ランダムデータの単純フィードバックループ状配列、インデックス、および/または単純フィードバックループ状配列に対するインデックスの相対位置に基づき得る単純フィードバックループ状配列から値を読み出す出力ポート、のうちの1つまたは複数を含むデータループ、データ演算子であって、入力とデータ演算子からの出力値へのアクセスを提供することができる出力とのうちの1つまたは複数を有し、出力ポートからの値が入力値としてデータ演算子に供給されるように出力ポートに機能的に結合されてもよいデータ演算子、および/または単純フィードバックループ状配列に対してインデックスをシフトさせる、データループに機能的に結合され得るインクリメンタのうちの1つまたは複数を含むことができる。
【0018】
データループは入力ポートをさらに含むことができる。出力ポートからの値はマルチビット値であってもよい。データループはユニバーサルシフトレジスタであってもよい。データループはシフトレジスタであってもよい。データ演算子は、XOR、マスク生成器、データMUX、およびMODからなる群から選択され得る分離演算であってもよい。
【0019】
データ演算子からの出力値が第2のデータループに入力されるように、データ演算子の出力に機能的に結合され得る入力ポートを有し得る第2のデータループも存在し得る。
【0020】
ランダムデータのループ状配列がランダムデータのソースからデータを供給されるように、データループの入力ポートに機能的に結合され得るランダムデータのソースも存在し得る。
【0021】
本明細書を通して、特徴、利点、または同様の文言への言及は、本発明で実現され得る特徴および利点のすべてが本発明の任意の単一の実施形態であるべきであること、または本発明の任意の単一の実施形態であることを意味するものではない。むしろ、特徴および利点に言及する文言は、実施形態に関連して説明される特定の特徴、利点、または特性が本発明の少なくとも1つの実施形態に含まれることを意味すると理解される。したがって、本明細書を通して、特徴および利点、ならびに同様の文言の説明は、必ずしもそうとは限らないが、同じ実施形態を参照することができる。
【0022】
さらに、本発明の記載された特徴、利点、および特性は、1つまたは複数の実施形態において任意の適切な方法で組み合わせることができる。当業者は、特定の実施形態の特定の特徴または利点の1つまたは複数なしで本発明を実施できることを認識するであろう。他の例では、本発明のすべての実施形態には存在しない可能性がある特定の実施形態において、追加の特徴および利点が認識され得る。
【0023】
本発明のこれらの特徴および利点は、以下の説明および添付の特許請求の範囲からより完全に明らかになるか、または以下に記載される本発明の実施によって習得され得る。
【0024】
図面の簡単な説明
本発明の利点を容易に理解するために、上記で簡単に説明した本発明のより具体的な説明は、添付の図面に示されている特定の実施形態を参照することによって提供される。本発明の図面は縮尺通りではないことに留意されたい。図面は単なる概略図であり、本発明の特定のパラメータを描写することを意図していない。これらの図面は、本発明の典型的な実施形態のみを示しており、したがって、その範囲を限定するものと見なされるべきではないことを理解して、本発明は、添付の図面を使用してさらに具体的に詳細を伴って説明および説明される。
【図面の簡単な説明】
【0025】
【
図1】本発明の一実施形態による、乱数のストリームを効率的に生成するためのコンピュータ化されたシステムを示す。
【
図2】本発明の一実施形態による、乱数のストリームを効率的に生成するための主にハードウェアでコンピュータ化されたシステムを示す。
【
図3】本発明の一実施形態による、乱数ストリームを効率的に生成するためのハイブリッドハードウェアでコンピュータ化されたシステムを示す。
【
図4】本発明の一実施形態による、乱数ストリームを効率的に生成するための主にソフトウェアでコンピュータ化されたシステムを示す。
【
図5】本発明の一実施形態による、コンピュータ化されたシステムにおいて乱数を効率的に生成する方法を示すフローチャートである。
【
図6】本発明の一実施形態による、ペア/並列でコンピュータ化されたシステムにおいて乱数を効率的に生成する方法を示すシーケンス図である。
【
図7】本発明の一実施形態による、乱数を効率的に生成するためのコンピュータ化されたシステム内のXOR分離演算の実施を示す。
【
図8】本発明の一実施形態による、乱数を効率的に生成するためのコンピュータ化されたシステム内のマスク生成器またはデータMux分離演算の実施を示す。
【
図9】本発明の一実施形態による、乱数を効率的に生成するためのコンピュータ化されたシステム内のMOD分離演算の実施を示す。
【
図10】本発明の一実施形態による、乱数のストリームを効率的に生成するためのコンピュータ化されたシステムの構成要素の同期動作を示すクロック図である。
【発明を実施するための形態】
【0026】
発明を実施するための形態
本発明の原理の理解を促進する目的で、ここで図面に示されている例示的な実施形態を参照し、特定の文言を使用してこれを説明する。しかし、これによって本発明の範囲を限定することを意図していないことは理解されよう。本明細書に示されている本発明の特徴の任意の変更およびさらなる修正、および本明細書に示されている本発明の原理の任意の追加の適用は、関連技術分野の当業者であって本開示を所有している者が想到するであろうものであり、本発明の範囲内であると考えられるべきである。
【0027】
本明細書を通して、「実施形態」、「例」または同様の文言への言及は、実施形態に関連して説明される特定の特徴、構造、特性、またはそれらの組み合わせが本発明の少なくとも1つの実施形態に含まれることを意味する。したがって、本明細書全体を通して「実施形態」、「例」いう語句、および同様の文言の出現は、必ずしもそうとは限らないが、すべて同じ実施形態、異なる実施形態、または1つもしくは複数の図を指し得る。さらに、2つ以上の特徴、要素などについての「実施形態」、「例」などの表現への言及は、それらの特徴が必ずしも関連している、類似していない、同じであるなどを意味しない。
【0028】
実施形態または実施例の各記述は、各実施形態を特徴付ける類似または同一の文言の使用にもかかわらず、実施形態の他の任意の記述から独立していると見なされるべきである。したがって、ある実施形態が「別の実施形態」として識別される場合、識別された実施形態は、「別の実施形態」という文言によって特徴付けられる他の実施形態とは無関係である。本明細書に記載の特徴、機能などは、特許請求の範囲および/または技術が直接的または間接的に、暗示的または明示的に指示することができるため、全体的または部分的に互いに組み合わせることができると考えられる。
【0029】
本明細書で使用される場合、「含む(comprising)」、「含む(including)」、「含有する(containing)」、「である(is)」、「である(are)」、「によって特徴付けられる(characterized by)」およびそれらの文法的等価物は、追加の列挙されていない要素または方法ステップを排除しない包括的または非限定的な用語である。「含む(comprising)」は、「からなる(consisting of)」および「から本質的になる(consisting essentially of)」より限定的な用語を含むと解釈されるべきである。
【0030】
図1は、本発明の一実施形態による、乱数のストリームを効率的に生成するためのコンピュータ化されたシステム100を示す。データループ120、データ演算子130、および導出乱数利用システム(DRNUS)140に動作可能に結合されたコントローラ110が示されている。データループ120に機能的に結合された乱数ソース150と、データ演算子130に結合された複数のデータフィード160もある。図示のデータループ120は、データ演算子130にも供給され、データ演算子は、導出乱数利用システム140に供給される。DRNUS140は、特定の実施態様に応じて、図示のシステムの一部であってもなくてもよい。
【0031】
図示のコントローラ110は、図示のシステムの様々な部分に対する動作制御を提供する。コントローラは、1つまたは複数のスクリプト、プログラム、制御回路、プロセッサ、バス、メモリ、ネットワークアダプタ、電力システムなどを含むことができ、コントローラは、データループ、データ演算子および導出乱数利用システムとインターフェースし、それらの任意の分析、処理、または構成と共に、それらに命令および/または制御信号を提供することができる。コントローラは、マイクロコントローラ、プラグインボード、ステートマシン、フラッシュコントローラなど、および/またはそれらの組み合わせであってもよい。コントローラは、コントローラ内、データループ内、および/またはそれらの間に具体化され得る、少なくともインクリメンタ125を介してデータループに結合される。コントローラは、増分/減分信号をデータループに送信し、これは、インクリメンタ/デクリメンタ125(本明細書で使用される場合、インクリメンタとデクリメンタとは同義である)を介して、データループのインデックスに、データループのループ状配列に対して位置を移動させる。インクリメンタ125は、シフトレジスタにループに関する値をシフトさせる方法でシフトレジスタに結合されるクロック信号のような単純なものであってもよく、それによって他の構造(例えば、インデックス、入力/出力ポート)に対してその値を移動させる。インクリメンタ125は、どの線がループに能動的に結合されるかを変更する論理回路を含んでもよく、それにより構造体は異なる位置でループに結合される。これは、ゲート信号に従って開または閉のいずれかであるゲート接続を含むことができる。他のものと比較して非常に高価であり、低速であり、困難であり、および/または大きい電力要件を必要とする多くの実装があるため、インクリメンタの正確な実装は、一般に、動作要件および製造制約に従うことになり、そのため、単純なインクリメンタ構造が一般に好ましいことが一般に予想される。
【0032】
したがって、コントローラは、インデックスの相対位置およびそれに対する変更を管理することができる。コントローラは、データ演算子の演算子ライブラリからのアクティブ演算子の選択、変更、改変、アクティブ化、非アクティブ化、駆動などを管理するために、データ演算子に制御信号を送信する。コントローラは、追加の導出乱数についての導出乱数利用システムからの要求を受信し、そのような要求に応答して、データループのアクティビティを駆動し、データ演算子は、要求された要求を満たすために導出乱数を生成する。
【0033】
以下は、コントローラおよびその内部構造の非限定的な予言例である。そのようなコントローラは、導出乱数を必要とするシステムと通信するバスを含むことができる。コントローラは、そのような要求を受信し、内部ドライバを利用して、そのような要求、例えば、いくつの数字が所望されるか、いつ、結果の値に対してどのアドレス/インスタンスが指定されるか、どのフォーマット/サイズ/範囲が要求を満たすのに十分であるかを解釈する。次いで、コントローラは、追加の乱数を生成する前にインデックスを移動させる必要があるかどうかをチェックする回数をカウントするコントローラ内のインデックスエージカウンタをチェックすることができる。エージカウンタが0である場合、インデックスを増分するために制御信号がインクリメンタに送信され、それによってループ状配列に対してその位置を移動させ、次いで、エージカウンタが数(スキーマに従って事前定義されてもよく、または乱数ソースおよび/またはコンピュータ化されたシステム自体の出力から導出され得る乱数であってもよい)にリセットされる。0でない場合、エージカウンタはデクリメントされる。コントローラはまた、演算子エージカウンタをチェックすることができ、そのカウンタが0でない場合はデクリメントすることができるが、0である場合はリセットされ、演算子ライブラリから新しい演算子を選択するための信号がデータ演算子に送信され、これは事前定義されたスキーマまたはランダムなスキーマに従って選択することができる。
【0034】
次いで、コントローラは、データループおよびデータ演算子に信号を送って、一緒に、特定の数のランダム値を生成し、それらを特定のネットワークアドレスで導出乱数利用システムに出力するか、またはそうでなければそれらをDRNUSに利用可能にすることができる。図示のシステムの動作において追加のランダム値が必要とされる場合、DRNUSによって要求されたものに加えてランダム値がコントローラによって順序付けられてもよく、特定の送達アドレス/位置が使用されてもよい。あるいは、コンピュータ化されたシステムは、1つまたは複数のDRNUSの運用時に生成されたランダム値を内部で利用し、それらの値を要求元のDRNUSに送達または他の方法で利用可能にすることによって「ダブルディップ」することができる。非限定的な例として、図示のデータフィード160は、データ演算子の出力が導出されたランダム値を送信し、その後、後続のランダム値を作成する際にデータ演算子によって使用される、ネットワークアドレス位置および/またはメモリ位置であってもよい。さらに、図示のシステムは、乱数ソース150を利用するので、その乱数ソースは、本明細書で説明されるように、図示のデータ演算子の出力および/または乱数を効率的に生成するための別個のコンピュータ化されたシステムの出力であってもよい。
【0035】
図示のデータループ120は、ループ状配列内の特定の位置に関連付けられたインデックス124を有するランダムデータ122の単純フィードバックループ状配列を含む。入力ポート126および出力ポート128もあり、これらを介してデータをループ状配列にインポートすることができ、ループ状配列からエクスポートすることができ、各々がインデックス位置に関連する。そのようなものは、D型フリップフロップ、一般に各データビットに対して1つのフリップフロップを使用して製造され得るシフトレジスタであってもよい。データループはシフトレジスタであってもよい。そのようなシフトレジスタは、限定はしないが、TTL 74LS194、74LS195またはCMOS 4035などのユニバーサルシフトレジスタであってもよい。さらに、多くの集積回路は、チップ(例えば、CPU、GPU、シリアルポート、システムオンチップ「SoC」)の構成要素としてシフトレジスタを含む。
【0036】
図示のランダムデータ122の単純フィードバックループ状配列は、配列をループに構造化するハードウェアメモリ要素である(すなわち、配列の先頭および末尾は互いに隣接している)。さらに、ハードウェアがループの位置に沿ってデータをシフトする能力を含む場合、ループの先頭と末尾との間に単純なフィードバック関係があり、その結果、末尾から先頭に、またはその逆に通過するデータは、そのデータ値を変更することなくそうする。これは、線形または非線形フィードバックシフトレジスタとは異なり、そのようなレジスタのループの先頭と末尾との間を通過するデータ値は線形または非線形プロセスに従って変化する。非限定的な例として、ランダムデータの単純フィードバックループ状配列は、円形シフトレジスタ、円形メモリバッファ、ハードドライブ上の一連のシーケンシャル(実際にはシーケンシャルまたは論理シーケンシャルのいずれか)メモリアドレス位置、ソリッドステートドライブ、フラッシュドライブ、RAM、SRAM、DRAM、Z-RAM、A-RAM、FERAM、CBRAM、PRAM、STT-RAM、SONOS、RRAM、レーストラックメモリ、NRAM、3D XPOINT、ミリピードメモリ、1つまたは複数の様々なハードウェアメモリソースに結合された仮想メモリ、ROM、PROM、EPROM、EEPROMなど、およびそれらの組み合わせとして実装されてもよい。
【0037】
データループのサイズ(すなわち、シリアルビットの数)は、一般に、意図された用途に満足のいく方法で所望の出力を生成することができる十分なサイズである。これは、一般に、データループが予想使用速度と比較して大きくなることを意味する(例えば、データループが大きいほど、乱数ソースからより多くのデータをリロードする必要が生じる頻度は低くなる)。したがって、データループのサイズは、リロード動作が所望の動作速度/効率を著しく損なわないように十分に大きくなるように選択される。
【0038】
図示のインデックス124は、ランダムデータのループ状配列内の特定の位置を指し示す。これは、ループ状配列の先頭と末尾との間の境界を指し示してもよいし、異なる位置を指し示してもよい。ループ状配列が固定されたままである間、インデックス自体が移動可能であってもよく、ループ状配列が配列に沿ってデータをシフトさせている間、インデックスは静止したままであってもよく、または両方が互いに対して移動してもよい。インデックスおよびループ状配列の実際の動き/シフトに関係なく、それらの互いに対する位置関係を変更し、それによってループ状配列によって保持される有効「値」を変更することが可能である。インデックスとループ状配列との間の位置関係を変更することはまた、入力/出力ポートとループ状配列および/またはインデックスとの間の位置関係を変更することもできる。インデックスのハードウェア表現は、ループ状配列の特定のハードウェア環境に応じて変わる。インデックスは、記録メタタグ、ゲート、ラインイン、一意に識別されたメモリセルなど、またはそれらの組み合わせのように単純であってもよく、あるいは、限定はしないが、別個のレコード、コンピュータ化プログラム/スクリプト内のポインタ実装、カウンタなど、またはそれらの組み合わせなどのより複雑な実装であってもよい。
【0039】
非限定的な予測例として、以下は、ループ状配列に対するインデックスの関係によって定義されるように、16ビットループ状配列内に保持されたバイナリ値のストリングであってもよい。単純フィードバックループ状配列の概念を説明するのを助けるために16ビットの例が提供されているが、本明細書に記載の単純フィードバックループ状配列の多くの実用的な実装形態は、数千から数百万ビット以上のループ状配列であると考えられる。
【0040】
1001011110010010
この値は、10進数では38802と表される。この値が単純フィードバックループ状配列において右に1ビットシフトされると、値は次のように変化する。
【0041】
0100101111001001
この新しい値は、10進数では19401と表される。後続の10進数で表される1ビットシフト値は、42468、21234、10617、38076、および19038である。16ビットのループ状配列は、シーケンスを繰り返す前に15回シフトされてもよい。したがって、単純フィードバックループ状配列にロードされた単一の16ビット値は、実際には16個の異なる値であるかのように利用することができる。
【0042】
図示の入力ポート126および図示の出力ポート128は、そこに記憶された値を新しい値に変更することができ、そこに記憶された値をそこから読み出すことができるように、ループ状配列への/からの書き込み/読み出し動作を可能にする。ポートは、単一ビットが変更/読み出されることを可能にする単一ビット書き込み/読み出しポートであってもよい。このような場合、1ビットを変更/読み出した後、ループ状配列をシフトして新たな値をポートにシフトし、その後、そのビットを書き込み/読み出し、その後、ループ状配列全体が書き換え/読み出しされるまで繰り返すことによって、ループ状配列全体を書き換え/読み出してもよい。入力ポートは、一度に複数のビットへの書き込みを可能にする複数ビット書き込みポートであってもよく、ループ状配列のすべてのビットへの書き込み能力を含んでもよい。入力ポートの構造は、ループ状配列のハードウェアに応じて変わる。ループ状配列がシフトレジスタである場合、入力ポートは、入力ポートが書き込むかどうかを判定するためにゲートとのラインインを単に含むことができる。シフトレジスタポート(および他のポート)は、シリアルインシリアルアウト(SISO)ポート、シリアルインパラレルアウト(SIPO)ポート、またはパラレルインシリアルアウト(PISO)であってもよい。
【0043】
図示の乱数ソース150は、真ランダム値および/または擬似ランダム値をデータループに提供する。そのような値は、大気ノイズ、熱ノイズ、無線ノイズ、クロックドリフト、ツェナーダイオードのアバランシェノイズ、光学的混乱、増幅された自然放出ノイズ、外部電磁現象および/または量子現象(例えば、放射性崩壊、宇宙背景放射)、擬似乱数生成器(PRNG)、例えば限定はしないが、線形合同生成器、中二乗法、ワイルシーケンス、レーマー生成器、ラグ付きフィボナッチ生成器、線形フィードバックシフトレジスタ、ウィッチマンヒル生成器、ルール30、逆合同生成器、パークミラー生成器、ACORN生成器、MIXMAX生成器、Add-with-carry、Subtract-with-borrow、Multiply-with-carry、最大周期性往復、KISS、Xorshift、WELL、JSF、ARS、Threefry、Philox、SplitMix、PCG、Xoroshiro128+、64ビットMELG、Squares RNG、およびメルセンヌツイスタアルゴリズムに基づくものなどの物理的なソースから導出することができる。複数の方法を一緒に組み合わせるTRNG9803ハードウェア乱数生成器もある。さらに、ストリーム暗号、ブロック暗号、および暗号ハッシュ関数を含むがこれらに限定されない、ランダム値の非常に高品質のストリームを(高価に)生成するための暗号アルゴリズムがある。アルゴリズムに依存するのではなく、計算的に困難な問題をリンクする手法もあり、これは高品質の値を生成することができるが大きな計算規模であり、ブラム-ミカリアルゴリズム、ブルームブルームシャブ、およびNaor-Reingold擬似ランダム関数を含むがこれらに限定されるものではない。
【0044】
図示の乱数ソース150は、システムに供給されるランダム値を保持するためのメモリ記憶デバイスを含むことができる。それはまた、図示のシステムによって必要とされるようなランダム値を生成するための1つまたは複数のアルゴリズムおよび/または計算演算を実装するためのハードウェアおよび/またはソフトウェアを含むことができる。非限定的な例として、図示のシステムは、それ自体および/または本明細書に記載の別のコンピュータ化されたシステムのためのランダム値を生成するために利用することができる。したがって、本明細書に記載のシステムは、ランダム値の複数のストリームを生成するために、それ自体の様々な実装にデイジーチェーン接続することができる。
【0045】
図示のデータ演算子130は、データループ120の出力を操作し、その出力ポート128に機能的に結合される。データ演算子130は、出力ポート128からの値および複数のデータフィード160からの値を入力134に。入力は、図示の演算子ライブラリ137からアクティブ化されるアクティブ演算子136に機能的に結合される。アクティブ演算子136は、受信した値に対して動作し、結果の値を提供する先の出力138に機能的に結合される。
【0046】
利用することができるデータ演算子は多義的であり、1つまたは複数の算術演算および/またはビット演算を含むことができる。非限定的な例としては、1の加算、2での除算(切り捨てまたは切り上げ)、ビット単位のNOTなどが挙げられる。これらの例は、入力値を入力値から他の何らかの値に変更するデータ演算子の例であり、このようなものは新しい値を生成するのに十分である。その新しい値は、元の値のランダム性品質を維持する場合もそうでない場合もあり、必要な特定の実装に応じて重要である場合もそうでない場合もある。
【0047】
しかしながら、多くの場合、データ演算子が特定の品質を有することは重要および/または価値がある。そのような品質の1つは、データ演算子が結果の出力を入力から分離することであり、これは、入力値が演算子および出力を知ることによって決定できないことを意味する。例として、演算子が1の加算または2での除算であり、演算子(オペランドの1つを含む)が既知であり、結果の値が既知である場合、入力も既知である。例えば、演算子がx+1=yであり、yが既知である場合、xも既知である。対照的に、演算子が加算または除算であるが、他のオペランドが未知のデータフィードから来る場合、出力および演算子を知ることによって入力を決定することはできない(例えば、x+z=yであり、yを知っているが、このことは入力xの値を決定しない)。この分離は、多くの実装形態にとって重要な値を提供する。以下は、分離演算子の非限定的な例であり、入力オペランドは演算子と共に指定されない。2つ以上のオペランド算術加算、減算、除算、Mod;ビット単位のOR、XOR、加算;マスク/MUX動作等およびそれらの組み合わせ。
【0048】
別のデータ演算子品質は、入力から出力までのランダム性品質の保持である。異なる演算子は、入力のランダム性品質を保持/維持または低下させることができる。一般に、データ演算子を用いて出力への入力のランダム性品質を確実に改善することは不可能である。非限定的な例として、入力が出力におけるその値(例えば算術加算1)に対するバイアスを有していない場合であっても、1または0のうちの1つを生成するように経時的に著しいバイアスを有する演算子は、ランダム性品質を低下させる。これは、ランダム性のテストの1つは、出力における実質的に等しい数の1および0をチェックすることであるからである。多くの目的のために、ランダム性品質を低下させることは適切ではない。
【0049】
XOR、Mod、およびMask/MUXは、入力ストリームのランダム性を保持するデータ演算子の例である。特に、そのような演算子は再帰的関数ではなく、したがって順次演算の間に「メモリ」を持たないため、特定の値へのバイアスを持たず、出力ストリーム内でパターンを生成する傾向を持たない。
【0050】
さらに別のデータ演算子品質は、データ演算子が、生成するよりも多くの「ランダム性」を消費するかどうかである。XORおよびMask/MUXは各々、動作するために複数のランダム値ストリームを必要とし、次いでランダム値の単一ストリームを生成する。したがって、生産するよりも多くの値を消費するといえる。対照的に、Mod演算子は、単一の静的除数でランダム値を生成し続けることができ、したがって、単一のランダム値ストリームを生成するために単一のランダム値ストリームのみを消費する。Modが、消費するよりも多くのビットのランダム値を生成することも可能である。したがって、Mod演算子などは、システム内のランダム値の量を維持または乗算する品質を有し、これはいくつかの用途に有益であり得る。
【0051】
図示のデータフィード160は、データループ120からの値の操作に使用するためにデータ演算子130に値を提供する。複数のデータフィード160が示されており、異なるデータフィードの正確な数は実装ごとに異なる。特に、演算子ライブラリ内の様々な演算子は、それらの尊重する値操作を実行するために値の複数の入力を必要とする場合があり、データフィードはそのような値の供給を可能にする。そのようなものは、PRNG関数の出力、不確実な値のプール、ランダム値(例えば、大気ノイズ)のリアルタイムフィード、本明細書に記載されたものと同様のシステムの出力など、およびそれらの組み合わせを含むことができる。データフィードの正確な構成は、特定の実装によって提供される目的および動作上の制約に依存する。データ演算子からの出力値の複製またはペア生成が望まれる非限定的な例として、データフィードは、一般に、正確に再現可能/複製可能な方法(例えばPRNG)で供給されることが要求され、正確に複製可能ではない方法(例えば、大気ノイズ)では供給されないことが要求される。
【0052】
図示の導出乱数利用システム(DRNUS)140は、DRNUSがそこから値を受信することができるように、データ演算子130に機能的に結合される。DRNUS140はまた、コントローラ110に機能的に結合され、それによってそこからの値を要求し、および/またはコントローラ110に要求特性を提供することができる(例えば、値ビット長、値品質、シード値、および/またはこれに限らないが、DRNUSがペアリングされたシステムのものとしてランダム値の複製セットを受信する必要がある状況などの、ランダム値のセットを複製するのに必要な他のメタデータ)。DRNUS140の非限定的な例には、ランダム値を利用するプログラム/システム(例えば、ゲーミングエンジン、ゲーミングデバイス、シミュレーションシステム、ゲーミングシステム、暗号システム、認証器、鍵生成器、圧縮エンジン、拡張回路、ハッシュ回路、ノイズ生成器、統計サンプリングシステムなど、およびそれらの組み合わせが含まれる。したがって、本明細書に記載の実施形態と同様の、乱数のストリームを効率的に生成するためのコンピュータ化されたシステムは、別のそのようなシステムのDRNUSであってもよい。
【0053】
動作中、データループ120は、その入力ポート126を介してランダムソース150から値をロードされる。導出乱数利用システムDRNUS140は、コントローラ110からの値を要求し、この要求は、要求された値に関する詳細を含むことができる。コントローラ110は、データ演算子130のセットおよび/またはデータループのインデックス124に結合されたインクリメンタ125に動作命令を提供することができる。そのような命令は、以下の命令セット(または同様の命令)のうちの1つまたは複数を含むことができ、これは、受信者によって直接実行されてもよく、および/または適切なリソースにさらなる命令を発行することによって間接的に実行されてもよい。
【0054】
- ループ122に関してインデックス124を増分/減分させる
- データループ120から出力ポート128を通ってデータ演算子130の入力への値の出力の開始/終了/変更
- 1または複数のデータフィード160からの値の出力の開始/終了/変更
- アクティブ演算子136の開始/終了/変更
- 演算子ライブラリ137に課される制限を変更する(例えば、どの演算子または演算子のグループが有効な選択であるか)
- 出力138および/または出力ポート128からの値の出力を切り替える
- 出力138および/または出力ポート128からの出力のモードを変更する(例えば、ワードサイズ、値タイプ、例えば2進、3進、10進法)。
【0055】
- 乱数ソース150からデータループ120に値をロードする
- システムのリソース間の接続を終了/開始/変更する(例えば、新しいデータフィードをデータ演算子の入力に結合し、データ演算子の入力に結合されたデータループをスワップアウトし、同じデータループによって供給されるシステムに並列動作データ演算子を追加し、新しいDRNUSに切り替え、既存のDRNUS接続を終了する)。
【0056】
システムは、コントローラ110の命令の下で、データループ120からデータ演算子130に値を供給し、そこでそれらの値が操作され、次いで要求に従ってDRNUSに出力される。一般に、データ演算子によって提供される操作は、データ演算子の出力をデータループの出力から切り離すが、これは常に当てはまるとは限らない。
【0057】
非限定的な例として、アクティブ演算子が単純なNOT演算を実行する場合、出力はデータループのランダム値の品質特性を保持するが、そこから分離はされない。特に、NOT演算は、ビット値を1から0および0から1にフリップする。これは、本質的にその鏡像を作成するので、ストリーム内の1と0の値の比を(逆数として)保存し、ランダム値ストリームを評価する際に、品質は単一比からの「距離」と比較して判断されるので、逆比は非逆比と同じ品質である。しかしながら、データループからの値の鏡像は、それらの値が何であるかのマップを提供する。具体的には、データ演算子の出力およびNOT演算子が使用されたことを知ることにより、データループ値が何であるかを知ることができる。とはいえ、分離が必要でない場合、NOT演算子は、データループにロードされたものとは異なる非常に高速で効率的な出力値を提供する。
【0058】
分離を必要とする目的では、XOR、Mask生成器、データMUX、およびMODの非限定的な演算子タイプが有用である。これらの演算子タイプは、データフィードの使用を必要とし、データループに記憶された値から分離された出力値を生成することができる。特に、演算子が既知であり、出力が既知である場合、データループ内の値は明らかにされない。さらに、データフィードからの値は明らかにされない。したがって、システムのアーキテクチャが既知であっても、データループ内の値のセキュリティは維持される。これは、データループに記憶された値が、一般に明白に破壊不可能であると理解されているワンタイムパッドであるかのように動作することを可能にするので、非常に価値があるが、PRNGは、いかに複雑であっても、明白に破壊可能である。
【0059】
一実施形態によれば、乱数のストリームを効率的に生成するためのコンピュータ化されたシステムがあってもよい。システムは、データループであって、ランダムデータの単純フィードバックループ状配列、インデックス、および/または単純フィードバックループ状配列に対するインデックスの相対位置に基づき得る単純フィードバックループ状配列から値を読み出す出力ポート、のうちの1つまたは複数を含むデータループ、データ演算子であって、入力とデータ演算子からの出力値へのアクセスを提供することができる出力とのうちの1つまたは複数を有し、出力ポートからの値が入力値としてデータ演算子に供給されるように出力ポートに機能的に結合されてもよいデータ演算子、および/または単純フィードバックループ状配列に対してインデックスをシフトさせる、データループに機能的に結合され得るインクリメンタのうちの1つまたは複数を含むことができる。
【0060】
データループは入力ポートをさらに含むことができる。出力ポートからの値はマルチビット値であってもよい。データループはユニバーサルシフトレジスタであってもよい。データループはシフトレジスタであってもよい。データ演算子は、XOR、マスク生成器、データMUX、およびMODからなる群から選択され得る分離演算であってもよい。
【0061】
データ演算子からの出力値が第2のデータループに入力されるように、データ演算子の出力に機能的に結合され得る入力ポートを有し得る第2のデータループも存在し得る。ランダムデータのループ状配列がランダムデータのソースからデータを供給されるように、データループの入力ポートに機能的に結合され得るランダムデータのソースも存在し得る。
【0062】
図2は、本発明の一実施形態による、乱数ストリームを効率的に生成するための主にハードウェアでコンピュータ化されたシステム200を示す。シフトレジスタ220、データ演算子230、および導出乱数利用システム(DRNUS)240に動作可能に結合されたコントローラ210が示されている。データ演算子230に結合された複数のデータフィード260も示されている。図示のシフトレジスタ220は、データ演算子230にも供給され、データ演算子は、導出乱数利用システム240に供給される。DRNUS240は、特定の実施態様に応じて、図示のシステムの一部であってもなくてもよい。
【0063】
図1とは対照的に、シフトレジスタ220に機能的に結合された乱数ソースは存在しない。図示のシフトレジスタは、製造時にロードされ、変化しない。したがって、シフトレジスタは、意図された用途に満足のいく方法で所望の出力を生成することができる十分なサイズである。これは、一般に、シフトレジスタが予想される使用サイクルと比較して非常に大きくなることを意味する。非限定的な例として、デバイスがデバイスの寿命の間に約50万のランダム値の出力を生成すると予想される場合、1万ビット以上のシフトレジスタは予想される使用にはるかに十分であり、したがってさらなるランダム値を供給する必要はない。
【0064】
図示のシフトレジスタ220は、一般に、同じクロックを共有するフリップフロップのカスケードである。各フリップフロップの出力は、チェーン/ループ内の次のフリップフロップの入力に接続される。したがって、回路は、クロック入力の各遷移において、そこに記憶されているビット配列を1つずつシフトする(すなわち、右/左にシフトする)。これは、クロック信号上で、各フリップフロップがその値を次のフリップフロップの入力にシフトする場合に発生する。ここで、シフトレジスタは、配列内の最後のビットが変更または操作なしに配列内の最初のビットの入力にシフトする単純なフィードバックシフトレジスタ(いわゆる循環シフトレジスタ)である。
【0065】
シフトレジスタは、パラレル入力およびシリアル出力の両方(例えば、SIPOおよび/またはPISO構成)を有することができる。図示の出力ポート228は、複数のピン/線を含むことができ、シフトレジスタ内のビットの総数まで、レジスタの各シフトによる複数のビットの同時出力を可能にする。また、配列内の値のさらなる変更を防止するために、図示のシフトレジスタの入力ポート226を製造後に無効化または削除することができる。様々なコンピューティングアプリケーション(例えば、遅延回路、ハードウェアスタック実装、ピン/線が少なすぎるという問題に対するハードウェアソリューション、パルスエクステンダとしてのパラレルおよびシリアルへの/からの出力/入力の変更、および循環メモリ)で使用される典型的なシフトレジスタは、10、100、1000、または10kビット配列程度の大きさであるが、本発明の様々な実施形態で使用されるシフトレジスタは、100k、1M、10M、100M、および/または10億以上はるかに大きくてもよいと考えられる。
【0066】
図示のコントローラおよびデータ演算子はハードウェアデバイスでもあり、
図2は、乱数のストリームを効率的に生成するための完全にハードウェアシステムを表すことができる。そのような例では、演算子ライブラリ237は、一度にただ1つ(または他の方法では制限された量)しかアクティブにならないようにゲート制御される演算子回路(例えば、XOR、MUX、MOD、マスク生成器)の配列を含むことができ、各々が同様にゲート制御/出力への制限されたアクセスを有する。データフィード260は、ハードウェアPRNG生成器および/または内部に記憶されたランダム値を有するメモリ構成要素(例えば、遅延回路、循環メモリ)を含むがこれらに限定されないハードウェア乱数生成器を含むことができる。
【0067】
図3は、本発明の一実施形態による、乱数ストリームを効率的に生成するためのハイブリッドハードウェアでコンピュータ化されたシステム300を示す。図示のシステムは、シフトレジスタ、データ演算子、および導出乱数利用システム(DRNUS)に動作可能に結合されたコントローラを含む。直接メモリアクセス(DMA)304を介してシフトレジスタの入力ポート326に機能的に結合されたメモリ構成要素302も存在する。データ演算子に結合された複数のデータフィードがある。図示のシフトレジスタはデータ演算子130にも供給され、データ演算子は、導出乱数利用システムに供給される。DRNUSは、特定の実施態様に応じて、図示のシステムの一部であってもなくてもよい。
【0068】
図示のメモリ構成要素は、コンピュータまたは関連するハードウェアデバイスで使用するための情報を記憶するために使用されるデバイスである。これは、典型的には、半導体メモリデバイス、多くの場合、データがシリコン集積回路チップ上のメモリセル内に記憶される金属酸化膜半導体(MOS)メモリである。これは、RAM、DRAM、SRAM、キャッシュメモリ、ROM、PROM、EPROM、EEPROM、テープドライブメモリ記憶装置、ハードドライブメモリ記憶装置、フロッピー(登録商標)ディスクメモリ記憶装置、CD/DVD/光ディスク記憶装置、揮発性/不揮発性/半揮発性メモリ、FERAM、CBRAM、PRAM、STT-RAM、SONOS、RRAM(登録商標)、レーストラックメモリ、NRAM、3D XPoint、仮想メモリ、および/またはミリピードメモリ、および/またはそれらの組み合わせとして実装されてもよい。図示のメモリ302は、ランダム値を含み、DMA304を介してシフトレジスタに機能的に結合されている。
【0069】
図示のDMA304は、CPUから独立したメモリアクセスを可能とする。したがって、図示のシステムは、CPUサイクルを待機または占有する必要なく、図示のシフトレジスタに新しい値をオンデマンドでロードするように動作することができる。これは、DRNUSが利用可能なCPUサイクルを利用しており、CPUのリソースへの図示のシステムによる侵入がDRNUS内の減速または遅延を引き起こす場合に特に重要である。DMAでは、CPUは通常、最初に転送を開始し、次に転送が進行している間に他の動作を行い、動作が完了したときにDMAコントローラ(DMAC)から最終的に割り込みを受信する。サードパーティDMAとも呼ばれる標準DMAは、DMAコントローラを使用する。DMAコントローラは、メモリアドレスを生成し、メモリ読み出しサイクルまたはメモリ書き込みサイクルを開始することができる。これは、CPUによって書き込みおよび読み出し可能ないくつかのハードウェアレジスタを含む。これらは、メモリアドレスレジスタ、バイトカウントレジスタ、および1つまたは複数の制御レジスタを含む。
【0070】
DMAコントローラが提供する機能に応じて、これらの制御レジスタは、ソース、宛先、転送の方向(I/Oデバイスからの読み出しまたはI/Oデバイスへの書き込み)、転送ユニットのサイズ、および/または1つのバーストで転送するワード/バイト数のいくつかの組み合わせを指定することができる。入力、出力、またはメモリ対メモリ動作を実行するために、ホストプロセッサは、DMAコントローラを、転送するワード数/バイト数/ブロックサイズのカウントと、使用するメモリアドレスで初期化する。次いで、CPUは周辺機器にデータ転送を開始するよう命令する。その後、DMAコントローラは、アドレスおよび読み出し/書き込み制御線をシステムメモリに提供する。周辺デバイスとメモリとの間で1バイトのデータが転送される準備が整うたびに、DMAコントローラは、データの全ブロックが転送されるまでその内部アドレスレジスタを増分する。
【0071】
図4は、本発明の一実施形態による、乱数ストリームを効率的に生成するための主にソフトウェアコンピュータ化されたシステム400を示す。メモリ420内のデータループ、データ演算子、および導出乱数利用システム(DRNUS)に動作可能に結合されたコントローラが示されている。データ演算子に結合された複数のデータフィードも存在する。メモリ420内の図示のデータループは、データ演算子にも供給され、データ演算子は、導出乱数利用システムに供給される。DRNUS140は、特定の実施態様に応じて、図示のシステムの一部であってもなくてもよい。
【0072】
メモリ420内の図示のデータループは、限定はしないが、メモリコントローラを介して管理することができ、仮想メモリの本体および/またはさらには1つまたは複数のスワップファイル、キャッシュ、データベースおよび/またはさらには1つまたは複数の連合データベースを含むことができる、本明細書に記載のものなどの1つまたは複数のメモリデバイス/構造を含む。メモリ420内のデータループは、メモリ「セル」の内容が一方向または他方向にシフトされ得るように、および/またはメモリ「セル」の内容の順序は不変のままであるがインデックスがメモリ「セル」の配列に対してシフトされ得るように、インデックスに関連付けられたメモリのループ状配列を形成するように互いに関連する物理的および/または仮想的なメモリセルの論理的配置を含む。論理的配置は、スクリプト、ポインタのシステム、データ配列/行列など、およびそれらの組み合わせによって管理/制御することができる。
【0073】
図5は、本発明の一実施形態による、コンピュータ化されたシステムにおいて乱数を効率的に生成する方法を示すフローチャートである。コンピュータ化されたシステム500において乱数を効率的に生成する図示の方法は、データループをロードするステップ510と、その後、データループから値を読み出すステップ520と、ここで、現在の分離演算は「stale」であり、分離演算を選択するステップ530と、その後、読み出された値に対して実行される分離演算と、それによって出力値を生成するステップ540と、その後、データループのインデックスが移動され550、プロセスは、データループから値を読み出すステップ520にループバックする。有利には、データループ内に記憶された単一のn桁ランダム値を利用して、そこから多数(≧n)の分離されたランダム値を効率的に生成することができる。
【0074】
データループをロードする図示のステップ510は、データ記憶ユニット(例えば、メモリセル、ビットレジスタ、データラッチ、およびフリップフロップ)のループ状配列内の記憶された値としてビット値を設定する。ロードは、連続的/順次におよび/または並列に、またはそれらの組み合わせで達成することができる。ロードは、データループの製造時に行われ得る。これは、ランダム値を生成するための関連する装置/システムの動作中にリアルタイムで行われ得る。データ記憶ユニットに対して書き込み動作を実行することを可能にするためにゲートされ得る1つまたは複数の入力線が存在し得る。分離ステップの結果のランダム性の品質は、一般に、データループ内の値のランダム性の品質に大きく依存し、ロードするステップのためのロード値をどこで/どのように調達するかに関して、すなわち、データループがロードされるランダムデータのソースが、出力値に対して意図される所望のランダム性品質以上のランダム性の品質を有することに関して選択的であることが適切である。
【0075】
データループから値を読み出す図示のステップ520は、一般に、データループのデータ記憶ユニットから、(データ記憶ユニットに対するインデックスの相対位置に関連して)連続した一連のビットとして、マルチビット値を読み出すステップを含む。読み出しは、ビットごとの読み出しとして行われてもよく、および/または複数のビットが同時に(例えば、特定のデータ記憶ユニットと機能的に通信する複数の並列ゲート線を介して)読み出され得る並列読み出しとして行われてもよい。さらに、複数のマルチビット値は、同じデータループから同時に読み出すことができ、読み出し構造は、同じデータループの異なる部分(例えば、データループのデータ記憶ユニットの2つの非同一のセットに機能的に結合されたゲーテッド赤色線の2つの異なる配列)からの同時読み出しを可能にする。読み出し値のサイズがデータループのサイズに等しい(例えば、データループは100万個の順次に配置されたデータ記憶ユニットを含み、読み出し値は100万ビット長である)場合もあれば、読み出し値のサイズがデータループのサイズより小さい(例えば、データループは100万個の順次に配置されたデータ記憶ユニットを含み、読み出し値は5万ビット長である)場合もある。読み出された値として、その値は、それに対して実行される動作にアクセス可能にするようにシステム/デバイスによって保持/記憶される。
【0076】
分離演算を選択する図示のステップ530は、システム/デバイスによって保持/記憶されている読み出し値に対して動作することができるように「アクティブ」にするために、それによって利用される1つまたは複数の分離演算および/またはパラメータ(ならびに、そのような分離演算および/またはパラメータを実装する関連する物理的構造/プログラミング)を条件付きで決定すること(たとえば、スクリプトの動作、ランダム選択、サードパーティデバイスによる指示、関連デバイス/システムの設置/製造中の設定、コントローラからの指示による)を含む。関連する構造/プログラミングを「アクティブ」にすることは、選択された分離演算を実行するように機能するトランジスタ、フリップフロップ、チップ、チップセットなどのセットに対して1つまたは複数のゲート入力線をアクティブ化することを含むことができ、それにより、読み出し値を処理のために構造に入力することができる。分離演算がソフトウェア構成要素を含む場合、アクティブ化は、選択された分離演算を実行する関数またはソフトウェアモジュールを呼び出すことを含むことができる。
【0077】
この分離演算を選択するステップ530は、図示の方法のサイクル毎に行われ得るが、一般に、新たな分離演算子および/またはパラメータはあまり頻繁には必要とされないことが予想される。非限定的な例として、長さnの負荷値が適度な品質のランダム性を有する場合、図示の方法を動作させている装置/システムは、出力に現れるパターンを繰り返すリスクが生じる前に、分離演算子またはそれと共に使用されるパラメータをn回変更することなく、同じ分離演算子を使用し続けることができる。したがって、一般に、この選択するステップ530は、特にデータループが大きい場合、図示のステップのほとんどのサイクルでは発生しない可能性が高いと予想される。実際、いくつかの実装形態(例えば、データループのサイズと比較して、データループが大きく、システムの実際の利用/ライフサイクルが小さい場合)では、分離演算を選択するステップは、装置/システムの製造中に1回だけ行われてもよく、その後に変更されることはない。
【0078】
読み出し値を分離する図示のステップ540は、読み出し値に対して選択された分離演算を実行し、それによって読み出し値から分離された新しい値の形態で出力を生成することを含む。そのような分離は、選択された分離演算のハードウェアおよび/またはソフトウェア構造によって実行される。非限定的な例として、分離演算がXOR演算である場合、それは、CMOS XORゲート、MOSFET XOR(例えば、パストランジスタ論理を使用する)、XNORゲートに続くNOTゲートなど、および/またはそれらの組み合わせを含むことができる。
【0079】
複数の動作が選択される場合、分離するステップは複数回実行されてもよく、これは並行して行われてもよい。したがって、単一の読み出し値は、読み出し値から分離された複数またはさらに多数の出力値をもたらすことができる。分離されたランダム値の供給が、関連するシステムのクロックレートの大きさのレートで望まれる場合、複数の並列分離演算のこの特徴を利用して、出力値を生成している装置/システムのクロックレートと出力値を所望する装置/システムとの間の著しい不整合を補正することができる。
【0080】
データループのインデックスを移動させるステップ550は、データループのデータ記憶ユニットのループ状配列に対してインデックスの位置を変更するステップを含む。これは、データ記憶ユニット内のすべての記憶された値を1つの方向に1つまたは複数の位置だけシフトすることを含むことができる。これは、データループの周りの1つの位置でアクティブなインデックス構造を非アクティブ化することと、データループの周りの異なる位置に関連付けられたインデックス構造をアクティブ化することとを含むことができる。これは、データループの周りでインデックス値をシフトすることを含むことができ(例えば、データループのペアのセットの場合、第1は記憶された値のループ状配列用であり、第2は第1に外接するか、そうでなければ第1と構造的に並列であり、インデックスマーカを保持するように作用し、これは第2のループの周りでシフトし、それによって第1のループの周りのインデックスの現在位置を識別する単一のビット値(例えば、1であり、残りはすべて0である)であり得る。読み出しステップ520がインデックスに関連して行われると、インデックスを移動させることにより、次の読み出し値が前の読み出し値と比較して著しく異なる(記憶された値が十分にランダムである)新しい値に変更される。
【0081】
1つの非限定的な実施形態によれば、コンピューティングシステムにおいて乱数のソースから一連の乱数を迅速かつ効率的に生成する方法がある。本方法は、ランダムデータのソースからのものであり得るランダムデータを用いてデータループをロードするステップであって、データループは、記憶された値のループ状配列およびインデックスのうちの1つまたは複数を含む、データループをロードするステップ、ループ状配列内のインデックスの位置に関連してデータループからマルチビットであり得る値を読み出すステップ、値に対して第1のデータ演算を実行し、それによってマルチビット値から導出乱数を導出するステップ、ループ状配列に関連してインデックスをループ状配列内の異なる位置に移動させるステップ、および/またはこれらのステップのうちの1つまたは複数を繰り返し、それによって一連の導出乱数を生成するステップのうちの1つまたは複数を含む。
【0082】
データループはシフトレジスタであり、これは単純なフィードバックシフトレジスタであり得、「単純なフィードバック」とは、シフトレジスタが増分するにつれてデータは操作されないが、代わりに値がレジスタを通ってシフトするとき、特に「末尾」からレジスタの「先頭」に戻る値については一定のままであることを意味する。そのようなものは、D型フリップフロップ、一般に各データビットに対して1つのフリップフロップを使用して製造することができる。シフトレジスタは、それだけに限らないが、TTL 74LS194、74LS195またはCMOS 4035などのユニバーサルシフトレジスタであってもよく、および/またはより大きな集積回路(例えば、CPU、GPU、シリアルポート、SoC)の一部として含まれてもよい。異なる位置は隣接する位置であってもよい。データ演算は、XOR、マスク生成器、データMUX、およびMODからなる群から選択され得る分離演算であってもよい。ランダムデータのソースは、本明細書に記載の1つまたは複数の方法/ステップの出力であってもよい。データループをロードするステップは、直接メモリアクセスによって実行されてもよい。データ演算は、マルチビット値を分子とし、マルチビット値より少ないビット数の分母で実行されるMOD演算であってもよい。分母は、ランダムデータのソースから得られる、直接得られる、または導出される値であってもよい。分母は、導出乱数の所望の範囲よりも大きくてもよい。コントローラは、プログラマブル論理回路、スクリプト、およびドライバのうちの1つまたは複数を含むことができる。
【0083】
コントローラに応じて複数の分離演算から分離演算を自動的に選択するステップがあってもよい。第1のデータ演算を実行するステップと同時に、マルチビット値に対して第2のデータ演算を実行し、それによってマルチビット値から第2の導出乱数を導出するステップがあってもよい。さらに、第2の/2次コンピューティングシステムは、第2のコンピューティングシステムのデータループが1次システムのデータループと同一にロードするように、1次コンピューティングシステムとして実質的に同一のランダムデータのソースを使用して本明細書に記載の1つまたは複数のステップを独立して実行し、結果の導出乱数が1次システム/方法によって導出されたものと同じになるように、それと実質的に同一のデータ演算を行い、それによって1次システムの一連の導出乱数と同一である第2の一連の導出乱数を生成することができる。
【0084】
第2のコンピューティングシステムは、データループ、読み出し演算子、シフタ、コントローラタイプ、およびデータループローダのタイプのうちの少なくとも1つにおいて1次コンピューティングシステムと構造的に異なることがあってもよい。非限定的な例として、第2のコンピューティングシステムは、第1のコンピューティングシステムがインデックス構造をアクティブ化および非アクティブ化し、それによってインデックス値をシフトする間に、ループ状配列内の記憶された値をシフトするシフタを使用することができる。別の非限定的な例として、第2のコンピューティングシステムは、そのデータループとしてユニバーサルシフトレジスタを利用することができ、第1のコンピューティングシステムは、ハードドライブに保存されたデータを使用して形成された仮想データループを利用することができる。さらに別の非限定的な例として、第2のコンピューティングシステムはDMAを利用することができるが、第1のコンピューティングシステムはDMAを利用しない。さらに別の非限定的な例として、第2のコンピューティングシステムは、RAMに記憶されたスクリプトを有するコントローラを有することができ、第1のコンピューティングシステムは、そのスクリプトをROMに記憶する純粋なハードウェアコントローラを有する。これらの例の各々は、異なる特定の構造的実施態様を有しながら、同一のランダム値のセットを生成することができる第1および第2のコンピューティングシステムを示している。
【0085】
図6は、本発明の一実施形態による、ペア/並列でコンピュータ化されたシステムにおいて乱数を効率的に生成する方法を示すシーケンス図である。図示のコンピュータ化されたシステムは各々、それぞれのデータループ(それぞれ、データループ1およびデータループ2)に機能的に結合されたそれぞれの分離演算子(それぞれ、分離演算子1および分離演算子2)に機能的に結合されたコントローラ(コントローラ1およびコントローラ2)を含む。図示の例では、2つのコンピュータ化されたシステムは、ペアリングされたシステム(すなわち、それらの構造は、図示の乱数ソースから同一の入力値が提供された場合に同一の出力ストリームを生成するように十分に同一である)と呼ぶことができる。2つのコンピュータ化されたシステムは、代替的または追加的に、並列システムであると言うことができる(すなわち、それらの構造は、図示された乱数ソースから同一の入力値が提供された場合に異なる出力ストリームを生成するのに十分な差を含む)。特に同じシステム内で複数の分離演算子を同時に使用する場合、2つのシステムがペアおよび並列の両方であることも可能であり、2つのシステム間で同一のストリームが生成され、2つのシステム間で同一ではない1つまたは複数の他のストリームが生成される。したがって、単一の乱数ソースは、ペア/並列方式で出力を生成するために、所望に応じて複数のシステムにわたって効率的に利用することができる。
【0086】
図示の例では、乱数ソースからの値が各システムのデータループにロードされる610。次に、データループが読み出される630各システム内でループ動作620が実行され、コントローラが、分離演算子および/またはそのパラメータが変更されるべきかどうかを判定し640、そのような変更が生じた場合、分離演算子は次に読み出し値に対して動作し650、そのような動作の結果が出力として提供され、データループのインデックスがシフトされ660(例えば、増分される)、次いでループが繰り返され、それによって分離された値のストリームが生成される。
【0087】
図7は、本発明の一実施形態による、乱数を効率的に生成するためのコンピュータ化されたシステム内のXOR分離演算の実施を示す。図示のXOR分離演算700は、データ演算子(
図1参照)の演算子ライブラリから選択されたアクティブ演算子として示されており、したがってデータ演算子の入力に機能的に結合されている。XOR分離演算700は、その入力のうちの1つとしての読み出し値710と、データフィードからの第2の入力720とを受信する。XOR演算子730があり、これは論理ゲートのセット、ソフトウェアXOR関数など、またはそれらの組み合わせであり得る。そのようなものは、CMOS XORゲート、MOSFET XOR(例えば、パストランジスタ論理を使用する)、XNORゲートに続くNOTゲートなど、および/またはそれらの組み合わせを含むことができる。XOR演算子730は、各々が単一のビットに対してXOR演算を実行することができるが、共に読み出し値710のビットの多くまたはすべてに対してXOR演算を同時に実行することができる複数の論理ゲートセットを含むことができる。XOR演算子740の出力は、データ演算子の出力に機能的に結合され、その結果、1つまたは複数のDRNUS(
図1参照)に所望に応じて提供され得る。
【0088】
図8は、本発明の一実施形態による、乱数を効率的に生成するためのコンピュータ化されたシステム内のマスク生成器またはデータMux(マルチプレクサ)分離演算(マスク/MUXセレクタ/演算子)の実装を示す。明確にするために、マスク演算子/生成器は、データMUXのソフトウェア実装である。図示のマスク/MUXセレクタ800は、データ演算子(
図1参照)の演算子ライブラリから選択されたアクティブ演算子として示されており、したがってデータ演算子の入力に機能的に結合されている。マスク/MUXセレクタ800は、その入力のうちの1つとしての読み出し値810と、データフィードからの第2の入力820および第3の入力830とを受信する。マスク/MUX演算子850があり、これは論理ゲートのセット、ソフトウェアマスク/MUX関数など、またはそれらの組み合わせであり得る。これは、1つまたは複数のマルチプレクサ/データセレクタを含むことができる。
【0089】
図示のMask/MUX演算子はセレクタと呼ばれ、これは、ループ状配列からの読み出し値のビット値が、結果のビット値がデータフィードからの第1の入力(データ0)から選択されるか、データフィードからの第2の入力(データ1)から選択されるかを選択する「セレクタ」として機能するためである。読み出された値のビット値が0である場合、対応するデータ0内のどのような値も出力値となり、データ1内のビット値は無視されて使用されない。読み出された値のビット値が1である場合、対応するデータ1内のどのような値も出力値となり、データ0内のビット値は無視されて使用されない。このようなものは、読み出し値の0/1ビット値に基づいてデータ0とデータ1の入力線を切り替えるスイッチングゲート(または多数のスイッチングゲートの配列)としてハードウェアに実装されてもよい。
【0090】
マスク/MUX演算子850は、各々が単一ビットに対してマスク/MUX演算を実行することができるが、共に読み出し値810のビットの多くまたはすべてに対してマスク/MUX演算を同時に実行することができる複数の論理ゲートセットを含むことができる。マスク/MUX演算子850の出力840は、データ演算子の出力に機能的に結合され、その結果、1つまたは複数のDRNUS(
図1参照)に所望に応じて提供され得る。
【0091】
図9は、本発明の一実施形態による、乱数を効率的に生成するためのコンピュータ化されたシステム内のMOD分離演算の実施を示す。図示のMOD分離演算900は、データ演算子(
図1参照)の演算子ライブラリから選択されたアクティブ演算子として示されており、したがってデータ演算子の入力に機能的に結合されている。MOD分離演算900は、その入力のうちの1つとしての読み出し値910と、データフィードからの第2の入力920とを受信する。MOD演算子930があり、これは、CPU、SoC、GPU、または他の計算集積回路、論理ゲートのセット、ソフトウェアMOD機能など、またはそれらの組み合わせであり得る。MOD演算子が単一のシステムクロックサイクルでmod演算を実行することができない場合、CPUは、MOD演算子がその演算を完了して出力を生成するまで、システムの1つまたは複数の他の構成要素を保留状態にすることができる。
【0092】
MOD演算子930は、一般に、モジュロを出力するために以下の演算を実行するプログラミング/回路を含む。
【0093】
- 分子を決定する
- 分母を決定する
- 分子を分母で除算し、切り捨て、それによって商を決定する
- 分母に商を乗算し、積を求める
- 分子から積を減算し、それによってモジュロを決定する
他の操作を使用してモジュロを生成するための特殊な技術があり、これを使用することができ、それらの関連する制限条件はシステムの文脈内で満たされる(例えば、特定のタイプ/サイズ/関係の分子または分母)。非限定的な例として、システムは、分子を、分子の丸め積である第1の数と、元の分子に等しくなるためにその数から減算されなければならない第2の数との間の差に変換することができる。次いで、第2の数は、加算または減算によって同様に低減され得る。これは、さらなる低減が不可能になるまで継続され得る。そのような動作の具体例では、以下のとおりである。
【0094】
9322=9500-178=9500-190+12≡12(mod95)
XORおよびMask/MUX演算子とは対照的に、MOD演算はビット幅に対して単一のビット並列演算として実行されず、代わりに、一般に特定の順序で実行される一連の演算がある。これは、システムクロック速度で出力値を生成するために、MOD演算子がシステムクロックよりも速いクロックサイクルで動作する必要があるか、またはCPUがシステムクロックを保持してMOD演算子が終了するのを待つ必要があることを意味する。
【0095】
MOD演算の演算では、第2の値920を分母とする数学的除算演算において、読み出し値910の全値が分子として利用される。出力はそのような除算の残りの部分であるが、商は一般にまったく使用されず、しばしば決定さえされない。剰余は分母で割り切れないため、分母(Dビット)と同じかそれより少ないビット長を有する必要があり、したがって分母のサイズの選択は出力ビット長および出力の可能な値の範囲を制御する。また、出力が読み出し値と同様のランダム品質を有するためには、分子(Yビット)のサイズは分母(Dビット)のサイズよりも大幅に大きい、すなわちY>>Dでなければならない。したがって、データフィードから引き出される値は、関連するDRNUSの必要に応じて出力ワードサイズを生成する値になるようにシステムによって選択され、読み出し値は、高品質の出力をもたらすのに十分なビット長を有する値を生成するように読み出される。MOD演算子930の出力940は、データ演算子の出力に機能的に結合され、その結果、1つまたは複数のDRNUS(
図1参照)に所望に応じて提供され得る。
【0096】
図10は、本発明の一実施形態による、乱数のストリームを効率的に生成するためのコンピュータ化されたシステムの構成要素の同期動作を示すクロック図である。シフトレジスタ、1つまたは複数の算術論理演算機構(ALU
0-ALU
n)、1つまたは複数のデータフィード(データフィード
0-データフィード
n)、および乱数ストリームを受信するDRNUSの動作を同期させるシステムクロック信号をパルスするシステムクロックが示されている。図示の動作は、クロック速度で(非常に高品質であり得る)シフトレジスタをポピュレートするために使用される値の品質に実質的に等しい品質のランダム値ストリームにおいてランダム値を生成することができ、これは非常に効率的であり、同様の品質のランダム値を生成するコンピュータ化されたシステムと比較して非常に高速であり得る。
【0097】
図示のシステムクロックは、時間の経過に関するコンピュータ化されたシステムの概念を生成し、様々な構成要素が同期して動作することができるタイミング構造を提供する。システムクロックはクロック信号を生成し、様々な構成要素はクロック信号と機能的に通信して、クロック信号の一部と共に動作を実行することができる。図示の信号は、第1の状態(例えば0)と第2の状態(例えば1)との間で、方形波で交互する一連のクロックサイクル(ティック)である。システムクロックは、一般に、クロック信号を生成する電子発振器であるクロック生成器を含む。クロック生成器は、多くの場合、石英圧電発振器であるが、代替の生成器(例えば、タンク回路、およびRC回路)が利用されてもよい。システムは2つ以上のクロックを有することができ、様々な構成要素は異なるクロック(例えば、内部クロック対システムクロック)または同じクロックの複数のバージョン(例えば、分周器および/またはクロック乗算器を使用する)に従って動作することができるが、図示された実施形態は、図示の構成要素が接続される単一のクロックに焦点を合わせている。
【0098】
図示のシフトレジスタは、本明細書に記載の任意のタイプのシフトレジスタであってもよく、および/または本明細書に記載の特徴、機能、構造などのいずれかを含んでもよい。シフトレジスタはランダム値でロードされ、必要に応じてさらなる値ロードを提供する構造を含むことができる。図示のシフトレジスタは、第1の状態から第2の状態へのクロック信号の変化におけるインデックスに関連してレジスタの周りの値をシフトし、次いで、第2の状態から第1の状態へのクロック信号の変化における値を出力するように構成されている。したがって、各サイクルにおいて、シフトレジスタからのランダム値またはランダム値の新しいセットがシステムに提示される。
【0099】
図示のALUは、シフトレジスタおよびそれらの動作に必要な任意の関連するデータフィードに機能的に結合されている。それらは、一般に、整数2進数に対して算術演算またはビット単位演算を実行する組み合わせデジタル回路であるが、他の数に対して動作してもよく、および/またはシステムのコンテキストが必要とする他の動作を実行してもよい。図示のALUへの入力は、シフトレジスタの出力およびデータフィードの出力からロードされる。次に、ALUは、特定のALUがシフトレジスタの出力タイミングとは反対に、すなわち第1の状態から第2の状態へのクロック信号の変化時に(例えば、マスク、XOR、AND、Modを)実行するように構成された動作からの結果値を出力する。したがって、シフトレジスタが出力しているときはAluがロード中であり、シフトレジスタがシフトしているときはALUが出力中である。ALUは、マスク動作のように非常に単純であってもよく、シフトレジスタの出力は、2つの値のうちのどの値を2つの別個のデータフィードから出力するかを決定し、これは単一の内部クロックサイクルで達成することができる。ALUは、より複雑(例えば、Mod)であり得、したがって、図示のように値を出力できるようにするために、図示のシステムクロックよりも高速で動作するそれ自体の内部クロックを必要とし得る。
【0100】
図示のデータフィードは、ALUに必要な出力値を提供し、したがって、関連するALUがロードの準備ができているときにそれらの値を提供する。データフィードは、シフトレジスタ、DMA、メモリ出力/アクセスなど、およびそれらの組み合わせであってもよい。図示のデータフィードは、クロックサイクルごとに1回値を出力するように示されているが、そのような迅速な値の送達は必ずしも必要ではない。一例として、ALUがシーケンシャルモッド演算を実行している場合、変更が必要になる前に同じ分母を何度も(例えば10万回以上)使用することができる。しかしながら、ALUがマスク動作を実行している場合、2つの異なるデータフィードからの新しいデータフィード値がサイクルごとに必要となる。したがって、図示のデータフィードの出力はクロックサイクルごとに利用可能であり得るが、必ずしも毎回ロードされるとは限らない。図示のデータフィードは、出力値が新しい値に変更される変更動作を含む。毎回新しい値が必要とされる場合(例えば、マスク)、変更動作は出力の反対側で行われる。サイクルごとに必要とされない場合、変更動作は、コントローラによって制御され得る要求に応じて行われる。
【0101】
図示のDRNUSは、ALUの出力をロードし、それによって関連するALUの出力タイミングと同期してロードする。図示のDRNUSは、接続されているすべてのALUのクロックサイクルごとに新しい値を受信している。これは、図示のように、単一のシステムがクロックサイクルごとに複数のランダム値を生成することができるので有用であり、複数のALUが同じシフトレジスタを利用している。したがって、ランダム値生成は、システムクロックを上回る速度で行われ得る。さらに、シフトレジスタおよびDMAが利用される場合、コンピュータ化されたシステムのCPUリソースに対する図示のシステムの負担は最小限からゼロまでであり、したがって、コンピュータシステムの著しい減速を引き起こすことなく、ランダム値をアプリケーションまたはハードウェアデバイス(すなわち、DRNUS)に提供することができる。これは、ランダム値を大いに必要とするシステムが、本質的に「無コスト」で既知の品質のランダム値を受信することができることを意味する。
【0102】
図示のプロセスの動作において、システムクロックは、図示の構成要素の動作のタイミングを駆動する。図示のクロック信号が立ち上がると、シフトレジスタはシフトし、ALUは出力値を受信するDRNUSに出力する。図示のクロック信号が立ち下がると、シフトレジスタ(および必要に応じてデータフィード)は新しい値をALUに出力し、ALUは必要な値をロードしてその後の動作に備える。
【0103】
有利には、図示のシステムは、システムクロック速度で、かつCPUに重大な障害または負担をかけることなく、1つまたは複数のDRNUSによって使用するための多数の既知の品質のランダム値を生成することができる。これは、コンピュータ化されたシステム内でランダム値を生成する既知の方法とは非常に異なり、そのような既知のシステムは、低品質/限られた品質/数量のランダム値を生成し、クロック速度でそれを行うことができず、および/または関連するCPUに大きな負担を課すか、または動作するために別個のCPUを有する別個のコンピューティングシステムを必要とする。
【0104】
上述の実施形態は、本発明の原理の適用の単なる例示であることが理解される。本発明は、その精神または本質的な特徴から逸脱することなく、他の特定の形態で具体化されてもよい。記載された実施形態は、すべての点で例示としてのみ考慮されるべきであり、限定的ではない。したがって、本発明の範囲は、上記の説明ではなく添付の特許請求の範囲によって示される。特許請求の範囲の均等物の意味および範囲内にあるすべての変更は、それらの範囲内に包含されるべきである。
【0105】
以下は、実施形態の非限定的な例示的な記述である。
1.コンピューティングシステムにおいて乱数のソースから一連の乱数を迅速かつ効率的に生成する方法であって、
a.ランダムデータのソースからランダムデータを用いてデータループをロードするステップであって、データループは、
i.記憶された値のループ状配列、および
ii.インデックス
を含む、データループをロードするステップと、
b.ループ状配列内のインデックスの位置に関連してデータループからマルチビット値を読み出すステップと、
c.マルチビット値に対して第1のデータ演算を実行し、それによってマルチビット値から導出乱数を導出するステップと、
d.ループ状配列に関連してインデックスをループ状配列内の異なる位置に移動させるステップと、
e.ステップb~dを繰り返し、それによって一連の導出乱数を生成するステップと、
を含む、方法。
【0106】
2.データループはシフトレジスタである、記述1に記載の方法。
3.シフトレジスタはユニバーサルシフトレジスタである、記述2に記載の方法。
【0107】
4.異なる位置は隣接する位置である、記述1~15のいずれかに記載の方法。
5.データ演算子は、XOR、マスク生成器、データMUX、およびMODからなる群から選択される分離演算である、記述1~15のいずれかに記載の方法。
【0108】
6.ランダムデータのソースは、記述1による方法の出力である、記述1~15のいずれかに記載の方法。
【0109】
7.データループをロードするステップは、直接メモリアクセスによって実行される、記述1~15のいずれかに記載の方法。
【0110】
8.第1のデータ演算を実行するステップと同時に、マルチビット値に対して第2のデータ演算を実行し、それによってマルチビット値から第2の導出乱数を導出するステップをさらに含む、記述1~15のいずれかに記載の方法。
【0111】
9.第2のコンピューティングシステムは、第2のコンピューティングシステムのデータループは、記述1に記載のデータループと同一にロードするように、実質的に同一のランダムデータのソースを使用して記述1に記載のステップを独立して実行し、結果の導出乱数が記述1に記載のものと同じになるように、実質的に同一のデータ演算を実行し、それによって、記述1に記載の一連の導出乱数と同一である第2の一連の導出乱数を生成する、記述1~15のいずれかに記載の方法。
【0112】
10.第2のコンピューティングシステムは、データループ、読み出し演算子、シフタ、コントローラタイプ、およびデータループローダのタイプのうちの少なくとも1つにおいて、記述1に記載のコンピューティングシステムと構造的に異なる、記述9に記載の方法。
【0113】
11.データ演算は、マルチビット値を分子とし、マルチビット値より少ないビット数の分母で実行されるMOD演算である、記述1~15のいずれかに記載の方法。
【0114】
12.分母は、ランダムデータのソースから直接得られるか、または導出される値である、記述11に記載の方法。
【0115】
13.分母は、導出乱数の所望の範囲よりも大きい、記述11に記載の方法。
14.コントローラに応じて複数の分離演算から分離演算を自動的に選択するステップをさらに含む、記述1~15のいずれかに記載の方法。
【0116】
15.コントローラは、プログラマブル論理回路、スクリプト、およびドライバのうちの1つまたは複数を含む、記述14に記載の方法。
【0117】
16.乱数のストリームを効率的に生成するためのコンピュータ化されたシステムであって、
a.データループであって、
i.ランダムデータの単純フィードバックループ状配列、
ii.インデックス、および
iii.単純フィードバックループ状配列に対するインデックスの相対位置に基づいて単純フィードバックループ状配列から値を読み出す出力ポート、を含むデータループと、
b.データ演算子であって、
i.入力、および
ii.データ演算子からの出力値へのアクセスを提供する出力を有し、出力ポートからの値が入力値としてデータ演算子に供給されるように出力ポートに機能的に結合される、データ演算子と、
c.単純フィードバックループ状配列に対してインデックスをシフトさせる、データループに機能的に結合されたインクリメンタと、
を備える、システム。
【0118】
17.データループは入力ポートをさらに含む、記述16~23のいずれかに記載のシステム。
【0119】
18.出力ポートからの値はマルチビット値である、記述16~23のいずれかに記載のシステム。
【0120】
19.データループはユニバーサルシフトレジスタである、記述16~23のいずれかに記載のシステム。
【0121】
20.データループはシフトレジスタである、記述16~23のいずれかに記載のシステム。
【0122】
21.データ演算は、XOR、マスク生成器、データMUX、およびMODからなる群から選択される分離演算子である、記述16~23のいずれかに記載のシステム。
【0123】
22.第2のデータループであって、データ演算子からの出力値が第2のデータループに入力されるように、データ演算子の出力に機能的に結合された入力ポートを有する、第2のデータループをさらに備える、記述16~23のいずれかに記載のシステム。
【0124】
23.ランダムデータのループ状配列がランダムデータのソースからデータを供給されるように、データループの入力ポートに機能的に結合されたランダムデータのソースをさらに備える、記述16~23のいずれかに記載のシステム。
【0125】
したがって、本発明は、本発明の最も実用的で好ましい実施形態であると現在考えられているものに関連して具体的かつ詳細に上記で十分に説明されているが、特許請求の範囲に記載されている本発明の原理および概念から逸脱することなく、サイズ、材料、形状、形態、機能および動作様式、組み立ておよび使用の変更を含むがこれらに限定されない多くの変形が行われ得ることは当業者には明らかであろう。さらに、実施形態は、本明細書に記載の特徴、機能、構造、方法の1つまたは複数からなるか、または本質的になるように限定され得ることが企図される。
【国際調査報告】