Masque jetable

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Chiffre de Vernam)
Exemple de codage à masque jetable.

Le masque jetable, également appelé chiffre de Vernam, est un algorithme de cryptographie inventé par Gilbert Vernam en 1917 et perfectionné par Joseph Mauborgne, qui rajouta la notion de clé aléatoire. Cependant, le banquier américain Frank Miller en avait posé les bases dès 1882[1]. Bien que simple, facile et rapide, tant pour le codage que pour le décodage, ce chiffrement est théoriquement impossible à casser, mais le fait que le masque soit à usage unique impose de le transmettre au préalable par un "autre moyen", ce qui soulève des difficultés de mise en œuvre pour la sécurisation des échanges sur Internet.

Joseph Mauborgne.

Principe[modifier | modifier le code]

Le chiffrement par la méthode du masque jetable consiste à combiner le message en clair avec une clé présentant les caractéristiques très particulières suivantes :

  • La clé doit être une suite de caractères au moins aussi longue que le message à chiffrer.
  • Les caractères composant la clé doivent être choisis de façon totalement aléatoire.
  • Chaque clé, ou « masque », ne doit être utilisée qu'une seule fois (d'où le nom de masque jetable).

La méthode de combinaison entre le clair et la clé est suffisamment simple pour être employée « à la main » sans dispositif informatique, mécanique ou autre. Elle sera décrite ci-dessous.

L'intérêt considérable de cette méthode de chiffrement est que si les trois règles ci-dessus sont respectées strictement, le système offre une sécurité théorique absolue, comme l'a prouvé Claude Shannon en 1949[2].

L'argument théorique est le suivant, dans son principe : si on ne connaît que le texte chiffré et que toutes les clés sont équiprobables, alors tous les textes clairs de cette longueur sont possibles et avec la même probabilité puisqu'il y a bijection, une fois le chiffré fixé, entre clés et textes clairs. Connaissant le texte chiffré, il n'y a aucun moyen de distinguer parmi ceux-ci le texte clair original qui correspond. Une analyse statistique est vaine. La connaissance d'une partie du texte clair et du chiffré correspondant donnent la partie de la clé utilisée, mais ne donnent aucune information supplémentaire : le reste de la clé est indépendant de la partie connue, la clé n'est pas réutilisée.

Ce type d'impossibilité, appelé sécurité sémantique, ne repose pas sur la difficulté du calcul, comme c'est le cas avec les autres systèmes de chiffrement en usage. Autrement dit, le système du masque jetable est inconditionnellement sûr.

Pour faire simple : chaque lettre est codée par une clé indépendante.

Chiffrement et déchiffrement à la main[modifier | modifier le code]

Un chiffrement à la main par la méthode du masque jetable fut notamment utilisé par Che Guevara pour communiquer avec Fidel Castro[3]. Une méthode analogue mais distincte de celle qu'ils utilisaient est décrite sur un exemple ci-dessous, dans le cas d'un message long de 5 caractères. On peut la voir alors comme un chiffre de Vigenère, mais avec les conditions sur la clé (aléatoire, de même longueur que le message à chiffrer, jamais réutilisée) qui font la spécificité du chiffre de Vernam.

Supposons que la clé aléatoire retenue, ou « masque », soit :

WMCKL

Cette clé est choisie à l'avance entre les deux personnes souhaitant communiquer. Elle n'est connue que d'elles.

On veut chiffrer le message « HELLO ». Pour cela, on attribue un nombre à chaque lettre, par exemple le rang dans l'alphabet, de 0 à 25. Ensuite on additionne la valeur de chaque lettre avec la valeur correspondante dans le masque ; enfin si le résultat est supérieur à 25 on soustrait 26 (calcul dit « modulo 26 ») :

   7 (H)   4 (E)  11 (L)  11 (L)  14 (O) message
+ 22 (W)  12 (M)   2 (C)  10 (K)  11 (L) masque
= 29      16      13      21      25     masque + message
=  3 (D)  16 (Q)  13 (N)  21 (V)  25 (Z) masque + message  modulo 26

Le texte reçu par le destinataire est « DQNVZ ».

Le déchiffrement s'effectue de manière similaire, sauf que l'on soustrait le masque au texte chiffré au lieu de l'additionner. Ici encore on ajoute éventuellement 26 au résultat pour obtenir des nombres compris entre 0 et 25 :

    3 (D)  16 (Q)  13 (N)  21 (V)  25 (Z) message chiffré
-  22 (W)  12 (M)   2 (C)  10 (K)  11 (L) masque
= -19       4      11      11      14     message chiffré - masque
=   7 (H)   4 (E)  11 (L)  11 (L)  14 (O) message chiffré - masque modulo 26

On retrouve bien le message initial « HELLO ».

