なぜ乱数ジェネレーターを結合しないのですか?


60

擬似乱数ジェネレーターが使用される多くのアプリケーションがあります。したがって、人々は、それが欠陥であると後で見つけるためだけに素晴らしいと思うものを実装します。最近、Javascript乱数ジェネレーターでこのようなことが起こりました。RandUもずっと以前です。ツイスターのようなもののための不適切な初期シードの問題もあります。

通常のxor演算子で2つ以上のジェネレーターファミリーを組み合わせた例は見つかりません。java.SecureRandomやTwister実装などを実行するのに十分なコンピューター能力がある場合、なぜ人々はそれらを結合しないのですか?ISAAC xor XORShift xor RandUはかなり良い例であり、単一のジェネレーターの弱点が他のジェネレーターによって緩和されていることがわかります。また、組み込みアルゴリズムはまったく異なるため、数値をより高い次元に分配するのにも役立ちます。それらを組み合わせてはならないという基本原則はありますか?

真の乱数ジェネレーターを構築する場合、2つ以上のエントロピーのソースを組み合わせることをお勧めします。私の例は違いますか?

同じファミリに属する​​複数の線形フィードバックシフトレジスタが連携して動作する一般的な例を除外しています。


答えはアプリケーションによって異なります。擬似ランダムシーケンスを何に使用しますか?
ユヴァルフィルマス

1
Fortuna(en.wikipedia.org/wiki/Fortuna_%28PRNG%29)を見つけましたか?さまざまなランダムなソースを1つに集約するという説明に近いように思えます。
リトルコード

1
@LittleCode実際にはまったく違うように聞こえます。Fortunaは、単一のハッシュ関数からデータを出力します。単一の出力関数を使用して(再)ハッシュする前に、多くの弱いエントロピー収集メカニズムを台無しにしています。私の質問は、いくつかの関数から出力することに関連しています(10個ではないのはなぜですか)。これが充填装置である場合、速度はとにかく無関係です。
ポールウザック

1
1990年代に3つのPRNGの組み合わせであるKISSジェネレーターを提案したときに、キャリー乗算とxorシフトなどの新しいPRNGタイプを発明したPRNG分野の著名な研究者である故George Marsagliaがこれを正確に行いました。異なるタイプの。もちろん、過去20年間、暗号化ではなくKISSを使用しています。KISSに関して有益な二次源であるグレッグ・ローズすることで、この2011年論文組み合わせたコンセプトが無効になるわけではない彼は、構成のPRNGの一つの問題を指摘している、
njuffa

4
Knuthは、疑似乱数ジェネレーターを単純に組み合わせた結果(使用するジェネレーターを選択するために1つの乱数を使用)の結果を、固定値に収束する関数に関連付けます!そのため、マイクロコンピューター革命の直前の時代に、彼はランダムなジェネレーターを混同しないように警告しました。
JDługosz

回答:


7

IIRC(およびこれは記憶からです)、1955ランドのベストセラーA Million Random Digitsはこのようなことをしました。コンピューターが安価になる前に、人々はこの本から乱数を選びました。

著者は電子ノイズを含むランダムビットを生成しましたが、バイアスがかかっていることが判明しました(フリップフロップがフリップとフロップでまったく同じ時間を費やすことは困難です)。ただし、ビットを組み合わせることで、分布がより均一になりました。


45

もちろん、必要に応じて、このようにPRNGを組み合わせることができます。ただし、処理速度は遅くなり、おそらく人々が抱える最も差し迫った問題を解決することはできません。

実際には、非常に高品質のPRNGが必要な場合は、十分に吟味された暗号強度のPRNGを使用し、真のエントロピーをシードします。これを行う場合、最も可能性の高い障害モードはPRNGアルゴリズム自体の問題ではありません。最も可能性の高い障害モードは、適切なエントロピーの欠如(または実装エラーの可能性)です。複数のPRNGをXor-ingしても、この障害モードには役立ちません。したがって、非常に高品質のPRNGが必要な場合、それらをxorすることにはほとんど意味がありません。

あるいは、シミュレーションの目的に十分な統計PRNGが必要な場合、通常、一番の懸念事項は速度(擬似乱数を非常に高速に生成する)または単純さ(それを調査または実装するのに多くの開発時間を費やしたくない)です。Xor-ingはPRNGの速度を低下させ、PRNGをより複雑にします。そのため、そのコンテキストの主要なニーズにも対応しません。

