Ordinateurs et aléatoire : le hasard existe-t-il ?

Ordinateurs et aléatoire : le hasard existe-t-il ?

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/


Commentaire ( 0 ) :
5 m
20 octobre 2021
Auteurs
Partager

S'inscrire à notre newsletter

Nous publions du contenu régulièrement, restez à jour en vous abonnant à notre newsletter.