Génération de nombres aléatoires

0

La génération de nombres aléatoires est un processus par lequel, souvent au moyen d’un générateur de nombres aléatoires ( RNG ), une séquence de nombres ou de symboles qui ne peut être raisonnablement mieux prédite que par hasard est générée. Cela signifie que la séquence de résultats particulière contiendra des modèles détectables a posteriori mais imprévisibles à l’avance. Les vrais générateurs de nombres aléatoires peuvent être des générateurs matériels de nombres aléatoires(HRNGS) qui génèrent des nombres aléatoires, où chaque génération est une fonction de la valeur actuelle de l’attribut d’un environnement physique qui change constamment d’une manière qui est pratiquement impossible à modéliser. Ce serait en contraste avec les soi-disant «générations de nombres aléatoires» effectuées par des générateurs de nombres pseudo-aléatoires (PRNG) qui génèrent des nombres qui ne semblent qu’aléatoires mais qui sont en fait prédéterminés – ces générations peuvent être reproduites simplement en connaissant l’état du PRNG .

Les dés sont un exemple de générateur de nombres aléatoires matériel mécanique. Lorsqu’un dé cubique est lancé, un nombre Aléatoire de 1 à 6 est obtenu.

Diverses applications du hasard ont conduit au développement de plusieurs méthodes différentes pour générer des données aléatoires . Certains d’entre eux existent depuis l’Antiquité, parmi lesquels figurent des exemples “classiques” bien connus, notamment le lancer de dés , le lancer de pièces , le mélange de cartes à jouer , l’utilisation de tiges d’ Achillée millefeuille (pour la divination ) dans le I Ching., ainsi que d’innombrables autres techniques. En raison de la nature mécanique de ces techniques, générer de grandes quantités de nombres suffisamment aléatoires (importants en statistique) a nécessité beaucoup de travail et de temps. Ainsi, les résultats seraient parfois collectés et distribués sous forme de tables de nombres aléatoires .

Il existe plusieurs méthodes de calcul pour la génération de nombres pseudo-aléatoires. Tous sont en deçà de l’objectif du vrai hasard, bien qu’ils puissent rencontrer, avec un succès variable, certains des tests statistiques de hasard destinés à mesurer à quel point leurs résultats sont imprévisibles (c’est-à-dire dans quelle mesure leurs modèles sont discernables). Cela les rend généralement inutilisables pour des applications telles que la cryptographie . Cependant, il existe également des générateurs de nombres pseudo-aléatoires cryptographiquement sécurisés (CSPRNGS) soigneusement conçus, avec des fonctionnalités spéciales spécialement conçues pour une utilisation en cryptographie.

Applications et utilisations pratiques

Les générateurs de nombres aléatoires ont des applications dans les jeux d’argent , l’Échantillonnage statistique , la simulation informatique , la cryptographie , la conception complètement Aléatoire et d’autres domaines où il est souhaitable de produire un résultat imprévisible. Généralement, dans les applications ayant l’imprévisibilité comme caractéristique primordiale, comme dans les applications de sécurité, les générateurs matériels sont généralement préférés aux algorithmes pseudo-aléatoires, lorsque cela est possible.

Les générateurs de nombres pseudo-aléatoires sont très utiles pour développer des simulations basées sur la méthode de Monte Carlo , car le débogage est facilité par la possibilité d’exécuter à nouveau la même séquence de nombres aléatoires en partant de la même graine Aléatoire . Ils sont également utilisés en cryptographie – tant que la graine est secrète. L’expéditeur et le destinataire peuvent générer automatiquement le même ensemble de chiffres à utiliser comme clés.

La génération de nombres pseudo -aléatoires est une tâche importante et courante en programmation informatique. Alors que la cryptographie et certains algorithmes numériques nécessitent un degré très élevé de caractère Aléatoire apparent , de nombreuses autres opérations ne nécessitent qu’une quantité modeste d’imprévisibilité. Quelques exemples simples pourraient être de présenter à un utilisateur une “citation Aléatoire du jour” ou de déterminer dans quel sens un adversaire contrôlé par ordinateur pourrait se déplacer dans un jeu vidéo. Des formes plus faibles d’ Aléatoire sont utilisées dans les algorithmes de hachage et dans la création d’ algorithmes de recherche et de tri amortis .

Certaines applications qui semblent à première vue se prêter à la randomisation ne sont en fait pas si simples. Par exemple, un système qui sélectionne “au hasard” des morceaux de musique pour un système de musique de fond ne doit apparaître qu’au hasard, et peut même avoir des moyens de contrôler la sélection de musique : un véritable système Aléatoire n’aurait aucune restriction sur le même élément apparaissant deux ou trois fois de suite.

“Vrai” vs nombres pseudo-aléatoires

Il existe deux principales méthodes utilisées pour générer des nombres aléatoires. La première méthode mesure un phénomène physique censé être Aléatoire, puis compense les éventuels biais du processus de mesure. Les exemples de sources incluent la mesure du bruit atmosphérique , du bruit thermique et d’autres phénomènes électromagnétiques et quantiques externes. Par exemple, le rayonnement de fond cosmique ou la désintégration radioactive tels que mesurés sur de courtes échelles de temps représentent des sources d’ entropie naturelle .

La vitesse à laquelle l’entropie peut être obtenue à partir de sources naturelles dépend des phénomènes physiques sous-jacents mesurés. Ainsi, les sources d’entropie “vraie” d’origine naturelle sont dites bloquantes – elles sont limitées en débit jusqu’à ce que suffisamment d’entropie soit récoltée pour répondre à la demande. Sur certains systèmes de type Unix, y compris la plupart des distributions Linux , le pseudo fichier de périphérique /dev/random se bloquera jusqu’à ce qu’une entropie suffisante soit récoltée à partir de l’environnement. [1] En raison de ce comportement bloquant, les lectures massives depuis /dev/random , telles que le remplissage d’un Disque dur avec des bits aléatoires, peuvent souvent être lentes sur les systèmes qui utilisent ce type de source d’entropie.

La deuxième méthode utilise des algorithmes de calcul qui peuvent produire de longues séquences de résultats apparemment aléatoires, qui sont en fait entièrement déterminés par une valeur initiale plus courte, appelée valeur de départ ou clé . En conséquence, la totalité de la séquence apparemment Aléatoire peut être reproduite si la valeur de départ est connue. Ce type de générateur de nombres aléatoires est souvent appelé générateur de nombres pseudo-aléatoires . Ce type de générateur ne repose généralement pas sur des sources d’entropie naturelle, bien qu’il puisse être périodiquement ensemencé par des sources naturelles. Ce type de générateur n’est pas bloquant, il n’est donc pas limité par un événement externe, ce qui rend possible des lectures en masse importantes.

Certains systèmes adoptent une approche hybride, fournissant un caractère Aléatoire récolté à partir de sources naturelles lorsqu’elles sont disponibles, et se repliant sur des générateurs de nombres pseudo-aléatoires cryptographiquement sécurisés (CSPRNG) réinitialisés périodiquement. Le repli se produit lorsque le taux de lecture Aléatoire souhaité dépasse la capacité de l’approche de récolte naturelle à répondre à la demande. Cette approche évite le comportement de blocage à débit limité des générateurs de nombres aléatoires basés sur des méthodes plus lentes et purement environnementales.

Alors qu’un générateur de nombres pseudo-aléatoires basé uniquement sur une logique déterministe ne peut jamais être considéré comme une “véritable” source de nombres aléatoires dans le sens le plus pur du terme, en pratique, ils sont généralement suffisants même pour les applications exigeantes en matière de sécurité. Des générateurs de nombres pseudo-aléatoires soigneusement conçus et mis en œuvre peuvent être certifiés à des fins cryptographiques critiques pour la sécurité, comme c’est le cas avec l’ algorithme de millefeuille et fortuna . Le premier est la base de la source d’entropie /dev/random sur FreeBSD , AIX , OS X , NetBSD et autres. OpenBSD utilise un algorithme de Nombre pseudo-aléatoire appelé arc4random. [2]

Méthodes de génération

Méthodes physiques

Les premières méthodes de génération de nombres aléatoires, telles que les dés, les lancers de pièces et les roulettes, sont encore utilisées aujourd’hui, principalement dans les jeux et les paris, car elles ont tendance à être trop lentes pour la plupart des applications en statistiques et en cryptographie.

Un générateur physique de nombres aléatoires peut être basé sur un phénomène physique atomique ou subatomique essentiellement Aléatoire dont l’imprévisibilité peut être attribuée aux lois de la mécanique quantique . Les sources d’ entropie comprennent la désintégration radioactive , le bruit thermique , le bruit de tir , le bruit d’avalanche dans les diodes Zener , la dérive d’horloge , la synchronisation des mouvements réels d’une tête de lecture-écriture de Disque dur et le bruit radio . Cependant, les phénomènes physiques et les outils utilisés pour les mesurer présentent généralement des asymétries et des biais systématiques qui rendent leurs résultats non uniformément aléatoires. Un extracteur de hasard, telle qu’une fonction de hachage cryptographique , peut être utilisée pour approcher une distribution uniforme de bits à partir d’une source Aléatoire non uniforme, mais à un débit binaire inférieur.

