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

Table des matières:

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

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

Vidéo: Comment les ordinateurs génèrent des nombres aléatoires
Vidéo: Chromecast - TEST COMPLET FR (présentation et installation) - YouTube 2024, Avril
Anonim
Les ordinateurs génèrent des nombres aléatoires pour tout, de la cryptographie aux jeux vidéo en passant par les jeux d'argent. 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 génèrent des nombres aléatoires pour tout, de la cryptographie aux jeux vidéo en passant par les jeux d'argent. 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 réellement aléatoires en observant certaines données extérieures, telles que les mouvements de souris ou le bruit de ventilateur, qui n’est pas prévisible, et en créant des données à partir de celles-ci. Ceci est connu comme l'entropie. D'autres fois, ils génèrent des nombres «pseudo-aléatoires» à l'aide d'un algorithme afin que les résultats paraissent aléatoires, même s'ils ne le sont pas.

Ce sujet a récemment fait l’objet de controverses, et de nombreuses personnes se demandent si la puce du générateur de nombres aléatoires intégrée au matériel d’Intel est digne de confiance. Pour comprendre pourquoi cette fiabilité n’est peut-être pas digne de confiance, vous devez comprendre comment les nombres aléatoires sont générés en premier lieu et à quoi ils servent.

A quoi servent les nombres aléatoires

Des nombres aléatoires sont utilisés depuis des milliers d'années. Qu'il s'agisse de lancer une pièce ou de lancer un dé, l'objectif est de laisser le résultat final au hasard. Les générateurs de nombres aléatoires sur un ordinateur sont similaires: ils permettent d’obtenir un résultat aléatoire et imprévisible.

Les générateurs de nombres aléatoires sont utiles à différentes fins. Outre les applications évidentes telles que la génération de nombres aléatoires pour le jeu ou la création de résultats imprévisibles dans un jeu informatique, le caractère aléatoire est important pour la cryptographie.

La cryptographie nécessite des chiffres impossibles à deviner. Nous ne pouvons pas simplement utiliser les mêmes numéros à plusieurs reprises. Nous voulons générer ces chiffres de manière très imprévisible afin que les attaquants ne puissent pas les deviner. Ces numéros aléatoires sont essentiels pour un cryptage sécurisé, que vous cryptiez vos propres fichiers ou utilisiez simplement un site Web HTTPS sur Internet.

Image
Image

Vrais nombres aléatoires

Vous vous demandez peut-être comment un ordinateur peut générer un nombre aléatoire. D'où vient ce «hasard»? S'il ne s'agit que d'un morceau de code informatique, les chiffres générés par l'ordinateur ne sont-ils pas prévisibles?

Nous regroupons généralement les nombres aléatoires générés par les ordinateurs en deux types, en fonction de la manière dont ils ont été 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 certain type de phénomène physique qui se produit en dehors de l'ordinateur. Par exemple, l'ordinateur pourrait mesurer la désintégration radioactive d'un atome. Selon la théorie quantique, il n’ya aucun moyen de savoir avec certitude à quel moment la décroissance radioactive va se produire, c’est donc essentiellement du «pur hasard» de l’univers. Un attaquant ne serait pas en mesure de prédire quand une désintégration radioactive se produirait, il ne connaît donc pas la valeur aléatoire.

Pour un exemple plus quotidien, l'ordinateur pourrait utiliser le bruit atmosphérique ou simplement utiliser l'heure exacte à laquelle vous appuyez sur les touches du clavier comme source de données imprévisibles, ou d'entropie. Par exemple, votre ordinateur peut remarquer que vous avez appuyé sur une touche exactement 0.23423523 seconde après 14 heures, prenez suffisamment de temps spécifique associé à ces pressions pour obtenir une source d'entropie que vous pouvez utiliser pour générer une «vraie» valeur aléatoire. nombre. Vous n'êtes pas une machine prévisible, ainsi un attaquant ne peut pas deviner le moment précis où vous appuyez sur ces touches. Le périphérique / dev / random sous Linux, qui génère des nombres aléatoires, des «blocs» et ne renvoie pas de résultat tant qu’il ne recueille pas assez d’entropie pour renvoyer un nombre réellement aléatoire.

Image
Image

Nombres pseudo-aléatoires

Les nombres pseudo-aléatoires sont une alternative aux «vrais» nombres aléatoires. 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 collecte aucune donnée aléatoire de l’environnement.

Ce n’est pas forcément une mauvaise chose dans toutes les situations. Par exemple, si vous jouez à un jeu vidéo, peu importe que les événements qui se produisent dans ce jeu soient encadrés par de «vrais» nombres aléatoires ou des nombres pseudo-aléatoires. En revanche, si vous utilisez le cryptage, vous ne voulez pas utiliser de nombres pseudo-aléatoires qu'un attaquant pourrait deviner.

Par exemple, supposons qu'un attaquant connaisse l'algorithme et la valeur de base utilisés par le générateur de nombres pseudo-aléatoires. Et disons qu'un algorithme de chiffrement extrait un nombre pseudo-aléatoire de cet algorithme et l'utilise pour générer une clé de chiffrement sans ajouter d'aléa supplémentaire. Si un attaquant en savait suffisamment, il pourrait alors travailler en arrière et déterminer le nombre pseudo-aléatoire que l'algorithme de cryptage devait avoir choisi dans ce cas, rompant ainsi le cryptage.

La NSA et le générateur de nombres aléatoires de matériel d’Intel

Pour faciliter la tâche des développeurs et contribuer à la création de nombres aléatoires sécurisés, les puces Intel incluent un générateur de nombres aléatoires basé sur du 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 de la NSA, le gouvernement serait en mesure de casser les clés de chiffrement générées avec les seules données fournies par ce générateur de nombres aléatoires.

C'est un problème sérieux. En décembre 2013, les développeurs de FreeBSD ont supprimé le support pour l’utilisation directe de RdRand en tant que source d’aléatoire, affirmant qu’ils ne pouvaient pas y faire confiance. [Source] La sortie du périphérique RdRand serait introduite dans un autre algorithme qui ajoute une entropie supplémentaire, garantissant que toute porte dérobée du générateur de nombres aléatoires n’aurait aucune importance Linux fonctionnait déjà de cette manière, randomisant davantage les données aléatoires provenant de RdRand afin qu’elles ne soient pas prévisibles, même s’il y avait une porte dérobée. [Source] Dans une récente AMA ("Ask Me Anything") sur Reddit, le PDG d'Intel, Brian Krzanich, n'a pas répondu aux questions concernant ces préoccupations. [La source]

Bien sûr, ce n’est pas un problème avec les puces Intel. Les développeurs de FreeBSD ont également appelé les puces de Via. Cette controverse montre pourquoi il est si important de générer des nombres aléatoires vraiment aléatoires et imprévisibles.

Image
Image

Pour générer de «vrais» nombres aléatoires, les générateurs de nombres aléatoires rassemblent des données «entropiques», ou apparemment aléatoires, issues du monde physique qui les entoure. Pour les nombres aléatoires qui ne sont pas vraiment doivent être aléatoires, ils peuvent simplement utiliser un algorithme et une valeur de départ.

Conseillé: