
Code-Garage #2 - L'aléatoire n'existe pas en informatique
Durée: 10m33s
Date de sortie: 08/11/2021
Dans cet épisode, je vous explique pourquoi l'aléatoire n'existe pas réellement en informatique, et comment on contourne cette limite.
Liens :
Liens :
- Article : Qu'est-ce qu'un ordinateur quantique ?
- Étude Scientifique : RSA et ventilateur
- Article : Math.random() et moteur V8
Salut et bienvenue sur ce nouvel épisode de Code Garage.
Je m'appelle Nicolas Brondin-Bernard et aujourd'hui, on va discuter d'aléatoires
et d'informatiques.
Dans des articles de mon blog, j'avancais que l'aléatoire n'existe pas en informatique,
mais aujourd'hui, je voudrais vous expliquer pourquoi est-ce qu'il n'existe pas ou du
moins pas vraiment.
Parce que oui, il faut prendre des pincettes quand on évoque la génération d'un chiffre
aléatoire par des ordinateurs.
On peut dire globalement qu'il existe trois types d'aléatoires en informatique.
Il y a l'aléatoire absolu qui, lui, est théorique.
L'aléatoire réel qu'on peut appeler aussi extrinsèque ou cryptographique.
Il ne faut pas avoir peur, je vais revenir dessus.
Il y a aussi le pseudo-aléatoire qu'on va appeler intrinsèque.
Donc, je vais définir et on va voir la différence entre ces trois concepts de la manière la
plus simple et la plus compréhensible.
Pour commencer, il y a l'aléatoire absolu.
Alors, d'abord, qu'est-ce que ça veut dire aléatoire ? C'est quoi cette notion ?
Tout simplement, on va utiliser un synonyme aléatoire, ça veut dire imprévisible.
Comme la nature est bien faite, il se trouve que le hasard se trouve tout autour de nous.
Il y a les lois de notre univers, elles sont régie par une science qu'on appelle la physique
quantique.
Là, il ne faut pas avoir peur, il n'y a pas besoin d'être physicien pour comprendre
la suite de l'épisode.
Vous allez voir que c'est simplement des petites choses que je vais vous amener au fur
à mesure.
L'une des caractéristiques de la physique quantique, c'est son imprévisibilité parce
qu'elle ne repose pas sur des mesures exactes connues mais sur un ensemble de probabilités.
Donc, pour vous donner un exemple, sans trop rentrer dans les détails, par exemple, il
est physiquement impossible de prévoir exactement la vitesse de désintégration d'un atome.
Ça, c'est un exemple.
Il n'y a pas besoin de connaître la réalité physique derrière, en tout cas pas plus que
ça, mais voilà, c'est quelque chose qu'on ne peut pas prévoir exactement.
Quand je dis que c'est impossible, ça ne veut pas dire impossible avec nos techniques
actuelles, que les sciences évoluant, on va réussir à connaître.
Non, c'est que factuellement, c'est impossible selon les lois de la physique puisque ces
lois de physique-là sont régie par justement de l'aléatoire, mais surtout des probabilités.
Donc, il existe bel et bien dans la nature des exemples d'aléatoires absolus.
C'est ça qu'on va appeler l'aléatoire absolu.
C'est l'aléatoire qui vient de la nature.
Si on prenait une théorie et qu'on disait qu'un système informatique était capable
de mesurer avec précision cette désintégration d'un atome d'hydrogène, mettons, à un
instant T et ce de manière très efficace et répétable, alors on pourrait effectivement
générer un nombre réellement parfaitement aléatoire, d'un aléatoire absolu.
Donc, ce serait un nombre qui serait absolument imprévisible à l'avance puisque la nature
fait que c'est imprévisible.
Mais ce qu'on sait aussi, c'est qu'intégrer de tels systèmes de mesure dans les machines
de l'ordinateur de monsieur tout le monde, le téléphone de monsieur tout le monde, c'est
absolument impensable.
Ok ? En termes de taille, en termes de technologie, etc.
Je ne dis pas que ce sera jamais faisable, mais actuellement et encore pour des années,
ça ne servirait même à rien, on va dire, de déployer tant de moyens pour simplement
arriver à générer un aléatoire absolu dans nos machines.
Alors, à l'inverse, si on prend ce qu'on appelle un ordinateur quantique, lui, il
est justement, il joue avec ces règles-là, il est régi par ces règles-là.
Donc, lui, il serait par exemple capable de générer un nombre aléatoire absolu parce
que son fonctionnement repose sur ça.
Si jamais le terme ordinateur quantique ne vous parle pas ou au contraire, vous parle
un peu mais vous fait peur, j'ai écrit un article complet où j'ai essayé au maximum
de vulgariser ce concept-là sur mon blog.
Donc, je vous mettrai l'article dans les notes du podcast et puis j'ai serré aussi
de le transformer en podcast audio pour que vous puissiez l'écouter tout simplement.
Donc, si on revient à notre informatique plus classique, celle qu'on utilise tous les
jours, pour générer de l'aléatoire, il va falloir s'en remettre à des méthodes
beaucoup plus réalistes.
C'est exactement ces choses-là qu'on va voir tout de suite.
Donc, le deuxième type d'aléatoire, c'est l'aléatoire réel ou l'aléatoire cryptographique.
Alors, pourquoi est-ce qu'on l'appelle comme ça ? Parce que le but d'un chiffre aléatoire
et justement, notamment en cryptographie, c'est d'être suffisamment imprévisible
pour qu'un attaquant, quelqu'un qui voudrait justement rentrer dans le système et prévoir
ce qui va se passer ou quelque chose comme ça, ne puisse pas deviner là où les valeurs
qui ont été générées aléatoirement puisque justement, c'est ce qu'on veut éviter.
Et en l'occurrence, nos ordinateurs, ils sont capables de générer de tels chiffres
ou des chiffres aléatoires suffisants, mais sauf que de base, les systèmes de nos ordinateurs
sont basés explicitement sur la logique.
Ok ? Qu'est-ce que ça veut dire ? Ça veut dire que si on prend pour un ordinateur classique,
si on prend des données en entrée et un calcul au milieu qui se fait une opération
algoritmique au milieu, eh bien théoriquement, on est censé toujours avoir les mêmes données
en sortie.
Ok ? Ça, c'est la logique, c'est la logique pure.
Et nos ordinateurs sont basés là-dessus.
Donc, ce qui veut dire que de base, un ordinateur n'est pas spécifiquement fait pour générer
un chiffre aléatoire.
C'est pour ça qu'on va se baser sur des aides extérieures.
Ok ? Des aides extérieures au système, des données extérieures qui vont être, elles,
des données imprévisibles.
Un petit peu comme je vous ai expliqué le principe de désintégration de l'atome, on
ne peut pas vraiment le prévoir.
Là, on va se baser sur des choses beaucoup plus simples, mais qu'on va pouvoir mesurer
et qu'on connaît un instant T.
Donc, en utilisant les données extérieures au système, c'est pour ça que j'ai appelé
l'aléatoire extrinsexe et extérieure au système, eh bien on va être capable de générer
un nombre suffisamment aléatoire pour être utilisé en conditions réelles comme, par
exemple, pour de la cryptographie.
Comme exemple, eh bien une fonction de génération de valeur aléatoire va utiliser, par exemple,
la position de la souris de l'utilisateur, pardon, à un instant T ou alors la vitesse
de rotation des pâles du ventilateur ou même la température du CPU pour prendre,
en prenant ces chiffres-là, il va aller passer dans un algorithme mathématique particulier
et il va en ressortir, eh bien, un chiffre vraiment aléatoire et suffisamment aléatoire
pour qu'on l'utilise.
Donc, même si ces valeurs-là ne sont pas parfaitement aléatoires, un aléatoire absolu
au sens de la physique, il est infiniment difficile quand même pour un attaquant de
prévoir la valeur exacte de ces nombres.
Donc, c'est suffisant.
Par contre, ce qu'il faut quand même se dire, c'est que si jamais un attaquant avait
directement accès à la machine et à ces données-là, il pourrait en théorie arriver
à reproduire ces nombres aléatoires en interceptant ces données utilisées.
Il y a même, par exemple, des expériences qui montrent qu'une clé qui a été générée
avec un chiffrement RSA, qui se base aussi en partie sur de l'aléatoire, eh bien, il
y a des chercheurs qui ont réussi à faciliter le décryptage d'une clé RSA grâce à l'analyse
du son produit par le ventilateur de la machine.
Si jamais le papier de recherche vous intéresse, je vous le mettrai dans les liens du podcast.
Et enfin, le dernier type d'aléatoire qui est celui qu'on utilise très souvent en
tant que développeur, et surtout en tant que développeur web, ou développeuse web, évidemment,
c'est le pseudo-aléatoire.
Donc ici, c'est vraiment l'aléatoire le plus courant et c'est celui qui a eu utilisation
des paramètres internes à la machine, des paramètres intrinsèques.
Et en fait, il sert principalement à faire de la logique métier.
Auparavant, on a parlé d'aléatoire qui était utilisable pour faire de la cryptographie.
Ici, on ne va pas pouvoir s'en servir pour faire de la cryptographie, on va s'en servir
pour de la logique métier.
C'est quoi de la logique métier ?
Par exemple, on a une liste de ressources qu'on doit trier aléatoirement.
On va utiliser ce chiffre-là, même si en général, je ne sais pas, 200 chiffres aléatoirement,
on a 30 fois le même qui revient.
Ce n'est pas très grave, ça va influer sur l'ordonnancement aléatoire de nos ressources
qu'on a voulu trier, mais ce n'est pas catastrophique.
Donc la plupart du temps, ces méthodes-là, je disent des fonctions mathématiques, plus
un facteur temporel pour générer un chiffre quasi-aléatoire.
C'est suffisant pour une utilisation non critique, mais évidemment, ce n'est toujours pas sécurisé.
Si jamais ce type d'aléatoire vous intéresse ou vous voulez en savoir un peu plus, je vous
invite par exemple à aller consulter l'implémentation de la fonction math.random en JavaScript
parce que ça utilise justement ce pseudo-aléatoire mathématique, tout simplement dans la documentation,
plutôt le blog de l'équipe de développement du moteur V8 de Google qui explique comment
est-ce que cette méthode est implémentée et qui ressemble à beaucoup d'autres méthodes
de math.random dans d'autres langages et vous pourrez voir un petit peu comment est-ce
que c'est implémenté exactement.
Je vous mettrai pareil le lien de l'article de blog dans les notes du podcast.
J'espère que cet épisode vous aura été utile, que vous aurez compris un petit
peu ce qui se passe quand on parle d'aléatoire en informatique.
Le principal à se rappeler c'est que quasiment tout le temps on parle en fait d'aléatoire
de pseudo-aléatoire.
Alors le pseudo-aléatoire, moi je vous l'ai donné pour la dernière catégorie qui est
la catégorie de générations juste par les mathématiques, mais en réalité tout ce qui
est généré par un ordinateur, on va appeler ça du pseudo-aléatoire puisque comme je
vous l'ai dit, ce n'est pas de l'aléatoire absolu comme on va pouvoir le trouver dans
la nature et dans les lois de la physique.
J'espère donc que ça vous a rarappris quelque chose et moi je vous dis à très bientôt
pour un prochain épisode sur Codes Garage et Bonne Journée.
Episode suivant:
Les infos glanées
Code-Garage
Découvrons ensemble des sujets passionnants autour du métier de dev et de la programmation en général !
Tags
Code-Garage #3 - NodeJS n'est pas un langage