L’apparition de sources d’entropie photonique à large bande, telles que le chaos optique et le bruit d’émission spontanée amplifié , facilite grandement le développement du générateur physique de nombres aléatoires. Parmi eux, le chaos optique [3] [4] a un potentiel élevé pour produire physiquement des nombres aléatoires à grande vitesse en raison de sa bande passante élevée et de sa grande amplitude. Un prototype de générateur de bits aléatoires physiques en temps réel à grande vitesse basé sur un laser chaotique a été construit en 2013. [5]

Diverses manières imaginatives de collecter ces informations entropiques ont été conçues. Une technique consiste à exécuter une fonction de hachage sur une image d’un flux vidéo provenant d’une source imprévisible. Lavarand a utilisé cette technique avec des images d’un certain nombre de lampes à lave . HotBits mesure la désintégration radioactive avec des tubes Geiger-Muller , [6] tandis que Random.org utilise des variations dans l’amplitude du bruit atmosphérique enregistré avec une radio normale.

Démonstration d’un simple générateur de nombres aléatoires basé sur où et quand un bouton est cliqué

Une autre source d’entropie courante est le comportement des utilisateurs humains du système. Bien que les gens ne soient pas considérés comme de bons générateurs de hasard sur demande, ils génèrent assez bien un comportement Aléatoire dans le contexte de jeux de stratégie mixtes . [7] Certains logiciels informatiques liés à la sécurité obligent l’utilisateur à effectuer une longue série de mouvements de souris ou d’entrées au clavier pour créer une entropie suffisante nécessaire pour générer des clés aléatoires ou pour initialiser des générateurs de nombres pseudo-aléatoires. [8]

Méthodes de calcul

La plupart des nombres aléatoires générés par ordinateur utilisent des PRNG qui sont des algorithmes qui peuvent automatiquement créer de longues séries de nombres avec de bonnes propriétés aléatoires, mais finalement la séquence se répète (ou l’utilisation de la mémoire augmente sans limite). Ces nombres aléatoires conviennent dans de nombreuses situations, mais ne sont pas aussi aléatoires que les nombres générés par le bruit atmosphérique électromagnétique utilisé comme source d’entropie. [9] La série de valeurs générées par de tels algorithmes est généralement déterminée par un nombre fixe appelé graine. L’un des PRNG les plus courants est le générateur congruentiel linéaire , qui utilise la récurrence

X n + 1 = ( a X n + b ) mod m {displaystyle X_{n+1}=(aX_{n}+b),{textrm {mod}},m} X_{n+1} = (a X_n + b), textrm{mod}, m X_{n+1} = (a X_n + b), textrm{mod}, m

pour générer des nombres, où a , b et m sont de grands entiers, et X n + 1 {displaystyle X_{n+1}} X_{{n+1}} X_{{n+1}}est le suivant dans X sous la forme d’une série de nombres pseudo-aléatoires. Le nombre maximum de nombres que la formule peut produire est un de moins que le module , m -1. La relation de récurrence peut être étendue aux matrices pour avoir des périodes beaucoup plus longues et de meilleures propriétés statistiques. [10] Pour éviter certaines propriétés non aléatoires d’un seul générateur congruentiel linéaire, plusieurs de ces générateurs de nombres aléatoires avec des valeurs légèrement différentes du coefficient multiplicateur, a , peuvent être utilisés en parallèle, avec un générateur de nombres aléatoires “maître” qui sélectionne parmi parmi les différents générateurs. [ citation nécessaire ]

Une méthode simple avec un stylo et du papier pour générer des nombres aléatoires est la méthode dite du carré du milieu suggérée par John von Neumann . Bien que simple à mettre en œuvre, son rendu est de mauvaise qualité. Il a une période très courte et de graves faiblesses, telles que la séquence de sortie convergeant presque toujours vers zéro. Une innovation récente consiste à combiner le carré du milieu avec une séquence de Weyl . Cette méthode produit une sortie de haute qualité sur une longue période. [11]

La plupart des langages de programmation informatique incluent des fonctions ou des routines de bibliothèque qui fournissent des générateurs de nombres aléatoires. Ils sont souvent conçus pour fournir un octet ou un mot Aléatoire, ou un nombre à virgule flottante uniformément réparti entre 0 et 1.

