Les principes du chiffrement en clair

Christophe Vaudry
norsys-octogone
Published in
8 min readJun 27, 2023

Motivation

Les principes du chiffrement utilisés en informatique ne sont pas toujours bien connus alors que la sécurité des échanges sur le Web repose sur eux.

Il ne s’agit pas ici de présenter des algorithmes, mais les grands principes utilisés, sous-jacents aux opérations de chiffrement symétrique et asymétrique. Mon objectif est qu’un élève de troisième de collège puisse comprendre et avoir une idée de la manière dont cela fonctionne.

Pourquoi un élève de troisième ? Parce que, quand j’ai écrit initialement ce billet, mon fils était précisément à ce niveau d’étude et qu’il était la personne à qui je voulais expliquer ces principes du chiffrement. Après autant partager cette explication plus largement.

Quelques notions de base

Dans le monde numérique, toutes les données sont encodées sous forme de bits. Un bit peut prendre la valeur 0 ou 1. On parle également d’unité binaire. Ces séries de 0 et de 1 peuvent être interprétées comme du texte, des nombres, des images, de la musique, des vidéos, etc. selon le contexte.

En général, on regroupe ces bits par paquet de 8 pour former un octet, qui représente donc 8 bits. Et ces octets peuvent être eux-mêmes regroupés par paquet plus gros, dont la taille sera alors mesurée en kilooctet, mégaoctet, gigaoctet, etc. Il faut faire attention qu’en anglais un octet se traduit par byte.

Ce qui est important c’est que dans l’univers numérique, tout type de donnée correspond à une séquence d’octets, soit “fixe” (un fichier) soit en flux (une vidéo que vous regardez sur un site de streaming).

Chiffrement

Chiffrer des données est une opération qui transforme ces données pour les rendre incompréhensibles pour toute personne qui ne sait pas comment les déchiffrer.

D’un point de vue opérationnel, cette transformation dépend d’un paramètre secret que l’on nomme la clé. Avec cette clé, on peut effectuer l’opération de chiffrement et l’opération inverse de déchiffrement. On nomme ce paramètre la clé par analogie avec la clé qui permet de verrouiller et déverrouiller un coffre : posséder la clé c’est avoir la capacité de chiffrer et déchiffrer les données, tout comme posséder la clé du coffre donne la capacité de verrouiller et déverrouiller le coffre.

Un exemple de chiffrement très simple est par exemple le chiffrement par décalage (aussi connu comme le chiffrement de César). Les algorithmes de chiffrement couramment utilisés actuellement sont bien plus efficaces mais aussi plus complexes et reposent généralement sur des principes mathématiques pas toujours très simples.

Chiffrement symétrique

Le chiffrement symétrique est le chiffrement tel qu’il est décrit plus haut : on a un secret, la clé qui permet de chiffrer et déchiffrer une donnée quelconque. Dans le monde numérique, les données que l’on manipule se ramène à un tableau d’octets. Dans la suite on parlera de message pour simplifier, mais dès l’instant où cette donnée peut se ramener à un tableau d’octet cela peut correspondre à n’importe quel type de données (texte, vidéo, image, son, etc.).

On parle de chiffrement symétrique car l’opération de chiffrement et l’opération de déchiffrement sont symétriques l’une de l’autre, avec l’utilisation d’un même paramètre pour s’effectuer, la clé.

Le problème avec le chiffrement symétrique, c’est que pour chiffrer et déchiffrer le contenu, il nous faut cette clé, qui doit ainsi être un secret partagé entre tous ceux qui sont sensés pouvoir chiffrer et déchiffrer le message.

Si Bob envoie un message chiffré à Alice, une fois qu’Alice a reçu le message chiffré, elle a besoin de la clé que Bob a utilisé, pour déchiffrer ce message. Hélas, c’est là qu’est l’os !

Le partage de la clé est la grosse problématique du chiffrement symétrique. En effet, comment peut-on faire pour partager ce secret de manière sécurisé ? Il faudrait lui-même le chiffrer, mais si on utilise du chiffrement symétrique nous aurons une nouvelle clé à chiffrer pour pouvoir la partager, et ainsi de suite…

