13Jul

Comment les ordinateurs génèrent des nombres aléatoires

dés nombres aléatoires

Les ordinateurs génèrent un nombre aléatoire pour tout, de la cryptographie aux jeux vidéo et au jeu. Il existe deux catégories de nombres aléatoires - les nombres aléatoires "vrais" et les nombres pseudo-aléatoires - et la différence est importante pour la sécurité des systèmes de cryptage.

Les ordinateurs peuvent générer des nombres vraiment aléatoires en observant certaines données extérieures, comme les mouvements de la souris ou le bruit du ventilateur, qui ne sont pas prévisibles, et en créant des données à partir de celles-ci. C'est ce qu'on appelle l'entropie. D'autres fois, ils génèrent des nombres «pseudo-aléatoires» en utilisant un algorithme de sorte que les résultats semblent aléatoires, même s'ils ne le sont pas.

Ce sujet est devenu plus controversé récemment, avec beaucoup de gens se demandant si la puce intégrée de générateur de nombres aléatoires d'Intel est digne de confiance. Pour comprendre pourquoi il n'est peut-être pas digne de confiance, vous devrez comprendre comment les nombres aléatoires sont générés en premier lieu, et à quoi ils servent.

Quels nombres aléatoires sont utilisés pour

Les nombres aléatoires ont été employés pendant beaucoup de milliers d'années. Qu'il s'agisse de lancer une pièce de monnaie ou de lancer un dé, le but est de laisser le résultat final au hasard. Les générateurs de nombres aléatoires dans un ordinateur sont similaires - ils sont une tentative d'obtenir un résultat aléatoire imprévisible.

Les générateurs de nombres aléatoires sont utiles à de nombreuses fins différentes. Mis à part des applications évidentes comme générer des nombres aléatoires à des fins de jeu ou de créer des résultats imprévisibles dans un jeu d'ordinateur, le hasard est important pour la cryptographie.

Cryptography exige des nombres que les attaquants ne peuvent pas deviner. Nous ne pouvons pas utiliser les mêmes chiffres encore et encore. Nous voulons générer ces nombres d'une manière très imprévisible afin que les attaquants ne puissent pas les deviner. Ces nombres aléatoires sont essentiels pour le chiffrement sécurisé, que vous cryptiez vos propres fichiers ou que vous utilisiez simplement un site Web HTTPS sur Internet.

video-poker-jeu-aléatoire

True Random Numbers

Vous vous demandez peut-être comment un ordinateur peut réellement générer un nombre aléatoire. D'où vient ce "hasard"?Si ce n'est qu'un morceau de code informatique, n'est-il pas possible que les chiffres générés par l'ordinateur soient prévisibles?

Nous regroupons généralement les nombres aléatoires que les ordinateurs génèrent en deux types, en fonction de la façon dont ils sont générés: les nombres aléatoires «vrais» et les nombres pseudo-aléatoires.

Pour générer un "vrai" nombre aléatoire, l'ordinateur mesure un type de phénomène physique qui se produit en dehors de l'ordinateur. Par exemple, l'ordinateur pourrait mesurer la décroissance radioactive d'un atome. Selon la théorie des quanta, il n'y a aucun moyen de savoir avec certitude quand la désintégration radioactive se produira, donc c'est essentiellement "pur hasard" de l'univers. Un attaquant ne serait pas capable de prédire quand la désintégration radioactive se produirait, ainsi ils ne connaîtraient pas la valeur aléatoire.

Pour un exemple plus quotidien, l'ordinateur peut compter sur le bruit atmosphérique ou simplement utiliser l'heure exacte à laquelle vous appuyez sur les touches de votre clavier comme source de données imprévisibles, ou entropie. Par exemple, votre ordinateur peut remarquer que vous avez appuyé sur une touche exactement à 0,23423523 secondes après 14 heures, prenez assez de temps spécifiques associés à ces touches et vous aurez une source d'entropie que vous pouvez utiliser pour générer un "vrai" aléatoire.nombre. Vous n'êtes pas une machine prévisible, donc un attaquant ne peut pas deviner le moment précis où vous appuyez sur ces touches. Le périphérique aléatoire /dev/ sur Linux, qui génère des nombres aléatoires, "bloque" et ne renvoie pas un résultat tant qu'il ne rassemble pas assez d'entropie pour renvoyer un nombre vraiment aléatoire.

