Gilt von Neumanns Zufälligkeit im Sünde-Zitat nicht mehr?


25

Einige Leute sagten folgendes:

Wer versucht, mit deterministischen Mitteln Zufallszahlen zu generieren, lebt natürlich in einem Zustand der Sünde.

Das bedeutet immer, dass Sie mit nur einem Computer keine echten Zufallszahlen generieren können. Und er sagte, dass Computer die gleiche Größe hätten wie ein einzelner Intel 8080-Mikroprozessor (~ 6000 Ventile). Computer sind komplexer geworden, und ich glaube, dass von Von Neumanns Aussage möglicherweise nicht mehr wahr ist. Beachten Sie, dass ein implementierter Algorithmus nur für Software unmöglich ist. Sie laufen auf physischer Hardware. Echte Zufallszahlengeneratoren und ihre Entropiequellen bestehen ebenfalls aus Hardware.

Dieses Java-Fragment in einer Schleife:

      file.writeByte((byte) (System.nanoTime() & 0xff));

kann eine Datendatei erstellen, die ich als Bild dargestellt habe:

Nanoimage

Sie können Struktur sehen, aber auch mit viel Zufälligkeit. Interessant ist, dass diese PNG-Datei eine Größe von 232 KB hat und dennoch 250.000 Graustufenpixel enthält. Die PNG-Komprimierungsstufe war maximal. Das ist nur eine Kompressionsrate von 7%, dh. ziemlich nicht komprimierbar. Interessant ist auch, dass die Datei eindeutig ist. Jede Generation dieser Datei ist ein etwas anderes Muster und weist eine ähnliche Komprimierbarkeit von ~ 7% auf. Ich hebe dies als kritisch für mein Argument hervor. Das sind ~ 7 Bit / Byte Entropie. Dies wird sich natürlich bei Verwendung eines stärkeren Kompressionsalgorithmus verringern. Aber nicht auf nahe 0 Bits / Byte reduzieren. Um einen besseren Eindruck zu erhalten, nehmen Sie das obige Bild und ersetzen Sie es durch eine zufällige Farbkarte:

randomisiertes Nanoimage

Der größte Teil der Struktur (in der oberen Hälfte) verschwindet, da es sich nur um Sequenzen mit ähnlichen, aber geringfügig unterschiedlichen Werten handelt. Handelt es sich um eine echte Entropiequelle, die nur durch Ausführen eines Java-Programms auf einem Multi-Take-Betriebssystem erstellt wurde? Kein gleichmäßig verteilter Zufallsgenerator, sondern die Entropiequelle für einen? Eine Entropiequelle, die aus Software besteht, die auf physischer Hardware ausgeführt wird und zufällig nur ein PC ist.

Ergänzend

Um zu bestätigen, dass jedes Bild eine frische Entropie ohne ein allen gemeinsames festes Muster erzeugt, wurden 10 aufeinanderfolgende Bilder erzeugt. Diese wurden dann verkettet und mit dem stärksten Archivierungsprogramm komprimiert, das ich kompilieren kann (paq8px). Bei diesem Vorgang werden alle gängigen Daten entfernt, einschließlich der automatischen Korrelation, wobei nur die Änderungen / Entropie übrig bleiben.

Die verkettete Datei wurde auf ~ 66% komprimiert, was zu einer Entropierate von ~ 5,3 Bit / Byte oder 10,5 MBit / Bild führt. Eine überraschende Menge an Entropie

Zusatz 2

Es gab negative Kommentare, dass meine Entropie durch die Kompressionstestmethode fehlerhaft ist und nur eine lose Schätzung der oberen Schranke ergibt. Daher habe ich jetzt die verkettete Datei im offiziellen NIST-Test zur Bewertung der kryptografischen Entropie, SP800-90B_EntropyAssessment , ausgeführt . Dies ist so gut wie bei einer Nicht-IID-Entropiemessung. Dies ist der Bericht (Entschuldigung, diese Frage wird lang, aber das Problem ist komplex):

Running non-IID tests...

Entropic statistic estimates:
Most Common Value Estimate = 7.88411
Collision Test Estimate = 6.44961
Markov Test Estimate = 5.61735
Compression Test Estimate = 6.65691
t-Tuple Test Estimate = 7.40114
Longest Reapeated Substring Test Estimate = 8.00305

Predictor estimates:
Multi Most Common in Window (MultiMCW) Test: 100% complete
    Correct: 3816
    P_avg (global): 0.00397508
    P_run (local): 0.00216675
Multi Most Common in Window (Multi MCW) Test = 7.9748
Lag 

Test: 100% complete
    Correct: 3974
    P_avg (global): 0.00413607
    P_run (local): 0.00216675
Lag Prediction Test = 7.91752
MultiMMC Test: 100% complete
    Correct: 3913
    P_avg (global): 0.00407383
    P_run (local): 0.00216675
Multi Markov Model with Counting (MultiMMC) Prediction Test = 7.9394
LZ78Y Test: 99% complete
    Correct: 3866
    P_avg (global): 0.00402593
    P_run (local): 0.00216675
LZ78Y Prediction Test = 7.95646
Min Entropy: 5.61735

Das Ergebnis ist, dass NIST glaubt, ich hätte 5,6 Bit / Byte Entropie erzeugt. Meine DIY-Komprimierungsschätzung geht von 5,3 Bit / Byte aus, etwas konservativer.

-> Der Beweis scheint die Vorstellung zu stützen, dass ein Computer, auf dem nur Software ausgeführt wird, echte Entropie erzeugen kann. Und das von Neumann war falsch (aber vielleicht richtig für seine Zeit).


Ich biete die folgenden Referenzen an, die meine Behauptung stützen könnten:

Gibt es stochastische Modelle des Nichtdeterminismus bei der Programmausführungsrate?

WCET-Analyse probabilistischer Echtzeitsysteme

Gibt es einen Softwarealgorithmus, der ein nicht deterministisches Chaosmuster erzeugen kann? und die Relevanz von chaotischen Effekten.

Parallelen zum Prinzip der quantentropischen Unsicherheit

Aleksey Shipilёvs Blogeintrag zum chaotischen Verhalten von nanoTime (). Sein Streudiagramm ist meinem nicht unähnlich.


47
Ich denke, Sie verwechseln "Ich kann kein Muster sehen" / tägliche Zufälligkeit mit mathematischer / stochastischer Zufälligkeit.
Raphael

3
@Raphael Ich weiß nicht. Mathematische Kompressionsalgorithmen tun dies. Und wozu sind Echtzeitbetriebssysteme gut, wenn die gesamte Software immer deterministisch ist? Ich frage nur nach dem In-Determinismus in Bezug auf Bits.
Paul Uszak

16
Sie verschmelzen "am Computer" und "mit deterministischen Mitteln".
user253751

