La génération de nombres ressemblant par certaines propriétés à des nombres aléatoires n'est pas une question nouvelle : deux récents articles de synthèse [20,39] recensent près de 300 références... Il convient de distinguer soigneusement l'utilisation des nombres pseudo-aléatoires comme support des simulations sur ordinateurs de leur utilisation pour le chiffrement.
Dans ce premier cas, on connaît un certain nombre de générateurs, utilisant par exemple des propriétés congruentielles comme :
Si l'on veut maintenant faire du "chiffrement au vol", en XORant le flot à chiffrer avec un flot "imprévisible", il est clair que l'on ne peut pas utiliser ce genre de générateurs. Il s'agirait au contraire du pire choix possible, car la formule en question est déterministe. Il suffit d'une suite très peu longue pour pouvoir inférer la formule utilisée (module et multiplicateur). Il est à peine meilleur de ne garder que les derniers bits (et de faire tourner l'algorithme plusieurs fois pour fabriquer un nombre complet) [51]
Par contre un algorithme quadratique avec pour module
,
produit de deux "grands" nombres premiers résiste
à l'analyse si l'on ne publie que les bits de poids faible. Mais il
est alors nécessaire de choisir soigneusement n et la valeur initiale
[7], sinon on obtient un cycle très court, qui n'a plus besoin
d'être analysé : il suffit de l'observer pour pouvoir le prédire.
La Table 14 donne des conditions nécessaires de ce choix.
En tout cas, cette question de génération de nombres pseudo-aléatoires est très importante, et ne se pose pas uniquement pour le chiffrement par flot. Bien au contraire : à peu près tous les algorithmes utilisent des nombres aléatoires ou bien comme clefs ou bien comme preuve de fraîcheur d'un message (cf paragraphe 4). Par conséquent, si l'état interne du générateur peut être analysé, et son résultat calculé ou inféré, l'ensemble du protocole est compromis.