MATH202 TP #4

Cryptanalyse du code de Vigenère

Objectifs

  • Reconnaître les faiblesses des codages du type décalage;
  • Utiliser de la statistique pour craquer des chiffres;

Le TP doit être fait en binôme.

Codeur: Responsable pour l'implementation.

Navigateur: Responsable pour veiller à la qualité du code (?)

Organisation

Sprint 1

Sprint 2

Sprint 3

10

60

110

120

170

180

0

40min

10min

On bosse

On discute

Le binôme doit alterner les rôles de codeur et de navigateur à chaque sprint

Code de César

A Paris, vois-tu, il vaudrait mieux n'avoir pas de lit que pas d'habit.

Guy de Maupassant, Bel-Ami.

Soit le dictionnaire

a -> x        p -> q          e -> h

X Pxris, vois-tu, il vxudrxit mieux n'xvoir pxs de lit que pxs d'hxbit.

X Qxris, vois-tu, il vxudrxit mieux n'xvoir qxs de lit que qxs d'hxbit.

X Qxris, vois-tu, il vxudrxit mihux n'xvoir qxs dh lit quh qxs d'hxbit.

A Paris, vois-tu, il vaudrait mieux n'avoir pas de lit que pas d'habit.

Code de César

On peut définir des substitutions pour toutes les lettres

Le code de César définit un dictionnaire où chaque lettre est remplacée pour celle qui vient 3 lettre plus loin

a -> d   b -> e   c -> f   ...   x -> a   y -> b   z -> c

D Sdulv, yrlv-wx, lo ydxgudlw plhxa q'dyrlu sdv gh olw txh sdv g'kdelw.

Ça qui donne pour le texte précédent

Sprint #1

Objectifs: Questions 1, 2 et 4

Code de Vigenère

Le code de César ou le code de substituition par dictionnaire c'est "facile" de craquer.

Le code de Vigenère c'est une alternatif encore simple, mais un peu plus compliqué de craquer.

C'est aussi un code du type substitution, mais la règle de substitution n'est pas donnée par un dictionnaire, mais par un mot clé.

Code de Vigenère

A PARIS, VOIS-TU, IL VAUDRAIT MIEUX N'AVOIR PAS DE LIT QUE PAS D'HABIT

Mot clé: BONJOUR

B ONJOU  RBON JO  UR BONJOURB ONJOU R BONJO URB ON JOU RBO NJO U RBONJ 
+
B
ABCDEF
GHIJKL
STUVWX
MNOPQR
YZ
012345
6 7 8 9 1011
12 13 14 15 1617
18 19 20 21 2223
24 25
D
N
A
WM  MPWF CI  CC WOHMFUZU AVNIR E BJBRF JRT RR UWN HVS CJG X YBPVC

Code de Vigenère

A PARIS, VOIS-TU, IL VAUDRAIT MIEUX N'AVOIR PAS DE LIT QUE PAS D'HABIT

Mot clé: BONJOUR

B ONJOU  RBON JO  UR BONJOURB ONJOU R BONJO URB ON JOU RBO NJO U RBONJ 
+
B
IIIIIII
BONJOUR
JWVRWCZ
D
N
A
WM  MPWF CI  CC WOHMFUZU AVNIR E BJBRF JRT RR UWN HVS CJG X YBPVC
+++++++

Code de Vigenère

En traversant l'antichambre, le commissaire de police fit un signe à deux gendarmes, lesquels se placèrent, l'un à droite l'autre à gauche de Dantès; on ouvrit une porte qui communiquait de l'appartement du procureur du roi au palais de justice, on suivit quelque temps un de ces grands corridors sombres qui font frissonner ceux-là qui y passent, quand même ils n'ont aucun motif de frissonner.

De même que l'appartement de Villefort communiquait au palais de justice, le palais de justice communiquait à la prison, sombre monument accolé au palais et que regarde curieusement, de toutes ses ouvertures béantes, le clocher des Accoules qui se dresse devant lui.

