Un petit article sur la génération des nombres aléatoires sur ordinateur (dommage que l'article ne soit pas en français).
En effet, un ordinateur est une machine déterministe. Elle ne peut donc pas en théorie générer de nombres aléatoires: Tout nombre généré est le résultat du calcul d'un programme. Or les nombres aléatoires sont cruciaux pour la sécurité informatique (typiquement: pour générer une clé de chiffrement qu'on ne puisse pas prédire ou deviner). On en a vraiment besoin. Il y a alors 2 astuces, parfois combinées:
- Un algorithme de génération de nombres pseudo-aléatoires (PRNG). C'est un algorithme dont les opérations sont suffisamment compliquées et imbriquées pour que la sortie ait L'AIR aléatoire. Mais soyons franc: ce n'est pas réellement aléatoire. Si on connaît l'algorithme du PRNG et son état interne, on peut prédire la sortie. C'est un aléa qui est suffisant, par exemple, pour les jeux. Mais pas pour la sécurité informatique.
- Les vrais générateurs d'aléa sont généralement des dispositifs physiques (TRNG), par exemple:
- des capteurs thermiques (le mouvement brownien dû à la chaleur du CPU suffit à générére du bruit). La plupart des CPU modernes sont équipés de tels générateurs.
- le bruit reçu par les capteurs CCD (optiques).
- des circuits spécialisés (circuits de diodes par exemple)
- des dispositifs radioactifs (on trouve de petites clés USB contenant un composé légèrement radioactif qui émet de particules qui sont alors captées)
- on peut aussi utiliser une caméra pour filmer un phénomène difficile à prédire (des lava-lamp par exemple) et donner ces images à manger à un PRNG. (C'est d'ailleurs ce qu'ils font chez CloudFlare:
https://blog.cloudflare.com/randomness-101-lavarand-in-production/)
Le soucis est que bien souvent les sources physique ne génère qu'une petite quantité d'aléa par seconde, ce qui est insuffisant. Il n'est pas rare d'utiliser la sortie d'un TRNG pour la donner à manger à un PRNG. Cela permet de générer de grande quantité d'aléa, et impossible à prédire (puisque le TRNG vient "perturber" en permanence l'état interne du PRNG, rendant rapidement la prédiction impossible).