Le coin du cryptologue : 5 – Le chiffrement symétrique

La cryptologie expliquée à mon voisin qui n'y connait rien mais qui voudrait savoir... Comme dans toutes mes rubriques "Le coin du cryptologue", un conseil pratique se trouve à la fin.

Vous trouverez les articles précédents sur le sujet :

1.       Le calcul d’empreinte dans la lettre mensuelle de Forum ATENA du mois d’avril 2016

2.       Chiffrer, déchiffrer, décrypter dans celle du mois de mai

3.       Le chiffrement à clé publique dans celle du mois de juin

4.       La signature numérique dans celle du mois de septembre

Le chiffrement symétrique ou chiffrement « à clé secrète »

Le chiffrement symétrique, dit aussi chiffrement à clé secrète met en jeu une clé et un algorithme. On chiffre avec la clé à l’aide de l’algorithme, on déchiffre avec la même clé et le même algorithme. La clé de chiffrement est donc la même que la clé de déchiffrement, c’est pourquoi le chiffrement est dit « symétrique ».

La clé doit être gardée secrète, mais être aussi, bien sûr, transmise à celui qui est autorisé à déchiffrer. Comment faire passer cette clé, surtout à travers un réseau public non protégé comme l’Internet, en devant toujours garder cette clé secrète, sauf pour celui auquel le message est destiné ? C’est le premier problème, mais nous allons voir que garder secrète la clé pose également d’autres problèmes. 

Les mécanismes et les standards

Le chiffrement symétrique tire parti du « ou exclusif ». L’opération « ou exclusif », que nous noterons ici  entre deux bits (qui prennent la valeur 0 ou 1) donne « 1 » si les deux bits sont différents et « 0 » s’ils sont les mêmes. Ainsi : 0 ⊕ 0 = 0 ; 1 ⊕ 1 = 0 ; 0 ⊕ 1 = 1 et 1 ⊕ 0 = 1.

Par exemple faisons traiter la donnée en clair : 0 0 1 0 0 1 1 0 1, bit à bit, dans l’algorithme « ou exclusif » avec la clé de chiffrement symétrique : 0 1 1 1 0 1 0 1 0 cela donne la donnée chiffrée :

(0 0 1 0 0 1 1 0 1) ⊕ (0 1 1 1 0 1 0 1 0) = 0 1 0 1 0 0 1 1 1

