Générateur de nombres pseudo-aléatoires

[Cet article est une partie de la future version du Petit Livre du Hacker]

Il existe plusieurs algorithmes pour créer des nombres qui ont l’air aléatoires. Certains sont très rapides et simples tandis que d’autres sont plus complexes. Pour des applications normales, comme des jeux vidéos, où les choix aléatoires n’ont pas besoin d’être parfais, mais uniquement différent d’une fois à l’autre, tel le cas d’un générateur de labyrinthe, il n’est pas grave d’avoir une simple suite mathématique qui mimique un choix au hasard. Par contre, quand l’application a besoin de sécurité en cryptant des données, il ne faut pas que les résultats du générateur puissent être distingués statistiquement d’une véritable séquence de nombres aléatoires.

Qu’il soit sécurisé ou pas, le générateur va toujours prendre une valeur initiale (seed) où commencer à choisir ses nombres dans sa suite. Sans ce nombre, à chaque démarrage de l’application, ce serait toujours le même nombre qui serait choisi en premier et les suivants seraient aussi toujours les mêmes dans le même ordre. C’est pourquoi dans une application, la valeur initiale donnée est souvent l’heure courante à la seconde ou milliseconde près. Utiliser cette valeur dans un logiciel de cryptographie serait insensé puisque ce serait trop simple de découvrir cette valeur selon l’heure que le message ait été crypté. Par contre, pour les générateurs sécuritaires, le fait que la même valeur initiale redonne la même suite de nombres aléatoires est important puisque la valeur initiale sera la clé. Ainsi il sera possible avec une clé précise de générer la même suite de nombres autant lors du cryptage et du décryptage.