合理的な注意と能力を発揮する限り、標準PRNGは十分すぎるほど優れているので、より洗練されたもの(xor-ingは不要)が必要な理由はまったくありません。最低限のケアやコンピテンシーさえ持っていない場合、おそらくxor-ingのような複雑なものを選択することはないでしょう。物事を改善する最善の方法は、PRNGの選択により多くのケアとコンピテンシーに集中することですxor-ingではなく。

ボトムライン:基本的には、XORのトリックはのPRNGを使用しているとき、人々は通常、実際に持っている問題を解決していません。


3
「適切なエントロピーの欠如...複数のPRNGのXoringはこれに役立ちません」-実際には、PRNGをシードするために必要なエントロピーの量を増やすため、妨げになります。十分に吟味されたPRNGの1つから完全に保護されていても(使用している実装では)実際に保護されている場合でも、よく吟味されたPRNGを組み合わせることを日常業務にしたくない理由です。
スティーブジェソップ

もう1つの理由は、実装のバグはアルゴリズムの根本的な問題よりもはるかに一般的であるため、単純であるほど良いということです。標準アルゴリズムは、少なくとも別の実装または参照値に対してテストできますが、カスタムメイドのxorではできません。
ジル 'SO-悪であるのをやめる'

1
@DW「なぜ独立して種を?くのか」私の質問はジェネレーターの異なるファミリーの組み合わせに関連しているため、各ファミリーは同一のシードから一意の出力シーケンスを生成する必要があります。たとえば、java.SecureRandomとRC4を同じキーから簡単にシードしてから結合できます。
ポールウザック

1
@DW「よく吟味された暗号強度PRNGを使用する」とあなたが述べる大きな仮定。現実には、ほとんどの暗号暗号、ハッシュなどと同様に、これを確認することは事実上不可能です-弱点は時間の経過とともに発見されます。彼らは昨日または昨年の知識について「よく吟味された」。
シブ

1
@ PaulUszak、2つのジェネレーターのxor-ingによりバグが発生しやすいと主張したことはないと思います。適切なPRNG(1つだけ)を選択した場合、最も可能性の高い障害モードの1つはシードの失敗または実装の失敗であり、2つのジェネレーターのxor-ingはどちらにも役立ちません。(もちろん、単一のPRNGが失敗しない場合、2つのジェネレーターのxor-ingも役に立たない。)だから、基本的には間違った問題に対処している。言い換えれば、xor-ingジェネレーターは不確実性の最も重要な原因に対処していないため、確実性をあまり向上させません。
DW

19

実際、これを正確に行うことで、突破口のようなものが発表されました。

テキサス大学のコンピューターサイエンス教授であるDavid Zuckermanと博士課程の学生Eshan Chattopadhyayは、2つの「低品質」ランダムソースを組み合わせることで「高品質」乱数を生成できることを発見しました。

ここに彼らの論文があります: 明示的な2ソース抽出と復元機能


8
これは、UTによるPRの努力にもかかわらず、まったく実用的な関連性のない別のトピックに関する純粋に理論的な論文です。
ユヴァルフィルマス

4
@Yuval Filmus-そのコメントを拡大しますか?
NietzscheanAI

8
理論と実践の間には大きな隔たりがあります。通常、開業医は理論を気にしません。逆もまた同様です。この場合、UTのPR部門は優れた理論上の論文をラッチすることを決定し、実際に関連があると説明しましたが、そうではありません。論文で検討されている問題は、実用的な観点からはそれほど面白くなく、十分に機能するシンプルなソリューションがありますが、機能することを証明することはできません。
ユヴァルフィルマス

2
さらに、この特定の論文は、抽出器の理論分野における1つの研究にすぎません。同じように、その地域の他の紙に請求することもできます。それらはすべて、弱いソースを組み合わせて強力なソースを作成することです。違いはパラメーターにあります。
ユヴァルフィルマス

3
最後に、論文の構成はおそらくやり過ぎであり、実装したいものではありません。この種の構造の具体的なパラメーターを決定することは困難であり、それらは通常非常に悪いものです。なぜなら論文は常に漸近レジームに焦点を当て、定数を無視するからです。
ユバルフィルマス

9

仮定擬似ランダムバイナリシーケンスです。つまり、各はでサポートされるランダム変数であり、変数は必ずしも独立しているわけではありません。このシーケンスは次の方法で生成されると考えることができます。最初に一様にランダムなキーをサンプリングし、次に関数を使用して擬似ランダムシーケンスを生成します。X1,,XnXi{0,1}X1,,XnKf(K)