(Le premier bit de la donnée en clair, ici « 0 » et de la clé, ici « 0 », donne 0  0 = 0, qui est premier bit de la donnée chiffrée.

Maintenant faisons un « ou exclusif », bit à bit, entre la donnée chiffrée et la clé :

(0 1 0 1 0 0 1 1 1)  (0 1 1 1 0 1 0 1 0) = 0 0 1 0 0 1 1 0 1

Et on constate qu’on a bien retrouvé la donnée en clair. C’est cette fonction du ⊕ qui est à la base du chiffrement symétrique.

Une vision très (trop) simplifiée du chiffrement symétrique consisterait à prendre une clé, de longueur mettons 256 bits, de découper le message à chiffrer en blocs de 256 bits et de faire un « ou exclusif », bit à bit, entre chaque bloc et la clé, ce qui donne le message chiffré. Sans connaître la clé, il n’est vraiment pas facile de décrypter le message chiffré !

A l’inverse, pour déchiffrer, connaissant la clé, on découpe le message chiffré en blocs de 256 bits et on fait un « ou exclusif » bit à bit, de chaque bloc avec la clé secrète, ce qui redonne le message en clair. Ne connaissant pas la clé, il peut sembler impossible, à partir du message chiffré, de reconstituer le message en clair, sauf à essayer toutes les combinaisons possibles de clés, ce qui nécessiterait, avec les moyens de calculs actuels, de très nombreux milliards d’années, pour une clé de 256 bits.

Mais si l’idée décrite précédemment est plaisante, son implémentation pêche car connaissant juste la longueur de la clé de chiffrement, et en faisant par exemple des « ou exclusifs » entre plusieurs blocs du message chiffré, les cryptanalystes peuvent fragiliser la clé, voire finir par retrouver le message en clair. Alors dans les algorithmes de chiffrement symétrique, on complique le calcul en faisant dépendre chaque bloc à chiffrer du résultat chiffré du bloc précédent. On parle de « chiffrement symétrique par blocs chainés ».

Précisons qu’il existe un chiffrement qui est prouvé être mathématiquement sûr et il est symétrique, c’est le chiffre de Vernam, dit encore méthode du masque jetable, dans lequel la longueur de la clé est égale à la longueur du message, et la clé n’est utilisée qu’une seule fois. Bien entendu, avec le chiffre de Vernam, le message à chiffrer n’est pas découpé en blocs, puisque la clé est de la même taille que le fichier à chiffrer. On parle de chiffrement par flot. Ceci dit, si le message est très long, le chiffre de Vernam n’est pas l’idéal dans une utilisation pratique.

Le standard de chiffrement le plus utilisé aujourd’hui est l’AES (Advanced Encryption Standard). Ce protocole a été proposé, à la fin des années 90, par deux cryptologues Belges,  Joan Daemen et Vincent Rijmen, en réponse à un concours organisé par le NIST - National Institute of Standards and Technology – organisme américain. Plus léger, consommant moins d’énergie que les chiffrements symétriques qui étaient utilisés à l’époque, et très sûr, l’AES remplace les vénérables DES et 3DES, comme algorithme de chiffrement symétrique.

La clé de chiffrement/déchiffrement de l’AES a une longueur de 128, 192 ou 256 bits, au choix, et les calculs s’effectuent sur des blocs de 128 bits. À ce jour, l’algorithme AES n’a jamais été cassé. La seule solution possible pour les cryptanalystes consiste à essayer toutes les clés jusqu’à trouver celle qui, à partir d’un message chiffré, semble donner un message en clair. Mais le nombre de clés à essayer est considérable. Avec une clé de 256 bits, il y a 2256 combinaisons possibles, ce qui représente un nombre 1 suivi de 77 zéros ! L’algorithme AES est considéré comme très sûr, encore faut-il que ce chiffrement soit bien implémenté.

Le problème de la génération des clés

Si l’algorithme AES est sûr, son implémentation doit l’être aussi. Pour cela, la clé secrète générée par celui qui veut chiffrer doit remplir plusieurs conditions.

  • La clé secrète doit évidemment rester secrète, sauf pour le destinataire

Pour la faire parvenir à celui qui est autorisé à déchiffrer, une des méthodes est de la remettre au destinataire en main propre, ce qui se faisait, dans le temps par la valise diplomatique. Mais dans le cyberespace, où celui qui chiffre et celui qui déchiffre peuvent être très éloignés, il faut la faire transiter par un réseau, le plus souvent par Internet. Si elle transite en clair, la clé sera interceptée et utilisée, donc elle doit être chiffrée. Nous verrons dans le prochain article que le chiffrement asymétrique (clé privée / clé publique) sera une solution. La physique quantique apporte une autre solution.

  • La clé doit être générée aléatoirement

Le problème est que l’état présent d’un ordinateur conditionne l’état où il sera le moment suivant. Ainsi, un ordinateur est une machine déterministe. Il existe des programmes de génération d’aléas mais le résultat de leurs calculs ne peut être que pseudo aléatoire. En effet un ordinateur, utilisant un programme de génération de clés aléatoires, a tendance à reproduire les mêmes séries de clés quand il en génère de grands nombres. Nous verrons aussi que la génération d’aléas purs peut se faire grâce aux propriétés de la physique quantique.

  • La clé doit être renouvelée périodiquement

Bien évidemment, si la clé a une durée de vie trop longue, la tâche des cryptanalystes qui vont tenter de la retrouver par force brute ou par d’autres moyens s’en trouvera simplifiée. L’idéal est de la changer à chaque transaction.

  • La clé doit avoir une taille minimum

Une clé trop courte peut être trouvée par attaque en force brute (on essaie toutes les clés possibles). Avec l’AES qui impose des clés de longueur au moins égale à 128 bits, le problème ne se pose pas aujourd’hui.

Le problème de la multiplication des clés à échanger

Si A veut chiffrer à destination de B, une clé symétrique entre A et B suffit. Si A, B, et C veulent s’échanger des informations chiffrées (et si B doit pouvoir déchiffrer le message de A mais pas celui de C) il faut une clé entre A et B, une clé différente entre A et C, et une troisième clé entre B et C. Si n personnes veulent s’échanger des informations chiffrées, il faut n(n-1)/2 clés. Précisons que si 1000 personnes veulent s’échanger des informations chiffrées, cela mettra en jeu 499500 clés qui doivent bien évidemment rester secrètes !

En conclusion

Les algorithmes de chiffrement symétrique sont très sûrs, et de plus très rapides, c’est donc ce type de chiffrement qui est utilisé pour assurer la confidentialité des informations. Mais il faut savoir les échanger entre ceux qui ont droit de déchiffrer les informations ainsi chiffrées. Le problème d’échange de la clé secrète sur un réseau non sûr comme Internet, sera abordé dans le prochain article. 

Le conseil crypto du mois :

Pour montrer une utilisation pratique du chiffrement d’un message, nous allons utiliser en écriture le logiciel de messagerie Thunderbird, qui fait partie de la suite des outils de la fondation Mozilla, auquel est ajouté le logiciel libre de chiffrement Enigmail qui utilise le GPG, version libre et gratuite du PGP. Nous soulignons comment, une fois ces logiciels installés, il est facile de chiffrer et de déchiffrer les messages.

  • En émission du message

L’image qui suit est un message écrit sous le logiciel client de messagerie Thunderbird auquel est ajouté le logiciel de chiffrement GPG (qui est installé avec le logiciel libre Enigmail).

Vous remarquerez dans la troisième ligne, au-dessus de « Expéditeur », le cadenas qui est fermé quand on souhaite que le message soit chiffré, sinon, par défaut, le cadenas est représenté ouvert et le message part en clair.

Le message à envoyer ici est : « Message chiffré sous Enigmail, par Thunderbird ». 

Dans l’image ci-dessous, tiré du dossier « éléments envoyés » voici le message envoyé par Thunderbird. La clé publique du destinataire est utilisée pour chiffrer la clé secrète générée par l’expéditeur. Donc il faut au préalable avoir demandé au destinataire, son certificat, qui contient sa clé publique, et l’avoir intégré dans Enigmail. Seul le destinataire pourra déchiffrer le message car il est le seul à posséder la clé privée, mathématiquement liée à la clé publique, donc il est le seul à pouvoir déchiffrer la clé secrète générée par l’expéditeur, qui a chiffré le message. Ceci sera expliqué en détail dans le prochain article. Ca peut paraître compliqué mais c’est en fait très simple.

  • En réception du message

Dans l’image ci-dessous, le message reçu est déchiffré automatiquement sous Thunderbird par Enigmail car le logiciel GPG est intégré à Enigmail

Dans l’image ci-dessous, le message est reçu sous Outlook. Il reste chiffré car aucun logiciel n’est intégré ici, à Outlook, pour le déchiffrer.

 

 

 

 

< Revenir à la newsletter

Auteur: 
Gérard Peliks, président de l'atelier sécurité et VP de Forum ATENA

Ajouter un commentaire

Full HTML

  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Vous pouvez utiliser du code PHP. Vous devrez inclure les tags <?php ?>.
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Filtered HTML

  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.