Vaincre le chiffre de Vigenere


  Le système polyalphabétique de Vigenère résista pendant environ 3 siècles, jusqu'à ce que le mathématicien britannique Charles Babbage, connu notamment pour ses machines à différence, élabore la théorie de son décodage, vers 1854. Cette découverte assure la suprématie de l'Angleterre, et est gardée secrète alors qu'à l'automne 1854, l'Angleterre, la France, la Turquie et la Sardaigne déclarent la guerre à la Prusse. Ce n'est qu'en 1863 qu'un ancien major de l'armée prusse, Friedrich Kasiski, publie la méthode dans son livre de 95 pages Die Geheimschriften und die Dechiffrir-Kunst.

L'essentiel : Trouver la longueur de la clé

  Supposons par exemple que nous ayons le message codé :
CS AZZMEQM, CO XRWF, CS DZRM GFMJECV. X'IMOQJ JC LB NLFMK CC LBM WCCZBM KFIMSZJSZ CS URQIUOU. CS ZLPIE ECZ RMWWTV, SB KCCJ QMJ FCSOVJ GCI ZI ICCKS, MK QMLL YL'CV ECCJ OKTFWTVM JIZ CO XFWBIWVV, IV ACCI CC C'OCKFM, JINWWB U'OBKSVUFM
et que, par une méthode ou une autre, on ait trouvé que la longueur de la clé est 3. Alors, la 1ère lettre, la 4ème, la 7ème, etc... ont toutes été codées par le même procédé, un décalage de César. On sépare le texte codé en 3 parties : la première comporte les lettres 1,4,7,... la seconde les lettres 2,5,8,... la troisième les lettres 3,6,9,....
CZECRCZ...
SZQOWSR...
AMMXFDM...
Pour chaque ligne, il suffit de faire une analyse statistique (lettres les plus fréquentes, etc...) d'autant plus facile qu'il s'agit d'un simple décalage de César. On trouve par exemple que pour la première ligne on a décalé avec la lettre R, pour la seconde avec O, pour la troisième avec I. Le texte clair est :
LE SILENCE, LA PAIX, LE VIDE PRESQUE. J'AVAIS VU UN FURET OU UNE FOUINE TRAVERSER LE MACADAM. LE RUBAN QUI DEFILE, ET TOUS CES RUBANS SUR LA ROUTE, ET CEUX QU'ON NOUS ACCROCHE SUR LA POITRINE, UN JOUR OU L'AUTRE, SUFFIT D'ATTENDRE.
(extrait de 54×13, de Jean-Baptiste Plouy).

Le test de Kasiski

  L'idée de Kasiski (et de Babbage avant lui) est d'analyser les séquences de 3 lettres répétées dans le texte codé, et de se dire que ces répétitions ne sont pas fortuites. Si une séquence de 3 lettres est répétée dans le message codé avec une distance d, on peut se dire qu'il s'agit de la même séquence de 3 lettres du texte initial, codée avec la même séquence de lettres de la clé. Par conséquent, si m est la longueur de la clé, pour que les 2 séquences soient codées avec les mêmes lettres de la clé, il faut que m divise d.

  On peut donc prendre pour m le pgcd des distances des séquences répétées. Bien sûr, il faut faire preuve de discernement dans l'application de cette méthode, en ne tenant compte que des données significatives. Faisons l'analyse toujours sur le même texte :
CS AZZMEQM, CO XRWF, CS DZRM GFMJECV. X'IMOQJ JC LB NLFMK CC LBM WCCZBM KFIMSZJSZ CS URQIUOU. CS ZLPIE ECZ RMWWTV, SB KCCJ QMJ FCSOVJ GCI ZI ICCKS, MK QMLL YL'CV ECCJ OKTFWTVM JIZ CO XFWBIWVV, IV ACCI CC C'OCKFM, JINWWB U'OBKSVUFM
SéquencePositionDistanceDécomposition
COX 11-1401293.43
FCS16-998383
ZRM20-8363327
FMJ24-1621382.3.23
CLB37-46932
KCC44-9248233
WTV87-133462.23
CCJ93-126333.11
ICC110-1554532.5
MJI136-1632733
Clairement, le diviseur commun est 3, qui apparait presque partout (il n'apparait pas pour la séquence FCS, mais celle-ci n'est pas significative, car une fois elle est coupée par une virgule, l'autre fois elle ne l'est pas). La longueur de la clé est 3.

Méthode moderne : l'indice de coïncidence

  On appelle indice de coïncidence d'un texte la probabilité pour que, si on prenne deux lettres au hasard dans ce texte, ce soient les mêmes. Si le texte est composé de n lettres, choisis dans l'alphabet A,...,Z, son indice de coïncidence Ic est donnée par la formule :
où nA désigne le nombre de A dans le texte - explication de la formule - .

  Dans une langue usuelle, les lettres n'apparaissent pas toutes avec la même fréquence. C'est pourquoi l'indice de coïncidence d'un texte écrit en françait (=If) est très supérieur à l'indice de coïncidence d'un texte aléatoire (=Ia) où les lettres ont une fréquence d'apparition identiques. Ainsi une analyse statistique sur de nombreux textes a donné If=0,074, tandis qu'un petit calcul donne Ia=0,038 (=1/26) - explication du calcul.

  Revenons au codage de Vigenère. Supposons qu'on ait un texte codé de n lettres, la clé de codage faisant k lettres. On montre (explication) que l'indice de coïncidence du texte peut être approché par :
L'inversion de cette formule donne :
Comme on peut calculer l'indice de coïncidence du texte, on peut, en théorie, trouver une valeur approchée de la clé.

  Dans notre applet qui décode automatiquement, nous n'avons toutefois pas choisi cette méthode, qui ne s'est pas avérée très précise. Nous avons plutôt écrit le texte, puis le texte en ne prenant qu'une lettre sur 2, puis le texte en ne prenant qu'une lettre sur 3, etc... On calcule l'indice de coïncidence à chaque fois. L'indice de coïncidence maximal est obtenu quand le texte est le moins aléatoire possible. S'il correspond au choix d'une lettre sur k, c'est que la longueur de la clé est k.

  Signalons aussi un autre petit inconvénient du calcul de la longueur de la clé fondé sur l'indice de coïncidence : supposons que la longueur de la clé est 4. Alors l'indice de coïncidence calculée en lisant le texte tous les 4 lettres est grand, beaucoup plus grand qu'en lisant le texte toutes les 3 ou toutes les 5 lettres... Mais si on lit le texte tous les 8 caractères, la lettre employée pour chiffrer est toujours la même, et l'indice de coïncidence est grand là-aussi! On s'arrête donc dès que l'on a trouvé un indice de coïncidence anormalement grand...

Et encore, dans la cryptographie expliquée...


Sommaire de la Cryptographie Expliquée - Plan du site - Retour à la BibM@th - Tous droits réservés - Frédéric Bayart -