疑似ランダムシーケンスがどれほど優れているかを測定するにはどうすればよいですか?特定の実現がどれほど優れているかを測定することは可能ですが(たとえば、コルモゴロフの複雑さを使用して)、ここではランダム変数分布全体に依存する測定に集中します。そのような例の1つはエントロピーですが、メジャー 2つのプロパティのみが必要です(大きいほど、よりランダムなシーケンスを意味します)X1,,Xn(X1,,Xn)LL()

  • 場合ある決定論的配列(すなわち、固定シーケンス)を。 L X 1Y 1... Xのn個ののy N= L X 1... XのNy1,,ynL(X1y1,,Xnyn)=L(X1,,Xn)

  • 場合二つの独立した擬似ランダムシーケンスである、独立ランダムビットであり、、次いで。X0,X1T{0,1}Z=XTL(Z)min(X0,X1)

最初のプロパティは、番目のビットを反転してもメジャーが不変であることを意味します。2番目の特性は、2つの分布を混在させると、結果は少なくとも悪い分布と同じくらい良いことを意味します。iX,Y

妥当なランダム性の尺度は、最初のプロパティを満たします。2番目のプロパティは、エントロピーやエントロピーなどの最も一般的な尺度で満たされます。HH

これで、2つの擬似ランダムシーケンスのXORが常に良いアイデアであることを示す定理を述べ、証明することができます。

定理。ましょう同じ長さの2つの独立した擬似ランダムシーケンスであること、およびlet許容ランダム性の尺度(上記の二つの条件を満足するもの)です。次に、X,YL

L(XY)max(L(X),L(Y)).

証明。と仮定します。次に、分布の混合物であるの分布に応じて混合し、。以来、との混合物は、少なくとも最悪の分布が混合されるよう良好で、我々は得。L(X)L(Y)XYXyYL(Xy)=L(X)L(XY)L(X) 

この定理が意味することは、2つの独立したキーを使用して生成された2つの擬似ランダムシーケンスをXORすると、許容されるランダム性の尺度に関して、結果は常にXORされるより良いシーケンスと同じくらい良いことです。

実際には、2つの独立したキーを使用するために、1つのキーを擬似ランダムに2つのキーに拡張する可能性があります。2つのキーは独立していません。しかし、「高価な」方法を使用して1つのキーを2つのキーに拡張する場合、結果の2つのキーは独立して「見える」ので、定理が「道徳的に」保持されると考えられます。理論的暗号化では、このステートメントを正確にする方法があります。


それでは、2つの擬似乱数ジェネレータをXORする必要がありますか?速度に制限されていない場合、それは確かに良い考えです。しかし、実際には速度制限があります。その後、次の質問をすることができます。2つのPRNGが与えられ、それぞれにジェネレーターの実行時間(および強度)を制御するパラメーターが与えられているとします。たとえば、はLFSRの長さ、またはラウンド数です。1つのPRNGをパラメーターで使用し、もう1つのPRNGをパラメーターで使用し、結果をXOR仮定します。であると想定できるため、合計実行時間は一定です。最良の選択は何ですかTTT1T2T1+T2=tT1,T2?ここには、一般的に答えるのが難しいトレードオフがあります。設定がまたはどちらよりもはるかに悪い可能性があります。(t/2,t/2)(t,0)(0,t)

ここでの最善のアドバイスは、強力と考えられている一般的なPRNGに固執することです。シーケンスの生成に時間を割くことができる場合は、独立したキー(または高価なPRNGを使用して単一のキーを展開して生成されたキー)を使用して複数のコピーをXORします。


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました。建設的に終わったら、答えを編集して、議論の結果を取り入れてください。
ラファエル

4

私はこれを試してみます。他の回答のいくつかで与えられたアドバイスに十分に悩まされているからです。

ましょう無限ビット列2つのRNG(初期状態がわかれば、決定論的である必要はないのPRNG)によって生成され、我々はシーケンスを使用する可能性を検討していることは、何らかの意味で動作を改善することを期待しています。とそれぞれと比較して、がより良いまたはより悪いと考えられるさまざまな方法があります。ここに、「より良い」と「より悪い」という言葉の通常の用法と意味が​​あり、有用で、一貫していると私が信じるほんの一握りがあります。X,YXYXYXY

  • (0)シーケンスの真のランダム性の確率が増加または減少
  • (1)観測可能な非ランダム性の増加または減少の確率(おそらく、特定の量の精査を適用する一部のオブザーバーに関して)
  • (2)観測可能な非ランダム性の重大度/自明性は増加または減少します。