L’image de la publicité “Droste Cacao” pour illustrer la récurrence infinie de potentiellement avoir besoin d’une clé pour chiffrer une clé qui aura elle-même besoin d’une clé, et ainsi de suite.

Nous reviendrons plus tard sur cette problématique, pour l’instant passons au principe du chiffrement asymétrique.

Chiffrement asymétrique

Le chiffrement asymétrique repose sur l’utilisation de 2 clés différentes pour effectuer le chiffrement et le déchiffrement, il y a donc une asymétrie entre l’opération de chiffrement et celle de déchiffrement.

Dans le chiffrement asymétrique, on a ainsi 2 clés, une clé dite publique et une clé dite privée. Comme ces noms le laissent entendre, on peut largement diffuser la clé publique mais il faut garder secrète la clé privée.

On ne crée pas n’importe comment ces 2 clés : leur génération est spécifique à l’algorithme de chiffrement utilisé et dans ce cadre elles sont liées. Néanmoins, même si vous connaissez la clé publique, vous ne pouvez pas en déduire la clé privée.

Ce lien entre les 2 clés fait qu’en chiffrant une message avec la clé publique il ne pourra être déchiffré qu’avec la clé privée.

Voyons maintenant comment fonctionne concrètement le chiffrement avec ces 2 clés avec un exemple: retrouvons Bob qui veut envoyer un message chiffré à Alice.

Si vous vous demandez pourquoi les protagonistes des exemples s’appelle Bob et Alice, c’est à cause de Ron Rivest, Adi Shamir et Leonard Adleman, les pères de RSA, qui ont utilisé ces prénoms plutôt que les lettres A, B, C, etc. pour désigner les personnes intervenants dans les échanges chiffrés. Un article de Wikipedia détaille tout cela si vous voulez en savoir plus à ce sujet.

Donc, si Bob veut envoyer un message chiffré à Alice :

  • Bob récupère la clé publique d’Alice
  • Bob chiffre le message pour Alice avec la clé publique d’Alice
  • Bob envoie le message chiffré à Alice
  • Alice utilise sa clé privée pour déchiffrer le message que lui a envoyé Bob.

Pour envoyer un message chiffré à quelqu’un en utilisant le chiffrement asymétrique, il faut donc que ce dernier ait généré une paire de clés et qu’il ait rendu accessible sa clé publique. Il n’y a que le possesseur de la clé privée qui peut ainsi déchiffrer les messages chiffrés avec la clé publique.

Ici, contrairement au chiffrement symétrique, il n’y a pas besoin d’avoir un secret partagé pour déchiffrer le message. Tout le monde en possession de la clé publique de quelqu’un peut lui envoyer un message chiffré avec cette dernière.

Ce dernier point amène une certaine réflexion : comment Alice peut-elle être sûre que c’est bien Bob qui lui a envoyé un message chiffré ? En effet, elle n’a aucune garantie que le message ne lui ait pas été envoyé par quelqu’un d’autre.

Il faudrait avoir un mécanisme qui permette de vérifier que le destinataire est bien celui qu’il prétend être. La cryptographie asymétrique propose une solution à cette fin que nous allons voir après avoir vu la notion d’empreinte.

Empreinte

En anglais on parle de hash et de hashing, en français, on utilise les termes condensat ou empreinte. J’aime bien le terme d’empreinte car il traduit assez clairement l’utilité de l’opération et de son résultat.

Une empreinte est une valeur de taille fixe en laquelle on transforme une donnée de taille arbitraire par une fonction de hachage. Si on choisit bien la fonction de hachage, des données différentes, même si cette différence est légère, donneront des empreintes clairement différentes. Si des données différentes donne une même valeur pour des entrées différentes on parle de collision. Une bonne fonction de hachage donne lieu à peu de collisions.

La fonction de hachage est l’implémentation de cette fonction plus ou moins complexe qui réduit un tableau ou flux d’octets à une valeur de taille fixe.

