Un hasard qui n'en est pas

Pourquoi une clé doit être imprévisible

Tu peux employer AES-256 et un protocole irréprochable : si ta clé est prévisible, tout s'effondre. C'est le maillon le plus discret de la chaîne, et le plus souvent rompu.

Le nombre de clés n'est pas la sécurité

Une clé AES-256 offre 2^256 possibilités, un nombre hors d'atteinte. Mais ce chiffre ne vaut que si toutes les valeurs sont également probables.

2^256     (cles possibles sur le papier)
2^20      (cles reellement tirees si le generateur est mauvais)

Un adversaire n'attaque jamais l'espace théorique. Il attaque celui que ton générateur produit réellement. Une clé tirée parmi un million tombe en quelques secondes, quelle que soit sa longueur.

L'erreur de raisonnement

Beaucoup de programmeurs pensent : « ce nombre est compliqué, donc imprévisible ». Les deux notions n'ont rien à voir.

L'horodatage 1753225200 semble arbitraire. Mais si l'adversaire sait à quelle seconde près la clé a été créée, il ne lui reste que quelques milliers de valeurs à tester.

Imprévisible ne veut pas dire compliqué. Cela veut dire que l'adversaire ne peut pas réduire l'ensemble des possibilités.

Là où le hasard intervient

Il n'y a pas que les clés. Dans un protocole, sont tirés au sort :

  • les clés de chiffrement et de session ;
  • les vecteurs d'initialisation de CBC et les nonces de CTR ;
  • les exposants secrets de Diffie-Hellman ;
  • les jetons de session, les identifiants de réinitialisation.

Chacun de ces tirages est une occasion de tout compromettre. Un nonce prévisible en mode CTR, et deux messages se retrouvent masqués pareillement.

Ce qu'on demande

Un générateur cryptographique doit garantir que, même en connaissant toutes les sorties précédentes, on ne peut pas prédire la suivante mieux qu'au hasard. C'est une exigence bien plus forte que « les nombres semblent bien répartis ».