Un Générateur aléatoire est un outil ou un algorithme qui produit des résultats imprévisibles et non déterministes. Ces générateurs sont essentiels dans de nombreux domaines, de la cryptographie à la simulation informatique.
- Des résultats imprévisibles : Les générateurs de nombres aléatoires fournissent des résultats qui ne peuvent pas être prédits.
- Utilisation en cryptographie : Ils sont essentiels à la sécurité des communications.
- Simulations informatiques : Souvent utilisé dans la modélisation et l'analyse de systèmes complexes.
Générateur de nombres aléatoires
Comment fonctionne un générateur de nombres aléatoires ? ?
Les générateurs aléatoires fonctionnent soit avec des processus physiques, soit avec des algorithmes mathématiques. Les principaux types sont les générateurs de nombres aléatoires réels (TRNG) et les générateurs de nombres pseudo-aléatoires (PRNG).
Où jouer au black jack en ligne ?
Les meilleures expériences de black jack ont été faites au Casino en direct Playamo a été faite. C'est là qu'on trouve, à mon avis, les MEILLEURE SÉLECTION à des tables avec des croupiers en direct et on peut très bien s'entraîner pour le vrai casino ! En comparaison avec d'autres casinos en ligne, les gains sont vraiment payés chez Playamo et c'est pourquoi je recommande définitivement le casino en ligne Playamo !
Le casino Playamo dispose de nombreuses tables de black jack en direct et d'une paiement rapide de Gagnez.
Diverses applications du hasard ont conduit au développement de différentes méthodes de génération de données aléatoires. Certaines d'entre elles existent depuis l'Antiquité, notamment des exemples connus tels que le lancer de dés, le lancer de pièces, le mélange de cartes à jouer, l'utilisation de tiges d'achillée (pour la divination) dans le I Ching, ainsi que d'innombrables autres techniques. En raison de la nature mécanique de ces techniques, la génération de grandes quantités de nombres suffisamment aléatoires (importante en statistiques) demandait beaucoup de travail et de temps. C'est pourquoi les résultats étaient parfois collectés et distribués sous forme de tableaux de nombres aléatoires.
Il existe plusieurs méthodes de calcul pour générer des nombres pseudo-aléatoires. Toutes ne parviennent pas à atteindre l'objectif d'un vrai hasard, même si elles parviennent, à des degrés divers, à résoudre certains problèmes statistiques. Tests qui visent à mesurer le degré d'imprévisibilité de leurs résultats (c'est-à-dire dans quelle mesure leurs modèles sont reconnaissables). Cela les rend généralement inutilisables pour des applications telles que la cryptographie. Il existe toutefois des générateurs de nombres pseudo-aléatoires (CSPRNGS) soigneusement conçus et dotés de caractéristiques spéciales, qui sont spécifiquement destinés à l'utilisation cryptographique. Insérer ont été développés en cryptographie.
Applications des générateurs de nombres aléatoires
- Jeux et divertissement:
- Les générateurs de nombres aléatoires sont utilisés dans les jeux pour créer des éléments imprévisibles tels que les lancers de dés, les tirages de cartes ou la génération de niveaux.
- Cryptographie:
- Dans le domaine de la sécurité de l'information, les générateurs de nombres aléatoires sont essentiels pour générer les clés, les saltos et les nonces nécessaires au chiffrement et à l'authentification.
- Statistiques et échantillonnage:
- Lors de la création d'échantillons pour des enquêtes et des études, les générateurs de nombres aléatoires aident à tirer des échantillons représentatifs et impartiaux.
- Modèles de simulation:
- En science et en ingénierie, les générateurs de nombres aléatoires sont utilisés pour effectuer des simulations de Monte Carlo, qui utilisent des variables aléatoires pour modéliser et analyser des systèmes complexes.
- Loteries et jeux-concours:
- Ils garantissent une sélection équitable et aléatoire des gagnants dans les loteries, les jeux et autres concours.
- Algorithmes d'optimisation:
- Les méthodes aléatoires, telles que les algorithmes génétiques et le simulacre d'anneaux, utilisent des générateurs aléatoires pour explorer efficacement les espaces de solutions et trouver des solutions optimales.
- Intelligence artificielle et machine Apprendre:
- Les générateurs aléatoires sont utilisés pour mélanger des ensembles de données et sélectionner aléatoirement des données d'entraînement et de test afin de valider et d'entraîner les modèles.
Les générateurs de nombres aléatoires ont des applications dans Jeux de hasard, dans l'échantillonnage statistique, dans la simulation informatique, dans la cryptographie, dans la conception entièrement aléatoire et dans d'autres domaines où la production d'un résultat imprévisible est souhaitable. En général, dans les applications où l'imprévisibilité est la caractéristique principale, comme dans les applications de sécurité, les générateurs matériels sont préférés lorsque cela est possible.
Les générateurs de nombres pseudo-aléatoires sont très utiles pour le développement de méthodes de simulation de Monte-Carlo, car le débogage est facilité par la possibilité de répéter la même séquence de nombres aléatoires en commençant par la même graine aléatoire. Elles sont également utilisées en cryptographie - tant que la graine reste secrète. L'expéditeur et le destinataire peuvent générer automatiquement le même ensemble de nombres afin de les utiliser comme clé.
Die Erzeugung von Pseudorandom-Zahlen ist eine wichtige und häufige Aufgabe in der Computerprogrammierung. Während Kryptografie und bestimmte numerische Algorithmen einen sehr hohen Grad an scheinbarer Zufälligkeit erfordern, benötigen viele andere Operationen nur ein bescheidenes Maß an Unvorhersehbarkeit. Einige einfache Beispiele könnten sein, einem Benutzer ein „zufälliges Zitat des Tages“ zu präsentieren oder zu bestimmen, in welche Richtung sich ein computergesteuerter Gegner in einem Computerspiel bewegen könnte. Schwächere Formen der Zufälligkeit werden in Hash-Algorithmen und bei der Erstellung amortisierter Such- und Sortieralgorithmen verwendet.
Einige Anwendungen, die auf den ersten Blick für Randomisierung geeignet erscheinen, sind in Wirklichkeit nicht so einfach. Zum Beispiel muss ein System, das „zufällig“ Musikstücke für ein Hintergrundmusiksystem auswählt, nur zufällig erscheinen und kann sogar Möglichkeiten haben, die Musikauswahl zu steuern: Ein wirklich zufälliges System hätte keine Einschränkung, dass derselbe Titel zwei- oder dreimal hintereinander erscheinen könnte.
Nombres aléatoires réels vs. nombres pseudo-aléatoires ?
La différence entre les vrais nombres aléatoires et les nombres pseudo-aléatoires réside dans la prédictibilité et la source du caractère aléatoire.
- De vrais nombres aléatoires : Imprévisible, basé sur des processus physiques.
- Nombres pseudo-aléatoires : Généré par des algorithmes, prédictible si la graine est connue.
Il existe deux méthodes principales pour générer des nombres aléatoires. La première méthode mesure un phénomène physique considéré comme aléatoire, puis compense les éventuelles distorsions du processus de mesure. Des exemples de sources sont la mesure du bruit atmosphérique, du bruit thermique et d'autres phénomènes électromagnétiques et quantiques externes. Par exemple, le rayonnement cosmique de fond ou la désintégration radioactive, mesurés sur de courtes périodes, constituent des sources d'entropie naturelle (comme mesure de l'imprévisibilité ou de la surprise du processus de génération de nombres).
Die Geschwindigkeit, mit der Entropie aus natürlichen Quellen gewonnen werden kann, hängt von den zugrunde liegenden physikalischen Phänomenen ab, die gemessen werden. Daher wird gesagt, dass Quellen natürlicherweise vorkommender „wahrer“ Entropie blockierend sind – sie sind ratenbegrenzt, bis genügend Entropie gesammelt wird, um die Nachfrage zu decken. Auf einigen Unix-ähnlichen Systemen, einschließlich der meisten Linux-Distributionen, blockiert die Pseudogerätedatei /dev/random, bis ausreichend Entropie aus der Umgebung gesammelt wurde. Aufgrund dieses blockierenden Verhaltens können große Massendatenlesevorgänge von /dev/random, wie das Befüllen einer Festplatte mit Zufallsbits, auf Systemen, die diese Art von Entropiequelle verwenden, oft langsam sein.
La deuxième méthode utilise des algorithmes de calcul qui peuvent générer de longues séquences de résultats apparemment aléatoires, qui sont en réalité entièrement déterminées par une valeur initiale plus courte, connue sous le nom de valeur de la graine ou de clé. Cela permet de reproduire la totalité de la séquence apparemment aléatoire lorsque la valeur de la graine est connue. Ce type de générateur de nombres aléatoires est souvent appelé générateur de nombres pseudo-aléatoires. Ce type de générateur est généralement non bloquant, de sorte qu'il n'est pas limité en débit par un événement externe, ce qui permet de grandes opérations de lecture de données en masse.
Certains systèmes utilisent une approche hybride qui collecte l'aléatoire à partir de sources naturelles, lorsqu'elles sont disponibles, et s'appuie sur des générateurs de nombres pseudo-aléatoires (CSPRNG) cryptographiquement sûrs, qui sont réensemencés périodiquement lorsque le taux de lecture souhaité dépasse la capacité de l'approche de collecte naturelle à répondre à la demande. Cette approche évite le comportement bloquant à débit limité des générateurs de nombres aléatoires basés sur des méthodes plus lentes et purement environnementales.
Während ein Pseudorandom-Zahlengenerator, der ausschließlich auf deterministischer Logik basiert, niemals als „wahre“ Zufallsquelle im reinsten Sinne des Wortes angesehen werden kann, sind sie in der Praxis im Allgemeinen ausreichend, selbst für anspruchsvolle sicherheitskritische Anwendungen. Sorgfältig entwickelte und implementierte Pseudorandom-Zahlengeneratoren können für sicherheitskritische kryptografische Zwecke zertifiziert werden, wie dies bei den Algorithmen Yarrow und Fortuna der Fall ist. Ersterer ist die Grundlage der /dev/random-Entropiequelle auf FreeBSD, AIX, macOS, NetBSD und anderen. OpenBSD verwendet einen Pseudorandom-Zahlenalgorithmus, der als arc4random bekannt ist.
Méthodes de génération
Méthodes physiques
Les premières méthodes de génération de nombres aléatoires, comme le lancer de dés, le lancer de pièces et les roues de roulette, sont encore utilisées aujourd'hui, principalement dans les jeux et les paris, car elles sont trop lentes pour la plupart des applications statistiques et cryptographiques.
Un générateur physique de nombres aléatoires peut être basé sur un phénomène physique atomique ou subatomique essentiellement aléatoire, dont l'imprévisibilité peut être attribuée aux lois de la mécanique quantique. Les sources d'entropie comprennent la désintégration radioactive, le bruit thermique, le bruit de tir, le bruit d'avalanche dans les diodes Zener, les écarts d'horloge, les mouvements temporels d'une tête de lecture de disque dur et le bruit radio. Cependant, les phénomènes physiques et les outils utilisés pour les mesurer présentent généralement des asymétries et des distorsions systématiques qui ne rendent pas leurs résultats uniformément aléatoires. Un extracteur aléatoire, tel qu'une fonction de hachage cryptographique, peut être utilisé pour obtenir une distribution uniforme de bits à partir d'une source qui n'est pas uniformément aléatoire, mais à un débit binaire plus faible.
Un prototype de générateur de nombres aléatoires en temps réel et à grande vitesse basé sur un laser chaotique a été développé en 2013.
Plusieurs méthodes ingénieuses ont été développées pour collecter ces informations entropiques. Une technique consiste à appliquer une fonction de hachage à une trame d'un flux vidéo provenant d'une source imprévisible. Lavarand a utilisé cette technique avec des images de plusieurs lampes à lave. HotBits a mesuré la désintégration radioactive à l'aide de tubes Geiger-Müller, tandis que Random.org a enregistré les variations d'amplitude du bruit atmosphérique avec une radio normale.
Méthodes assistées par ordinateur
La plupart des nombres aléatoires générés par les ordinateurs utilisent des PRNG, qui sont des algorithmes capables de générer automatiquement de longues séquences de nombres avec de bonnes propriétés aléatoires, mais les séquences finissent par se répéter (ou la consommation de mémoire augmente indéfiniment). Ces nombres aléatoires sont suffisants dans de nombreuses situations, mais ne sont pas aussi aléatoires que les nombres utilisés comme source d'entropie à partir du bruit électromagnétique atmosphérique. La série de valeurs générées par de tels algorithmes est généralement déterminée par un nombre fixe, appelé "graine". L'un des PRNG les plus courants est le générateur de congruence linéaire, qui utilise la relation de récurrence
Xn+1=(aXn+b)mod mX_{n+1} = (aX_n + b) \mod mXn+1=(aXn+b)modm
verwendet, um Zahlen zu erzeugen, wobei aaa, bbb und mmm große ganze Zahlen sind, und Xn+1X_{n+1}Xn+1 die nächste Zahl in einer Reihe von pseudorandom Zahlen ist. Die maximale Anzahl von Zahlen, die die Formel erzeugen kann, ist das Modul mmm. Die Rekurrenzbeziehung kann auf Matrizen erweitert werden, um viel längere Perioden und bessere statistische Eigenschaften zu haben. Um bestimmte nicht-zufällige Eigenschaften eines einzelnen linearen Kongruenzgenerators zu vermeiden, können mehrere solcher Zufallszahlengeneratoren mit leicht unterschiedlichen Werten des Multiplikatorkoeffizienten aaa parallel verwendet werden, wobei ein „Master“-Zufallszahlengenerator zwischen den verschiedenen Generatoren auswählt.
Une méthode simple pour générer manuellement des nombres aléatoires est la méthode dite des carrés moyens, proposée par John von Neumann. Bien qu'elle soit simple à mettre en œuvre, sa sortie est de mauvaise qualité. Elle a une période très courte et de graves faiblesses, comme le fait que la séquence de sortie converge presque toujours vers zéro. Une innovation récente consiste à combiner la méthode des carrés moyens avec une séquence de Weyl. Cette méthode produit des sorties de haute qualité sur une longue période.
La plupart des langages de programmation contiennent des fonctions ou des routines de bibliothèque qui fournissent des générateurs de nombres aléatoires. Ils sont souvent conçus pour fournir un octet ou un mot aléatoire ou un nombre à virgule flottante uniformément réparti entre 0 et 1.
La qualité, c'est-à-dire le caractère aléatoire de telles fonctions de bibliothèque, varie considérablement, allant d'une sortie totalement prévisible à une sécurité cryptographique. Le générateur de nombres aléatoires standard dans de nombreux langages, y compris Python, Ruby, R, IDL et PHP, est basé sur l'algorithme de Mersenne-Twister et n'est pas suffisant à des fins cryptographiques, comme indiqué explicitement dans la documentation du langage. De telles fonctions de bibliothèque ont souvent de mauvaises propriétés statistiques et certaines répètent des modèles après seulement des dizaines de milliers d'essais. Elles sont souvent initialisées avec l'horloge en temps réel d'un ordinateur comme graine, car une telle horloge est de 64 bits et mesure en nanosecondes, bien au-delà de la précision d'une personne. Ces fonctions peuvent offrir suffisamment de hasard pour certaines tâches (par exemple les jeux vidéo), mais ne conviennent pas lorsqu'une grande qualité de hasard est requise, comme dans les applications cryptographiques ou statistiques.
Des générateurs de nombres aléatoires de meilleure qualité sont disponibles sur la plupart des systèmes d'exploitation ; par exemple /dev/random sur différents dérivés BSD, Linux, Mac OS X, IRIX et Solaris ou CryptGenRandom pour Microsoft Windows. La plupart des langages de programmation, y compris ceux mentionnés ci-dessus, offrent un moyen d'accéder à ces sources de plus haut niveau.
Généré par l'homme
La génération de nombres aléatoires peut également être effectuée par des humains, en collectant différentes entrées d'utilisateurs finaux et en les utilisant comme source aléatoire. Cependant, la plupart des études constatent que les sujets humains présentent un certain degré de non-aléatoire lorsqu'ils tentent de générer une séquence aléatoire de chiffres ou de lettres, par exemple. Ils pourraient passer trop souvent d'un choix à l'autre par rapport à un bon générateur de nombres aléatoires ; cette approche n'est donc pas largement utilisée. Pour la même raison que les humains réussissent mal cette tâche, la génération humaine de nombres aléatoires peut être utilisée comme outil pour obtenir un aperçu des fonctions cérébrales qui ne sont pas accessibles par d'autres moyens.
Suivi et contrôles statistiques
Même avec une source de nombres aléatoires plausible (peut-être d'un générateur matériel basé sur la mécanique quantique), il faut faire preuve de prudence pour obtenir des nombres totalement impartiaux. Le comportement de ces générateurs change souvent avec la température, la tension d'alimentation, l'âge de l'appareil ou d'autres influences extérieures.
Les nombres aléatoires générés sont parfois soumis à des tests statistiques avant d'être utilisés, afin de s'assurer que la source sous-jacente fonctionne toujours, et sont ensuite post-traités pour améliorer leurs propriétés statistiques. Un exemple serait le générateur matériel de nombres aléatoires TRNG9803, qui utilise une mesure d'entropie comme test matériel, puis retravaille la séquence aléatoire à l'aide d'un zélateur de flux de registres à décalage. Il est généralement difficile d'utiliser des tests statistiques pour valider les nombres aléatoires générés. Wang et Nicol ont proposé une technique de test statistique basée sur les distances, utilisée pour identifier les faiblesses de plusieurs générateurs de nombres aléatoires. Li et Wang ont proposé une méthode de test des nombres aléatoires basée sur des sources d'entropie chaotiques laser en utilisant les propriétés du mouvement brownien.
Les tests statistiques sont également utilisés pour donner confiance dans le fait que la sortie finale post-traitée d'un générateur de nombres aléatoires est réellement impartiale, de nombreux ensembles de tests aléatoires ayant été développés.
Autres considérations
Ajuster la distribution
Distributions équidistantes
Die meisten Zufallszahlengeneratoren arbeiten nativ mit ganzen Zahlen oder einzelnen Bits, daher ist ein zusätzlicher Schritt erforderlich, um die „kanonische“ Gleichverteilung zwischen 0 und 1 zu erreichen. Die Implementierung ist nicht so trivial wie die Division der Ganzzahl durch ihren maximalen möglichen Wert. Konkret:
- L'entier qui entre dans la transformation doit fournir suffisamment de bits pour la précision voulue.
- La nature même de l'arithmétique en virgule flottante signifie que plus le nombre est proche de zéro, plus il y a de précision. Cette précision supplémentaire n'est généralement pas utilisée en raison du nombre de bits requis.
- Les erreurs d'arrondi lors de la division peuvent fausser le résultat. Dans le pire des cas, une zone prétendument exclue peut être tirée avec des nombres réels, contrairement aux attentes des mathématiques.
Der Mainstream-Algorithmus, der von OpenJDK, Rust und NumPy verwendet wird, wird in einem Vorschlag für die STL von C++ beschrieben. Er nutzt nicht die zusätzliche Präzision und leidet nur im letzten Bit an Verzerrungen aufgrund des Rundens auf die nächste gerade Zahl. Andere numerische Bedenken sind berechtigt, wenn diese „kanonische“ Gleichverteilung auf einen anderen Bereich verschoben wird. Eine vorgeschlagene Methode für die Swift-Programmiersprache behauptet, überall die volle Präzision zu nutzen.
Gleichmäßig verteilte ganze Zahlen werden häufig in Algorithmen wie dem Fisher-Yates-Shuffle verwendet. Auch hier kann eine naive Implementierung eine Modulo-Verzerrung in das Ergebnis einführen, daher müssen aufwendigere Algorithmen verwendet werden. Eine Methode, die fast nie eine Division durchführt, wurde 2018 von Daniel Lemire beschrieben, wobei der aktuelle Stand der Technik der arithmetischen Kodierungs-inspirierte „optimale Algorithmus“ von Stephen Canon von Apple Inc. im Jahr 2021 ist.
La plupart des RNG de 0 à 1 incluent 0, mais excluent 1, tandis que d'autres incluent ou excluent les deux.
Autres distributions
En présence d'une source de nombres aléatoires uniformément distribués, il existe plusieurs méthodes pour créer une nouvelle source aléatoire correspondant à une fonction de densité de probabilité. Une méthode, appelée méthode d'inversion, consiste à intégrer jusqu'à une plage supérieure ou égale au nombre aléatoire (qui doit être généré entre 0 et 1 pour des distributions correctes). Une deuxième méthode, appelée méthode d'acceptation-rejet, consiste à choisir une valeur x et une valeur y et à tester si la fonction de x est supérieure à la valeur de y. Si c'est le cas, la valeur x est acceptée. Dans le cas contraire, la valeur x