Qu'est-ce qu'un générateur de nombres aléatoires ?

  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)True random number generator 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 Générateur de nombres aléatoires matériel 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

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 Mersenne Twister 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é.