Un guide Super Mega Bowl
Quand ce site lance une pièce ou fait tourner une roue, aucun objet physique n'intervient. Un ordinateur produit un nombre qui se comporte comme le hasard. Mais les ordinateurs sont conçus pour être parfaitement prévisibles : comment génèrent-ils donc de l'aléatoire ? La réponse est plus ingénieuse, et plus limitée, qu'on ne le croit.
Un ordinateur suit des instructions exactes et fait toujours la même chose à partir de la même entrée. C'est tout l'intérêt d'un ordinateur, et c'est aussi pourquoi il ne peut pas inventer de vrai hasard tout seul. Tout ce qu'il produit résulte d'un calcul déterminé. Alors, plutôt que de créer un vrai hasard, la plupart des logiciels l'imitent de façon convaincante avec un générateur de nombres pseudo-aléatoires, ou PRNG.
Un PRNG part d'un nombre appelé graine et le fait passer dans une formule pour produire le nombre suivant, qu'il réinjecte pour produire le suivant, et ainsi de suite. Le flux obtenu est réparti uniformément et passe les tests statistiques d'aléa : à toutes fins pratiques, il paraît aléatoire. Mais il est entièrement déterminé par la graine. Démarrez deux PRNG avec la même graine et ils produiront exactement la même séquence, indéfiniment. D'où le nom pseudo-aléatoire : d'apparence aléatoire, mais pas véritablement imprévisible.
C'est ce que fait le générateur intégré d'un navigateur, et c'est ce qui anime la pièce, les dés et la roue ici. Pour un jeu équitable, les résultats sont uniformes et imprévisibles en pratique, et c'est tout ce dont un générateur de hasard équitable a besoin.
Le fait qu'une graine reproduise la même séquence est souvent exactement ce que l'on veut. En test logiciel, une graine fixe permet de rejouer la même exécution et de la déboguer. En simulation, elle permet à d'autres chercheurs de reproduire vos résultats à l'identique. Un hasard reproductible semble contradictoire, mais c'est l'un des outils les plus utiles de l'informatique.
Quand « d'apparence aléatoire » ne suffit pas, les ordinateurs cherchent hors d'eux-mêmes une vraie imprévisibilité. Un générateur de nombres véritablement aléatoires s'appuie sur du bruit physique : bruit thermique électronique, chronologie de la désintégration radioactive, parasites atmosphériques, ou minuscules variations matérielles. Comme on croit ces sources réellement imprévisibles, les nombres qu'elles produisent sont vraiment aléatoires, et pas seulement statistiquement aléatoires. Ils sont plus lents à collecter, aussi les utilise-t-on généralement pour initialiser d'autres générateurs plutôt que pour produire chaque valeur.
La sécurité est le seul domaine où un PRNG ordinaire est dangereux. Si un attaquant parvient à retrouver la graine ou la formule, il peut prédire toutes les valeurs futures, ce qui serait catastrophique pour des mots de passe, des clés de chiffrement ou des mélanges de cartes en ligne. Pour cela, les systèmes utilisent un générateur cryptographiquement sûr, ou CSPRNG, conçu pour que même l'observation de nombreuses sorties passées ne donne aucun indice utile sur la suivante, et initialisé par du vrai hasard physique. C'est la distinction derrière la question courante de savoir si un générateur est cryptographiquement sûr. Un lanceur de pièce grand public est uniforme et équitable, mais pas sûr, et ce n'est pas son objet.
Les ordinateurs ne peuvent pas fabriquer seuls de vrai hasard : ils utilisent donc des générateurs pseudo-aléatoires, une graine plus une formule qui produit des suites d'apparence aléatoire mais entièrement déterminées. C'est parfait pour les jeux, l'équité et les simulations, et la graine reproductible est un bonus. Le vrai hasard vient du bruit physique, et la sécurité exige un générateur cryptographique dédié. Adaptez l'outil à la tâche et le pseudo-aléatoire couvre presque tout.