Le hasard : d'où viennent les clés

Un dé encore en vol au-dessus d'un cahier ouvert et vierge, et à côté une machine à engrenages qui recrache une rangée bien nette de jetons identiques.

Pense à un nombre entre 1 et 10. Pas à voix haute, juste dans ta tête. Tu as pensé à 7. Ou alors à 3. Presque personne ne choisit 1 ou 10, et 7 sort bien plus souvent qu'une fois sur dix. Les humains sont mauvais en hasard, et c'est amusant. Les ordinateurs aussi, et là ça ne l'est plus : chaque serrure du reste de ce site tient à un seul nombre que personne ne doit pouvoir deviner.

Des mots dont tu vas avoir besoin

Clé
Le nombre secret avec lequel tu vas bientôt fermer des messages. Tu en utilises une pour la première fois dans chapitre 5. Ici, il ne s'agit que de savoir d'où vient ce nombre.
Hasard
Quelque chose derrière quoi il n'y a aucune règle. Lance un dé : aucun calcul ne te donnera le lancer suivant. C'est exactement ce que tu veux d'une clé.
Pseudo-hasard
Du hasard qui n'en a que l'air. Une formule crache des nombres qui sautent dans tous les sens, mais qui connaît la formule les connaît tous d'avance. « Pseudo » veut dire « faux » en grec.
Graine
Le nombre par lequel une telle formule commence. Tout ce qui suit est fixé dès cet instant. Même graine, même suite. Toujours.
Entropie
Une mesure de ce qu'il y a vraiment à deviner, comptée en bits. Un lancer de pièce vaut 1 bit. Huit lancers valent 8 bits, soit 256 possibilités. Plus il y a de bits, plus deviner devient sans espoir.

Une formule qui ressemble au hasard

À peu près chaque langage de programmation a un bouton qui promet « un nombre au hasard ». Dans la plupart des cas, ce qui se cache derrière ressemble à ceci :

suivant = (précédent × 1103515245 + 12345) mod 2147483648

Rien de plus. Prends le nombre précédent, multiplie-le par un grand nombre, ajoute quelque chose, et garde le reste de la division par 231. Les résultats partent dans tous les sens et ont l'air bien mélangés. Ils le sont, pour un jeu ou une couleur à l'écran.

Mais relis cette ligne. Il n'y a rien dedans que tu ne connaisses pas. Qui voit un seul nombre de la suite le remplace dans la formule et tient le suivant.

Prédis le nombre suivant

Tout se passe dans ton navigateur. Rien n'est envoyé au serveur.

  1. Clique sur Cinq nombres. Regarde-les et essaie de trouver le sixième toi-même. Tu n'y arriveras pas.
  2. Clique sur Prédis le sixième. La démo remplit la formule avec le cinquième nombre et met sa prédiction à côté de la vraie réponse.
  3. Clique sur Vrai hasard, puis de nouveau sur Prédis le sixième. Lis ce qui se passe alors.

D'où vient le vrai hasard

Un ordinateur ne peut rien inventer tout seul. Ce qu'il sait faire, c'est mesurer des choses que personne ne peut rejouer : combien de microsecondes séparent deux de tes frappes au clavier, quelle est la température de la puce à cet instant, le moment exact où un paquet arrive du réseau. C'est du bruit brouillon, non reproductible. Le système d'exploitation entasse ce bruit, le remue, et t'en donne des octets. Dans le navigateur, ce robinet s'appelle crypto.getRandomValues(), et tout ce qui fabrique une clé sur ce site s'en sert.

La différence avec la formule du dessus n'est pas que l'un serait mieux mélangé que l'autre. C'est qu'au robinet il n'existe aucune règle à remplir.

La clé sortie de l'horloge

Passons à la faute que des gens ont vraiment commise. Tu veux une clé, tu as une formule, et il te faut une graine pour démarrer. Tu prends quoi ? Quelque chose de toujours disponible et différent à chaque fois : l'horloge.