La qualité, c’est-à-dire le caractère Aléatoire de ces fonctions de bibliothèque varie considérablement d’une sortie complètement prévisible à une sécurité cryptographique. Le générateur de nombres aléatoires par défaut dans de nombreux langages, notamment Python, Ruby, R, IDL et PHP, est basé sur l’ algorithme Mersenne Twister et n’est pas suffisant à des fins de cryptographie, comme indiqué explicitement dans la documentation du langage. De telles fonctions de bibliothèque ont souvent des propriétés statistiques médiocres et certaines répéteront des modèles après seulement des dizaines de milliers d’essais. Ils sont souvent initialisés en utilisant l’ Horloge en temps réel d’un ordinateur comme graine, car une telle horloge mesure généralement en millisecondes, bien au-delà de la précision de la personne.. Ces fonctions peuvent fournir un caractère Aléatoire suffisant pour certaines tâches (par exemple les jeux vidéo) mais ne conviennent pas lorsqu’un caractère Aléatoire de haute qualité est requis, comme dans les applications de cryptographie, les statistiques ou l’analyse numérique. [ citation nécessaire ]

Des sources de nombres aléatoires de bien meilleure qualité sont disponibles sur la plupart des systèmes d’exploitation ; par exemple /dev/random sur différentes versions de BSD, Linux, Mac OS X, IRIX et Solaris, ou CryptGenRandom pour Microsoft Windows. La plupart des langages de programmation, y compris ceux mentionnés ci-dessus, fournissent un moyen d’accéder à ces sources de meilleure qualité.

Par les humains

La génération de nombres aléatoires peut également être effectuée par des humains, sous la forme de la collecte de diverses entrées d’ utilisateurs finaux et de leur utilisation comme source de randomisation. Cependant, la plupart des études montrent que les sujets humains présentent un certain degré de non-Aléatoire lorsqu’ils tentent de produire une séquence Aléatoire, par exemple de chiffres ou de lettres. Ils peuvent trop alterner entre les choix par rapport à un bon générateur Aléatoire ; [12] ainsi, cette approche n’est pas largement utilisée.

Post-traitement et vérifications statistiques

Même avec une source de nombres aléatoires plausibles (provenant peut-être d’un générateur matériel basé sur la mécanique quantique), l’obtention de nombres totalement impartiaux prend soin. De plus, le comportement de ces générateurs change souvent avec la température, la tension d’alimentation, l’âge de l’appareil ou d’autres interférences extérieures. Et un bogue logiciel dans une routine de nombres pseudo-aléatoires, ou un bogue matériel dans le matériel sur lequel il s’exécute, peut être tout aussi difficile à détecter.

Les nombres aléatoires générés sont parfois soumis à des tests statistiques avant utilisation pour s’assurer que la source sous-jacente fonctionne toujours, puis post-traités pour améliorer leurs propriétés statistiques. Un exemple serait le générateur de nombres aléatoires matériel TRNG9803 [13] , qui utilise une mesure d’entropie comme test matériel, puis post-traite la séquence Aléatoire avec un chiffrement de flux de registre à décalage. Il est généralement difficile d’utiliser des tests statistiques pour valider les nombres aléatoires générés. Wang et Nicol [14] ont proposé une technique de test statistique basée sur la distance qui est utilisée pour identifier les faiblesses de plusieurs générateurs aléatoires. Li et Wang [15]ont proposé une méthode de test de nombres aléatoires basée sur des sources d’entropie chaotique laser utilisant les propriétés de mouvement brownien.

Autres considérations

Remodeler la distribution

Distributions uniformes

La plupart des générateurs de nombres aléatoires fonctionnent nativement avec des entiers ou des bits individuels, donc une étape supplémentaire est nécessaire pour arriver à la distribution uniforme “canonique” entre 0 et 1. L’implémentation n’est pas aussi triviale que de diviser l’entier par sa valeur maximale possible. Plus précisément : [16] [17]

  1. L’entier utilisé dans la transformation doit fournir suffisamment de bits pour la précision souhaitée.
  2. La nature même des mathématiques à virgule flottante signifie qu’il existe plus de précision plus le nombre est proche de zéro. Cette précision supplémentaire n’est généralement pas utilisée en raison du grand nombre de bits requis.
  3. Une erreur d’arrondi dans la division peut fausser le résultat. Au pire, une limite supposée exclue peut être tirée contrairement aux attentes basées sur les mathématiques des nombres réels.

