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:
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:
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.
System.nanoTime()
.