L'exemple donné ici utilise un alphabet de 26 caractères et des décalages modulo 26. Mais d'autres décalages peuvent être utilisés. Che Guevara utilisait, en plus des 26 caractères de l'alphabet, quelques signes de ponctuation, et les codait préalablement par des nombres de un ou deux chiffres en base 10 ; il utilisait alors un décalage modulo 10 chiffre par chiffre à partir de la clé jetable, qui était elle-même une suite de chiffres[4].

Vernam, l'inventeur du codage, utilisait lui des décalages modulo 2, ce qui revient, en termes informatiques modernes, à pratiquer un XOR entre le message et la clé (voir plus bas pour plus d'informations). Les algorithmes de chiffrement et de déchiffrement sont dans ce cas identiques.

Méthode informatisée de chiffrement et déchiffrement[modifier | modifier le code]

Lorsque les données sont informatisées, donc mises sous forme binaire, la méthode se réduit à un calcul particulièrement simple, donc très rapide en pratique.

Le message en clair, à chiffrer, se présente comme une suite de bits. La clé est une autre suite de bits, de même longueur.

On traite un à un les bits du clair, en combinant chacun avec le bit de même rang dans la clé.

Appelons A un bit du clair et B le bit de même rang de la clé.

Le chiffrement consiste à calculer un bit C en effectuant sur A et B l'opération appelée « XOR ». Celle-ci est définie par le tableau suivant, qui indique pour toutes les valeurs possibles de A et B la valeur du résultat, que l'on note A ⊕ B :

Opération XOR
A B C = AB
0 0 0
0 1 1
1 0 1
1 1 0

Pour chiffrer on calcule donc C = A ⊕ B. Le résultat C est le chiffré de A. L'opération est effectuée pour chaque bit du clair avec le bit correspondant de la clé.

Le déchiffrement s'effectue en combinant le chiffré C avec le bit de clé B par la simple opération : C ⊕ B. Il se trouve qu'elle fait retrouver le clair A, comme nous allons le montrer.

Remarquons que l'opération XOR possède les deux propriétés suivantes :

AA = 0
A0 = A

ce qu'on vérifie facilement avec le tableau ci-dessus, en considérant les deux valeurs possibles de A, qui sont 0 ou 1.

Le calcul de déchiffrement peut donc s'écrire :

CB = (AB) ⊕ B = A ⊕ (BB) = A0 = A

Il fait bien retrouver le bit de clair A.

L'application de l'opération XOR étant simple en informatique, ces traitements peuvent s'effectuer à très grande vitesse.

Difficultés de mise en œuvre[modifier | modifier le code]

La première difficulté que présente ce système est la longueur et le nombre des clés nécessaires, (avec le problème de leurs transmissions au correspondant, de leur stockage durable, accessible et secret, de leur identification). On travaille en effet souvent avec plusieurs correspondants, ayant chacun plusieurs jeux de clés en commun.

Ensuite générer des clés réellement aléatoires nécessite des moyens complexes.

Enfin garantir l'utilisation unique de chaque clé, même à des années d'intervalle, pose des problèmes d'organisation importants : à défaut, la sécurité du système peut être compromise.

Problème de la transmission des clés[modifier | modifier le code]

L'échange de clés entre correspondants nécessite un canal parfaitement sûr, or les clés sont de même taille que les messages à échanger. Le masque jetable n'a donc d'intérêt que si ce canal existe au moment de l'échange des clés et plus au moment de l'échange des messages (sinon autant utiliser directement le canal en question). Ceci en limite drastiquement l'utilisation. Le masque jetable est par exemple tout à fait incompatible avec les méthodes modernes utilisées sur le réseau : utilisation d'une infrastructure à clés publiques et de cryptographie asymétrique pour constituer un secret partagé incomparablement plus court que les données échangées.

La solution courante pour l'échange de clés entre correspondants est donc l'échange physique préalable. Ensuite les correspondants pourront échanger jusqu'à épuisement de la clé.

