Jakiś facet powiedział:
Każdy, kto próbuje generować losowe liczby za pomocą deterministycznych środków, oczywiście żyje w stanie grzechu.
To zawsze oznacza, że nie można wygenerować prawdziwych liczb losowych za pomocą samego komputera. Powiedział też, że gdy komputery były równoważnej wielkości pojedynczego mikroprocesora Intel 8080 (~ 6000 zaworów). Komputery stały się bardziej złożone i uważam, że stwierdzenie von Von Neumanna może już nie być prawdziwe. Weź pod uwagę, że zaimplementowany algorytm programowy jest niemożliwy. Działają na fizycznym sprzęcie. Prawdziwe generatory liczb losowych i ich źródła entropii są również wykonane ze sprzętu.
Ten fragment Java umieszczony w pętli:
file.writeByte((byte) (System.nanoTime() & 0xff));
mogę utworzyć plik danych, który przedstawiłem jako obraz:
Możesz zobaczyć strukturę, ale także z dużą przypadkowością. Interesujące jest to, że ten plik PNG ma rozmiar 232 KB, ale zawiera 250 000 pikseli w skali szarości. Poziom kompresji PNG był maksymalny. To tylko współczynnik kompresji 7%, tj. dość nieściśliwy. Co ciekawe, plik jest unikalny. Każda generacja tego pliku ma nieco inny wzorzec i ma podobną ~ 7% kompresowalność. Podkreślam to, ponieważ ma to kluczowe znaczenie dla mojej argumentacji. To entropia ~ 7 bitów / bajt. Zmniejszy to oczywiście użycie silniejszego algorytmu kompresji. Ale nie redukuj do niczego w pobliżu 0 bitów / bajt. Lepsze wrażenie można uzyskać, wykonując powyższe zdjęcie i zastępując jego mapę kolorów losową: -
Większość struktury (w górnej połowie) znika, ponieważ były to tylko sekwencje o podobnych, ale nieznacznie różnych wartościach. Czy to jest prawdziwe źródło entropii utworzone po prostu przez uruchomienie programu Java w systemie operacyjnym z wieloma opcjami? Nie jednolicie rozłożony generator liczb losowych, ale źródło entropii dla jednego? Źródło entropii zbudowane z oprogramowania działającego na fizycznym sprzęcie, który akurat jest komputerem.
Uzupełniający
Aby potwierdzić, że każdy obraz generuje świeżą entropię bez ustalonego wzoru wspólnego dla wszystkich, wygenerowano 10 kolejnych obrazów. Zostały one następnie połączone i skompresowane za pomocą najsilniejszego archiwizatora, jaki mogę skompilować (paq8px). Proces ten wyeliminuje wszystkie typowe dane, w tym autokorelację, pozostawiając jedynie zmiany / entropię.
Skonsolidowany plik jest skompresowany do ~ 66%, co prowadzi do szybkości entropii wynoszącej ~ 5,3 bitu / bajt lub 10,5 Mb / obraz. Zaskakująca ilość entropii
Uzupełnienie 2
Pojawiły się negatywne komentarze, że moja entropia metodologii testów kompresji jest wadliwa, dając jedynie luźne oszacowanie górnej granicy. Uruchomiłem więc skonkatenowany plik przez oficjalny test oceny entropii kryptograficznej NIST, SP800-90B_EntropyAssessment . Jest to tak dobre, jak to możliwe do pomiaru entropii bez IID. To jest raport (przepraszam, że to pytanie jest długie, ale problem jest złożony): -
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
W rezultacie NIST uważa, że wygenerowałem 5,6 bitów / bajt entropii. Mój szacunek kompresji DIY określa to na 5,3 bitów / bajt, nieco bardziej konserwatywny.
-> Dowody wydają się potwierdzać pogląd, że komputer z uruchomionym oprogramowaniem może generować prawdziwą entropię. I że von Neumann się mylił (ale może słusznie jak na swój czas).
Oferuję następujące referencje, które mogą potwierdzić moje roszczenie:
Czy istnieją jakieś stochastyczne modele niedeterminizmu w tempie wykonywania programu?
Analiza WCET probabilistycznych twardych systemów czasu rzeczywistego
Czy istnieje algorytm programowy, który może generować niedeterministyczny wzorzec chaosu? i znaczenie efektów chaotycznych.
Podobieństwa z kwantową zasadą niepewności entropijnej
Wpis na blogu Aleksey Shipilёv dotyczący chaotycznego zachowania nanoTime (). Jego fabuła rozproszenia nie różni się od mojej.
System.nanoTime()
.