Un type a dit ce qui suit:
Quiconque tente de générer des nombres aléatoires par des moyens déterministes vit, bien sûr, dans un état de péché.
Cela signifie toujours que vous ne pouvez pas générer de vrais nombres aléatoires avec juste un ordinateur. Et il a dit que lorsque les ordinateurs étaient de la taille équivalente à un seul microprocesseur Intel 8080 (~ 6000 valves). Les ordinateurs sont devenus plus complexes et je pense que la déclaration de von Von Neumann n'est peut-être plus vraie. Considérez qu'un algorithme uniquement logiciel implémenté est impossible. Ils fonctionnent sur du matériel physique. Les véritables générateurs de nombres aléatoires et leurs sources d'entropie sont également constitués de matériel.
Ce fragment Java mis en boucle:
file.writeByte((byte) (System.nanoTime() & 0xff));
peut créer un fichier de données que j'ai représenté comme une image:
Vous pouvez voir la structure, mais aussi avec beaucoup d'aléatoire. Ce qui est intéressant, c'est que ce fichier PNG est de 232 Ko, mais contient 250 000 pixels d'échelle de gris. Le niveau de compression PNG était maximum. Ce n'est qu'un taux de compression de 7%, c'est-à-dire. assez non compressible. Ce qui est également intéressant, c'est que le fichier est unique. Chaque génération de ce fichier est un modèle légèrement différent et a une compressibilité similaire à ~ 7%. Je souligne cela car il est essentiel à mon argument. C'est une entropie d'environ 7 bits / octet. Cela réduira bien sûr l'utilisation d'un algorithme de compression plus puissant. Mais pas réduire à quelque chose près de 0 bits / octet. Une meilleure impression peut être obtenue en prenant l'image ci-dessus et en remplaçant sa carte de couleurs par une image aléatoire: -
La majeure partie de la structure (dans la moitié supérieure) disparaît car il ne s'agissait que de séquences de valeurs similaires mais légèrement différentes. Est-ce une véritable source d'entropie créée en exécutant simplement un programme Java sur un système d'exploitation à prises multiples? Pas un générateur de nombres aléatoires uniformément distribué, mais la source d'entropie pour un? Une source d'entropie constituée de logiciels fonctionnant sur du matériel physique qui se trouve être un PC.
Supplémentaire
Afin de confirmer que chaque image génère une nouvelle entropie sans motif fixe commun à tous, 10 images consécutives ont été générées. Celles-ci ont ensuite été concaténées et compressées avec l'archiveur le plus puissant que j'ai pu compiler (paq8px). Ce processus éliminera toutes les données courantes, y compris la corrélation automatique, ne laissant que les changements / l'entropie.
Le fichier concaténé est compressé à ~ 66%, ce qui conduit à un taux d'entropie de ~ 5,3 bits / octet ou 10,5 Mbits / image. Une quantité surprenante d'entropie
Supplémentaire 2
Il y a eu des commentaires négatifs selon lesquels ma méthode de test d'entropie par compression est défectueuse, ne donnant qu'une estimation de la limite supérieure lâche. J'ai donc exécuté le fichier concaténé via le test officiel d'évaluation de l'entropie cryptographique du NIST, SP800-90B_EntropyAssessment . C'est aussi bon que pour la mesure d'entropie non IID. Voici le rapport (désolé, cette question devient longue, mais le problème est complexe): -
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
Le résultat est que le NIST pense que j'ai généré 5,6 bits / octet d'entropie. Mon estimation de la compression bricolage met cela à 5,3 bits / octet, légèrement plus conservateur.
-> Les preuves semblent soutenir l'idée qu'un ordinateur exécutant simplement un logiciel peut générer une véritable entropie. Et que von Neumann avait tort (mais peut-être correct pour son époque).
J'offre les références suivantes qui pourraient soutenir ma réclamation: -
Existe-t-il des modèles stochastiques de non déterminisme dans le taux d'exécution du programme?
Analyse WCET des systèmes probabilistes en temps réel dur
Existe-t-il un algorithme logiciel qui peut générer un modèle de chaos non déterministe? et la pertinence des effets chaotiques.
Parallèles avec le principe d'incertitude entropique quantique
Article de blog d' Aleksey Shipilёv concernant le comportement chaotique de nanoTime (). Son nuage de points n'est pas différent du mien.
System.nanoTime()
.