24
Ihr grundsätzliches Problem hierbei ist, dass Sie von "Ich verstehe nicht, wie dieses Muster erzeugt wird" ausgehen und zu dem Schluss kommen, dass "niemand verstehen kann, wie dieses Muster erzeugt wird". Dies ist nicht richtig und angesichts Ihres SE-Profils kennen Sie sich mit Kryptografie mit Sicherheit so gut aus, dass Sie wissen, dass sie nicht folgt. Es ist einfach, ein System zu entwickeln, das man nicht kaputt machen kann, aber die eigentliche Herausforderung besteht darin, ein System zu entwickeln, das auch andere nicht kaputt machen können.
Gilles 'SO- hör auf böse zu sein'

4
Ich denke, die meisten Definitionen von "deterministisch" würden Algorithmen ausschließen, die aufrufen System.nanoTime().
bmm6o

Antworten:


75

Nur weil Sie ein Muster nicht sehen können, heißt das noch lange nicht, dass es kein Muster gibt. Nur weil ein Komprimierungsalgorithmus kein Muster finden kann, heißt das noch lange nicht, dass kein Muster existiert. Kompressionsalgorithmen sind keine Wundermittel, mit denen die wahre Entropie einer Quelle auf magische Weise gemessen werden kann. Alles, was sie dir geben, ist eine Obergrenze für den Entropiebetrag. (Ebenso gibt Ihnen der NIST-Test nur eine Obergrenze.) Chaos ist keine Zufälligkeit.

Es bedarf einer genaueren Analyse und Untersuchung, um ein gewisses Vertrauen in die auf diese Weise erhaltene Qualität der Zufälligkeit zu gewinnen.

Es gibt Gründe zu der Annahme, dass wir durch Ausnutzen des Taktjitters und der Abweichung zwischen zwei Hardware-Taktgebern wahrscheinlich ein gewisses Maß an Zufälligkeit erzielen können , aber dies ist heikel und knifflig, sodass Sie vorsichtig sein müssen. Ich würde nicht empfehlen, zu versuchen, Ihre eigenen zu implementieren. Stattdessen würde ich vorschlagen, dass Sie eine hochwertige Entropiequelle verwenden (normalerweise implementiert in den meisten modernen Betriebssystemen). Weitere Informationen finden Sie auch in Wikipedia , haveged und /crypto//q/48302/351 (was Ihnen anscheinend bereits bekannt ist).

Zum Schluss noch ein Kommentar zu Ihrem Opener:

"Wer versucht, mit deterministischen Mitteln Zufallszahlen zu generieren, lebt natürlich in einem Zustand der Sünde."

Das bedeutet immer, dass Sie mit nur einem Computer keine echten Zufallszahlen generieren können.

Nein, so wird es normalerweise nicht genommen, und es ist nicht das, was es sagt. Es heißt, man kann mit deterministischen Mitteln keine echten Zufallszahlen erzeugen . Ob Sie dies auf einem Computer tun können, hängt davon ab, ob der Computer deterministisch ist oder nicht. Wenn der Computer deterministisch ist oder Ihr Programm nur deterministische Operationen verwendet, ist dies nicht möglich. Viele Computer enthalten jedoch nicht deterministische Elemente. Wenn Ihr Programm diese verwendet, ist eine detailliertere Analyse erforderlich, bevor Sie entscheiden können, ob sie zum Generieren von Zufallszahlen verwendet werden können. In Ihrem Fall nanoTime()ist nicht deterministisch.


6
Um den Komprimierungsalgorithmus-Punkt zu erweitern, sucht PNG wie die meisten Komprimierungsalgorithmen nach Mustern in den Daten. Ein Algorithmus, der nach Mustern in den Änderungen in den Daten sucht , wird das Beispielbild wahrscheinlich recht gut komprimieren.
Mark

1
@ Mark - tatsächlich, PNG ist Muster in Veränderungen analysiert (es verwendet deflate Kompression auf die Differenz zwischen dem tatsächlichen Bildelementwert und dem Ausgang von einem aus einer Anzahl von Vorhersage Heuristik angewandt , die bereits von den Arten der Veränderung im Bild zu sehen basieren) Die durchgeführte Analyse ist jedoch recht simpel, da sie so konzipiert wurde, dass sie in den 90er Jahren effizient auf eingebetteten Geräten ausgeführt werden konnte. Eine interessantere Frage wäre, wie genau ein verlustbehafteter Komprimierungsalgorithmus sein könnte, z. B. was ist der RMS-Fehler von JPEG oder eine fraktale Komprimierung, die auf das Bild angewendet wird?
Jules

