Comment créer un générateur aléatoire
On février 10, 2021 by adminComment un générateur aléatoire pourrait-il être implémenté?
Je ne parle pas de linvocation dun langage mathRandom () , mais limplémentation des routines qui conduisent à générer des nombres totalement aléatoires.
Commentaires
- I ‘ d oser dire que vrai le hasard n’est pas possible actuellement.
- @Dynamic jai invoqué une fonction aléatoire si nécessaire, mais je nai ‘ aucune idée de la façon dont une méthode aléatoire devrait être implémentée.
- » totalement aléatoire » est un terrier de lapin très profond.
- @Dynamic: il est en fait trivial dobtenir une séquence indiscernable de données vraiment aléatoires, tant que vous regarder vers le monde extérieur avec un support matériel. La physique atomique et subatomique (désintégration atomique, événements de type capteurs de frappe de photons) est (dans la mesure où) f théorie scientifique actuelle) vraiment aléatoire et facile à mesurer. La thermodynamique à grande échelle est si chaotique que nous pouvons la considérer comme aléatoire lorsque nous inspectons le système macro à léchelle micro, etc. Le bruit dun capteur dappareil photo numérique est un bon exemple …..
Réponse
La clé dun nombre vraiment aléatoire est une source de données aléatoire. Il sagit parfois dinformations telles que les retards dans les événements de clavier ou les événements de réseau. Lorsque des données aléatoires de haute qualité sont souhaitées, il peut sagir dune désintégration radioactive . SGI a implémenté lavarand qui a tiré sa semence pour un générateur de nombres aléatoires à partir dune image numérisée dune lampe à lave. Cétait suffisant pour être considéré comme un générateur de nombres aléatoires.
En dehors des données vraiment aléatoires, on peut travailler avec un système déterministe mais chaotique. Par exemple, le mersenne twister . Dans ces situations, on ensemence le générateur avec un nombre, puis on lexécute pour obtenir des nombres pseudo-aléatoires. Celles-ci sont suffisantes pour les jeux et autres où il nest pas critique que quelquun puisse déterminer la graine (et le numéro suivant dans la séquence).
Pensez à lire le brevet 5 732 138 et http://www.lavarnd.org/ pour les détails de mise en œuvre sur la façon de créer un nombre.
Commentaires
- +1 Je considérerais différentes sources de données comme les mesures météorologiques pour votre semence. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com le défi avec les mesures météorologiques est quelles ne sont pas complètement aléatoires. Il y a tout un champ sur la prévision de la météo. La température a tendance à augmenter alors au cours dune journée. Lhiver est plus froid que lété. Le système hotbits utilise le caractère aléatoire du chronométrage de deux événements de désintégration qui sont imprévisibles (mesure le temps entre lévénement 1 et lévénement 2, et le temps entre lévénement 3 et lévénement 4 – si 1 : 2 == 3: 4, jetez les données. Si 1: 2 3: 4, le bit aléatoire est 0. Si 1: 2 > 3: 4, le bit aléatoire est 1.
- Je ‘ m parle de la vitesse du vent, de la pression barométrique, de la température, de lhumidité, etc. Vous pouvez prendre un échantillon de mesures et avoir du mal à argumenter contre le hasard à cet égard. De plus, la température seule prise avec une précision suffisante est très aléatoire.
Réponse
De quel type daléatoire parlez-vous à propos?
Il y a deux propriétés principales qui définissent aléatoires au sens mathématique: la première est imprévisibilité et le second est distribution uniforme .
Si vous parlez de le premier, il est généralement presque impossible de le générer entièrement dans un logiciel (et de le faire correctement). Il existe certains moyens, tels que la collecte dentropie à partir de périphériques dinterface humaine, par ex. /dev/random
sous Linux, mais nous générons un niveau dentropie assez bas pour être utile. Dautres ont déjà signalé certaines implémentations matérielles. Ils ont tous des racines profondément dans la théorie de la physique (comme notre croyance que le moment précis où un photon frappera un détecteur est vraiment aléatoire). Il existe des algorithmes logiciels pour cela, comme Blum-Blum-Shub . En général, nécrivez pas un PRNG si vous avez besoin dimprévisibilité, mais plutôt utilise une valeur établie . Cela va particulièrement avec la cryptographie.
Lautre propriété importante des fonctions aléatoires est en fait assez facile à satisfaire. Il existe de nombreux exemples de ceci, comme le RNG derrière RC4 , Registres de décalage de rétroaction linéaire (cela a été effectivement utilisé pour la crypto aussi, il était une fois, mais a été jugée insuffisamment sécurisée), etc.Même la bibliothèque C standard rand()
fonctionnera probablement très bien dans ce but.
Le plus important: assurez-vous de savoir laquelle des deux propriétés est fondamentale pour votre besoin. Imprévisibles Les PRNG sont également distribués uniformément, mais linverse nest pas vrai. Aussi, si vous exposez le caractère aléatoire à lintérieur dun « moteur » quelconque (comme un moteur de jeu), assurez-vous que les gens ne peuvent pas jouer avec le système, car vous pourriez être surpris de voir à quel point cest facile. Par exemple, CSS (lalgorithme de chiffrement de DVD) utilisait 2 LSFR à des fins de cryptographie et a été cassé assez facilement.
Réponse
Premièrement , vous ne pouvez pas générer de nombres vraiment aléatoires dans le logiciel. Il existe une tonne dalgorithmes différents qui vous permettent de générer des nombres pseudo-aléatoires. Selon la raison pour laquelle vous avez besoin de nombres pseudo-aléatoires (cest-à-dire si vous les utilisez en cryptographie, les exigences sont importantes différent), vous utiliseriez généralement quelque chose comme le générateur de nombres aléatoires dans la bibliothèque scientifique GNU (que, bien sûr, vous pouvez implémenter dans la langue de votre choix).
Réponse
Matériel. Vous devez vous connecter à du matériel capable de collecter lentropie de … nimporte où. Lisez la statique à partir dun radio, mettre une webcamera sur un lavalamp, ou demander à lutilisateur de taper du charabia ou de jouer avec la souris. Sans un certain contact avec le monde réel, générer un vrai hasard est impossible. Cest un domaine important o f étude, et beaucoup de travail y a été consacré. Je doute que vous frayiez de nouvelles pistes, donc vous devriez vraiment vous tenir sur les épaules de géants et commencer à lire les entrées de wikipedia.
« La génération de nombres aléatoires est trop importante pour être laissée à chance. «
-Robert R. Coveyou
EDIT
Donc je » ai appris que le matériel que vous voulez est en fait juste une puce CMOS . Le genre dappareils photo bon marché. Gardez-le simplement dans lobscurité, réglez la sensibilité vers le haut, et apparemment les variations infimes quil observe ont des racines dans la mécanique quantique, où nous dérivons notre entropie dans la vie réelle.
Réponse
La dernière fois que jai regardé, cétait il y a LOOOOONG, la référence canonique sur limplémentation de générateurs de nombres pseudo-aléatoires (PRNG ) est Knuth, Vol. 2, « Algorithmes Séminumériques » .
Ne PENSEZ même pas à essayer de mettre en œuvre votre propre PRNG avant davoir au moins examiné Knuth.
Laisser un commentaire