Mesurer et se tromper

Les pannes de hasard célèbres

Rien ne vaut des exemples réels. Ces trois affaires ont touché des systèmes largement déployés, et aucune ne vient d'un défaut d'algorithme.

Netscape, 1995

Le tout premier SSL tirait sa graine de l'heure courante, du numéro de processus et de celui du processus parent.

Deux étudiants, Goldberg et Wagner, ont remarqué que ces trois valeurs étaient largement devinables pour qui observe la machine. L'espace réel se réduisait à quelques dizaines de bits, et les clés de session tombaient en une minute.

L'algorithme était correct. La graine ne l'était pas.

Debian, 2008

Un mainteneur nettoie le code d'OpenSSL après l'alerte d'un outil d'analyse. Il retire une ligne qui, involontairement, alimentait le générateur en données non initialisées.

Il ne restait plus qu'une seule source : le numéro du processus. Soit 32 768 valeurs possibles.

2^1024    (cles attendues)
32768     (cles reellement possibles)

Pendant près de deux ans, toutes les clés SSH et SSL générées sur Debian et ses dérivées ont été tirées de cet ensemble minuscule. Il a suffi de les pré-calculer toutes. Le remplacement massif de clés qui a suivi reste l'un des plus vastes jamais organisés.

La PlayStation 3, 2010

L'ECDSA exige un nombre aléatoire k différent pour chaque signature. Sony a employé une constante.

La conséquence est mathématique et immédiate : deux signatures produites avec le même k permettent de résoudre un petit système d'équations et d'en extraire la clé privée. Celle qui signait les jeux de la console a été publiée, et ne pouvait pas être changée sans rendre les consoles existantes inutilisables.

Ce qu'il faut en tirer

Ces trois affaires ont un point commun : l'algorithme n'était pas en cause. SSL, RSA et ECDSA ont fait exactement ce qu'on attendait d'eux.

C'est le hasard qui a manqué, et la panne est restée invisible — un générateur défaillant produit des sorties qui paraissent parfaitement normales. On ne peut pas repérer un mauvais générateur en regardant ses nombres.

D'où la règle : ne construis jamais ton propre générateur, demande-le au système, et vérifie particulièrement le cas du démarrage.