3
@Jules: Entscheidend ist nicht, dass PNG simpel ist, sondern dass es die Art von Mustern komprimiert, die wahrscheinlich in vielen Arten von Bildern auftreten würden. Wenn man ein typisches Bild mit zB 123x234 Pixel aufnimmt und es in 234x123 Pixel ändert, während die Pixel in der gleichen Reihenfolge bleiben (die erste Zeile des neuen Bildes enthielt also 123 Pixel aus der oberen Zeile des alten plus 111 Pixel des alten zweite Reihe, die nächste Reihe des neuen Bildes enthielt die letzten 12 Pixel der ursprünglichen zweiten Reihe, die gesamte ursprüngliche dritte Reihe und 99 der vierten usw. PNG würde ...
Supercat

1
... komprimiert das resultierende Bild wahrscheinlich nicht annähernd so gut wie das Original, da es nicht mehr dieselbe räumliche Beziehung zwischen den Zeilen gibt, obwohl das zweite Bild genau dieselben Pixel in genau derselben Reihenfolge wie das Original enthält zuerst.
Supercat

100

Wenn Sie eine Hardwarequelle für Entropie / Zufälligkeit verwenden, "versuchen Sie nicht, Zufälligkeit mit deterministischen Mitteln zu erzeugen " (mein Schwerpunkt). Wenn Sie keine Hardwarequelle für Entropie / Zufälligkeit verwenden, bedeutet ein leistungsfähigerer Computer lediglich, dass Sie mehr Sünden pro Sekunde begehen können.


Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
DW

20

Ich habe das Zitat immer so verstanden, dass ein deterministischer Algorithmus einen festen Entropiebetrag hat, und obwohl die Ausgabe "zufällig" erscheinen kann, kann sie nicht mehr Entropie enthalten, als die Eingaben liefern. Aus dieser Perspektive sehen wir, dass Ihr Algorithmus über Entropie schmuggelt System.nanoTime()- die meisten Definitionen eines "deterministischen" Algorithmus würden es nicht erlauben, diese Funktion aufzurufen.

Das Zitat - wenn auch markig - ist im Wesentlichen eine Tautologie. Es gibt nichts zu widerlegen, und es ist keine Weiterentwicklung der Hardware möglich, die dies unmöglich macht. Es geht nicht um Hardware, sondern um die Definition eines deterministischen Algorithmus. Er stellt lediglich fest, dass Determinismus und Zufälligkeit unvereinbar sind. Für jeden deterministischen Algorithmus wird sein gesamtes Verhalten durch seine Startbedingungen vorhergesagt. Wenn Sie glauben, eine Ausnahme gefunden zu haben, verstehen Sie falsch, was es bedeutet, deterministisch zu sein.

Es ist richtig, dass ein Prozess, der auf einem gemeinsam genutzten Computer mit einer komplexen Reihe von Caches ausgeführt wird und der verschiedene Netzwerk- und Hardwareeingaben empfängt, auf viel mehr Entropie zugreifen kann als ein Prozess, der auf einfacher, isolierter, dedizierter Hardware ausgeführt wird. Wenn dieser Prozess jedoch auf diese Entropie zugreift, ist er nicht mehr deterministisch, und das Zitat gilt nicht mehr.


Bei der Reflektion (nicht der Java-Typ) bin ich mir nicht sicher, ob nanoTime () erforderlich ist. Dies war nur eine Ersatz-Stoppuhr, um den Fortschritt der sie umgebenden Schleife zu verfolgen. Wenn nanoTime () entfernt würde, wäre die Ausführungsrate der Schleife selbst (ohne direkte Aufrufe der Hardware) ebenfalls nicht deterministisch, da es sich um Software handelt, die noch mit der Computerumgebung interagiert. Dies ist die gesamte Grundlage der Echtzeitprogrammierung auf Embedded Kit. Ich bin ziemlich davon überzeugt, dass von Neumanns Zitat auf einen modernen Computer nicht mehr anwendbar ist.
Paul Uszak

1
@PaulUszak Wie oft muss ich das sagen? Von Neumann sagt, man kann keine Zufallszahlen deterministisch erzeugen. Sie sagen immer wieder, Von Neumann liege falsch, weil Sie Nichtdeterminismus gebrauchen könnten. Es ist, als würden Sie wiederholt behaupten, dass die Aussage „Es dauert sehr lange, von Paris nach Berlin zu gelangen“ in der modernen Welt nicht zutrifft, weil Sie zwischen diesen beiden Städten fliegen können. Na und? Das Zitat handelt vom Gehen und das dauert noch lange. Von Neumanns Zitat handelt von deterministischen Systemen, die immer noch nicht zufällig funktionieren können.
David Richerby

1
@PaulUszak Es ist buchstäblich unmöglich. Wenn Sie glauben, dass Sie einen deterministischen Algorithmus haben, dessen Verhalten nicht durch seine Eingaben bestimmt wird, ist es nur eine Frage der Identifizierung, wo die Entropie eingeführt wird.
bmm6o

18

Wer versucht, mit deterministischen Mitteln Zufallszahlen zu generieren, lebt natürlich in einem Zustand der Sünde.

Wenn man "in einem Zustand der Sünde leben" als "Unsinn machen" interpretiert, dann ist das vollkommen richtig.

Was Sie getan haben, ist eine ziemlich langsame Methode System.nanoTime(), um eine ziemlich schwache Zufälligkeit zu erzeugen. Sie haben einige gemessen

... Entropierate von ~ 5,3 Bit / Byte ...

aber das ist nur die obere Schranke. Alles, was Sie jemals bekommen können, ist eine Obergrenze. Die reale Entropie kann um Größenordnungen kleiner sein.

Füllen Sie das Array stattdessen mit einem kryptografischen Hash wie MD5. Berechnen Sie eine Sequenz wie md5(0), md5(1), ...(aus jedem Wert, der ein oder mehrere Bytes enthält, spielt dies keine Rolle). Sie erhalten überhaupt keine Komprimierung (ja, MD5 ist defekt, aber immer noch gut genug, um inkomprimierbare Daten zu erzeugen).

Wir können sagen, dass es überhaupt keine Entropie gibt, aber Sie würden 8 Bits / Byte messen.

Wenn Sie wirklich etwas Zufälliges benötigen, müssen Sie nicht nur eine HW-Quelle verwenden, sondern auch eine sichere Untergrenze für die tatsächliche Entropie kennen. Obwohl höchstwahrscheinlich eine gewisse Zufälligkeit nanoTime()vorliegt, sind mir keine nicht trivialen unteren Grenzen bekannt.

Wenn Sie Zufälligkeit für die Kryptografie benötigen, müssen Sie wirklich auf etwas zurückgreifen, das von Ihrem Betriebssystem, Ihrer Sprache oder einer guten Bibliothek bereitgestellt wird. Solche Anbieter sammeln Entropie aus mehreren Quellen und / oder dedizierter Hardware, und es wurde eine ganze Menge Arbeit in solche Entropieschätzungen gesteckt.

Beachten Sie, dass Sie in der Regel kaum Entropie benötigen. Ein guter (deterministischer) PRNG, der mit einigen zufälligen Bytes initialisiert wurde, ist für die Kryptographie und damit auch für alles andere verwendbar.


4
@PaulUszak Sicher, ein deterministischer PRNG kann nicht als OTP verwendet werden. Aber OTP ist ein ganz besonderer Fall, da es per Definition einen wirklich zufälligen Schlüssel erfordert. AFAIK für alles andere genügt ein zufällig gesätes sicheres PRNG (der Samen muss z. B. 128 oder 256 Bit Entropie haben, abhängig von der erforderlichen Sicherheitsstufe).
Maaartinus

3
"Wenn Sie wirklich etwas Zufälliges brauchen" → Sie brauchen im Grunde nie echte Zufälligkeit. Sie benötigen vielmehr eine fehlende Korrelation. Wahre Zufälligkeit ist eine starke Garantie, aber im Grunde genommen wird jeder Fall genauso gut von einem modernen CSPRNG und einem unvorhersehbaren Samen befriedigt.
Veedrac

3
@maaartinus Du verstehst mich nicht ganz. Ich sage, Sie brauchen keine echten Zufallssamen, Sie brauchen nur unvorhersehbare unkorrelierte Samen.
Veedrac

6
Als Beispiel habe ich eine Textdatei mit 1 Million fortlaufenden Nummern erstellt. gzipkonnte nur 63% Komprimierung erzielen, obwohl es fast keine Entropie gibt. Es konnten nur Wiederholungen wie999919999299993...
Barmar

6
@PaulUszak Das war mein Punkt - das Komprimierungsverhältnis ist kein guter Indikator für die Entropie. Es zeigt an, ob der bestimmte Komprimierungsalgorithmus die Art der in Ihren Daten enthaltenen Muster erkennen kann.
Barmar

14

Ich dachte, ich würde mich auf die Bedeutung von "zufällig" einlassen. Die meisten Antworten beziehen sich auf die Ausgabe zufälliger Prozesse im Vergleich zur Ausgabe deterministischer Prozesse. Das ist eine sehr gute Bedeutung von "zufällig", aber es ist nicht die einzige.

Ein Problem bei der Ausgabe von zufälligen Prozessen besteht darin, dass sie sich nur schwer von der Ausgabe von deterministischen Prozessen unterscheiden lassen: Sie enthalten keine "Aufzeichnung" darüber, wie zufällig ihre Quelle war. Ein extremes Beispiel hierfür ist ein berühmter XKCD-Comic, bei dem ein Zufallszahlengenerator immer zurückkehrt 4und ein Codekommentar angibt , dass er zufällig ist, weil er von einem Würfel stammt.

Ein alternativer Ansatz zur Definition von "Zufälligkeit", genannt Kolmogorov-Komplexität , basiert auf den Daten selbst, unabhängig davon, wie sie generiert wurden. Die Kolmogorov-Komplexität einiger Daten (z. B. eine Folge von Zahlen) ist die Länge des kürzesten Computerprogramms, das diese Daten ausgibt: Daten sind "zufälliger", wenn sie eine höhere Kolmogorov-Komplexität aufweisen.

Ihre Verwendung von Komprimierungsalgorithmen wie PNG und der Vergleich der Länge vor und nach der Komprimierung ähnelt der Idee der Kolmogorov-Komplexität. Aufgrund der Komplexität von Kolmogorov können Daten jedoch als Programm in einer beliebigen Programmiersprache von Turing-complete codiert werden, anstatt in einem eingeschränkten Format wie PNG. Das "Dekomprimieren" solcher Codierungen (Programme) erfolgt durch Ausführen, was beliebig viel Zeit und Speicher in Anspruch nehmen kann (z. B. mehr als in unserem dürftigen Universum verfügbar ist).

Das Theorem von Rice besagt, dass wir im Allgemeinen nicht zwischen Programmen, die sich für immer wiederholen, und Programmen, die unsere Daten ausgeben, unterscheiden können. Daher ist es sehr schwierig, die Kolmogorov-Komplexität einiger Daten zu ermitteln: Wenn wir ein Programm aufschreiben, das diese Daten generiert, gibt es möglicherweise ein kürzeres Programm (dh eine geringere Komplexität), aber wir haben es nicht erkannt, weil wir es nicht konnten Unterscheide es von einer Endlosschleife. Die Kolmogorov-Komplexität ist daher nicht berechenbar. Wenn wir die Busy-Beaver-Zahlen kennen, können wir sie berechnen, indem wir diese verwenden, um die Zeitspanne zu begrenzen, die wir für jedes Programm prüfen.

Um die Kolmogorov-Komplexität (dh die "intrinsische Zufälligkeit") Ihrer Beispieldaten zu ermitteln, müssen Sie das kürzeste deterministische Programm finden, das dieselbe Bytefolge ausgibt, und dessen Länge bestimmen.

Jetzt können wir Ihre Frage aus Sicht der Kolmogorov-Komplexität beantworten und stellen fest, dass das Zitat richtig ist: Wir können keine Zufallszahlen (hohe Kolmogorov-Komplexität) mit deterministischen Mitteln erzeugen.

Warum nicht? Stellen wir uns vor, wir schreiben ein kleines Computerprogramm und erzeugen daraus eine Folge von Zufallszahlen. Eine der folgenden Situationen muss zutreffen:

  • Wir erzeugen eine enorme Menge an Output. Da wir jedoch wissen, dass diese Ausgabe von einem kleinen Programm generiert wird, hat die Ausgabe (per Definition) eine geringe Kolmogorov-Komplexität und ist daher in diesem Sinne nicht "zufällig".
  • Wir generieren so wenige Zahlen, dass das Aufschreiben derselben oder sogar weniger Bits dauern würde, als das Aufschreiben unseres kurzen Generierungsprogramms. In diesem Fall sind die Zahlen relativ inkompressibel, was darauf hinweist, dass sie im Sinne von Kolmogorov ziemlich zufällig sind. Da die Ausgabemenge jedoch mit der von uns eingegebenen Menge (dem Quellcode für das Programm) vergleichbar ist, kann man mit Recht sagen, dass das Programm nicht die Zufälligkeit "erzeugt" hat, sondern dass wir dieses Programm ausgewählt haben. In diesem Fall könnte unser Erzeugungsprogramm auch nur eine Liste dieser exakten Zahlen (z print([...]). B. ) gewesen sein.

In beiden Fällen "generieren" wir nicht mehr Zufälligkeit als wir eingeben (die "Zufälligkeit" des Quellcodes unseres generierenden Programms). Wir könnten versuchen, dies mit einem längeren Generierungsprogramm zu umgehen, um zu vermeiden, dass die Ausgabe einen kurzen Generator enthält. Es gibt jedoch nur zwei Möglichkeiten, dies zu tun:

  • Systematisch den Code auf irgendeine Weise "aufblähen". Die Komplexität von Kolmogorov kümmert sich jedoch nicht um das bestimmte Programm, mit dem wir die Daten generiert haben. Es geht nur darum, welches generierende Programm das kleinste ist. Durch systematisches Aufblähen wird die Komplexität von Kolmogorov nicht erhöht, da solche Muster im Code selbst mit einer sehr geringen Codemenge generiert werden können. Wenn wir zum Beispiel run(shortGenerator)eine ganze Ladung systematisches Aufblähen nehmen und hinzufügen, um zu erhalten run(bloatedGenerator), existiert immer noch ein kurzer Generator der Form run(addBloat(shortGenerator)).
  • Fügen Sie bloat nicht systematisch , dh ohne Muster, hinzu, sodass eine addBloatFunktion genauso aufgebläht sein müsste wie der Code selbst. Es ist jedoch genau das, was etwas zufällig macht, wenn es so frei von Mustern ist (hohe Kolmogorov-Komplexität). Daher Blähungen das Erzeugungsprogramm auf diese Weise ist die Zufälligkeit (Kolmogorov Komplexität) der Ausgabe zu erhöhen, sondern es auch erhöht die Menge an Zufälligkeit (Kolmogorov Komplexität) , dass wir in Form von Quellcode zur Verfügung stellen müssen. Daher sind es immer noch wir, die die "Zufälligkeit" und nicht das Programm bereitstellen. Im obigen Beispiel des einfachen Schreibens entspricht das print([...])Hinzufügen von nicht systematischem Aufblähen dem einfachen Schreiben von mehr "Zufallszahlen" in diese fest codierte Liste.

"finde kürzestes deterministisches Programm, das die gleiche Bytesequenz ausgibt" - das ist der springende Punkt meines Arguments, Ausrufezeichen. Sie können dieses Bild nicht wiederholen. Es ist jedes Mal einzigartig. Das Muster ist ein Ergebnis des Zusammenspiels von Java, JVM, Betriebssystem, CPU + Caches, Festplatte, der Trance-Musik, die ich gestreamt habe und die CPU / RAM-Zyklen und alles dazwischen verbraucht. Das Muster ergibt sich einfach aus der einen Zeile Java-Code in einer for / next-Schleife. Ein wesentlicher Teil der Entropie kommt von den zugrunde liegenden Hardwareschaltungen. Es kann nicht codiert werden.
Paul Uszak

@PaulUszak Kolmogorov Komplexität misst die "Zufälligkeit" eines bestimmten Werts, wie das erste Bild, das Sie gepostet haben; oder das zweite Bild, das Sie gepostet haben; oder ein Schnappschuss dieser HTML-Seite; usw. Wenn Sie sich für den Prozess interessieren , der ein Bild erzeugt hat (deterministisch oder nicht), sind andere Maßnahmen wie Shannon-Informationen besser geeignet. Ich habe gerade gesehen, dass in keiner anderen Antwort die Komplexität von Kolmogorov erwähnt wurde. Sie sind beide nützliche Methoden, da sie uns verschiedene Dinge erzählen.
Warbo

@PaulUszak Betrachten Sie den Test, den Sie durchgeführt haben, indem Sie diese Bilder als PNG-Dateien komprimiert und die Dateigröße verglichen haben. Wenn Sie eine PNG dekomprimieren, erhalten Sie genau dasselbe Bild zurück, mit dem Sie begonnen haben. es ist deterministisch; Sie nicht ein anderes, zufälliges Bild bekommen. Macht das Ihren Kompressionstest unbrauchbar? Keineswegs! Die Komplexität von Kolmogorov ist wie eine extreme Version Ihres PNG-Tests: Wir komprimieren nicht in eine PNG-Datei, sondern in ein (deterministisches) Computerprogramm. Diese können sehr klein werden und dennoch alle Originaldaten reproduzieren.
Warbo

6
@PaulUszak Aus Ihrem Kommentar geht hervor, dass Sie bereits alles erkannt haben, um das Zitat zu beweisen: Sie haben das Muster nicht mit deterministischen Mitteln erstellt, da Sie sich auf die Entropie verlassen, die Sie oder die Außenwelt (Netzwerkhardware und Server) Sie streamen von, der Inhalt des Streams usw. wurde in Ihr System eingeführt. Ob das Überprüfen der letzten acht Bits von Zeitmessungen in Nanosekunden, die in einer Schleife aufgenommen wurden, eine gute Möglichkeit ist, diese Entropie zu erfassen , ist eine separate Frage, an der sich viele Antworten hängen, die jedoch ein separates Thema darstellt.
mtraceur

7

Komprimierung ist kein genauer Test der Zufälligkeit, und es wird auch kein Bild betrachtet, in dem "das sieht zufällig aus" steht.

Die Zufälligkeit wird durch empirische Methoden getestet . Tatsächlich gibt es eine Reihe speziell entwickelter Software / Algorithmen zum Testen der Zufälligkeit, beispielsweise TestU01 und Diehard-Tests .

Darüber hinaus ist Ihr Bild eine 1D-Folge von Zahlen, die auf ein Leerzeichen abgebildet sind, und ist daher keine gute Darstellung bestimmter Muster, die auftreten können.

Wenn Sie Ihr Bild Pixel für Pixel untersuchen würden, würden Sie höchstwahrscheinlich viele kurze Muster mit zunehmendem Wert vor einem plötzlichen Abfall finden. Wenn Sie ein Diagramm mit dem x-Wert als Probennummer und dem y-Wert als Wert der Zufallsfunktion erstellen würden, würden Sie höchstwahrscheinlich feststellen, dass Ihre Daten tatsächlich wie eine Sägezahnwelle aussehen:

Sägezahnwelle

Dies ist das Muster, das durch Werte gebildet wird, die unter modularer Arithmetik zunehmen (wofür Ihre Berechnung ein Beispiel ist: zeitliche Zunahme mit nahezu konstanter Rate und & 0xFFHandeln als mod 256).


Sie scheinen die falschen Tests zu haben. Alle Ihre Tests sind Zufallstests. Sie messen nicht die Entropie, die der Kern dieser Frage ist. Die Komprimierung ist ein vollständig gültiges Entropiemaß für Nicht-IID-Daten (siehe NIST-Entropiemaß). Tatsächlich ist es eines der wenigen Programme, das ohne Promotion in Programmierung und Mathematik vernünftigerweise implementiert werden kann. Obwohl Sie mit dem Sägezahn recht haben. Es ist so, aber die Zähne sind nicht deterministisch zufällig, nicht regelmäßig, wie Sie gezeigt haben. Daher die Entropie.
Paul Uszak

2
@PaulUszak Ist diese Messung sinnvoll, wenn sie vom Komprimierungsalgorithmus abhängt?
Kutschkem

@kutschkem WIRD es ist eine der Standard-Entropiemaßnahmen in NIST SP 800-90B. Es ist auch einfach zu machen. Wie kann sonst die Nicht-IID-Entropie gemessen werden? Und Kompressionsalgen sind bis zu einer Untergrenze asymptotisch, daher die Division durch 2. Die Shannon-Formel funktioniert hier nicht.
Paul Uszak

3
@PaulUszak - Für kryptografische Zwecke sollten wir davon ausgehen, dass die Methode der Generierung einem Angreifer bekannt ist. Die Kenntnis der Methode, mit der diese Daten generiert wurden, ermöglicht es mit ziemlicher Sicherheit, einen Komprimierungsalgorithmus zu schreiben, der besser als PNG oder wie auch immer der NIST-Test vorgeht. Beide setzen nichts voraus (oder im Fall von PNG nichts, was tatsächlich korrekt ist). über die Quelle der Daten.
Jules

5

Sie verwechseln das Konzept von Zufallszahlen mit "Zahlen, die zufällig erscheinen".

Um von Neumanns Zitat zu verstehen, müssen wir verstehen, was es bedeutet, "Zufallszahlen zu generieren". Die Antwort von Warbo verknüpft eine hervorragende XKCD mit diesem Ziel: XKCD-Comic

Wenn wir über Zufallszahlen sprechen, sprechen wir nicht über die Werte selbst. Offensichtlich ist eine 4 nicht zufälliger als eine 3. Wir sprechen von der Fähigkeit eines Dritten, diesen Wert besser vorherzusagen als eine zufällige Chance. Eine Zufallszahl ist eine, die nicht vorhersehbar ist. Manchmal fügen wir dem Bedingungen hinzu. Ein kryptografisch sicherer Pseudozufallszahlengenerator (CSPRNG) generiert Zahlen, die nur zufällig vorhergesagt werden können, wenn ein Angreifer den Startwert / Schlüssel nicht kennt. Es wird normalerweise als eine Zahl definiert, die nicht vorhersehbar ist, selbst wenn das System einschließlich aller Schlüssel vollständig bekannt ist.

Nun ist Ihr Beispiel, wie viele darauf hingewiesen haben, nicht deterministisch. Das Programm gibt nicht an, aus welchem ​​Wert der Wert stammt System.nanoTime(). Daher gehört es nicht zur selben Klasse wie die Verwendung eines CSPRNG zur Erzeugung von Pseudozufallszahlen. Ersteres kann nicht deterministisch sein, während Letzteres deterministisch ist, wenn der Wert des Schlüssels deterministisch ist. Ersteres enthält Operationen, für die keine deterministischen Werte definiert sind.

Sie werden jedoch feststellen, dass ich sagte, dass es möglicherweise nicht deterministisch ist. Beachten Sie, dass System.nanoTime()keine Werte für diesen Zweck bereitgestellt werden sollen. Es kann nicht deterministisch genug sein oder auch nicht. Eine Anwendung passt die Systemuhr möglicherweise so an, dass die Aufrufe an System.nanoTime()alle mit einem Vielfachen von 256 Nanosekunden (oder in der Nähe) erfolgen. Möglicherweise arbeiten Sie auch in Javascript, wo die jüngsten Exploits von Spectre dazu geführt haben, dass große Browser die Auflösung ihrer Timer absichtlich verringern. In diesen Fällen können Ihre "Zufallszahlen" in Umgebungen, die Sie nicht geplant haben, sehr gut vorhersehbar sein.

  • Also Zufallszahlen mit deterministischen Prozessen erzeugen ... sin.
  • Zufallszahlen mit dedizierter Zufallshardware generieren ... keine Sünde.
  • Zufallszahlen mit nichtdeterministischen Aspekten von Computern generieren ... vielleicht Sünde.

Es hängt alles davon ab, was Sie vorhaben. Wenn Sie Ihre Liebesbriefe an Sponge Bob verschlüsseln, damit Ihre Schwester sie nicht lesen kann, sind die Anforderungen an Ihre sogenannten Zufallszahlen ziemlich gering. System.nanoTime()benutzt wie du es getan hast ist wahrscheinlich gut genug. Wenn Sie nukleare Geheimnisse vor einem fortgeschrittenen ausländischen Staat schützen, der sie aktiv sucht, sollten Sie die Verwendung von Hardware in Betracht ziehen, die für diese Herausforderung ausgelegt ist.


4

Ich glaube nicht, dass Sie die Behauptung verstanden haben. Der Punkt ist, dass, wenn es ein deterministisches Verfahren zum Erzeugen einer 'Zufalls'-Zahlenreihe (oder irgendetwas wirklich) gibt, das Finden des Musters nur die Aufgabe ist, dieses Verfahren zu finden!

Daher gibt es immer eine deterministische Methode, um die nächste ganze Zahl vorherzusagen. Genau das erwarten wir nicht, wenn wir von Zufälligkeit ausgehen!

Jede hinreichend komplexe Deterministik ist von Stochastizität nicht zu unterscheiden.

--Von Wrzlprmfts Benutzerseite

Also, selbst wenn etwas zufällig aussieht , warum um alles in der Welt würden wir es als "zufällig" modellieren, wenn wir ein deterministisches Verfahren haben, um es zu erzeugen?

Dies ist meines Erachtens das Hauptproblem. Sie haben nur eine Form der Ununterscheidbarkeit des PRNG und "echte Zufälligkeit" gezeigt.

Es folgt jedoch nicht, dass diese Konzepte gleich sind. Insbesondere ist Zufälligkeit ein mathematisch- theoretisches Konzept. Wir haben oben bereits gezeigt, dass es theoretisch zu einem Widerspruch kommt, wenn man PRNG als „echte Zufälligkeit“ betrachtet. Daher können sie nicht gleich sein.


1
Ähm, sind Sie sicher, dass Sie dieses Zitat verstanden haben? Sie scheinen es selbst zu widersprechen ..?
Paul Uszak

Bin ich Könntest Du das erläutern? Ich wollte damit sagen, dass es sinnlos ist, etwas deterministisch zu generieren, wenn Sie es als zufällig behandeln möchten, auch wenn jemand anderes den Unterschied nicht erkennen kann.
Diskrete Eidechse

2
@PaulUszak Sie behaupten, weil Ihnen etwas stochastisch vorkommt, ist es zufällig. Nur weil etwas stochastisch aussieht, heißt das nicht, dass es zufällig ist - es könnte genauso gut ein ausreichend komplexer deterministischer Prozess sein.
Gilles 'SO - hör auf böse zu sein'

O(n2)

3

Ich denke, dass andere bereits darauf hingewiesen haben, aber es wurde nicht so betont, also lassen Sie mich auch auf die Diskussion eingehen.

Wie bereits erwähnt, geht es um die Messung der Entropie. Komprimierungsalgorithmen können Ihnen etwas mitteilen, sind jedoch quellenunabhängig. Da Sie mehr darüber wissen, wie die Daten generiert wurden, könnten Sie wahrscheinlich einen viel besseren Algorithmus zum Komprimieren der Daten entwickeln , was bedeutet, dass die wahre Entropie viel geringer ist.

Außerdem verwechseln Sie die Bedeutungen der Phrasen "am Computer" und "deterministisch". Sie können auf jeden Fall nicht deterministische Operationen auf dem Computer ausführen .

Außerdem haben Sie es gerade getan , aber das ist auf den ersten Blick nicht so offensichtlich.

Ein typischer deterministischer Algorithmus für eine Zufallszahlengenerierung ist z. PRNG wie linearer Kongruenzgenerator. Sie sind staatlich. Innerer Zustand bedeutet weniger Entropie, da der nächste Zustand durch den vorherigen bestimmt wird. Darauf werde ich nicht näher eingehen, das ist Ihnen wahrscheinlich klar. Ein wichtiger Punkt ist, dass ein vollständig deterministischer Algorithmus nur vom vorherigen Zustand abhängt, was auch immer er sein mag.

Schauen Sie sich jetzt Ihren Algorithmus an. Worauf basiert es? Wie viel Staat hast du? Ist es deterministisch?

  file.writeByte((byte) (System.nanoTime() & 0xff));

Lassen Sie uns file.writedie Probleme mit dem Leeren von Puffern und dem Warten auf E / A ignorieren (haben Sie für einen Moment versucht, den Festplattenkabeln starke Geräusche zuzufügen? Nein? Hey, Sie könnten das tun. Hey, es ist dann nicht deterministisch! :)) und Konzentrieren wir uns auf die Quelle, es ist wichtiger.

