Comme la dernière fois, je vous propose une approche par l’exemple. A vous d’essayer de déchiffré ce qui suit :
IYVLS LZKIW KHMMX ZLHHE ONEEX UNBSX JYVPO AHXGV KMXTB KMXRD KAXRO XUEIW KHMWY AMEEP ULFIN AHFSD UOWYX KJAVK YYISE XJHYF UCKGR OZYVO XHHXB KNXBD KUVLK WOXGK XUVXO XYGSE YOMMV OMHRC AHXPO ZNKIN KFTGV KJHYB KZYIM ZOXVV GMNFC ZCMYD OIGIF OXXQW KHMTV AMEEM RYLIB GFHRQ AYXXF GLBIO KNFMO AREID KRMIC KLTGR OZYVO OFYEE ZMTZY OLJYS RSTIE AHXTO XCHHO UOWIC VULWK MYLIX ZCXVC JOOVO YFBXD KLTMB KMXXK OYGXE ZCEMC KMISE XWAMP LLXVV KMIPE YAKEX JMLIM XYMWV KMWIE DWHVB KMISX JUGXC TUOES KHMTV AMJYK GPHMB KHEIE XMFES TMNRO DYFTV GCKIN AGXQO RCOVO VINVC GMLYB KLWIV GVHRX KWHQZ XYAIX YCHRN KMFIC YUZIC
On ne connais bien entendu pas la clé, le but étant de la retrouvé, ainsi que le texte en clair.
Si le mot cle est BAD et que le mot à chiffré est COOL, on a :
DORM
On remarquera que les deux “O” ne sont pas chiffré de la même façon, d’où la force du chiffre de Viginère. C’est ainsi qu’il a été indéchiffrable jusqu’au XIXème siècle.
La méthode de cryptanalyse repose en deux étapes :
Tout d’abord, nous allons essayer de déterminer la taille de la clé.
Pour celà, il est possible d’utiliser deux méthodes : L’indice de coïncidence ( test de Friedman ) ainsi que l’analyse de la distance entre deux chaines semblables. Nous utiliserons cette dernière.
Elle repose sur le principe que même si une lettre est codée différement à chaque fois, elle sera néanmoins répétée plusieurs fois de la même manière.
Par exemple dans notre texte, “BKMX” est répété, et l’écart entre les deux chaines est de 275 caractères.
Ce qui veut dire que soit la chaine fait 1 caractères, soit un multiple de 275. Il y a aussi une infime probabilité pour que le BKMX code pour une autre chaine, et que sa répétition n’est que pure coïncidence. Evidemment, avec une chaine de 4 caractères, cette probabilitée est très faible, pour ne pas dire nulle.
Nous allons donc cherché toutes les chaines de 4 caractères qui se répète, et faire le PGCD de leurs intervalles.
La liste ci-dessous représente les différentes intervalles entre deux même chaines :
50, 50, 190, 140, 145, 145, 145, 145, 275, 245, 45, 195, 195, 195, 195
Le mot clé a donc une taille qui est un multiple de tout ces nombres, c’est à dire 5 ou 1.
Si le mot clé avait pour taille 1, nous aurions eu affaire à un simple Chiffre de César, ce qui n’est pas le cas.
En utilisant l’indice de coïncidence, nous obtenons le même résultat, mais la technique n’est pas détaillée ici.
Maintenant que nous savons que notre clé fait 5 caractères, nous allons pouvoir réunir les caractères chiffrés avec le même alphabet.
En ne prenant que le début du texte, on peut dire que :
I,L,K sont chiffrés avec le premier alphabet décalé
Y,Z,H le sont avec le deuxième, etc..
Ainsi, nous obtenons cinq chaines de caractères, toutes chiffrées avec un alphabet décalé, ou encore un Chiffre de César.
Pour pouvoir trouver chaque décalage, nous allons procédé à une analyse fréquentielle de chacune.
Pour le premier décalage, et donc la première lettre du mot clé, nous allons procédé à une analyse fréquentielle de :
ILKZOUJAKKKXKAUAUKYXUOXKKWXXYOAZKKKZGZOOKARGAGKAKKOOZORAXUVMZJYKKOZKXLKYJXKDKJTKAGKXTDGARVGKGKXYKY
Ce qui nous donne les fréquences suivantes (en %):
A 10.204081632653061
B 0
C 0
D 2.0408163265306123
E 0
F 0
G 7.142857142857143
H 0
I 1.0204081632653061
J 4.081632653061225
K 26.53061224489796
L 2.0408163265306123
M 1.0204081632653061
N 0
O 9.183673469387756
P 0
Q 0
R 3.061224489795918
S 0
T 2.0408163265306123
U 5.1020408163265305
V 2.0408163265306123
W 1.0204081632653061
X 10.204081632653061
Y 6.122448979591836
Z 7.142857142857143
On remarque que la lettre K est la lettre la plus fréquente, que les trois fréquences L,M et N sont très faibles, celle de O forte puis de nouveau deux fréquences très faible. Si l’on décalle la lettre K pour qu’elle devienne E, ces statistiques de fréquence correspondent avec celle de la langue française. On en déduit donc que pour la première lettre, on a affaire a un décalage de E vers K, c’est à dire de A vers G.
La première lettre du mot clé est donc G.
De la même façon, nous pouvons déterminer les 4 autres lettres. Il est important de ne pas seulement prendre la lettre la plus forte comme étant un E, mais de bien regarder la suite de lettre.
Nous obtenons donc la clé GUTEK, et le message en clair :
CECHI FFREM ENTIN TRODU ITLAN OTION DECLE UNECL
ESEPR ESENT EGENE RALEM ENTSO USLAF ORMED UNMOT
OUDUN EPHRA SEPOU RPOUV OIRCH IFFRE RNOTR ETEXT
EACHA QUECA RACTE RENOU SUTIL ISONS UNELE TTRED
ELACL EPOUR EFFEC TUERL ASUBS TITUT IONEV IDEMM
ENTPL USLAC LESER ALONG UEETV ARIEE ETMIE UXLET
EXTES ERACH IFFRE ILFAU TSAVO IRQUI LYAEU UNEPE
RIODE OUDES PASSA GESEN TIERS DUVRE SLITT ERAIR
ESETA IENTU TILIS ESPOU RCHIF FRERL ESPLU SGRAN
DSSEC RETSL ESDEU XCORR ESPON DANTS NAVAI ENTPL
USQUA AVOIR ENLEU RSMAI NSUNE XEMPL AIRED UMEME
LIVRE POURS ASSUR ERDEL ABONN ECOMP REHEN SIOND
ESMES SAGES
Ou encore :
Ce chiffrement introduit la notion de clé. Une clé se présente généralement sous la forme d’un mot ou d’une phrase. Pour pouvoir chiffrer notre texte, à chaque caractère nous utilisons une lettre de la clé pour effectuer la substitution. Évidemment, plus la clé sera longue et variée et mieux le texte sera chiffré. Il faut savoir qu’il y a eu une période où des passages entiers d’œuvres littéraires étaient utilisés pour chiffrer les plus grands secrets. Les deux correspondants n’avaient plus qu’à avoir en leurs mains un exemplaire du même livre pour s’assurer de la bonne compréhension des messages. ( Présentation du chiffre de viginère de Wikipédia )
On peut attribuer cette découverte à Charles Babbage, même s’il ne l’a pas publier.Cette technique porte donc le nom de Friedrich Wilhelm Kasiski, ayant fait cette même découverte un peu plus tard ( et l’ayant publié dans “Ecriture secrète, et art du déchiffrement” ).
Remarque : Une autre méthode peut être employé, appelée “mot probable”. En effet, imaginons que notre texte contient le mot “que”. Nous imaginons alors qu’il ne contient seulement le mot “que”. Ainsi, nous obtenons une clé. Prenons un deuxième texte, chiffré avec la même clé, et appliquons notre clé temporaire. Si nous ne nous sommes pas trompé, il est probable que certaine partie du texte ressortent, nous permettant de deviné une partie de la clé. Voilà pourquoi il est déconseillé de toujours utilisé la même clé, et de préféré un système de clé jetable.
Encore une fois, je vous conseille de vous faire des petits outils qui vous aideront dans votre analyse.
On pourra par exemple utiliser un utilitaire pour essayer de trouver la longueur de la clé ( en cherchant l’espace entre les mêmes chaines, et puis un PGCD de tout ça
) :
inter,i,all,num,texte = input("Intervalle : "),0,{},[],""
def pgcd(a,b):
while a<>b:
if a<b:
a,b=b,a
a,b=a-b,b
return a
def pgcdl(l):
lepgcd=l[0]
for element in l:
lepgcd=pgcd(lepgcd,element)
return lepgcd
while i < (len(texte) - inter):
chaine,temp = "",i
while temp < (i+inter):
chaine = chaine + texte[temp]
temp += 1
if texte.count(chaine) > 1 :
if all.has_key(chaine) :
num.append(i - all[chaine])
else :
all[chaine] = i
i+=1
print pgcdl(num)
Bonne journée à tous !