最初に(0)について考えてみましょう。これは、3つのうち、正確になることを望んでいる唯一のものです。実際に、2つの入力RNGのいずれかが実際にランダムで不偏であり、他方から独立している場合、XORの結果も同様にランダムで不偏になります。それを念頭に置いて、が真にランダムな不偏分離ビットストリームであると信じている場合を考えてみてください。場合はあなたがそれらのそれぞれについて間違っているそれぞれの確率は、確率ですあり、その後、真にランダムされていません 、実際にはずっと少ないX,YεX,εYXYεXεY<min{εX,εY}εX,εYは0に非常に近いと仮定されます(「それらは本当にランダムであると信じています」)。そして、実際には、どちらも真にランダムではない場合でも、が真に独立している可能性を考慮すると、それよりもさらに優れています。 したがって、理にかなっている(0)ので、XORを傷つけることはできず、潜在的に多くの助けになると結論付けることができます。X,Y

Pr(XY not truly random)min{Pr(X not truly random),Pr(Y not truly random),Pr(X,Y dependent)}.

ただし、(0)はPRNGにとって興味深いものではありません。PRNGの場合、問題のシーケンスはどれも真にランダムになる可能性がないためです。

したがって、実際にはPRNGに関するこの質問については、(1)または(2)のようなものについて話す必要があります。それらは「観察可能」、「重度」、「明白」、「見かけ」などの特性と量の点であるため、コルモゴロフの複雑さについて話しているので、正確にしようとはしません。しかし、このような手段によって、「01100110 ...」(期間= 4)は「01010101 ...」(期間= 2)よりも悪いという希望を持たない主張をするまで行きます。 00000000 ... "(定数)。

さて、(1)と(2)は(0)と同じ傾向に従うと推測するかもしれません。したがって、「XORは傷つけない」という結論がまだ当てはまるかもしれません。ただし、とはどちらも明らかにランダムではないが、それらの間の相関によりが明らかにランダムではないという重要な可能性に注意してください。この最も深刻なケースは、もちろん、(または)の場合です。この場合、は定数であり、考えられるすべての結果の中で最悪です。一般に、とがどれだけ優れているかに関係なく、XYXYX=YX=not(Y)XYXYXそしては、xorが観測不可能な非ランダムになるように、独立に「近い」必要があります。実際、観測不可能に依存するということは、が観測不可能な非ランダムであると合理的に定義できます。YXY

このようなサプライズ依存は、本当に大きな問題であることがわかりました。


何がうまくいかないかの例

質問には、「同じファミリのものであるため、いくつかの線形フィードバックシフトレジスタが一緒に機能する一般的な例を除外しています」とあります。ただし、XORingで問題が発生する可能性のある種類の非常に単純で明確な実例を示すために、当面はこの除外を除外します。

私の例は、1983年頃のUnixの一部のバージョンにあったrand()の古い実装です。IIRC、このrand()関数の実装には、次のプロパティがありました。

  • rand()の各呼び出しの値は15の擬似ランダムビット、つまり範囲[0、32767)の整数でした。
  • 連続する戻り値は、偶数-奇数-偶数-奇数を交互にしました。つまり、最下位ビットが0-1-0-1を交互に...
  • 最下位から番目のビットには期間4があり、その後の次のビットには期間8があり、...最上位ビットには期間。215
  • したがって、rand()の15ビットの戻り値のシーケンスは、周期周期的でした。215

私は、元のソースコードを見つけることができなかったが、私は中からポストのカップルを一緒に縫い合わせから推測しているhttps://groups.google.com/forum/#!topic/comp.os.vms/9k4W6KrRV3Aこと上記のプロパティの私の記憶と一致する、正確に次のコード(Cコード)を実行しました。

#define RAND_MAX 32767
static unsigned int next = 1;
int rand(void)
{
    next = next * 1103515245 + 12345;
    return (next & RAND_MAX);
}
void srand(seed)
unsigned int seed;
{
    next = seed;
}

ご想像のとおり、このrand()をさまざまな方法で使用しようとすると、さまざまな失望が生じました。

たとえば、ある時点で、次のことを繰り返して、コインのランダムフリップのシーケンスをシミュレートしようとしました。

rand() & 1