Die Zeit ist eine Art Staat. Es ist unterschiedlich, aber das meiste davon ist das gleiche. Aus diesem Grund haben Sie versucht, es zu umgehen, und & 0xFF verwendet, um den größten Teil des Status zu löschen . Aber Sie haben noch nicht alles gelöscht. Ein Teil des vorherigen Lesevorgangs kann bis zum nächsten auslaufen. Es ist also sicherlich nicht vollständig nicht deterministisch. *)

Das interessiert uns aber nicht. Um zu "beweisen", dass das Zitat falsch ist:

Wer versucht, mit deterministischen Mitteln Zufallszahlen zu generieren, lebt natürlich in einem Zustand der Sünde.

Sie müssen es mit deterministischen Mitteln beweisen.
Was uns interessiert, ist: Ist Ihr Algo sicher voll deterministisch ?

..und es ist offensichtlich, dass es nicht ist.

  System.nanoTime() & 0xff

Das ist eine Zeitmessung. Zeit und Messung . Das Maßteil kann es deterministisch machen, wenn der Wert zwischengespeichert wird. Ich nehme an es ist nicht, sonst hätte diese Funktion keinen Sinn. Wenn es dann direkt aus der Quelle gelesen wird, haben wir einen zeitbasierten Wert. Da ( ich nehme wieder an ) Sie dies nicht auf einer dedizierten Hardware für einzelne Tasks ausgeführt haben, kann es vorkommen , dass Sie gelegentlich eine Kontextumschaltung durchführen. Selbst wenn Sie eine dedizierte Hardware für einzelne Aufgaben hatten, ist die Zeitmessung möglicherweise immer noch nicht deterministisch, da Temperatur- / Feuchtigkeitsverschiebungen in der Zeitquelle, Bus-Taktzeiten usw. auftreten.