La transformation d’une donnée en son empreinte est à sens unique : à partir de l’empreinte on ne sait pas revenir aux données initiales par une autre transformation.

Le principe a été inventé en 1950 chez IBM par Hans Peter Luhn. Au départ c’était pour économiser de la place en remplaçant une donnée métier (par exemple un nom, un prénom, etc.) par son empreinte et d’utiliser ces empreintes pour créer des index. Depuis les empreintes sont largement utilisées en sécurité, et notamment pour créer des signatures.

Signature

Quand on effectue du chiffrement asymétrique on utilise la clé publique pour chiffrer et la clé privée pour déchiffrer : tout le monde peut chiffrer le message mais seul le possesseur de la clé privée correspondante peut déchiffrer le message.

Cependant, on peut également utiliser la clé privée pour chiffrer, on déchiffre alors avec la clé publique correspondante. Voyons comment cela peut être mis à profit pour donner des preuves sur l’identité de l’expéditeur.

Reprenons notre exemple : Bob veut envoyer un message à Alice et lui donner des garanties sur le fait que c’est bien lui qui a envoyé le message.

  • Alice a généré une paire de clés : une clé publique et une clé privée.
  • Bob a également généré une paire de clés : une clé publique et une clé privée.
  • Alice a accès à la clé publique de Bob, et Bob a accès à la clé publique d’Alice.
  • Bob chiffre le message pour Alice avec la clé publique d’Alice.
  • Bob crée une empreinte du message originale pour Alice avec une fonction de hachage.
  • Bob chiffre cette empreinte avec sa clé privée.
  • Enfin Bob envoie le message chiffré et l’empreinte chiffrée à Alice.
  • Alice déchiffre le message de Bob avec sa clé privée.
  • Alice déchiffre l’empreinte jointe au message avec la clé publique de Bob.
  • Alice calcule l’empreinte du message avec la même fonction de hachage que Bob : si les 2 empreintes sont identiques, le message ne peut venir que de Bob.

On notera qu’Alice doit connaitre la fonction de hachage utilisée par Bob. En soit il n’y a pas besoin que cela soit un secret, mais bien sûr il faut que l’on soit bien d’accord sur la fonction à utiliser.

On notera aussi qu’expéditeur comme destinataire doivent générer une paire de clés et rendre disponible la clé publique.

Retour au chiffrement symétrique

Le chiffrement asymétrique va nous permettre de résoudre notre problème de partage de secret nécessaire dans le chiffrement symétrique. En effet, il nous permet d’envoyer une information chiffrée en offrant en plus avec le mécanisme de signature des garanties sur l’identité de l’expéditeur.

Pourquoi ne pas utiliser que le chiffrement asymétrique ? Le chiffrement asymétrique est moins performant que le chiffrement symétrique. Donc il peut être avantageux d’établir un échange initial pour établir un canal de communication sécurisée entre les deux parties qui veulent échanger avec le chiffrement asymétrique, échanger la clé nécessaire pour du chiffrement symétrique de manière sécurisée, puis utiliser du chiffrement symétrique avec cette clé partagée pour le reste des échanges. Dès que vous accéder à un site en HTTPS sur votre navigateur, la sécurisation mise en place repose sur ce fonctionnement.

Conclusion

Sans être un expert en cryptographie, il est important de connaitre les principes de chiffrement sur lesquels reposent notre navigation sur le Web et l’utilisation des outils numériques.

Si la cryptographie est une discipline qui demande un niveau en mathématique élevé, les principes sont accessibles à tous moyennant un effort minimum.

Les principes décrits dans ce billet, permettent de comprendre les règles d’hygiène numérique de base, nécessaire au quotidien dans nos interactions numériques.

Ressources complémentaires

Quelques liens sur des articles en relation avec le contenu de ce billet si vous voulez creuser plus le sujet :

Remerciement

Je remercie mon collègue Thomas pour sa relecture attentive et ses remarques.

--

--

Christophe Vaudry
norsys-octogone

Developer working for Norsys. Programming languages explorer. Know nothing.