Une autre solution a été apportée par les systèmes de cryptographie quantique. Essentiellement les clés sont échangées jusqu'à ce que les correspondants soient certains que la clé n'a pas été observée. L'échange des messages peut alors commencer. Celle-ci, quoique théoriquement parfaitement sûre, est très onéreuse, et comporte encore des limites pratiques contraignantes, concernant la distance maximale (de l'ordre de la centaine de km) et le débit (de l'ordre de quelques bits à quelques kilobits par seconde). Il existe également des attaques liées à la mise en œuvre de la méthode.

Une fausse clé peut changer tout le message[modifier | modifier le code]

Si l'ennemi change la clé de décodage secrète à notre insu, en connaissant le message codé public, il peut décider de la manière dont les données sont interprétées. Exemple sur 26 lettres :

  • Vrai message secret à transmettre : "OUI".
  • Vraie clé aléatoire secrète : "HRJ".
  • Vrai message codé public = (Vraie clé aléatoire secrète + Vrai message secret à transmettre), modulo 26 : "WMS".
  • Fausse clé, fabriquée par l'ennemi et inversée discrètement par l'ennemi = (Faux message décodé - Vrai message codé public), modulo 26 : "QBU".
  • Faux message décodé lu = (Vrai message codé public - Fausse clé), modulo 26 : "NON".

C'est pour cela qu'une attaque par force brute (tenter toutes les clés possibles) est inutile : on aurait tous les messages possibles.

Difficulté de produire une clé parfaitement aléatoire[modifier | modifier le code]

Le fait que la clé soit constituée d'une suite de caractères (ou de bits) totalement aléatoires est une condition essentielle de la sécurité du chiffre de Vernam. Un défaut du masque sur ce point peut suffire pour que le cryptanalyste retrouve le clair.

Des clés parfaitement aléatoires ne peuvent pas être produites par un ordinateur par un simple calcul : en effet ce calcul est déterministe, donc le résultat est totalement prévisible quand on connaît l'algorithme et les données initiales. Des algorithmes appelés générateurs de nombres pseudo-aléatoires sont utiles dans beaucoup de situations, y compris cryptographiques pour certains d'entre eux, mais ne peuvent répondre à la condition du parfait aléa, qui seule garantit la sécurité absolue démontrée par Claude Shannon, même si la donnée initiale est réellement aléatoire.

Les chiffrements par flot (ou les chiffrements par bloc dans certains modes d'utilisation) ont un fonctionnement à première vue analogue au chiffre de Vernam : combinaison par xor d'une clé de flot et du texte clair pour obtenir le chiffré, mais la clé de flot est engendré à partir d'une clé de taille fixe. Ces chiffres ne sont en rien inconditionnellement sûrs au sens de Shannon. Leur cryptanalyse relève de la sécurité calculatoire.

Le moyen le plus sûr de respecter cette contrainte consiste donc à créer les clés en exploitant un phénomène physique dont la nature est strictement aléatoire. C'est le cas par exemple de la radioactivité, où l'instant de désintégration d'un atome est purement aléatoire. De tels générateurs existent, mais ils doivent comporter un traitement statistique complexe des données physiques brutes observées pour obtenir une suite de bits présentant les qualités requises, ne serait-ce que de produire en moyenne un nombre égal de 1 et de 0. On peut aussi traiter des sources de bruit très entropiques.

Problème de l'utilisation unique de chaque clé[modifier | modifier le code]

Le risque que fait courir la réutilisation d'une clé est facile à montrer.

Soit un message M1 masqué grâce à la clé K, nous obtenons le chiffré C1. Supposons qu'un autre message M2 soit chiffré avec le même masque K, fournissant le chiffré C2. Convenons que le symbole représente ici l'application de l'opération XOR à chacun des bits. Nous avons les relations suivantes :

Supposons qu'un adversaire applique l'opération XOR aux deux chiffrés C1 et C2, et réutilisons les propriétés vues ci-dessus :

On obtient le XOR des deux messages en clair. C'est très dangereux, car tout effet de masque de la clé K a disparu.

Si par exemple un adversaire connaît les deux messages chiffrés et l'un des messages en clair, il peut trouver instantanément le deuxième message en clair par le calcul :

En fait, même sans connaître l'un des clairs, des méthodes plus complexes permettent souvent de retrouver M1 et M2.

Pour garantir l'utilisation unique des clés, les agents du KGB utilisaient souvent des masques qui étaient imprimés sur un papier spécial, celui-ci brûlait presque instantanément et sans laisser de cendres[réf. nécessaire].

En pratique l'utilisation sûre du masque jetable demande une organisation rigoureuse : chaque clé doit être précisément identifiée et soigneusement tracée, d'autant qu'elle est toujours fournie en deux exemplaires, à deux correspondants géographiquement distants. Imaginons qu'une chancellerie communique par cette méthode avec ses dizaines d'ambassades réparties dans des pays du monde, chacune d'elles envoyant et recevant plusieurs messages par jour, pouvant comporter un grand nombre de pages, et ceci pendant des années : il faut une logistique lourde pour garantir la sécurité absolue.

Dans la culture[modifier | modifier le code]

Dans le roman Cryptonomicon de Neal Stephenson, certains personnages échangent des messages codés au moyen de masques jetables.

Notes et références[modifier | modifier le code]

  1. Sciences et Avenir, septembre 2011, p. 27.
  2. Claude E.Shannon, Communication Theory of Secrecy Systems, Bell System Technical Journal, Vol 28, p. 656-715, Oct 1949.
  3. Voir http://www.bibmath.net/crypto/index.php?action=affiche&quoi=moderne/che
  4. Kahn 1970.

Bibliographie[modifier | modifier le code]

Cryptographie[modifier | modifier le code]

Aspects historiques[modifier | modifier le code]

Liens externes[modifier | modifier le code]