Générateur de nombres aléatoires
(en anglais random number generator, RNG) — c'est un système conçu pour générer une séquence de nombres ou de symboles
dont la signification ne peut être prédite à l'avance. Une séquence spécifique de résultats générés peut contenir un certain
modèle qui sera tracé après le processus de génération, mais qui ne pouvait pas être prévu à l'avance.
Générateur de nombres aléatoires matériel
Pour générer de vrais nombres aléatoires, un générateur de nombres aléatoires matériel
(en anglais hardware random number generator, HRNG) est utilisé
ou il est aussi appelé vrai générateur de nombres aléatoires
(en anglais true random number generator, TRNG) —

est un dispositif qui génère des nombres aléatoires à partir d'un processus physique qui change constamment d'une manière qui est
pratiquement impossible à modéliser. De tels générateurs peuvent être basés sur l'utilisation de processus aléatoires macroscopiques, c'est-à-dire
sur une échelle qui permet des mesures et des observations à l'œil nu, par exemple, lancer des pièces, des dés ou
roulettes. Bien qu'un processus macroscopique puisse être entièrement déterminé selon la mécanique newtonienne,
un mécanisme bien conçu comme une roue de roulette produira un résultat imprévisible, ce qui peut s'expliquer
par la théorie du chaos et l'instabilité des systèmes dynamiques due à la différence des conditions initiales de chacun
nouvelle tentative de faire tourner la roulette. Le principal inconvénient des générateurs utilisant des processus macroscopiques a toujours été
vitesse lente et, par conséquent, l'incapacité de générer un grand nombre de valeurs dans un court laps de temps.
Aujourd'hui, les générateurs de nombres aléatoires matériels ont tendance à utiliser des dispositifs basés sur des phénomènes microscopiques

qui génèrent des signaux de "bruit" de faible niveau et statistiquement aléatoires, tels que des bruits divers (de grenaille, thermiques, atmosphériques),
l'effet photoélectrique, impliquant un séparateur de faisceau, et d'autres phénomènes quantiques. De tels processus sont de bonnes sources
d'entropie parce que leur résultat est absolument impossible à prédire en théorie, mais en raison de la complexité de
mise en œuvre et la lenteur relative des travaux, le domaine d'utilisation de tels générateurs est limité aux domaines disciplinaires
avec certaines exigences pour les valeurs générées.
Fondamentalement, les générateurs de nombres aléatoires matériels électroniques sont utilisés en cryptographie pour générer de manière cryptographique aléatoire
clés pour assurer un transfert de données sécurisé, par exemple, dans les protocoles de cryptage Internet tels que le sécurité de la couche de transport
(en anglais Transport Layer Security, TLS).
Générateur de nombres pseudo-aléatoires

Une alternative aux générateurs matériels (physiques) sont les générateurs basés sur des algorithmes - générateurs de nombres pseudo-aléatoires
(en anglais pseudorandom number generator, PRNG),
qui créent une séquence de nombres qui ressemble au hasard, mais en fait ce n'est pas le cas. Les chiffres générés par le PRNG
ne peuvent pas être considérés comme vraiment aléatoires car ils sont complètement déterminés par une valeur initiale, appelée graine du PRNG. Bien que
la séquence de nombres générée par les générateurs de nombres aléatoires matériels est plus proche d'un vrai hasard, pseudo-aléatoire
les générateurs de nombres sont souvent utilisés dans la pratique dans de nombreux domaines en raison de leur vitesse de génération de nombres, de leur facilité de
mise en œuvre et un prix relativement bas. Il existe de nombreuses méthodes pour créer une séquence pseudo-aléatoire de nombres,
parmi eux le Mersenne Twister, un générateur congruentiel linéaire (LCG), les générateurs de nombres aléatoires Xorshift, également
appelés générateurs de registre à décalage, le Well Equidistributed Long-period Linear (WELL) qui est une forme de
registre à décalage à rétroaction linéaire optimisé pour l'implémentation logicielle et d'autres méthodes basées sur des algorithmes.
Mersenne Twister
Le Mersenne Twister est l'un des générateurs de nombres pseudo-aléatoires les plus populaires développé en 1997 par
Makoto Matsumoto (松本 眞) et Takuji Nishimura (西村 拓士). Son nom vient du fait que son
longueur de période est choisie comme un nombre de Mersenne premier, c'est un nombre premier de la forme

pour un entier n.
Ce PRNG a été conçu spécifiquement pour résoudre la plupart des lacunes trouvées dans les PRNG précédents. Les principaux atouts du Mersenne Twister:
- Une très longue période de 219937 — 1
- Passe de nombreux tests statistiques aléatoires, y compris les tests Diehard et la plupart, mais pas tous, des tests TestU01
- Possède une licence de logiciel libre permissive et sans brevet pour toutes les variantes sauf CryptMT
- k-distribué avec une précision de 32 bits pour chaque 1 ≤ k ≤ 623
- Les implémentations génèrent généralement des nombres aléatoires plus rapidement que les véritables méthodes de génération (matérielles)
Le Mersenne Twister est utilisé comme PRNG par défaut dans de nombreux langages de programmation, logiciels et ressources en ligne,
comme notre
générateur de nombres aléatoires en ligne,
mais cette méthode n'est pas cryptographiquement forte, ce qui ne permet pas de l'utiliser en cryptographie.
PRNG avec source d'entropie
Parallèlement à la nécessité de générer rapidement des séquences facilement reproductibles de nombres aléatoires, il existe également un besoin
pour générer des nombres complètement imprévisibles ou simplement complètement aléatoires. Afin de satisfaire les deux conditions,
les combinaisons d'un PRNG crypto-résistant et d'une source d'entropie externe sont le plus souvent utilisées et ce sont ces
combinaisons de générateurs qui sont maintenant communément appelés générateur de nombres aléatoires (RNG). De tels générateurs sont les plus
souvent utilisé pour générer des clés symétriques et asymétriques uniques pour le chiffrement, l'industrie du jeu et d'autres domaines.
Un exemple de fonctionnement d'un générateur combiné est le suivant : un dispositif physique, utilisant une source fiable
d'entropie (comme le bruit thermique), génère la "graine" pour une cryptographie sécurisée plus rapide
générateur de nombres pseudo-aléatoires, qui génère ensuite une séquence de sortie pseudo-aléatoire à un débit de données beaucoup plus élevé.