L’algorithme principal, utilisé par OpenJDK, Rust et Numpy, est décrit dans une proposition de STL de C++ . Il n’utilise pas la précision supplémentaire et ne souffre d’un biais que dans le dernier bit en raison de l’arrondi à pair. [18] D’autres préoccupations numériques sont justifiées lors du déplacement de cette distribution uniforme “canonique” vers une plage différente. [19] Une méthode proposée pour le Langage de programmation Swift prétend utiliser la pleine précision partout. [20]

Les entiers uniformément distribués sont couramment utilisés dans des algorithmes tels que le shuffle de Fisher-Yates . Encore une fois, une implémentation naïve peut induire un biais modulo dans le résultat, donc des algorithmes plus complexes doivent être utilisés. Une méthode qui n’effectue presque jamais de division a été décrite en 2018 par Daniel Lemire [21] , l’état de l’art actuel étant “l’algorithme optimal” 2021 inspiré de l’encodage arithmétique par Stephen Canon d’ Apple Inc. [22]

La plupart des RNG 0 à 1 incluent 0 mais excluent 1, tandis que d’autres incluent ou excluent les deux.

Autres distributions

Étant donné une source de nombres aléatoires uniformes, il existe plusieurs méthodes pour créer une nouvelle source Aléatoire qui correspond à une fonction de densité de probabilité . Une méthode, appelée méthode d’inversion , consiste à intégrer jusqu’à une zone supérieure ou égale au nombre Aléatoire (qui doit être généré entre 0 et 1 pour des distributions appropriées). Une deuxième méthode, appelée méthode d’acceptation-rejet , consiste à choisir une valeur x et y et à tester si la fonction de x est supérieure à la valeur y. Si c’est le cas, la valeur x est acceptée. Sinon, la valeur x est rejetée et l’algorithme essaie à nouveau. [23] [24]

À titre d’exemple d’échantillonnage par rejet, pour générer une paire de nombres aléatoires normalement distribués standard statistiquement indépendants ( x , y ), on peut d’abord générer les Coordonnées polaires ( r , θ ), où r 2 ~ χ 2 2 et θ ~ UNIFORM( 0,2π) (voir transformée de Box-Muller ).

Blanchiment

Les sorties de plusieurs RNG indépendants peuvent être combinées (par exemple, en utilisant une opération XOR au niveau du bit ) pour fournir un RNG combiné au moins aussi bon que le meilleur RNG utilisé. C’est ce qu’on appelle le blanchiment logiciel .

Les générateurs de nombres aléatoires informatiques et matériels sont parfois combinés pour refléter les avantages des deux types. Les générateurs de nombres aléatoires informatiques peuvent généralement générer des nombres pseudo-aléatoires beaucoup plus rapidement que les générateurs physiques, tandis que les générateurs physiques peuvent générer un “vrai caractère Aléatoire“.

Séquences à faible écart comme alternative

Certains calculs utilisant un générateur de nombres aléatoires peuvent se résumer au calcul d’une valeur totale ou moyenne, comme le calcul d’intégrales par la méthode de Monte Carlo . Pour de tels problèmes, il peut être possible de trouver une solution plus précise en utilisant des séquences dites à faible écart , également appelées nombres quasi aléatoires . De telles séquences ont un schéma défini qui remplit les lacunes de manière uniforme, qualitativement parlant ; une séquence vraiment Aléatoire peut laisser, et c’est généralement le cas, des écarts plus importants.

Activités et démonstrations

Les sites suivants mettent à disposition des échantillons de nombres aléatoires :

  • Les pages de ressources SOCR contiennent un certain nombre d’activités interactives pratiques et de démonstrations de génération de nombres aléatoires à l’aide d’applets Java.
  • Le groupe d’optique quantique de l’ ANU génère des nombres aléatoires provenant du vide quantique. Des échantillons de nombres aléatoires sont disponibles sur leur page de recherche sur le générateur de nombres aléatoires quantiques.
  • Random.org met à disposition des nombres aléatoires provenant du caractère Aléatoire du bruit atmosphérique.
  • Le service Quantum Random Bit Generator de l’ Institut Ruđer Bošković exploite le caractère Aléatoire du processus quantique d’émission photonique dans les semi-conducteurs. Ils fournissent une variété de façons de récupérer les données, y compris des bibliothèques pour plusieurs langages de programmation.
  • Le groupe de l’Université de technologie de Taiyuan génère des nombres aléatoires provenant d’un laser chaotique. Des échantillons de nombres aléatoires sont disponibles auprès de leur service de générateur de nombres aléatoires physiques.

