Découverte de la cryptographie
la cryptographie est une des applications majeures de l'informatique. Le but de projet est de réaliser un programme permettant de chiffrer et de déchiffrer un texte à l'aide du code de César, l'une des plus anciens (et des plus simples) méthode de cryptage. Le code de César peut être cassé par analyse fréquentielle, on programmera donc aussi le décryptage du code de César en utilisant cette technique. Une autre partie du projet est consacrée au chiffrement de Vigenère.
Etape 1 : le code de César
Comprendre le code de César et la méthode pour le déchiffrer. On pourra faire ses propres recherches ou consulter la vidéo suivante (en anglais, mais les sous-titres français sont disponibles):
Sans l'aide d'un ordinateur, "à la main" :
- Chiffrer le mot "EXPERT" en décalant les lettres de 5 emplacements.
- Déchiffrer de mot "DOBBSLVO" en sachant que la clé est 10.
Préparer une explication orale de la méthode de chiffrement ainsi que le la technique de déchiffrement, inclure des exemples.
Etape 2 : Chiffrer ou déchiffrer avec la clé
Réaliser un programme permettant à un utilisateur de chiffrer ou de déchiffrer un texte avec la clé de son choix. Pour simplifier, on suppose que le texte est constitué uniquement de lettres majuscules non accentuées, de ponctuations et d'espaces. On écrira une fonction chiffre_texte
qui prend en argument une chaine de caractère texte
et une clé cle
(entier compris entre 1 et 25) et qui renvoie texte
chiffré avec le code de César de clé cle
(on laisse intacte les espaces et caractères de ponctuation, on ne déchiffre que les lettres majuscules). Par exemple :
>>> chiffre_texte("NSI",14)
'BGW'
>>> chiffre_texte("SUPER",5)
'XZUJW'
>>> chiffre_texte("C'EST GENIAL",11)
"N'PDE RPYTLW"
Aide
- Penser à utiliser les fonctions
ord
etchr
de Python - On pourra commencer par écrire une fonction
chiffre_caractere
qui prend en argument un caractèrecaractere
et une clécle
et renvoiecaractere
décalé decle
emplacements.
Etape 3 : Analyse fréquentielle
Faire un programme qui décode automatiquement un texte crypté par la méthode de César grâce à une analyse fréquentielle. Tester votre programme sur l'exemple suivant :
PFOJC JCIG OJSN FSIGGW O RSQCRSF QS ASGGOUS
Q SGH HFSG PWSB AOWG WZ FSGHS SBQCFS PSOIQCID O TOWFS
Aide
On pourra commencer par écrire une fonction plus_frequent
qui prend en argument un texte et renvoie la lettre qui apparaît le plus souvent dans ce texte. Par exemple :
>>> plus_frequent("UN EXEMPLE DE TEXTE")
'E'
Etape 4 : dictionnaire et force brute
Tester votre programme sur le déchiffrement automatique du texte suivant :
RU YXDBBJ DW YAXOXWM BXDYRA, B'JBBRC MJWB BXW URC, B'JYYDHJWC BDA BXW YXUXLQXW. RU YARC DW AXVJW, RU U'XDEARC, RU UDC; VJRB RU W'H BJRBRBBJRC ZD'DW RVKAXPURX LXWODB, RU KDCJRC À CXDC RWBCJWC BDA DW VXC MXWC RU RPWXAJRC UJ BRPWRORLJCRXW.
Ce texte est extrait du livre la disparition (G. Perec), faire des recherches sur ce livre et expliquer sa particularité. Expliquer alors pourquoi le programme de déchiffrement par analyse fréquentielle ne fonctionne pas.
Une autre méthode de décryptage consiste à utiliser une attaque par force brute c'est à dire qu'on teste toutes les clés possibles et on vérifie que les mots obtenus après déchiffrement sont des mots du dictionnaire. Mettre en oeuvre en Python cet algorithme de décryptage et l'utiliser pour le texte donné en exemple ci-dessus.
Aide
On pourra télécharge ci-dessous un dictionnaire des mots de la langue française : Dictionnaire
Etape 5 : Codage de Vigenère
Faire des recherches sur le codage de Vigenère, expliquer son fonctionnement, détailler un exemple de codage avec cette méthode. Ce code résiste-t-il à une approche par analyse fréquentielle ? Justifier.
Proposer un programme Python permettant de coder et de décoder un texte avec la méthode de chiffrement de Vigenère.