すなわち、最下位ビット。結果は、単純な交互の頭-尾-頭-尾でした。それは最初は信じ難かったです(私のプログラムのバグでなければなりません!)。前述のように、それはあまり良くありません-そのビットは周期4で周期的ですこの点に関して、最上位ビットがそれらすべての中で最も有用でした。ただし、ここでは「ビットは有用ですが、ビットは有用ではありません」という白黒のしきい値はありません。実際に言えるのは、番号付きのビット位置にさまざまな程度の有用性/無用性があることです。ii1

また、結果をさらにスクランブルしたり、複数のrand()の呼び出しから返された値をXORしたりすることも試みました。連続したrand()値のペアのXORは、もちろん災害でした。すべての奇数が発生しました。私の目的(つまり、コインフリップの「見かけ上ランダム」なシーケンスを生成する)では、XORの一定のパリティの結果は、元の交互奇数/偶数動作よりもさらに悪化しました。

わずかなバリエーションにより、これは元のフレームワークに入れられます。つまり、を、特定のシード持つrand()によって返される15ビット値のシーケンスとし、異なるシードからのシーケンスとします。繰り返しになりますが、は、すべて偶数またはすべて奇数のシーケンスであり、元の偶数/奇数の交互動作よりも悪化します。XsXYsYXY

言い換えれば、これは、XORが(1)と(2)の意味で、合理的な解釈によって事態を悪化させた例です。他のいくつかの点でも同様です。

  • (3)XORされた最下位ビットは明らかにバイアスされています。つまり、すべてのバイアスのない入力のいずれかの番号付きビット位置とは異なり、0と1の周波数が等しくありません。
  • (4)実際、ビット位置ごとに、そのビット位置がXOR結果でバイアスされるシードのペアがあり、シードのすべてのペアで、XORでバイアスされる(少なくとも5つの)ビット位置があります結果。
  • (5)XOR結果の15ビット値のシーケンス全体の周期は、元のと比較して1またはいずれかです。214215

(3)、(4)、(5)のどれも明らかではありませんが、それらはすべて簡単に検証可能です。


最後に、同じファミリーのPRNGの禁止を再導入することを検討しましょう。ここでの問題は、誰かがXORの使用を開始し、(1)の意味で事態が悪化したことに気づかない限り(または、攻撃者が気づかない限り)、2つのPRNGが「同じファミリーから」であるかどうかは本当に明確ではないことです(2)、つまり、出力のランダムでないパターンが、気付かないから気づいた/恥ずかしい/悲惨な状態にしきい値を超えるまで、その時点では手遅れです。

私はここで、ほとんどの人が「良い」と「悪い」と考えるものをモデル化するという貧弱な仕事をしているように見える理論的尺度に基づいて「XORは傷つけない」という無条件のアドバイスを与える他の答えに驚いています現実のPRNG。そのアドバイスは、上記のrand()の例のように、XORが事態を悪化させる明確で露骨な例と矛盾しています。比較的「強い」PRNGが、rand()であるおもちゃのPRNGのXORとXORをとると、一貫して反対の動作を示す可能性があると考えられますが、XORを良いアイデアにしますが、その方向、理論、または経験的であるので、それが起こると仮定することは私にとって不合理なようです。

個人的には、青春期にrand()をXORすることや、生涯を通じて他の無数のさまざまな驚きの相関関係に驚かされたので、同様の戦術をもう一度試しても結果が異なると考える理由はほとんどありません。そのため、個人的には、問題の特定のRNGに対して安全であると確信できるように非常に広範な分析と検証が行われていない限り、複数のPRNGをXORで結合することに非常に消極的です。1つまたは複数の個々のPRNGに対する信頼度が低い場合の潜在的な治療法として、それらのXORを実行しても自信が増す可能性は低いため、このような目的に使用することはほとんどありません。あなたの質問に対する答えは、これが広く保持されている感情であると思います。


それでは、文字通り何十億もの人々によるA5 / 1の使用をどのように説明しますか?
ポールウザック16年

@PaulUszakわからない。A5 / 1が何十億人もの人々によって使用されていることは、私が言ったことと矛盾していますか?
ドンハッチ

これは、(実際には同じ家族から)3つのPRNGが邪魔な方法とアラームでより良いものを形成するために、XOR演算だお...
ポールUszak

私が邪魔されて心配しているのは、「よくわからない場合は、先に進んでRNGの束をXORしてください。事態を悪化させることはできません」という無条件のアドバイスです。私はXORがすべての場合に悪いと言ったり暗示したりするつもりはなく、A5 / 1やその中でのXORの使用についてはまったく意見がありません。これをより明確にするために、最終的な愚かな要約文を変更すると役立つでしょうか?
ドンハッチ

