684 votes

En quoi les nombres pseudo-aléatoires et les nombres véritablement aléatoires sont-ils différents et pourquoi est-ce important ?

Je n'ai jamais vraiment compris ça. Disons que vous écrivez un petit programme dans n'importe quel langage qui lance des dés (en utilisant les dés comme exemple). Après 600 000 lancers, chaque numéro aura été lancé environ 100 000 fois, ce qui correspond à ce que j'attends.

Pourquoi existe-t-il des sites web consacrés au "vrai hasard" ? Compte tenu de l'observation ci-dessus, il est certain que les chances d'obtenir un numéro sont presque exactement égales à 1 sur le nombre de numéros parmi lesquels il peut choisir.

Je l'ai essayé dans Python : Voici le résultat de 60 millions de lancers. La plus grande variation est de 0,15. Ce n'est pas aussi aléatoire que ça peut l'être ?

1 - 9997653 2347.0
2 - 9997789 2211.0
3 - 9996853 3147.0
4 - 10006533 -6533.0
5 - 10002774 -2774.0
6 - 9998398 1602.0

27voto

Alex McKenzie Points 1585

La génération de nombres aléatoires que votre ordinateur peut effectuer convient à la plupart des besoins, et il est peu probable que vous ayez besoin d'un nombre vraiment aléatoire.

La véritable génération de nombres aléatoires a cependant son utilité. Dans la sécurité informatique, les jeux d'argent, les grands échantillons statistiques, etc.

Si vous vous intéressez aux applications des nombres aléatoires, consultez le site Web de la Commission européenne. Article de Wikipedia .

27voto

BenTrofatter Points 1453

Les nombres aléatoires générés par les fonctions typiques de la plupart des langages de programmation ne sont pas des nombres purement aléatoires. Ce sont des nombres pseudo-aléatoires. Comme ils ne sont pas purement aléatoires, ils peuvent être devinés avec suffisamment d'informations sur les nombres générés précédemment. Il s'agira donc d'un désastre pour la sécurité en cryptographie .

À titre d'exemple, la fonction suivante de générateur de nombres aléatoires est utilisée dans l'application glibc ne génère pas de nombre purement aléatoire. Le numéro pseudo-aléatoire généré par ce système peut être deviné. C'est une erreur pour les questions de sécurité. Il est déjà arrivé que cela devienne désastreux. Il ne devrait pas être utilisé en cryptographie.

glibc random():
    r[i]  ( r[i-3] + r[i-31] )  % (2^32)
    output  r[i] >> 1

Ce type de générateur de nombres pseudo-aléatoires ne devrait jamais être utilisé dans des endroits sensibles sur le plan de la sécurité, même s'il est statistiquement très significatif.

Une des attaques les plus connues sur les clés pseudo-aléatoires est l'attaque sur 802.11b WEP . WEP a une clé à long terme de 104 bits, concaténée avec un IV (compteur) de 24 bits pour obtenir une clé de 128 bits, qui est à son tour appliquée à Algorithme RC4 pour générer une clé pseudo-aléatoire.

( RC4( IV + Key ) ) XOR (message)

Les clés étaient étroitement liées les unes aux autres. Ici, seule IV a augmenté de 1 à chaque étape et toutes les autres sont restées identiques. Comme ce n'était pas purement aléatoire, c'était désastreux et facilement décomposable. La clé pouvait être récupérée en analysant environ 40000 trames, ce qui est l'affaire de quelques minutes. Si le WEP utilisait un IV de 24 bits purement aléatoire, il pouvait être sûr jusqu'à environ 2^24 (près de 16,8 millions) trames.

Il est donc préférable d'utiliser un générateur de nombres aléatoires purs pour les questions de sécurité lorsque cela est possible.

13voto

mithun1538 Points 367

La différence est que les nombres générés de façon pseudo-aléatoire sont prévisibles (se répétant) après un certain temps, alors que les vrais nombres aléatoires ne le sont pas. Le temps qu'il faut pour qu'ils se répètent dépend de la longueur de la graine qui est utilisée pour leur génération.

Voici une vidéo très intéressante à ce sujet : http://www.youtube.com/watch?v=itaMNuWLzJo

11voto

DoubleFission Points 151

Supposons qu'un nombre pseudo-aléatoire puisse être deviné par n'importe qui avant d'être généré.

Pour les applications triviales, un caractère pseudo-aléatoire convient, comme dans votre exemple, vous obtiendrez approximativement le pourcentage correct (environ 1/6e de l'ensemble des résultats) avec quelques variations mineures (ce que vous verriez si vous lanciez un dé 600 000 fois) ;

Cependant, lorsqu'il s'agit de choses comme la sécurité informatique, un véritable caractère aléatoire est nécessaire.

Par exemple, l'algorithme RSA commence par le choix par l'ordinateur de deux nombres aléatoires (P et Q), puis il effectue plusieurs étapes sur ces nombres pour générer des nombres spéciaux appelés clés publique et privée. (La partie importante d'une clé privée est qu'elle est privée, et que personne d'autre ne la connaît).

Si un attaquant peut savoir quels sont les deux nombres "aléatoires" que votre ordinateur va choisir, il peut suivre les mêmes étapes pour calculer votre clé privée (celle que personne d'autre n'est censé connaître !).

Avec votre clé privée, un pirate peut faire des choses comme a) parler à votre banque en se faisant passer pour vous, b) écouter votre trafic internet "sécurisé" et être capable de le décoder, c) se faire passer pour vous auprès d'autres parties sur internet.

C'est là qu'un véritable caractère aléatoire (c'est-à-dire qu'il ne peut être deviné ou calculé) est nécessaire.

11voto

gnasher729 Points 305

Le premier nombre aléatoire que j'ai utilisé avait l'excellente propriété que de deux nombres aléatoires consécutifs, le second était plus grand avec une probabilité de 0,6. Pas 0,5. Et le troisième était plus grand que le deuxième avec une probabilité de 0,6, et ainsi de suite. Vous pouvez imaginer comment cela peut perturber une simulation.

Certaines personnes ne croiraient pas que cela soit possible, les nombres aléatoires étant distribués de manière égale, mais c'est évidemment possible si l'on regarde la séquence (1, 3, 5, 2, 4, 1, 3, 5, 2, 4, ...) où le deuxième des deux nombres est plus grand avec une probabilité de 0,6.

D'autre part, pour les simulations, il peut être important de pouvoir reproduire des nombres aléatoires. Imaginons que vous fassiez une simulation de trafic et que vous vouliez découvrir comment certaines actions que vous pourriez entreprendre pourraient améliorer le trafic. Dans ce cas, vous voulez être en mesure de recréer exactement les mêmes données de trafic (comme les personnes essayant d'entrer dans une ville) avec différentes actions que vous avez essayées pour améliorer le trafic.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X