Ich werde es versuchen, da ich von den Ratschlägen in einigen anderen Antworten ausreichend beunruhigt bin.
X⃗ ,Y⃗ X⃗ ⊕ Y⃗ X⃗ ⊕ Y⃗ X⃗ Y.⃗
- (0) Die Wahrscheinlichkeit der wahren Zufälligkeit der Sequenz nimmt zu oder ab
- (1) Die Wahrscheinlichkeit einer beobachtbaren Nicht-Zufälligkeit nimmt zu oder ab (in Bezug auf einen Beobachter, der eine bestimmte Menge an Kontrolle anwendet, vermutlich)
- (2) Der Schweregrad / die Offensichtlichkeit der beobachtbaren Nicht-Zufälligkeit nimmt zu oder ab.
X⃗ , Y⃗ εX, εY.X⃗ ⊕ Y⃗ ≤ εXεY.< m i n { εX, εY.}εX, εY.X⃗ , Y⃗
Pr ( X⃗ ⊕ Y⃗ n o t t r u l y r a n d o m )≤min{Pr ( X⃗ n o t t r u l y r a n d o m ),Pr ( Y⃗ n o t t r u l y r a n d o m ),Pr ( X⃗ , Y⃗ d e p e n d e n t )}.
(0) ist jedoch für PRNGs nicht interessant, da im Fall von PRNGs keine der fraglichen Sequenzen eine Chance hat, wirklich zufällig zu sein.
Daher müssen wir für diese Frage, die sich in Wirklichkeit um PRNGs handelt, über etwas wie (1) oder (2) sprechen. Da es sich um Eigenschaften und Größen wie "beobachtbar", "schwerwiegend", "offensichtlich", "offensichtlich" handelt, sprechen wir jetzt über die Komplexität von Kolmogorov, und ich werde nicht versuchen, dies genau zu machen. Aber ich werde so weit gehen, die hoffentlich unumstrittene Behauptung aufzustellen, dass durch ein solches Maß "01100110 ..." (Periode = 4) schlechter ist als "01010101 ..." (Periode = 2), was schlechter ist als " 00000000 ... "(konstant).
X⃗ Y.⃗ X⃗ ⊕ Y⃗ X⃗ = Y⃗ X⃗ = N o t ( Y⃗ )X⃗ ⊕ Y⃗ X⃗ Y.⃗ X⃗ Y.⃗ X⃗ ⊕ Y⃗
Eine solche Überraschungsabhängigkeit stellt sich als ein wirklich großes Problem heraus.
Ein Beispiel dafür, was schief geht
In der Frage heißt es: "Ich schließe das übliche Beispiel mehrerer linearer Rückkopplungsschieberegister aus, die zusammenarbeiten, da sie aus derselben Familie stammen." Aber ich werde diesen Ausschluss vorerst ausschließen, um ein sehr einfaches, klares Beispiel für die Art der Dinge zu geben, die mit XORing schief gehen können.
Mein Beispiel wird eine alte Implementierung von rand () sein, die sich in einer Unix-Version von 1983 befand. IIRC, diese Implementierung der rand () -Funktion hatte die folgenden Eigenschaften:
- Der Wert jedes Aufrufs von rand () betrug 15 pseudozufällige Bits, dh eine ganze Zahl im Bereich von [0, 32767].
- aufeinanderfolgende Rückgabewerte wechselten gerade-ungerade-gerade-ungerade; das niedrigstwertige Bit hat 0-1-0-1 abgewechselt ...
- 2fünfzehn
- 2fünfzehn
Ich konnte den ursprünglichen Quellcode nicht finden, aber ich vermute, dass ich einige Beiträge aus https://groups.google.com/forum/#!topic/comp.os.vms/9k4W6KrRV3A zusammengesetzt habe es tat genau das Folgende (C-Code), was mit meiner Erinnerung an die obigen Eigenschaften übereinstimmt:
#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;
}
Wie man sich vorstellen kann, führte der Versuch, diesen rand () auf verschiedene Arten zu verwenden, zu einer Reihe von Enttäuschungen.
An einem Punkt habe ich zum Beispiel versucht, eine Folge zufälliger Münzwürfe zu simulieren, indem ich wiederholt Folgendes genommen habe:
rand() & 1
ichi - 1 ist hier nicht nützlich "; alles, was wir wirklich sagen können, ist, dass die nummerierten Bitpositionen einen unterschiedlichen Grad an Nützlichkeit / Nutzlosigkeit aufwiesen.
Ich habe auch versucht, die Ergebnisse weiter zu verschlüsseln oder Werte, die von mehreren Aufrufen an rand () zurückgegeben wurden, durch XOR zu verknüpfen. Das XORen von Paaren aufeinanderfolgender rand () - Werte war natürlich eine Katastrophe - es ergab alle ungeraden Zahlen! Für meine Zwecke (nämlich das Erzeugen einer "scheinbar zufälligen" Folge von Münzwürfen) war das Ergebnis der Konstantparität des XOR noch schlimmer als das abwechselnde gerade-ungerade Verhalten des Originals.
X⃗ sXY.⃗ sY.X⃗ ⊕ Y⃗
Mit anderen Worten, dies ist ein Beispiel, in dem XOR die Dinge im Sinne von (1) und (2) durch eine vernünftige Interpretation verschlimmert hat. Es ist auch auf verschiedene andere Arten schlimmer:
- (3) Das XOR-Bit mit der niedrigsten Signifikanz ist offensichtlich vorgespannt, dh es hat ungleiche Frequenzen von Nullen und Einsen, im Gegensatz zu jeder nummerierten Bitposition in einem der Eingänge, die alle unverzerrt sind.
- (4) Tatsächlich gibt es für jede Bitposition Paare von Startwerten, für die diese Bitposition im XOR-Ergebnis vorgespannt ist, und für jedes Paar von Startwerten gibt es (mindestens 5) Bitpositionen, die im XOR vorgespannt sind Ergebnis.
- 2142fünfzehn
Keiner von (3), (4), (5) ist offensichtlich, aber sie sind alle leicht überprüfbar.
Lassen Sie uns abschließend überlegen, das Verbot von PRNGs aus derselben Familie wieder einzuführen. Ich denke, das Problem dabei ist, dass es nie wirklich klar ist, ob zwei PRNGs "aus derselben Familie" stammen, bis / es sei denn, jemand beginnt, die XOR-Funktion zu verwenden und bemerkt (oder ein Angreifer bemerkt), dass sich die Situation im Sinne von (1) verschlechtert hat. und (2) dh bis nicht zufällige Muster in der Ausgabe die Schwelle von nicht bemerkt zu bemerkt / peinlich / katastrophal überschreiten und zu diesem Zeitpunkt ist es zu spät.
Ich bin alarmiert über andere Antworten, die einen uneingeschränkten Ratschlag geben: "XOR kann nicht schaden" auf der Grundlage theoretischer Maßnahmen, die meiner Ansicht nach schlecht darin sind, das zu modellieren, was die meisten Leute als "gut" und "schlecht" betrachten PRNGs im wirklichen Leben. Diesem Ratschlag wird durch klare und offensichtliche Beispiele widersprochen, in denen XOR die Situation verschlimmert, wie das oben angegebene rand () - Beispiel. Während es denkbar ist, dass relativ "starke" PRNGs konsistent das entgegengesetzte Verhalten zeigen könnten, wenn sie mit der XOR-Funktion des Spielzeug-PRNGs rand () verknüpft werden, wodurch XOR für sie eine gute Idee ist, habe ich weder theoretisch noch theoretisch Beweise dafür gesehen empirisch, daher erscheint es mir unvernünftig anzunehmen, dass dies geschieht.
Persönlich, nachdem ich in meiner Jugend von XORing rand () s und unzähligen anderen Überraschungskorrelationen überrascht worden bin, habe ich wenig Grund zu der Annahme, dass das Ergebnis anders ausfallen wird, wenn ich es erneut mit ähnlichen Taktiken versuche. Aus diesem Grund würde ich es persönlich sehr ablehnen, mehrere PRNGs zusammen zu XORen, es sei denn, es wurden sehr umfangreiche Analysen und Überprüfungen durchgeführt, um mir die Gewissheit zu geben, dass dies für die jeweiligen RNGs sicher sein könnte. Als potenzielle Heilung für den Fall, dass ich einem oder mehreren der einzelnen PRNGs nicht vertraue, ist es unwahrscheinlich, dass das XOR-Verfahren mein Vertrauen erhöht. Daher werde ich es wahrscheinlich nicht für einen solchen Zweck verwenden. Ich stelle mir vor, die Antwort auf Ihre Frage ist, dass dies ein weit verbreitetes Gefühl ist.