Les ordinateurs génèrent un nombre aléatoire pour tout, de la cryptographie aux jeux vidéo et aux 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 chiffrement.
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, ce qui n’est pas prévisible, 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 pour que les résultats apparaissent 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 de générateur de nombres aléatoires intégrée à Intel est digne de confiance. Pour comprendre pourquoi cela peut ne pas être digne de confiance, vous devrez comprendre comment les nombres aléatoires sont générés en premier lieu et à quoi ils servent.
À quoi servent les nombres aléatoires
Les 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é, 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 tentent d’obtenir un résultat aléatoire et imprévisible.
Les générateurs de nombres aléatoires sont utiles à de nombreuses fins différentes. Outre les applications évidentes telles que la génération de nombres aléatoires à des fins de 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 que les attaquants ne peuvent pas deviner. Nous ne pouvons pas simplement utiliser les mêmes chiffres 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 nombres aléatoires sont essentiels pour un cryptage sécurisé, que vous cryptez vos propres fichiers ou que vous 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 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 générés par les ordinateurs en deux types, selon 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 à l’extérieur de l’ordinateur. Par exemple, l’ordinateur pourrait mesurer la désintégration radioactive d’un atome. Selon la théorie quantique, il n’y a aucun moyen de savoir avec certitude quand la désintégration radioactive se produira, il s’agit donc essentiellement d’un «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îtrait donc pas la valeur aléatoire.
Pour un exemple plus quotidien, l’ordinateur peut s’appuyer 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 d’entropie. Par exemple, votre ordinateur peut remarquer que vous avez appuyé sur une touche exactement à 0,23423523 secondes après 14 heures. Saisissez suffisamment de temps spécifiques associés à ces pressions sur les touches et vous obtiendrez une source d’entropie que vous pourrez utiliser pour générer un «vrai» nombre aléatoire. 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 / dev / random sous Linux, qui génère des nombres aléatoires, «bloque» et ne renvoie pas de résultat tant qu’il n’a pas recueilli suffisamment d’entropie pour renvoyer un nombre vraiment aléatoire.
Nombres 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 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 si les événements qui se produisent dans ce jeu sont causés par des nombres aléatoires «vrais» ou des nombres pseudo-aléatoires. D’un autre côté, si vous utilisez le chiffrement, vous ne voulez pas utiliser de nombres pseudo-aléatoires qu’un attaquant pourrait deviner.
Par exemple, disons qu’un attaquant connaît l’algorithme et la valeur de départ qu’un générateur de nombres pseudo-aléatoires utilise. 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 de caractère aléatoire supplémentaire. Si un attaquant en sait assez, il pourrait travailler à rebours et déterminer le nombre pseudo-aléatoire que l’algorithme de cryptage doit avoir choisi dans ce cas, brisant le cryptage.
La NSA et le générateur de nombres aléatoires matériels d’Intel
Pour faciliter les choses pour les 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 basé sur le 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 NSA, le gouvernement serait en mesure de briser les clés de chiffrement générées avec uniquement les 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é la prise en charge de l’utilisation directe de RdRand comme source d’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 toutes les portes dérobées dans le générateur de nombres aléatoires n’auraient pas d’importance. Linux fonctionnait déjà de cette manière, en 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 sur ces préoccupations. [Source]
Bien sûr, ce n’est probablement pas seulement un problème avec les puces Intel. Les développeurs de FreeBSD ont également appelé les puces de Via par leur nom. Cette controverse montre pourquoi il est si important de générer des nombres aléatoires qui sont vraiment aléatoires et non prévisibles.
Pour générer de «vrais» nombres aléatoires, les générateurs de nombres aléatoires collectent une «entropie», ou des données apparemment aléatoires du monde physique qui les entoure. Pour les nombres aléatoires qui n’ont pas besoin d’être aléatoires, 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