Nous comprenons les messages que nous lisons parce qu'ils nous sont présentés sous une forme compréhensible. Dans le cas de transactions financières ou d'échanges d'informations militaires, il importe qu'un message intercepté ne soit pas lisible. Le processus par lequel un message est rendu incompréhensible est appelé chiffrement. Le processus de reconstruction du texte original à partir du message chiffré est appelé déchiffrement. On parle aussi respectivement de cryptage et de décryptage. Les étapes d'un processus de chiffrement sont illustrées par la figure 3.57.
Ce schéma met en lumière une déconcertante analogie avec la compression. De fait, le chiffrement, tout comme la compression, tente de supprimer la redondance présente dans le message. Il est probable qu'à l'avenir apparaissent des techniques qui mêlent compression et chiffrement. Les algorithmes d'aujourd'hui n'incluent pas encore la notion de compression car un texte chiffré est bien de longueur égale à celle du message original.
Le texte de départ, noté M ci-après, peut être une suite de bits,
un fichier texte, un signal audio, une image, etc; la fonction de
chiffrement
transforme ce message en un message chiffré
C:
Si la sécurité du processus de chiffrement repose sur la confidentialité
de l'algorithme, on considère que le certain est peu sûr car, tôt
ou tard, un utilisateur découvrira le secret et le système de chiffrement
s'effondrera. Pour une vraie sécurité, tous les algorithmes modernes
de chiffrement utilisent une clef, notée k1; c'est la
raison de la présence de l'indice k1 dans l'équation 3.7.
Cette clef peut prendre une des valeurs parmi un grand nombre de valeurs
possibles. Pour le déchiffrement
on procède de même,
et si la clef de déchiffrement est identique à celle de chiffrement,
on a:
M = ![]() |
(3.8) |
M = ![]() ![]() |
(3.9) |
Il existe des cas où la clef de déchiffrement, notée k2, est
différente de la clef de chiffrement (cf. figure 3.58).
Dans ce cas, les relations deviennent:
C | = | ![]() |
(3.10) |
M | = | ![]() |
(3.11) |
M | = | ![]() ![]() |
(3.12) |
Il y a deux types principaux d'algorithmes à base de clefs: à clef secrète ou à clef publique. Les algorithmes à clef secrète sont des algorithmes où la clef de chiffrement peut être calculée à partir de la clef de déchiffrement et vice-versa. Les algorithmes à clef publique sont différents. Ils sont conçus de sorte que les deux clés soient différentes et qu'il ne soit pas possible de calculer une clef à partir de l'autre dans un temps raisonnable. Le nom d'algorithme à clef publique vient de ce que la clef de chiffrement peut être rendue publique. N'importe qui à le droit de l'utiliser pour chiffrer un message mais seul le détenteur de la clef de déchiffrement peut reconstituer le message non chiffré. Dans de tels systèmes, les clefs de chiffrement et déchiffrement sont respectivement appelées clef publique et clef privée.
Les algorithmes de chiffrement tels que décrits ont d'innombrables utilisations autres que le simple fait de vouloir cacher le contenu d'un message; ils sont alors intégrés dans des protocoles complexes. Par exemple, une personne qui se connecte à un ordinateur doit fournir son identité. Mais comment l'ordinateur peut-il être sûr de l'identité de la personne? Classiquement, ce problème d'authentification se résout par l'octroi d'un mot de passe. Un algorithme de chiffrement transforme alors ce mot de passe et l'ordinateur compare le résultat avec une table de mots de passe chiffrés. Comme cette table ne contient jamais que les mots de passe chiffrés, il n'est pas à craindre qu'un utilisateur indélicat ne prenne connaissance d'un mot de passe en allant parcourir les fichiers de l'ordinateur.
Un autre problème fréquent est celui de la signature numérique: comment savoir qu'un texte provient bien d'une personne? L'algorithme de chiffrement à clef publique fournit entre autres un moyen commode de signature numérique. Il suffit d'imaginer que l'expéditeur utilise sa clef privée pour chiffrer une empreinte propre à son message. Le destinataire, qui possède la clef publique de l'utilisateur, vérifie si l'empreinte déchiffrée correspond au message fourni par l'expéditeur. Vu que l'expéditeur est le seul à connaître la clef privée liée à la clef publique, si l'empreinte correspond, il a toutes les raisons de penser que l'expéditeur a bien signé le message.
Il reste ensuite à savoir si le message n'a pas été modifié en cours de route, c'est le problème de l'intégrité des messages. Des solutions existent également pour ce type de problème mais nous n'entrerons pas dans leurs détails. Il nous paraît cependant utile de citer les quatre algorithmes cryptographiques suivants (voir [21] pour plus de détails):