Ich stimme vollkommen zu, dass ich hier übertreibe. Drifts werden nicht so groß sein, um viel Einfluss zu haben (obwohl nanotimesie real sein könnten). Noch wichtiger nanotimeist, soll schnell sein. Es liest nicht aus der Echtzeitquelle. Es basiert auf dem inneren Befehl / der Zykluszahl des Prozessors. Das ist eigentlich deterministisch, wenn Sie keine Kontextwechsel sicherstellen.

Mein Punkt ist, dass es tatsächlich sehr schwierig sein kann, einen wirklich 100% deterministischen Algorithmus auszuführen, wenn Sie ihn auf die Zeit stützen und Sie kein Recht haben, dieses Zitat zu widerlegen, es sei denn, Sie verfügen über vollständig deterministische Mittel.

*) Interessanterweise könnten Sie wahrscheinlich die tatsächliche Zufälligkeit erhöhen, wenn Sie den Hardcore-Weg gehen. Führen Sie & 0x01 nach und nach aus, und warten Sie eine beachtliche Zeit, bevor Sie die einzelnen Bits lesen. Das Generieren von Daten auf diese Weise wäre lächerlich lang, aber ich würde tatsächlich argumentieren, dass dies als nahezu zufällig angesehen werden könnte. IIF, das Sie auf Nicht-RTOS- und IFF-Systemen ausführen, ist in jeder "wahrnehmbaren Zeit" hoch genug, um sicherzustellen, dass der zugrunde liegende Wert erreicht wird Das Betriebssystem ging entweder in den Ruhezustand oder wechselte kontextbezogen zu einer anderen Aufgabe.


