Les générateurs
de nombres aléatoires
La sécurité n'aime pas l'imprévisible. Mais elle a impérativement besoin d'un avenir incertain pour justement, assurer la sécurité ! Voilà qui parait bien étrange au premier abord.
Le mot de passe ?
Si un mauvais mot de passe est envoyé, ça ne marchera pas.
Une liste de mots de passe ?
La télécommande a déjà tenté les deux premiers codes, le récepteur a vu uniquement le premier.
Le récepteur accepte néanmoins les codes suivants, qui n'ont pas été utilisés.
Les codes n'ayant jamais été utilisés, on ne peut pas les rejouer !
Accessoirement, afin de pouvoir utiliser plusieurs télécommandes pour la même porte, on identifie la télécommande en ajoutant son nom dans le message qui est envoyé. Mais c'est secondaire, pas de secret particulier, il faut juste produire des télécommandes avec un nom unique, généralement il s'agit d'un numéro de série gravé dans le marbre du silicium.
Un générateur de mots de passe ?
Générateurs
aléatoires & pseudo-aléatoires
Dans sa forme la plus simple, un générateur de nombre aléatoire est une boite noire qui sort une suite de bits. La propriété principale est que chaque nouveau bit généré est imprédictible.
On a en moyenne autant de zéros que de uns (les dés ne sont pas pipés).
Sauf que rendre un générateur aléatoire réellement imprédictible, dans le sens où absolument personne au monde ne peut vous donner à coup sûr la valeur de sortie, est très difficile à réaliser et à prouver. C'est ce que nous verrons dans les futures pages à propos des sources d'entropie.
Du coup, on distingue deux classes de générateurs de nombres aléatoires :
- Les vrais, réellement imprédictibles. On les appelle TRNG pour True Random Number Generator. Ils sont forcément tous différents, vu qu'ils sont vraiment aléatoires, il n'en existe pas deux pareils au monde.
- Les faux, ceux qui génèrent des bits à partir d'une formule de calcul. On les appelle PRNG pour Pseudo Random Number Generator. Ceux-là, on peut les reproduire, les dupliquer.
Celui-là est particulièrement raté, malgré la bonne volonté du programmeur.
Va falloir faire mieux !
Ici, ce qui nous intéresse, c'est un pseudo (PRNG), car on veut avoir la même suite de nombres aléatoires sur la télécommande et le récepteur. Et comme c'est un algorithme, il ne prendra pas beaucoup de place —on n'a pas besoin d'une mémoire énorme afin stocker une collection de mots de passe, ce serait trop cher.
Je n'ai pas l'intention de décrire ici les mille et une façons de faire un PRNG, mais je vais vous donner un exemple super-simple afin que vous puissiez vous faire une idée.
Cet algorithme a été proposé par John von Neumann en 1946, c'est la méthode middle-square (carré médian):
Soit le nombre « 1111 ».
- 11112 = 1234321
- on récupère les chiffres du milieu : 3432. C'est la sortie du générateur.
- 34322 = 11778624
- on récupère les chiffres du milieu : 7786.
et ainsi de suite.
On remarquera qu'il faut une "graine", une valeur initiale pour démarrer. Ici, c'était "1111". C'est un point très important, car il s'agit d'un algorithme, autrement dit les nombres générés à partir d'une graine précise seront toujours les mêmes.
C'est un algorithme + une graine initiale, et la sortie sera totalement connue.
Mais si on ne connait pas la graine, alors la sortie semble aléatoire.
Ces algorithmes ont (très souvent) une autre propriété : ils ne génèrent pas de suites infinies, il existe une période, vu que si on retombe sur la graine, alors on recommence la séquence. Mais la période peut être très longue.
On peut faire un générateur infini assez facilement : par exemple, on calcule les décimales de π ou du nombre d'Euler e. On sait que la distribution des chiffres présente toutes les propriétés attendues des TRNG, sauf que la sortie est très prévisible, c'est embêtant une fois que l'on a reconnue cette suite...
On notera que l'algorithme n'est pas spécialement secret, par contre il vaut mieux que la graine soit très secrète, évidemment.
Avec un PRNG, c'est mieux, mais pas incassable.
Les systèmes doivent être compatibles, que ce soit au niveau de l'algorithme, mais aussi du système de télécommunication : bande de fréquence, système de codage, et autres fadaises. Plus de détails sur mon site consacré aux technologies de liaison, par exemple en 433 MHz.
À noter : c'est le même système pour ce qu'on appelle les "one-time password" (Token OTP).
Mais si, ces espèces de tamagoshis que votre entreprise vous donne pour vous connecter. Vous devez entrer votre identifiant, puis appuyer sur le tamagoshi pour qu'il vous donne un mot de passe à recopier.
Ça marche pareil, sauf que c'est l'ordinateur distant qui joue le rôle de la porte de garage... et vous devez vous coltiner la recopie du mot de passe à la main.
Mais ce n'est pas la seule configuration où on a besoin d'un générateur aléatoire en sécurité. Et dans l'immense majorité des cas, on a besoin d'un vrai générateur, vraiment imprédictible, un TRNG.