Un nombre pseudo-aléatoire est un nombre spécial généré par un générateur spécial. Le générateur de bits aléatoires déterministes (PRNG), également connu sous le nom de générateur de bits aléatoires déterministes (DRBG), est un algorithme permettant de générer une séquence de nombres dont les propriétés se rapprochent des caractéristiques des séquences de nombres aléatoires. La séquence PRNG générée n'est pas vraiment aléatoire, car elle est entièrement déterminée par une valeur de départ appelée graine PRNG, qui peut inclure des valeurs vraiment aléatoires. Bien que des séquences plus proches du hasard puissent être générées à l'aide de générateurs de nombres aléatoires matériels, les générateurs de nombres pseudo-aléatoires sont importants en pratique pour la vitesse de génération des nombres et leur reproductibilité.
Demande
PRNGs sont au cœur d'applications telles que la simulation (par exemple pour Monte Carlo), les jeux électroniques (par exemple pour la génération procédurale) et la cryptographie. Les applications cryptographiques exigent que la sortieles données n'étaient pas prévisibles à partir d'informations antérieures. Des algorithmes plus complexes sont nécessaires qui n'héritent pas de la linéarité des PRNG simples.
Conditions générales
De bonnes propriétés statistiques sont une exigence centrale pour l'obtention d'un PRNG. En général, une analyse mathématique minutieuse est nécessaire pour s'assurer que le RNG génère des nombres suffisamment proches du hasard pour convenir à l'utilisation prévue.
John von Neumann a mis en garde contre une mauvaise interprétation de PRNG comme un générateur véritablement aléatoire et a plaisanté en disant que "Quiconque considère les méthodes arithmétiques pour générer des nombres aléatoires est certainement dans un état de péché."
Utiliser
PRNG peut être lancé à partir d'un état initial arbitraire. Il générera toujours la même séquence lorsqu'il sera initialisé avec cet état. La période PRNG est définie comme suit: maximum sur tous les états initiaux de la longueur du préfixe de séquence non répétitive. La période est limitée par le nombre d'états, généralement mesuré en bits. Étant donné que la longueur de la période double potentiellement avec chaque bit "d'état" ajouté, il est facile de créer des PRNG avec des périodes suffisamment grandes pour de nombreuses applications pratiques.
Si l'état interne du PRNG contient n bits, sa période ne peut être supérieure à 2n résultats, elle est beaucoup plus courte. Pour certains PRNG, la durée peut être calculée sans contourner la période entière. Les registres à décalage à rétroaction linéaire (LFSR) sont généralementsont choisis de manière à avoir des périodes égales à 2n − 1.
Les générateurs congruentiels linéaires ont des périodes qui peuvent être calculées en factorisant. Bien que le PPP répète ses résultats après avoir atteint la fin de la période, un résultat répété ne signifie pas que la fin de la période a été atteinte, car son état interne peut être supérieur à la sortie; cela est particulièrement évident pour les PRNG avec une sortie à un seul bit.
Erreurs possibles
Les erreurs détectées par les PRNG défectueux vont des plus subtiles (et inconnues) aux plus évidentes. Un exemple est l'algorithme de nombre aléatoire RANDU, qui est utilisé sur les ordinateurs centraux depuis des décennies. C'était une grave lacune, mais son insuffisance est passée inaperçue pendant longtemps.
Dans de nombreux domaines, les études de recherche qui ont utilisé la sélection aléatoire, les simulations de Monte Carlo ou d'autres méthodes basées sur le RNG sont beaucoup moins fiables que ce qui pourrait être le résultat d'un GNPG de mauvaise qualité. Aujourd'hui encore, la prudence s'impose parfois, comme en témoigne la mise en garde de l'Encyclopédie internationale des sciences statistiques (2010).
Étude de cas réussie
À titre d'illustration, considérons le langage de programmation Java largement utilisé. Depuis 2017, Java s'appuie toujours sur le générateur congruentiel linéaire (LCG) pour son PRNG.
Histoire
Le premier PRNG pour éviter de sérieux problèmes et fonctionner assez vite,était le Mersenne Twister (discuté ci-dessous), qui a été publié en 1998. Depuis lors, d'autres PRNG de haute qualité ont été développés.
Mais l'histoire des nombres pseudo-aléatoires ne s'arrête pas là. Dans la seconde moitié du 20e siècle, la classe standard d'algorithmes utilisés pour les PRNG comprenait des générateurs congruentiels linéaires. La qualité du LCG était connue pour être inadéquate, mais de meilleures méthodes n'étaient pas disponibles. Press et al (2007) ont décrit le résultat comme suit: "Si tous les articles scientifiques dont les résultats sont mis en doute à cause des [LCG et apparentés] disparaissaient des étagères de la bibliothèque, il y aurait un espace de la taille de votre poing sur chaque étagère."
La principale réalisation dans la création de générateurs pseudo-aléatoires a été l'introduction de méthodes basées sur la récurrente linéaire dans un champ à deux éléments; ces oscillateurs sont couplés à des registres à décalage à rétroaction linéaire. Ils ont servi de base à l'invention des capteurs de nombres pseudo-aléatoires.
En particulier, l'invention de 1997 par Mersen Twister a évité de nombreux problèmes avec les générateurs précédents. Le Mersenne Twister a une période de 219937−1 itérations (≈4,3 × 106001). Il a été prouvé qu'il était uniformément distribué dans (jusqu'à) 623 dimensions (pour les valeurs 32 bits) et, au moment de son introduction, il était plus rapide que d'autres générateurs statistiquement fiables qui produisent des séquences de nombres pseudo-aléatoires.
En 2003, George Marsaglia a présenté une famille de générateurs xorshift également basés sur la répétition linéaire. Ces générateurs sont extrêmementsont rapides et - combinés à un fonctionnement non linéaire - ils passent des tests statistiques rigoureux.
En 2006, la famille de générateurs WELL a été développée. Les générateurs WELL améliorent en quelque sorte la qualité de Twister Mersenne, qui a un espace d'état trop grand et une récupération très lente, générant des nombres pseudo-aléatoires avec beaucoup de zéros.
Cryptographie
PRNG adapté aux applications cryptographiques est appelé PRNG cryptographiquement sécurisé (CSPRNG). L'exigence d'un CSPRNG est qu'un attaquant qui ne connaît pas la graine n'a qu'un avantage marginal pour distinguer la séquence de sortie du générateur d'une séquence aléatoire. En d'autres termes, alors qu'un PRNG n'est tenu de réussir que certains tests statistiques, un CSPRNG doit réussir tous les tests statistiques limités au temps polynomial dans la taille de la graine.
Bien que la preuve de cette propriété dépasse le niveau actuel de la théorie de la complexité computationnelle, des preuves solides peuvent être fournies en réduisant le CSPRNG à un problème considéré comme difficile, comme la factorisation d'entiers. En général, des années d'examen peuvent être nécessaires avant qu'un algorithme puisse être certifié en tant que CSPRNG.
Il a été démontré qu'il est probable que la NSA ait inséré une porte dérobée asymétrique dans le générateur de nombres pseudo-aléatoires Dual_EC_DRBG certifié NIST.
Algorithmes pseudo-aléatoiresnuméros
La plupart des algorithmes PRNG produisent des séquences qui sont réparties uniformément par l'un des nombreux tests. C'est une question ouverte. C'est l'un des éléments centraux de la théorie et de la pratique de la cryptographie: existe-t-il un moyen de distinguer la sortie d'un PRNG de haute qualité d'une séquence véritablement aléatoire ? Dans ce paramètre, le résolveur sait que soit un algorithme PRNG connu a été utilisé (mais pas l'état avec lequel il a été initialisé), soit un algorithme vraiment aléatoire a été utilisé. Il doit les distinguer.
La sécurité de la plupart des algorithmes et protocoles cryptographiques qui utilisent des PRNG repose sur l'hypothèse qu'il est impossible de faire la distinction entre l'utilisation d'un PRNG approprié et l'utilisation d'une séquence véritablement aléatoire. Les exemples les plus simples de cette dépendance sont les chiffrements de flux, qui fonctionnent le plus souvent en omettant ou en envoyant le message en clair avec une sortie PRNG, produisant le texte chiffré. La conception de PRNG cryptographiquement adéquats est extrêmement difficile car ils doivent répondre à des critères supplémentaires. La taille de sa période est un facteur important dans l'adéquation cryptographique d'un PRNG, mais pas le seul.
Un premier PRNG informatique proposé par John von Neumann en 1946 est connu sous le nom de méthode des carrés moyens. L'algorithme est le suivant: prenez n'importe quel nombre, mettez-le au carré, supprimez les chiffres du milieu du nombre résultant en tant que "nombre aléatoire", puis utilisez ce nombre comme nombre de départ pour la prochaine itération. Par exemple, la mise au carré du nombre 1111 donne1234321, qui peut s'écrire 01234321, un nombre à 8 chiffres est le carré d'un nombre à 4 chiffres. Cela donne 2343 comme nombre "aléatoire". Le résultat de la répétition de cette procédure est 4896, et ainsi de suite. Von Neumann utilisait des nombres à 10 chiffres, mais le processus était le même.
Inconvénients du "carré du milieu"
Le problème avec la méthode des "carrés moyens" est que toutes les séquences finissent par se répéter, certaines très rapidement, par exemple: 0000. Von Neumann le savait, mais il a trouvé une approche suffisante pour ses besoins, et craignait que le les "corrections" mathématiques cacheraient simplement les erreurs au lieu de les supprimer.
Von Neumann a trouvé que les générateurs de nombres aléatoires et pseudo-aléatoires matériels ne convenaient pas: s'ils n'enregistrent pas la sortie générée, ils ne peuvent pas être vérifiés ultérieurement. S'ils écrivaient leurs résultats, ils épuiseraient la mémoire disponible limitée de l'ordinateur et donc la capacité de l'ordinateur à lire et à écrire des nombres. Si les nombres étaient écrits sur des cartes, ils prendraient beaucoup plus de temps à écrire et à lire. Sur l'ordinateur ENIAC, il a utilisé la méthode du "carré du milieu" et a réalisé le processus d'obtention de nombres pseudo-aléatoires plusieurs centaines de fois plus rapidement que la lecture de nombres à partir de cartes perforées.
Le carré moyen a depuis été remplacé par des générateurs plus complexes.
Méthode innovante
Une innovation récente consiste à combiner le carré moyen avec la séquence de Weil. Cette méthode garantit des produits de haute qualité danslongue période. Il aide à obtenir les meilleures formules de nombres pseudo-aléatoires.