2
NAS

So etwas war genau mein Argument für "[Sie] könnten einen viel besseren [Komprimierungs-] Algorithmus konstruieren"
quetzalcoatl

Lass dich nicht auf den exakten Wert von 5,3 fixieren. Unabhängig davon, um wie viel besser Sie eine Komprimierungsalge erstellen können (Sie können nicht, da ich eine der besten der Welt verwendet habe - paq8px), bleibt die reine Entropie inkomprimierbar. Das ist eine der wichtigsten Definitionen für Zufälligkeit. Oder schlagen Sie vor, dass alles auf null Bytes komprimiert werden kann? Die Taubenzüchter würden nicht zustimmen.
Paul Uszak

Das 0xff ist da, weil man mit 64-Bit-Ganzzahlen kein gutes Bild machen kann. Und wenn Sie 0x01 verwenden, müssen Sie mit Bit-Handling herumspielen, mit dem ich mich nicht abgeben konnte. Das ist alles. Die NIST-Entropie und meine eigenen Maße deuten sowieso auf Entropie in höheren Bits hin (~ 5 von ihnen).
Paul Uszak

1
+1, und dies scheint mir die bisher beste Antwort zu sein: Die einzige Entropiequelle in der fraglichen Situation sind genau die Inkonsistenzen in der Zeit, die zwischen den einzelnen Ablesungen der Uhr vergeht ! Und das kommt von einer Mischung aus Details wie der Arbeitsweise des Betriebssystem-Schedulers und der Hardware und Details wie dem, was der Benutzer bis zu diesem Moment an diesem System getan hat, was wiederum indirekt Auswirkungen auf Dinge wie die weitere Planung oder die Dauer der Festplatte hat Zugriffe erfolgten aufgrund einer Fragmentierung im Laufe der Zeit oder aufgrund der aktuellen Aktivitäten in Swap / Memory / Cache oder im Netzwerk / etc.
mtraceur

