TP Cryptographie et cryptanalyse
2) Affichage graphique : pour afficher sous forme de barres la liste des fréquences calculées à la question
précédente, on utilise matplotlib.pyplot. Exemple :
1import matplotlib.p y p l o t as p l t
2import numpy a s np
3
4x=np.array(range(26))
5y= [np.random.r a n d i n t (100) f o r ii n range(26)]
6y_0 =np.array([( i-13)**2f o r ii n range(26)])
7w= .3
8plt.b a r (x,y,w, 0)
9plt.b a r (x+w,y_0,w, 0, c o l o r =’ red ’)
10 plt.x t i c k s (x,alpha)#Légende sur l’axe des x
11
12 plt.show()
3) On donne le tableau de fréquences suivant (pour le français) :
[9.42, 1.02, 2.64, 3.39, 15.87, 0.95, 1.04, 0.77, 8.41, 0.89, 0.00, 5.34, 3.24,
7.15, 5.14, 2.86, 1.06, 6.46, 7.90, 7.26, 6.24, 2.15, 0.00, 0.30, 0.24, 0.32]
Évitez de le retaper : récupérez-le sur ma page web.
Affichez sur une même figure les deux listes de fréquences. Conjecturer quelle lettre correspond au
« e ».
4) (bonus) Les lettres n’ont pas toutes les mêmes voisines, avec les mêmes fréquences. Par exemple les
lettres doublées (cf bigramme) sont, par fréquence décroissante : e, s, l, t, n, m, r, p, f, c (et d’autres
plus rares).
Écrire une fonction qui classe par fréquence décroissante les lettres doubles du texte 2.
5) (bonus) Écrire un programme qui
•affiche les histogrammes de la question 3 et le texte crypté,
•demande à l’utilisateur (input(’blabla’)) de rentrer une lettre chiffrée et sa traduction en clair.
•effectue le remplacement dans le texte (avec les vérifications ad hoc).
•recommence au premier point.
Grâce à ce programme (et aux lettres doublées), craquer le code du texte 2.
IV) Le chiffre de Vigenère
A) Chiffrement
Nous venons de voir que les chiffrements par substitution sont vulnérables à l’analyse fréquentielle.
Le chiffrement de Vigenère fonctionne sur le principe suivant : on dispose d’une clé qui est une chaîne de
caractères (en général un mot), et on décale la première lettre du texte d’un rang correspondant à celui de
la première lettre de la clé dans l’alphabet et ainsi de suite. Par exemple, si la clé est « python », la première
lettre sera décalée de 15 (p est la 15ème lettre de l’alphabet, en partant de 0), le deuxième de 24 etc. On
revient au début de la clé si le texte à crypter est plus long que la clé).
Exemple :
texte clair u n e x e m p l e d e c h i f f r e m e n t
clé p y t h o n p y t h o n p y t h o n p y t h
décalage 15 24 19 7 14 13 15 24 19 7 14 13 15 24 19 7 14 13 15 24 19 7
texte crypté J L X E S Z E J X K S P W G Y M F R B C G A
Ce chiffrement, décrit au XVIe siècle, a été considéré comme incassable de sa popularisation au XVIIe siècle
jusqu’au milieu du XIXe siècle.
3