1
最後に、単純化された「XORing RNGにノーと言うだけ」を、より現実的で誤解を招かないものに置き換えました。
ドンハッチ

0

免責事項:この答えは、「私たちはそれをしていない」という厳密なものであり、「なぜ機能するかできないかの数学的な証拠」ではありません。XORが暗号化の脆弱性を導入する(またはしない)とは主張しません。私の要点は、最も単純なスキームでさえほとんど常に予期しない結果をもたらすことを経験が示していることだけです-そして、それが我々がそれらを避ける理由です。

「ランダム性」は、RNGとPRNGに関しては氷山の一角にすぎません。重要な他の品質、例えば均一性があります。

単独で非常に優れたRNGである一般的なサイコロを想像してください。しかし、1〜6ではなく1〜5の範囲が必要だとしましょう。最初に頭に浮かぶのは、6面を消去して余分な1に置き換えることです。「ランダム性」は残ります(結果は依然として真にランダムです)が、均一性が大幅に低下します。

複数のRNGの結果を組み合わせると、同様に滑りやすい勾配になります。例えば。「7」は「2」または「12」よりも6倍可能性が高いため、2つのサイコロを追加するだけで均一性が完全になくなります。XORは一見すると追加よりも良く見えることに同意しますが、PRNGでは一見すると何もわかりません。

これが、既知の実装に固執する理由です-誰かがそれらの研究に多くの時間とお金を費やし、すべての欠点は周知であり、理解されており、回避できるためです。独自に展開する場合、潜在的に脆弱性を作成するため、同様の努力をしてそれを証明する必要があります。サイコロの追加の例が示すように、結合は最初から新しいものを作成することと大差ありません。

セキュリティは、最も弱いコンポーネントと同じくらい強力なチェーンです。セキュリティの経験則:2つのことを組み合わせると、通常は強度の合計ではなく、欠陥の合計が得られます。


7
強く同意しない。任意のシーケンスと真にランダムなシーケンスをXORしても、真にランダムなシーケンスが得られます。同様に、2つの独立した疑似ランダムシーケンス(つまり、異なるキーで生成された)をXORすると、少なくともそれぞれが個別に強いものを取得します。
ユヴァルフィルマス

3
これは私には間違っているようです。ここでの通常のケースは、本質的に本当にランダムなビットを生成する2つの非常に高品質のRNG があると思いますが、それらの1つ(またはおそらくはるかに少ない)について誤解される可能性のある小さなチャンスイプシロンがあります。少なくともそれらの1つについて正しい限り、それらを一緒にxorする場合、結果は本当にランダムになり、私は良いです。したがって、それらを組み合わせることで、不良RNGが発生する可能性をおよそepsilon / 2から非常に小さなepsilon ^ 2に減らしました。これは間違いなく勝利です。カットアンドトライの少ないケースでも同様のダイナミクスが保持されると思います。
ドンハッチ

2
私はまだ確信していません。「真にランダム」と書いたとき、「均一にランダム」を意味していました。一様にランダムなシーケンスと任意のシーケンスをXORすると、一様にランダムなシーケンスが得られます。
ユヴァルフィルマス

2
@DonHatch確かに、それは資格があるでしょう。PRNGが長さ100のシーケンスを生成し、次に同じシーケンスのノイズの多いバージョンを生成するとします。2番目のコピーと最初のコピーのビット単位の相関がます。XORされたシーケンスは、満たします。以来、相関関係は「大幅に拡大」されたのではなく、大幅に縮小されたと言っても過言ではありません。Pr[Xi+100=Xi]=(1+ϵ)/2Zi=XiYiPr[Zi+100=Zi]=(1+ϵ2)/2ϵ2|ϵ|
ユヴァルフィルマス

3
@YuvalFilmusおそらく、アイテムiとアイテムi + 100の相関が著しく低下したことは正しいでしょうが、それはポイントではありません。非常に具体的で実際の例として:unixでの古いくだらないrand()実装は、返される31ビット整数の最下位ビットで周期的な動作をしていたことを覚えています。不幸なシフトサイズのシフトされたコピー(異なるシードを使用する場合に得られるもの)を持つintのシーケンスをXorすると、すべての偶数が得られます。ほとんどの場合、それは元のシーケンスの問題よりもはるかに悪いです。
ドンハッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.