Un hasard qui n'en est pas
Pseudo-aléatoire et vrais générateurs
Un ordinateur est une machine déterministe : les mêmes entrées produisent les mêmes sorties. Produire du hasard y est donc, par nature, un problème.
Les générateurs pseudo-aléatoires
Un PRNG part d'une valeur initiale — la graine (seed) — et déroule une suite par calcul :
(graine) --> x1 --> x2 --> x3 --> ...
La suite paraît irrégulière, mais elle est entièrement déterminée par la graine. Même graine, même suite.
Ceux des bibliothèques standard, comme rand(), sont conçus pour la simulation ou les jeux : rapides et bien répartis, mais prédictibles. En observant quelques sorties, on retrouve l'état interne et on prédit tout le reste.
Ne les utilise jamais pour de la cryptographie. Le nom de la fonction ne prévient pas.
Les générateurs cryptographiques
Un CSPRNG ajoute la garantie manquante : connaître les sorties passées ne permet pas de deviner les suivantes, ni de remonter à l'état interne.
En pratique, demande-le au système d'exploitation :
| Plateforme | Ce qu'il faut appeler |
|---|---|
| Linux, macOS | getrandom(), /dev/urandom |
| Windows | BCryptGenRandom() |
| Dans un navigateur | crypto.getRandomValues() |
Le système est le mieux placé : il collecte en continu de l'imprévisible venu du matériel.
D'où vient l'imprévisible
Le système accumule des événements physiques difficiles à reproduire — intervalles précis entre frappes clavier, mouvements de souris, temps d'accès disque, bruit électrique de composants dédiés.
Il en extrait une réserve d'entropie qui alimente le générateur.
Le moment délicat
Le démarrage est le point faible. Un serveur virtuel qui vient d'être créé n'a ni clavier, ni souris, ni historique : sa réserve est presque vide.
C'est pourquoi des machines fraîchement instanciées ont pu générer des clés faibles, parfois identiques d'une machine à l'autre. Une étude de 2012 a ainsi retrouvé la clé privée de dizaines de milliers de serveurs sur Internet, simplement parce que deux d'entre eux partageaient un facteur premier — signe que leur hasard de démarrage était le même.

