A.3 Génération d’aléa cryptographique
La cryptographie fait un usage intensif de données aléatoires, typiquement afin de générer des clés mais également pour bien d’autres applications comme dans les opérations de formatage de messages avant chiffrement ou signature. La qualité des données aléatoires utilisées est parfois critique en termes de sécurité et nécessite de disposer de données aléatoires « de qualité ».
À titre d’exemple particulièrement frappant de la nécessité de disposer de bon aléa pour certaines applications, citons le standard de signature américain DSA. En utilisant cet algorithme, la signature d’un message nécessite l’emploi d’un nombre aléatoire de 160 bits, gardé secret par le signataire. Pour chaque signature, il est nécessaire de disposer d’un nouveau nombre aléatoire indépendant des précédents et donc à usage unique.
Sans que cela ne remette en cause la sécurité de DSA, on connaît aujourd’hui une attaque qui permet de retrouver la clé privée à condition de disposer de signatures pour lesquelles seulement 2 bits du nombre aléatoire à usage unique sont connus. Cette attaque fonctionne donc très efficacement même si les 158 bits restants sont parfaitement aléatoires et inconnus de l’attaquant. Cet exemple montre que, pour certaines applications, il est impossible de se contenter de nombres partiellement aléatoires.
La génération de bits réellement aléatoires, c’est-à-dire valant 0 ou 1 avec même probabilité et, surtout, indépendants les uns des autres, est particulièrement délicate sur une plate-forme fondamentalement déterministe comme un ordinateur ou un microprocesseur de carte à puce. Il existe cependant des dispositifs physiques spécifiques tirant parti de phénomènes supposés imprévisibles comme le bruit thermique ou le temps s’écoulant entre deux désintégrations d’une source radioactive. On parle alors de générateur d’aléa physique.
Il est également possible de générer du pseudo-aléa, c’est-à-dire des suites de bits indistinguables de suites réellement aléatoires mais issues d’un mécanisme déterministe initialisé avec un germe ou graine, de petite taille mais réellement aléatoire pour sa part. La plupart des mécanismes de chiffrement par flot sont d’ailleurs construits autour de tels générateurs pseudo-aléatoires.
Notons enfin que, par définition, il est en pratique impossible de distinguer du pseudoaléa correctement généré de véritables bits aléatoires. Malgré l’existence de notions théoriques bien définies issues de la théorie de l’information, comme celle d’entropie, la seule manière de tester des bits ainsi générés est d’appliquer des tests statistiques visant à détecter des biais statistiques dont la probabilité d’apparition est négligeable dans des séquences de bits issues de sources d’aléa idéales. L’efficacité de ces tests, aussi élaborés soient-ils, demeure cependant très limitée en pratique. Une suite déterministe aussi simple que la succession des décimales de π suffit en effet à tromper la plupart des tests statistiques.