linux-generate-random-data

Numéros pseudo-aléatoires

Les nombres pseudo-aléatoires sont une alternative aux nombres aléatoires "vrais".Un ordinateur pourrait utiliser une valeur de départ et un algorithme pour générer des nombres qui semblent aléatoires, mais qui sont en fait prévisibles. L'ordinateur ne rassemble aucune donnée aléatoire de l'environnement.

Ce n'est pas nécessairement une mauvaise chose dans toutes les situations. Par exemple, si vous jouez à un jeu vidéo, cela n'a pas vraiment d'importance si les événements qui se produisent dans ce jeu sont encadrés par de «vrais» nombres aléatoires ou des nombres pseudo-aléatoires. D'un autre côté, si vous utilisez le cryptage, vous ne voulez pas utiliser les nombres pseudo-aléatoires qu'un intrus pourrait deviner.

Par exemple, supposons qu'un attaquant connaisse l'algorithme et la valeur de départ utilisée par un générateur de nombres pseudo-aléatoires. Et supposons qu'un algorithme de cryptage obtienne un nombre pseudo-aléatoire de cet algorithme et l'utilise pour générer une clé de cryptage sans ajouter de caractère aléatoire supplémentaire. Si un attaquant en sait assez, ils peuvent travailler en arrière et déterminer le nombre pseudo-aléatoire que l'algorithme de cryptage doit avoir choisi dans ce cas, brisant le cryptage.

nombres pseudo-aléatoires

Le générateur de nombres aléatoires de la NSA et du matériel Intel

Pour faciliter les choses aux développeurs et aider à générer des nombres aléatoires sécurisés, les puces Intel incluent un générateur de nombres aléatoires matériel appelé RdRand. Cette puce utilise une source d'entropie sur le processeur et fournit des nombres aléatoires au logiciel lorsque le logiciel le demande.

Le problème ici est que le générateur de nombres aléatoires est essentiellement une boîte noire et nous ne savons pas ce qui se passe à l'intérieur. Si RdRand contenait une porte dérobée NSA, le gouvernement serait en mesure de casser les clés de chiffrement qui ont été générées avec seulement les données fournies par ce générateur de nombres aléatoires.

Ceci est une préoccupation sérieuse. En décembre 2013, les développeurs de FreeBSD ont supprimé le support de l'utilisation de RdRand comme source de hasard, disant qu'ils ne pouvaient pas lui faire confiance.[Source] La sortie du périphérique RdRand serait introduite dans un autre algorithme qui ajouterait une entropie supplémentaire, garantissant que les portes dérobées dans le générateur de nombres aléatoires n'auraient pas d'importance. Linux a déjà fonctionné de cette manière, rendant encore plus aléatoires les données aléatoires provenant de RdRand, de sorte qu'il ne serait pas prévisible, même s'il y avait une porte dérobée.[Source] Dans un récent AMA( "Ask Me Anything") sur Reddit, le PDG d'Intel, Brian Krzanich, n'a pas répondu à ces questions.[Source]

Bien sûr, ce n'est probablement pas un problème avec les puces Intel. Les développeurs de FreeBSD ont aussi appelé les puces de Via par leur nom. Cette controverse montre pourquoi générer des nombres aléatoires qui sont vraiment aléatoires et non prévisibles est si important.

Intel

Pour générer des nombres aléatoires "vrais", les générateurs de nombres aléatoires rassemblent "l'entropie", ou des données apparemment aléatoires provenant du monde physique qui les entoure. Pour les nombres aléatoires qui ne sont pas , doit être aléatoire, ils peuvent simplement utiliser un algorithme et une valeur de départ.

Crédit d'image: rekre89 sur Flickr, Lisa Brewster sur Flickr, Ryan Somma sur Flickr, huangjiahui sur Flickr