Ça a l'air raisonnable. Compte avec moi. Une clé de 128 bits a 340 282 366 920 938 463 463 374 607 431 768 211 456 possibilités. Mais si elle sort de l'horloge et que l'attaquant sait à l'heure près quand tu l'as fabriquée, il reste 3600 possibilités. Pas 2128. Trois mille six cents.

Casse une clé faite avec l'horloge

Tout se passe dans ton navigateur. Rien n'est envoyé au serveur.

  1. Clique sur Fabrique une clé. La démo choisit un moment de l'heure écoulée et en fait 16 octets. Tu en vois quatre.
  2. Clique sur Trouve le reste. La démo essaie chaque seconde de l'heure écoulée jusqu'à ce que les quatre premiers octets collent.
  3. Regarde combien d'essais ça a coûté, et compare avec le nombre à 39 chiffres du dessus.

C'est arrivé pour de vrai, deux fois. En 1995, Netscape, le navigateur de l'époque, semait ses clés avec l'heure et le numéro du programme en cours. Deux étudiants de Berkeley, Ian Goldberg et David Wagner, y ont passé moins d'une minute de calcul. Et en 2008, on a découvert que deux ans plus tôt quelqu'un avait retiré de la version Debian d'OpenSSL la ligne qui apportait le bruit. Il restait le numéro du programme : 32 768 possibilités. Toutes les clés fabriquées sur une telle machine pendant ces deux ans ont dû partir. Dans les deux cas, les mathématiques allaient bien. La graine, non.

Lancer une clé toi-même

Tu n'as pas besoin d'un ordinateur pour obtenir du vrai hasard. Un dé fait l'affaire, et tu peux calculer combien de fois il faut le lancer. Chaque lancer a six issues, et six possibilités valent log2(6) = 2,585 bits. Pour 128 bits il t'en faut donc 128 ÷ 2,585 ≈ 50.

Cinquante lancers

Tout se passe dans ton navigateur. Rien n'est envoyé au serveur.

  1. Clique sur Lance et regarde le compteur ramasser des bits.
  2. Clique quelques fois sur Lance dix fois jusqu'à atteindre 128 bits.
  3. Regarde la clé qui en sort. C'est une clé que tu aurais vraiment pu fabriquer au dé sur papier, et elle resservira dans chapitre 9.2.

Ce n'est pas qu'une curiosité. Les gens qui gardent une clé dont dépend vraiment quelque chose la lancent parfois exactement comme ça, sur un ordinateur qui n'a jamais vu un réseau. Un dé n'a pas de fabricant à qui tu dois faire confiance.

Ce que tu retiens d'ici

D'où vient le nombreBon pour
Une formule avec une graineles jeux, mélanger une playlist, une couleur
Une formule semée avec l'horlogerien qui tienne un secret
crypto.getRandomValues()les clés, les mots de passe, tout ce site
Un dé, cinquante foisles clés, et tu n'as à croire personne

À partir du chapitre suivant, on se met à utiliser des clés, et il ne sera plus question que de leur force : 128 bits, 256 bits, des nombres à des dizaines de chiffres. Garde ce chapitre en tête. Un tel nombre est exactement aussi fort que le hasard dont il sort, et pas un bit de plus.

Ça, c'est des maths : la théorie de l'information

Les bits que tu as vus s'additionner au dé s'appellent l'entropie, et on les calcule avec un logarithme : un choix entre n possibilités également probables vaut log2(n) bits. Voilà pourquoi une pièce compte pour 1 et un dé pour 2,585. Claude Shannon a écrit cette formule en 1948, dans un seul article qui a ouvert tout un domaine, la théorie de l'information. Il ne l'a pas inventée pour l'écriture secrète mais pour les lignes téléphoniques : combien peut-on pousser dans un fil avant que le bruit ne l'emporte ? Un an plus tard, il a montré que la même mesure dit exactement quand un chiffrement est incassable. Tu croiseras ce résultat dans chapitre 9.2. La théorie de l'information est aujourd'hui dans chaque format de fichier qui compresse, dans chaque photo que tu envoies, et dans la question de tout ce que tu ignores.