Comment les ordinateurs génèrent des nombres aléatoires
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 la souris ou le bruit des ventilateurs, ce 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 est devenu plus controversé récemment, de nombreuses personnes se demandant 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 cela peut ne pas être 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 visent à obtenir un résultat aléatoire 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 nombres que les attaquants ne peuvent pas deviner. Nous ne pouvons pas simplement utiliser les mêmes numéros, encore et encore. 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..
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 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 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 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 la désintégration radioactive se produirait, afin de ne pas connaître 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 secondes après 14h00… Saisissez assez de fois le temps spécifique associé à ces pressions pour obtenir 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, un attaquant ne peut donc 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 suffisamment d'entropie pour renvoyer un nombre réellement aléatoire..
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 nécessairement 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. D'autre part, 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 cryptage obtient un nombre pseudo-aléatoire de cet algorithme et l'utilise pour générer une clé de cryptage sans ajouter d'aléa supplémentaire. Si un attaquant en sait suffisamment, il pourrait alors travailler en arrière et déterminer le nombre pseudo-aléatoire que l'algorithme de cryptage doit avoir choisi dans ce cas, cassant ainsi le cryptage..
Le générateur de nombres aléatoires de matériel de la NSA et 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 les 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 FreeBSD ont supprimé la prise en charge de l'utilisation directe de RdRand en tant que source aléatoire, affirmant qu'ils ne pouvaient pas lui faire confiance. [Source] La sortie du périphérique RdRand serait introduite dans un autre algorithme qui ajoute une entropie supplémentaire, garantissant que n'importe quelle porte dérobée du générateur de nombres aléatoires n'aurait pas d'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 entendu, ce n'est probablement pas uniquement 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 qui sont vraiment aléatoires et qui ne sont pas prévisibles..
Pour générer de «vrais» nombres aléatoires, les générateurs de nombres aléatoires rassemblent des «entropies», ou des données apparemment aléatoires du monde physique qui les entoure. Pour les nombres aléatoires qui ne le font pas vraiment doivent être aléatoires, ils peuvent simplement utiliser un algorithme et une valeur de départ.
Crédit image: rekre89 sur Flickr, Lisa Brewster sur Flickr, Ryan Somma sur Flickr, huangjiahui sur Flickr