Portes dérobées

Étant donné qu’une grande partie de la cryptographie dépend d’un générateur de nombres aléatoires cryptographiquement sécurisé pour la génération de clé et de nonce cryptographique , si un générateur de nombres aléatoires peut être rendu prévisible, il peut être utilisé comme porte dérobée par un attaquant pour casser le cryptage.

La NSA aurait inséré une porte dérobée dans le générateur de nombres pseudo-aléatoires sécurisé par cryptographie certifié NIST Dual EC DRBG . Si, par exemple, une connexion SSL est créée à l’aide de ce générateur de nombres aléatoires, alors selon Matthew Green , cela permettrait à la NSA de déterminer l’état du générateur de nombres aléatoires, et ainsi de pouvoir éventuellement lire toutes les données envoyées via la connexion SSL. [25] Même s’il était évident que Dual_EC_DRBG était un générateur de nombres pseudo-aléatoires très médiocre et peut-être dérobé bien avant que la porte dérobée de la NSA ne soit confirmée en 2013, il avait été largement utilisé dans la pratique jusqu’en 2013, par exemple par l’éminente société de sécurité RSA Security . [26] Il y a eu par la suite des accusations selon lesquelles RSA Security aurait sciemment inséré une porte dérobée NSA dans ses produits, peut-être dans le cadre du programme Bullrun . RSA a nié avoir sciemment inséré une porte dérobée dans ses produits. [27]

Il a également été émis l’hypothèse que les RNG matériels pourraient être secrètement modifiés pour avoir moins d’entropie qu’indiqué, ce qui rendrait le cryptage utilisant le RNG matériel susceptible d’être attaqué. Une telle méthode qui a été publiée fonctionne en modifiant le masque dopant de la puce, ce qui serait indétectable par rétro-ingénierie optique. [28] Par exemple, pour la génération de nombres aléatoires sous Linux, il est considéré comme inacceptable d’utiliser le RNG matériel RDRAND d’Intel sans mélanger la sortie RDRAND avec d’autres sources d’entropie pour contrer toute porte dérobée dans le RNG matériel, en particulier après la révélation du RNG matériel. Programme NSA Bullrun. [29] [30]

En 2010, un tirage de loterie américain a été truqué par le directeur de la sécurité de l’information de la Multi-State Lottery Association (MUSL), qui a subrepticement installé un logiciel malveillant de porte dérobée sur l’ordinateur RNG sécurisé de la MUSL lors d’une maintenance de routine. [31] Pendant les hacks, l’homme a gagné un montant total de 16 500 000 $ en prédisant correctement les chiffres plusieurs fois par an.

La randomisation de la disposition de l’espace d’adressage (ASLR), une atténuation contre le rowhammer et les attaques connexes sur le matériel physique des puces de mémoire, s’est avérée inadéquate au début de 2017 par VUSec. L’algorithme de nombre Aléatoire, s’il est basé sur un registre à décalage implémenté dans le matériel, est prévisible à des valeurs suffisamment grandes de p et peut être rétro-conçu avec une puissance de traitement suffisante ( Brute Force Hack ). Cela signifie également indirectement que les logiciels malveillants utilisant cette méthode peuvent s’exécuter à la fois sur les GPU et les CPU s’ils sont codés pour le faire, même en utilisant le GPU pour casser l’ASLR sur le CPU lui-même. [32]

Voir également

  • Flipisme
  • Ligue d’entropie
  • Liste des générateurs de nombres aléatoires
  • PP (complexité)
  • Génération procédurale
  • Algorithme randomisé
  • Générateur de mot de passe Aléatoire
  • Variable Aléatoire , contient une valeur dépendante du hasard

Références

  1. ^ random(4) – Manuel du programmeur Linux – Fichiers spéciaux
  2. ^ arc4random(3) – Manuel des fonctions de la bibliothèque OpenBSD
  3. ^ Li, Pu; Wang, Yun-Cai; Zhang, Jian-Zhong (2010-09-13). “Générateur de nombres aléatoires rapide tout optique” . Optique Express . 18 (19): 20360–20369. Bibcode : 2010OExpr..1820360L . doi : 10.1364/OE.18.020360 . ISSN 1094-4087 . PMID 20940928 .
  4. ^ Li, Pu; Soleil, Yuan Yuan ; Liu, Xianglian ; Yi, Xiaogang ; Zhang, Jianguo ; Guo, Xiaomin ; Guo, Yanqiang ; Wang, Yuncai (2016-07-15). “Générateur de bits aléatoires physiques entièrement basé sur la photonique”. Lettres d’optique . 41 (14): 3347–3350. Bibcode : 2016OptL…41.3347L . doi : 10.1364/OL.41.003347 . ISSN 1539-4794 . PMID 27420532 .
  5. ^ Wang, Anbang; Li, Pu; Zhang, Jianguo ; Zhang, Jianzhong; Li, Lei; Wang, Yuncai (2013-08-26). “Générateur de bits aléatoires physiques en temps réel à haute vitesse de 4,5 Gbps” . Optique Express . 21 (17): 20452–20462. Bibcode : 2013OExpr..2120452W . doi : 10.1364/OE.21.020452 . ISSN 1094-4087 . PMID 24105589 . S2CID 10397141 .
  6. ^ Marcheur, John. « HotBits : véritables nombres aléatoires » . Récupéré le 27/06/2009 .
  7. ^ Halprin, a couru; Naor, Moni . “Jeux pour extraire le hasard” (PDF) . Département d’informatique et de mathématiques appliquées, Institut Weizmann des sciences . Récupéré le 27/06/2009 . {{cite journal}}: Cite journal requires |journal= (help)
  8. ^ Fondation TrueCrypt. “Tutoriel pour débutants TrueCrypt, partie 3” . Récupéré le 27/06/2009 .
  9. ^ “RANDOM.ORG – Véritable service de nombre Aléatoire” . www.random.org . Récupéré le 14/01/2016 .
  10. ^ “Générateurs de nombres pseudo-aléatoires à haute dimensionnalité” . Récupéré le 21/11/2018 .
  11. ^ Widynski, Bernard (19 mai 2020). “Séquence de Weyl du carré moyen RNG” . arXiv : 1704.00358 [ cs.CR ].
  12. ^ WA Wagenaar (1972). “Génération de séquences aléatoires par des sujets humains: une étude critique de la littérature”. Bulletin Psychologique . 77 (1): 65–72. CiteSeerX 10.1.1.211.9085 . doi : 10.1037/h0032060 .
  13. ^ Domstedt, B. (2009). “TRNG9803 Générateur de nombres aléatoires réels” . Fabricant : www.TRNG98.se.
  14. ^ Wang, Yongge (2014). “Propriétés statistiques des séquences pseudo-aléatoires et expériences avec PHP et Debian OpenSSL”. Sécurité informatique – ESORICS 2014 . Notes de cours en informatique. Vol. 8712. Heidelberg : Springer LNCS. p. 454–471. doi : 10.1007/978-3-319-11203-9_26 . ISBN 978-3-319-11202-2.
  15. ^ Li, Pu; Yi, Xiaogang ; Liu, Xianglian ; Wang, Yuncai ; Wang, Yongge (2016-07-11). “Propriétés de mouvement brownien des générateurs de bits aléatoires optoélectroniques basés sur le chaos laser” . Optique Express . 24 (14): 15822–15833. Bibcode : 2016OExpr..2415822L . doi : 10.1364/OE.24.015822 . ISSN 1094-4087 . PMID 27410852 .
  16. ^ Goualard, F. (2020). Génération de nombres aléatoires à virgule flottante en divisant des entiers : une étude de cas . CIEC. doi : 10.1007/978-3-030-50417-5_2 . S2CID 219889587 .
  17. ^ Campbell, Taylor R. (2014). “Flottants aléatoires uniformes : comment générer un nombre à virgule flottante à double précision dans [0, 1] uniformément au hasard étant donné une source de bits Aléatoire uniforme” . Récupéré le 4 septembre 2021 .
  18. ^ “Une nouvelle spécification pour std ::generate_canonical” . www.open-std.org .
  19. ↑ Goualard , Frédéric (juillet 2021). “Dessiner des nombres aléatoires à virgule flottante à partir d’un intervalle” . HAL . Récupéré le 4 septembre 2021 .
  20. ^ Nevin BR. “[stdlib] Améliorations des nombres aléatoires à virgule flottante par NevinBR · Pull Request #33560 · apple/swift” . GitHub .
  21. ^ Lemire, Daniel (23 février 2019). “Génération rapide d’entiers aléatoires dans un intervalle”. Transactions ACM sur la modélisation et la simulation informatique . 29 (1): 1–12. arXiv : 1805.10941 . doi : 10.1145/3230636 . S2CID 44061046 .
  22. ^ “Un algorithme optimal pour les entiers aléatoires bornés par stephentyrone · Pull Request #39143 · apple/swift” . GitHub .
  23. ^ Les MathWorks. “Méthodes de génération courantes” . Récupéré le 13/10/2011 .
  24. ^ Le groupe d’algorithmes numériques. “G05 – Générateurs de nombres aléatoires” (PDF) . Manuel de la bibliothèque NAG, Mark 23 . Récupéré le 09/02/2012 .
  25. ^ Matthieu Vert (2013-09-18). “Les nombreux défauts de Dual_EC_DRBG” .
  26. ^ Matthieu vert (2013-09-20). “RSA avertit les développeurs de ne pas utiliser les produits RSA” .
  27. ^ “Nous n’activons pas les portes dérobées dans nos produits cryptographiques, indique RSA aux clients” . Ars Technica . 2013-09-20.
  28. ^ “Les chercheurs peuvent glisser un cheval de Troie indétectable dans les processeurs Ivy Bridge d’Intel” . Ars Technica . 2013-09-18.
  29. ^ Théodore Ts’o. “Je suis tellement content d’avoir résisté à la pression des ingénieurs d’Intel pour que /dev/random ne se fie qu’à l’instruction RDRAND” . Google Plus.
  30. ^ Théodore Ts’o. “Re : [PATCH] /dev/random : Insuffisance d’entropie sur de nombreuses architectures” . LWN.
  31. ^ Nestel, ML (7 juillet 2015). « À l’intérieur de la plus grande escroquerie de loterie de tous les temps » . La bête quotidienne . Consulté le 10 juillet 2015 .
  32. ^ “AnC-VUSec” . Récupéré le 13 juillet 2018 .