2

Ich denke, die Antwort, die Sie brauchen, beginnt mit diesem Kommentar, den Sie selbst als Antwort auf eine andere Antwort abgegeben haben:

Das Muster ist ein Ergebnis des Zusammenspiels von Java, JVM, Betriebssystem, CPU + Caches, Festplatte, der Trance-Musik, die ich gestreamt habe und die CPU / RAM-Zyklen und alles dazwischen verbraucht. Das Muster entsteht einfach aus der einen Zeile Java-Code in einer for / next-Schleife. Ein wesentlicher Teil der Entropie kommt von den zugrunde liegenden Hardwareschaltungen.

Ich denke, Sie haben das bereits erkannt: Sie haben keine deterministischen Mittel verwendet, um das Muster zu erstellen.

Sie haben einen Computer verwendet, von dem ein nicht zu vernachlässigender Teil deterministisch ist, aber die Entropie kam von externen nicht deterministischen (oder zumindest nicht deterministischen) Quellen: Sie oder die Außenwelt, die interagieren mit dem Computer (und in geringerem Maße mit physischen Fehlern in der Computerhardware, die die zeitlichen Abläufe der Dinge beeinflussen könnten).

Dies ist übrigens ein großer Teil der Art und Weise, wie moderne Betriebssysteme ihre Zufallszahlengeneratoren einsetzen, die Programmen zur Verfügung stehen: indem sie die Entropie in Wechselwirkungen mit ihrer Hardware und dem Benutzer nutzen, von dem wir hoffen, dass sie für einen Angreifer nicht vorhersehbar sind.

Übrigens ist die Entropie der Außenwelt tatsächlich ein Problem, mit dem sich die sonst gut codierte Kryptographie bis heute befassen muss: Computer mit vorhersagbarem VerhaltenB. solche mit Nur-Lese-Speicher oder solche, die über das Netzwerk gestartet werden und deren Netzwerkumgebung vorhersehbar ist (entweder nicht mit einem Netzwerk verbunden oder die Arbeitslast im Netzwerk ist so gering, dass alles innerhalb des Netzwerks bereitgestellt wird) Eine verlässliche Zeitspanne), auf der dieselbe begrenzte Menge von Software mit ungefähr gleichbleibendem Verhalten ausgeführt wird, könnte die Entropie, die sie von diesen als unvorhersehbar angenommenen Komponenten erhalten, grob überschätzen und am Ende weitaus vorhersehbarere Zahlen erzeugen als würden Sie auf einem typischen Arbeitsplatz sitzen, der alle möglichen anderen Dinge für Sie erledigt (Musik streamen, mit Dropbox synchronisieren, was auch immer) im Hintergrund.

Ich denke, die meisten Antworten konzentrieren sich darauf, ob das Überprüfen der letzten acht Bits von Zeitmessungen in Nanosekunden, die in einer Schleife aufgenommen wurden, eine gute Möglichkeit ist, diese Entropie zu gewinnen. Dies ist eine sehr wichtige Frage, die Sie richtig beantworten müssen, bevor Sie die Methode in Ihrem Beispiel als Zufallszahlengenerierungsschema in der Praxis verwenden , aber es ist eine andere Frage als die, nach der Sie meiner Meinung nach fragen.


0

Um die vorherigen Antworten zu ergänzen, haben Sie hier eine einfache Möglichkeit, über diese Frage nachzudenken.

Es geht um den Unterschied zwischen zufällig und deterministisch . Wir kommen zu Von Neumann und was er danach gesagt hat.

Zufällige Zahlen

Ein echter Zufallszahlengenerator hätte kein Muster, das nicht einmal im Hintergrund verborgen wäre. Mit diesem Muster könnten wir die nächste Zahl vorhersagen, die der Sequenz bisher gegeben ist. In einer idealen Welt könnte man alles wissen, was es im physikalischen Universum zu wissen gibt, und über das System, Nanosekunden für Nanosekunden, und es wäre immer noch nutzlos, die nächste produzierte Zahl vorherzusagen.

