La question peut paraître étonnante et pas si compliquée que
cela: comment est-ce qu’un ordinateur peut générer un nombre
aléatoire? C’est en fait une question plus épineuse qu’il n’y paraît et
une tâche finalement très compliquée. Les exemples de processus aléatoires dans
le monde qui nous entoure ne manquent pas: le lancer de dés, de pièces,
ou encore la désintégration d’éléments radioactifs pour les plus scientifiques
d’entre nous. Ces processus aléatoires ont été utilisés depuis la nuit des
temps, le but étant de laisser une décision se décider par la chance. Si
l’aléatoire, ou la notion de chance, est assez simple à concevoir pour
l’humain, il reste cependant un concept très compliqué à demander à un
ordinateur. Par nature, les ordinateurs sont des machines déterministes:
pour une même question, vous obtiendrez toujours la même réponse. Les
ordinateurs ont même été spécifiquement pensés pour fonctionner ainsi.
L’aléatoire est un paramètre que l’on veut éliminer des processus
algorithmiques. Alors comment demande-t-on à un ordinateur de produire un
nombre aléatoire?
De l’utilité des nombres aléatoires
Avant de se demander comment faire, une première question
pourrait être: « Pourquoi veut-on demander à un ordinateur de
générer des nombres aléatoires?» Eh bien pour simuler des processus
aléatoires comme des jets de dés, des tirages au sort, ou des jeux de cartes,
pour simuler des jeux d’argent par exemple. On peut aussi parler de la
simulation d’événements dans les jeux vidéo ou dans le domaine de la
cryptographie, pour l’encodage des mots de passe et la protection des données.
Les exemples d’utilisation de nombres aléatoires sont donc nombreux et peuvent
revêtir des aspects cruciaux lorsque la sécurité ou de l’argent sont en jeu.
L’aléatoire et l’informatique
Il existe deux types d’aléatoire en informatique, ce que l’on
appelle le pseudo-aléatoire et le «vrai» aléatoire. Tout d’abord,
le pseudo-aléatoire représente tous les processus algorithmiques permettant de
générer aléatoirement des nombres. Ce qu’il faut garder à l’esprit est qu’il
est impossible de demander à une machine déterministe de produire aléatoirement
un nombre. De ce fait, le principe généralement employé est le suivant:
une valeur de départ est choisie, appelée valeur racine. Cette valeur va
ensuite être modifiée à l’aide d’un algorithme de transformation. Cet algorithme est un
processus reproduisant de l’aléatoire, en tout cas en théorie. C’est une
séquence d’opérations qui doit être difficile à comprendre en regardant
uniquement les nombres produits. Le processus de transformation de l’algorithme
doit donc être complexe et ne pas avoir l’air de suivre un procédé évident de
l’extérieur. Aussi complexe soit-il, ce processus étant constamment répété et
suivant une architecture prédéfinie, les nombres produits ne sont donc pas
réellement aléatoires.
Ces processus algorithmes ne sont donc pas du
«vrai» aléatoire, qui existe cependant en informatique. Ce vrai
aléatoire fonctionne avec l’appui d’éléments physiques extérieurs à
l’ordinateur, qui eux sont réellement aléatoires. Un exemple classique est de
se baser sur la désintégration radioactive d’un atome. Ce processus est
aléatoire et d’après les théories quantiques, il est impossible de le prévoir.
Les nombres générés à partir de ce processus sont donc totalement imprévisibles
et ne suivent aucunement un pattern -un modèle simplifié- prédéfini. En
pratique cependant, si l’on souhaite qu’un ordinateur génère des nombres
aléatoires, celui-ci ne peut pas toujours se référer à un procéder aléatoire
comme la désintégration des éléments radioactifs, il
est donc nécessaire de trouver d’autres processus aléatoires accessibles. Un processus habituel des ordinateurs est d’attendre certains
comportements de l’utilisateur, comme par exemple le moment exact où il va
appuyer sur une des touches du clavier. L’humain n’étant pas une machine, il
est imprévisible par nature.
Pas le même aléatoire selon l’utilisation
Il est évident que l’importance de la tâche à accomplir va conditionner le
choix du type d’aléatoire à mettre en place. Le pseudo-aléatoire, bien que
moins performant et utile que le vrai aléatoire, n’en est pas pour autant
inutile. Dans le contexte d’un jeu vidéo par exemple, il n’est pas forcément
très grave que le processus de génération de distribution carte du croupier
contre lequel vous jouez soit réellement aléatoire. Si vous voulez choisir un
échantillon représentatif et équitablement réparti dans un jeu de données, un
algorithme pseudo-aléatoire peut aussi être suffisant.
En revanche, dans le cas d’un jeu de pari ou d’argent, où des
utilisateurs risquent des pertes ou des gains, il est nécessaire que le
processus de génération de nombre soit, lui, parfaitement aléatoire pour qu’il
ne puisse pas être prédit. De même en cryptographie, si le processus
d’encryptage des mots de passe est trop facile à deviner, il sera possible de
retrouver les mots de passe en ayant accès à suffisamment d’exemples. Il est
donc clair qu’il faut calibrer la qualité du processus de génération en
fonction de l’utilisation qui en sera faite: plus le processus est
critique, plus le processus de génération de nombres aléatoires doit être
performant.
La génération aléatoire et la controverse
Afin de permettre à nos ordinateurs d’avoir accès à des
processus aléatoires pour leur tâches habituelles, les constructeurs de
processeurs comme Intel proposent des générateurs de nombres aléatoires basés
sur leur matériel. Le processeur, un composant informatique souvent considéré
comme le cerveau de l’ordinateur, fournit des nombres aléatoires au système
d’exploitation, et ceci de manière automatisée. Les utilisateurs ne contrôlent
pas du tout ce processus qui est communément appelé une «boîte
noire». Une des controverses actuelle est que si certaines organisations
comme la NSA (une organisation de surveillance américaine) ont accès à une faille
dans ce processus, souvent appelée «backdoor» dans le domaine,
cette organisation serait capable de casser les clés d’encryptions
-chiffrement- fournis par cette méthode. Ces failles peuvent évidemment être
sciemment insérées par les créateurs du processus. Ainsi, cela donnerait accès
à des données potentiellement sensibles et censées être sécurisées à des
personnes qui ne doivent pas y avoir accès. Cet aspect est actuellement sujet à
critique, et beaucoup de questionnements sont soulevés concernant la vie privée
des utilisateurs, le contrôle des gouvernements sur les populations et la
surveillance de masse. Une partie de la communauté informatique ne considère
pas ces systèmes comme fiables et travaille sur d’autres méthodes ne dépendant
pas d’éléments extérieurs développés et contrôlés par des entreprises pouvant
avoir des intérêts divergents avec l’intérêt général. Ainsi, un des grands
enjeux des prochaines années de l’informatique libre est de s’extraire de ces
procédés pouvant potentiellement nuire aux utilisateurs.
Sources:
1 -
https://www.sicara.ai/blog/2019-01-28-how-computer-generate-random-numbers
2 -
https://www.howtogeek.com/183051/htg-explains-how-computers-generate-random-numbers/
3 - https://www.hypr.com/random-number-generator/
4 - https://engineering.mit.edu/engage/ask-an-engineer/can-a-computer-generate-a-truly-random-number/
Commentaires : (0)
Aucun commentaire