Avec les langages de développement qui sont de plus en plus haut niveau, on en vient parfois à ne plus se demander comment cela fonctionne exactement sous le capot. Par exemple, comment faire qu’un ordinateur génère un nombre aléatoire, qui est par essence à l’opposé de ce que sait fait une machine ?

Cet article est parti d’une discussion entre collègues. Avec nos problématiques de développement, on se préoccupe de nos algos, de la façon d’implémenter ce qui est attendu. Mais on est à un niveau qui est maintenant très éloigné de la machine. On en vient à ne plus se poser la question de la façon dont cela fonctionne à très bas niveau.

hasard en informatique

Les nombres aléatoires sont un très bon exemple. Pour le développeur, rien de plus simple. Une fonction rand() ou random() en fonction du langage utilisé et le tour est joué. Mais quand on se penche sur le sujet, on se dit que le hasard en informatique n’existe pas. Rien n’est plus déterministe et rationnel. L’aléatoire n’existe pas, il ne peut y avoir que du pseudo aléatoire en se basant sur des choses suffisamment imprévisibles pour donner l’impression de l’aléatoire. Il existe pour cela plusieurs possibilités.

Hasard sur des événements physiques

Une des meilleures méthodes est de se baser sur des événements physiques : bruits électromagnétiques, bruits thermiques, radioactivité… avec un générateur matériel. L’idée est d’amplifier cet événement physique suffisamment imprévisible, de le mesurer et de le transformer en nombre, souvent entre 0 et 1.

Méthode quantique

Une méthodes très fiables, mais encore en devenir, est de se baser sur les propriétés quantiques des photons. En effet, les phénomènes quantiques sont par nature indéterminés et donc non prévisibles. Les méthodes existantes utilisent souvent la façon dont les photons se comportent face à un miroir. Le photon peut soit être reflété, soit traverser le miroir. Ce phénomène est purement aléatoire et donc peut servir à générer une suite de 0 et de 1 dépendant de ce phénomène.

Méthode algorithmique

Enfin, il existe des méthodes algorithmiques pour générer des nombres pseudo aléatoires, comme les générateurs congruentiel linéaire ou Mersenne-Twister.

 

Car si l’aléatoire peut servir au ludique (jeu vidéo par exemple), il est également très important en terme de sécurité et de cryptologie. Dans ce cadre, il est primordial de ne pas pouvoir deviner les éléments qui ont servi à la génération. Car avec des derniers, il est possible de déduire le reste.