Des nombres aléatoires sont nécessaires dans certaines applications : loteries, jeux informatiques, cryptographie, sécurité des systèmes, simulation numérique, algorithmes randomisés, test de programmes et de circuits intégrés, etc. Pour cela, on utilise des
générateurs de nombres aléatoires
ou
RNG
(
random number generators
). Il existe deux principaux types de RNG : d'une part, les générateurs
pseudo-aléatoires
ou
PRNG
(Pseudo RNG) basés sur des algorithmes déterministes, et d'autre part, les
générateurs de nombres vraiment aléatoires
ou
TRNG
(
True RNG
) qui exploitent une
source de bruit physique
ayant des
propriétés stochastiques
.
Deux caractéristiques principales guident le choix d'un RNG : son
débit
et la
qualité
de l'aléa produit. Le débit doit être adapté à l'application cible, mais d'autres caractéristiques existent telles que le coût du générateur, son temps de démarrage et le caractère constant ou variable de son débit dans le temps.
La qualité d'un RNG est probablement sa caractéristique la plus importante, mais aussi la plus complexe à évaluer. La séquence aléatoire engendrée doit présenter une
distribution de probabilité uniforme
et
équiprobable
. De plus, chaque nouvel élément de la séquence doit être
statistiquement indépendant
et
non-prédictible
par rapport aux éléments précédents. Dans certaines applications, on requiert que la séquence soit
non-reproductible
, c'est-à-dire totalement différente après chaque redémarrage. Enfin, dans certaines applications sécurisées, rien ou personne ne doit pouvoir prédire ou biaiser les valeurs produites : c'est la résistance aux
attaques
.
Les PRNG peuvent être implantés en
logiciel
ou bien en
matériel
. Il existe des PRNG logiciels performants, c'est-à-dire avec un très haut débit et une bonne qualité d'aléa pour un coût limité, pour la plupart des types de processeurs. En matériel, de nombreux PRNG existent pour des ASIC (
Application Specific...