Qualcuno ha detto quanto segue:
Chiunque tenti di generare numeri casuali con mezzi deterministici, ovviamente, vive in uno stato di peccato.
Questo significa sempre che non puoi generare veri numeri casuali con un solo computer. E ha detto che quando i computer avevano le dimensioni equivalenti di un singolo microprocessore Intel 8080 (~ 6000 valvole). I computer sono diventati più complessi e credo che l'affermazione di von Von Neumann potrebbe non essere più vera. Considera che un algoritmo solo software implementato è impossibile. Funzionano su hardware fisico. I veri generatori di numeri casuali e le loro fonti di entropia sono anch'essi fatti di hardware.
Questo frammento Java inserito in un ciclo:
file.writeByte((byte) (System.nanoTime() & 0xff));
posso creare un file di dati che ho rappresentato come immagine:
Puoi vedere la struttura, ma anche con molta casualità. La cosa interessante è che questo file PNG ha una dimensione di 232 KB, ma contiene 250.000 pixel in scala di grigi. Il livello di compressione PNG era massimo. Questo è solo un rapporto di compressione del 7%, vale a dire. abbastanza non comprimibile. La cosa interessante è anche che il file è unico. Ogni generazione di questo file ha uno schema leggermente diverso e ha una comprimibilità del ~ 7% simile. Lo sottolineo poiché è fondamentale per il mio argomento. Entropia di ~ 7 bit / byte. Ciò si ridurrà ovviamente con l'uso di un algoritmo di compressione più forte. Ma non ridurre a nulla vicino a 0 bit / byte. Un'impressione migliore può essere ottenuta prendendo l'immagine sopra e sostituendo la sua mappa dei colori con una casuale:
La maggior parte della struttura (nella metà superiore) scompare in quanto erano solo sequenze di valori simili ma leggermente diversi. È una vera fonte di entropia creata semplicemente eseguendo un programma Java su un sistema operativo multi-acquisizione? Non un generatore di numeri casuali distribuito uniformemente, ma la fonte entropica per uno? Una fonte entropica costruita con software in esecuzione su hardware fisico che sembra essere un PC.
Supplemental
Per confermare che ogni immagine genera una nuova entropia senza uno schema fisso comune a tutti, sono state generate 10 immagini consecutive. Questi sono stati quindi concatenati e compressi con l'archiviatore più potente che riesco a compilare (paq8px). Questo processo eliminerà tutti i dati comuni, inclusa la correlazione automatica, lasciando solo le modifiche / entropia.
Il file concatenato è stato compresso al ~ 66%, il che porta a una velocità di entropia di ~ 5,3 bit / byte o 10,5 Mbit / immagine. Una sorprendente quantità di entropia
Supplemento 2
Ci sono stati commenti negativi sul fatto che la mia entropia con la metodologia del test di compressione è difettosa, dando solo una stima libera del limite superiore. Quindi ora ho eseguito il file concatenato attraverso il test di valutazione dell'entropia crittografica ufficiale del NIST, SP800-90B_EntropyAssessment . Questo è buono come si ottiene per la misurazione dell'entropia non IID. Questo è il rapporto (scusate se questa domanda si sta allungando, ma il problema è complesso): -
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
Il risultato è che NIST ritiene di aver generato 5,6 bit / byte di entropia. La mia stima della compressione fai-da-te lo mette a 5,3 bit / byte, leggermente più conservativo.
-> Le prove sembrano supportare l'idea che un computer che esegue software può generare vera entropia. E che von Neumann aveva torto (ma forse corretto per il suo tempo).
Offro i seguenti riferimenti che potrebbero supportare la mia richiesta:
Esistono modelli stocastici di non determinismo nel tasso di esecuzione del programma?
Analisi WCET di sistemi probabilistici duri in tempo reale
Esiste un algoritmo software in grado di generare un modello di caos non deterministico? e la rilevanza degli effetti caotici.
Parallelamente al principio di incertezza entropica quantistica
Il blog di Aleksey Shipilёv sul comportamento caotico di nanoTime (). La sua trama sparsa non è diversa dalla mia.
System.nanoTime()
.