Lectures complémentaires

  • Donald Knuth (1997). “Chapitre 3 – Nombres aléatoires”. L’art de la programmation informatique . Vol. 2 : Algorithmes semi-numériques (3 éd.).
  • L’Ecuyer, Pierre (2017). “Histoire de la génération de nombres aléatoires uniformes” (PDF) . Actes de la conférence de simulation d’hiver 2017 . Presse IEEE. p. 202–230.
  • L’Ecuyer, Pierre (2012). “Génération de nombres aléatoires” (PDF) . Dans JE Doux; W.Haerdle; Y. Mori (dir.). Manuel de statistiques computationnelles : concepts et méthodes . Manuel de statistiques computationnelles (deuxième éd.). Springer Verlag. p. 35–71. doi : 10.1007/978-3-642-21551-3_3 . manche : 10419/22195 . ISBN 978-3-642-21550-6.
  • Kroese, DP ; Taimre, T.; En ligneBotev, ZI (2011). “Chapitre 1 – Génération de nombres aléatoires uniformes” . Manuel des méthodes de Monte Carlo . New York : John Wiley & Fils. p. 772.ISBN _ 978-0-470-17793-8.
  • Presse, WH ; Teukolsky, SA; Vetterling, WT ; Flannery, BP (2007). “Chapitre 7. Nombres aléatoires” . Recettes numériques: L’art du calcul scientifique (3e éd.). New York : Cambridge University Press. ISBN 978-0-521-88068-8.
  • Série NIST SP800-90A, B, C sur la génération de nombres aléatoires
  • M. Tomassini, M. Sipper et M. Perrenoud (octobre 2000). “Sur la génération de nombres aléatoires de haute qualité par des automates cellulaires bidimensionnels”. Transactions IEEE sur les ordinateurs . 49 (10): 1146–1151. doi : 10.1109/12.888056 .{{cite journal}}: CS1 maint: uses authors parameter (link)

Liens externes

  • RANDOM.ORG Service de nombres aléatoires réels
  • Générateur de nombres aléatoires quantiques à l’ANU
  • Aléatoire et pseudo-Aléatoire sur In Our Time à la BBC
  • jRand un framework basé sur Java pour la génération de séquences de simulation, y compris des séquences de nombres pseudo-aléatoires
  • Générateurs de nombres aléatoires dans la bibliothèque NAG Fortran
  • Randomness Beacon au NIST , diffusant des chaînes de bits à entropie complète en blocs de 512 bits toutes les 60 secondes. Conçu pour offrir imprévisibilité, autonomie et cohérence.
  • Un appel système pour les nombres aléatoires : getrandom() , un article de LWN.net décrivant un appel système Linux dédié
  • Propriétés statistiques des séquences pseudo-aléatoires et expériences avec PHP et Debian OpenSSL
  • Générateur de séquence Aléatoire basé sur le bruit d’avalanche
You might also like
Leave A Reply

Your email address will not be published.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More