Après nombre de détours dans le corridor qu'il suivait, Dantès vit s'ouvrir une porte avec un guichet de fer; le commissaire de police frappa, avec un marteau de fer, trois coups qui retentirent, pour Dantès, comme s'ils étaient frappés sur son coeur; la porte s'ouvrit, les deux gendarmes poussèrent légèrement leur prisonnier, qui hésitait encore. Dantès franchit le seuil redoutable, et la porte se referma bruyamment derrière lui. Il respirait un autre air, un air méphitique et lourd: il était en prison.

'e' 10.68% 125
'r' 6.92% 81
'u' 6.32% 74
's' 6.07% 71
'i' 6.07% 71
'g' 10.68% 125
't' 6.92% 81
'w' 6.32% 74
'u' 6.07% 71
'k' 6.07% 71

Décalage par 2

Gp vtcxgtucpv n'cpvkejcodtg, ng eqookuucktg fg rqnkeg hkv wp ukipg à fgwz igpfctogu, nguswgnu ug rnceètgpv, n'wp à ftqkvg n'cwvtg à icwejg fg Fcpvèu; qp qwxtkv wpg rqtvg swk eqoowpkswckv fg n'crrctvgogpv fw rtqewtgwt fw tqk cw rcncku fg lwuvkeg, qp uwkxkv swgnswg vgoru wp fg egu itcpfu eqttkfqtu uqodtgu swk hqpv htkuuqppgt egwz-nà swk a rcuugpv, swcpf oêog knu p'qpv cwewp oqvkh fg htkuuqppgt.

Fg oêog swg n'crrctvgogpv fg Xknnghqtv eqoowpkswckv cw rcncku fg lwuvkeg, ng rcncku fg lwuvkeg eqoowpkswckv à nc rtkuqp, uqodtg oqpwogpv ceeqné cw rcncku gv swg tgictfg ewtkgwugogpv, fg vqwvgu ugu qwxgtvwtgu décpvgu, ng enqejgt fgu Ceeqwngu swk ug ftguug fgxcpv nwk.

Crtèu pqodtg fg févqwtu fcpu ng eqttkfqt sw'kn uwkxckv, Fcpvèu xkv u'qwxtkt wpg rqtvg cxge wp iwkejgv fg hgt; ng eqookuucktg fg rqnkeg htcrrc, cxge wp octvgcw fg hgt, vtqku eqwru swk tgvgpvktgpv, rqwt Fcpvèu, eqoog u'knu évckgpv htcrréu uwt uqp eqgwt; nc rqtvg u'qwxtkv, ngu fgwz igpfctogu rqwuuètgpv néiètgogpv ngwt rtkuqppkgt, swk jéukvckv gpeqtg. Fcpvèu htcpejkv ng ugwkn tgfqwvcdng, gv nc rqtvg ug tghgtoc dtwacoogpv fgttkètg nwk. Kn tgurktckv wp cwvtg ckt, wp ckt oérjkvkswg gv nqwtf: kn évckv gp rtkuqp.

Une décalage uniforme ne change pas les fréquences.

Code de Vigenère

Suppose qu'on connaît la taille de la clé. Par exemple, 7

Ça veut dire qu'à chaque 7 lettres, le texte est décalé de la même valeur

f = open("arsene-lupin.txt", encoding="UTF-8")
s = f.read()
s = clean(s)			    
chaine = s[10000:12000]		    
c0 = chaine[0::7]    # [début:fin:pas]
c1 = chaine[1::7]
c2 = chaine[2::7]

Si le texte original était écrit en français, les chaînes c0,c1,c2 iront respecter la fréquence des lettres de la langue française.

On peut faire l'analyse fréquentielle de chaque chaîne pour découvrir chaque lettre de le mot clé!

Sprint #2

Objectifs: Questions 5, 6 et 7

Mini-Activité

Peer Review (?)

Sprint #3

Objectifs: Questions 8, 9, 10 et 3

Math202 - TP4

By Daniel Martins Antunes

Math202 - TP4

Cryptanalyse du code de Vigenère

  • 254