Das ist ein idealer Fall - in der Praxis erreichen wir dies, indem wir viele Quellen zusammenmischen, die "keine schlechten Annäherungen" an den Zufall darstellen oder wirklich zufällig sind, oder die die Dinge mathematisch so weit vertauschen, dass Sie mathematisch nachweisen können, dass sie sehr nahe an unvorhersehbar und unvorhersehbar kommen mangelnde Neigung zu bestimmten Zahlen oder Mustern.

  • "Gute" Quellen sind Dinge, die dem Warten auf einen radioaktiven Zerfallsprozess oder einen anderen Quantenprozess ähneln, der von Natur aus unvorhersehbar ist. Ausgang von einem wärmeempfindlichen Halbleiter. Zufälliges Rauschen in einer Diode oder einem anderen elektrischen Material. Photonenzählung von der Sonne.

  • In diesem Zusammenhang können wir auch einige hinzufügen, die wir als "nicht schlecht" betrachten, was hilfreich ist, da sie keine Verbindung zu diesen Elementen haben: Warten auf den nächsten Mausklick oder das nächste Netzwerkpaket. Letzte Mikrotime beim nächsten Schreiben der Datei. Ausgabe einer "bekannten aber mathematisch ziemlich zufälligen" Pseudozufallszahlengeneratorfunktion. Vorherige Entropie aus früheren Verwendungen von Zufallszahlen.

Das Ziel hierbei ist es, eine Zahl zu erhalten , die unabhängig von dem Universum, das Sie kennen , immer noch nicht vorhergesagt werden kann und die statistisch genauso wahrscheinlich ist wie diese Zahl , ohne mathematisch erkennbares Muster, Verzerrung oder Vorhersagbarkeit und ohne Korrelation zu einem Ereignis, das dies ist überwacht und zur Vorhersage herangezogen werden. (Oder wenn dies mit einem Ereignis korreliert ist, erfolgt dies auf eine Weise, die die Verbindung unglaublich labil macht, z. B. "Nanosekunden-Ziffer nur der Zeit des letzten Mausklicks")

Deterministische Zahlen

Mathematiker können Dinge über Formeln und Funktionen beweisen. So ist es möglich zu beweisen, dass eine Funktion, wenn sie wiederholt aufgerufen wird, keinem Muster eine Vorliebe gibt, außer dem einfachen Muster "Dies sind die Ausgaben dieser Funktion, wenn sie wiederholt aufgerufen wird".

Wenn Sie beispielsweise eine Zahl zwischen 1 und 10 Millionen auswählen, diese binär schreiben und sie wiederholt "haschen", erhalten Sie eine ziemlich zufällig aussehende Folge von Ziffern. Es ist fast zufällig - aber es ist überhaupt nicht zufällig. Sie können anhand des Algorithmus und eines beliebigen Zustands vorhersagen, wie die nächste Zahl aussehen wird.

Wir nennen es "Pseudozufall", weil es hauptsächlich zufällig aussieht und zu sein scheint, auch wenn es nicht so ist.

Hier ist ein gutes Beispiel. Denken Sie an diese dreistellige Folge von "Zufallszahlen": 983, 367, 336, 244, 065, 664, 308, 602, 139, 494, 639, 522, 473, 719, 070, 217. Sagen wir, dass ich es Ihnen sage Ich kann auf die gleiche Weise eine Million Zahlen erzeugen. Sie können dann an einen Statistiker weitergeben, der bestätigt (sagt), dass er gleichmäßig verteilt ist oder wie auch immer. Es gibt kein offensichtliches vorhersehbares Muster. Sie sehen ziemlich zufällig aus, oder? Aber jetzt sage ich Ihnen, dass sie tatsächlich sind

die 500. + Ziffer von Pi, gruppiert in 3s.

Plötzlich jedoch zufällig die

Ziffern von Pi

Vielleicht können Sie sofort vorhersagen, dass die nächsten 2 Zahlen 986 und 094 sein werden.

Um klar zu sein, ich weiß nicht genau, wie zufällig das ist

Ziffern von Pi

sind. Es wird untersucht und die Antwort bekannt sein. Der springende Punkt ist jedoch: Grundsätzlich gilt das Gleiche für jede Quelle, die nach einem deterministischen Prozess hergestellt wird .

Zwischen

Dazwischen gibt es eine ganze Reihe von "Dingen, die zufällig aussehen und oft bis zu einem gewissen Grad zufällig sind". Je mehr Zufälligkeit und nahezu Zufälligkeit man einmischen kann, desto weniger neigt die Ausgabe dazu, ein Muster zu erkennen oder eine Ausgabe mathematisch vorherzusagen.

Zurück zu von Neumann und Ihrer Frage

Wie Sie sehen, sehen deterministische Ausgaben möglicherweise zufällig aus, sind statistisch jedoch möglicherweise sogar zufällig verteilt. Sie könnten sogar "geheime" oder sich schnell ändernde Daten verwenden, von denen wir keine realistische Hoffnung haben, dass sie es wissen. Aber solange es deterministisch ist, können die Zahlen niemals wirklich zufällig sein . Sie können nur "so nahe am Zufall sein, dass wir den Unterschied gerne vergessen".

Das ist die Bedeutung des Zitats, das Sie gegeben haben. Ein deterministischer Prozess kann einfach keine Zufallszahlen liefern. Es können nur Zahlen angegeben werden, die scheinbar zufällige Zahlen sind und sich auch so verhalten.

Wir können Ihre Frage jetzt folgendermaßen umformulieren: "Die Ausgabe meines (oder eines modernen) Computers kann völlig zufällig aussehen und sich völlig verhalten. Bedeutet das, dass von Neumanns Zitat jetzt veraltet und falsch ist?"

Das Problem ist immer noch das Folgende: Auch wenn die Ausgabe Ihres Computers zufällig aussieht und sich verhält, ist sie möglicherweise nicht wirklich zufällig . Wenn es nur deterministisch berechnet wird, bedeutet das, dass es nichts gibt, was nicht vorhersehbar ist, was Ursache und Wirkung sind, um die nächste Zahl zu ermitteln (das ist, was "deterministisch" in diesem Sinne bedeutet). Wir beginnen mit einigen vorhandenen Daten (bekannt), wenden einen bekannten Prozess an (komplex oder chaotisch oder was auch immer) und erhalten eine scheinbar neue "Zufallszahl". Aber es ist nicht zufällig, weil der Prozess deterministisch war.

Wenn Sie sagen, dass Ihre Methode einen echten Hardware-Zufallsgenerator enthält, um dies zu beheben (wie eine Zufallszahl, die durch radioaktiven Zerfall oder Rauschen in einem Halbleiter erzeugt wird), könnte Ihre Antwort jetzt zufällig sein - aber Ihre Methode ist per Definition nicht mehr deterministisch , gerade weil man die Outputs (oder Effekte) aufgrund der Inputs / Initialdaten (Ursachen) nicht mehr vorhersagen kann .

Von Neumann gewinnt per Definition in beide Richtungen!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.