12 KiB
Méthodes de Chiffrement
But du projet : Montrer différentes façons de chiffrer un message
La cryptographie est une discipline très ancienne. Elle est utilisée depuis l'antiquité et utilise différentes techniques.
Je vous engage à lire la page wikipédia : https://fr.wikipedia.org/wiki/Histoire_de_la_cryptologie qui récapitule des exemples historiques dont certains sont plutôt surprenants.
Cahier des charges
Vous devez réaliser des fonctions permettant de mettre en oeuvre les différentes méthodes de chiffrement. Essayer de respecter ce qu'il est proposé de faire.
Dans vos programmes vous devez :
- Expliquer chacune des fonctions créées , c'est-à-dire écrire une documentation de la fonction (docstring). Cette documentation devra expliquer le principe de la transformation réalisée par votre code python.
- Commenter certaines lignes pour montrer les points importants de votre code.
- Ecrire un jeu de test pertinent pour chacune d'elle.
- Utiliser des variables avec des noms explicites.
Rédaction d'un dossier d'accompagnement présentant :
- la recherche documentaire nécessaire pour réaliser votre projet (sitographie / bibliographie )
- le partage des tâches réalisées au sein de votre équipe.
- une conclusion sur les points d'améliorations possible de votre programme (correction de bug et extension).
- ce que vous avez aimé ou pas aimé faire dans ce projet et en NSI de manière générale.
Présentation du projet
Ci-dessous, je vous présente les techniques de chiffrement qu'il faudra mettre en oeuvre:
1. Le chiffre de César
Le chiffre de César est une façon simple de coder un message afin de conserver le secret du contenu jusqu’à son destinataire. Il s’agit tout simplement de décaler chaque lettre du message.
Voyons l’exemple d’un décalage de trois lettres : A devient D; B devient E; etc.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lettres du message en clair
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C lettres du message codé
Par exemple le message :
CAPTUREZ IDEFIX
se chiffre en :
FDSWXUHC LGHILA
On peut bien sur modifier le décalage.
Cette technique reste assez simple, il faudra proposer :
- la possibilité de choisir une valeur de décalage
- le chiffrement d'un caractère en tenant compte de ce décalage.
- le chiffrement d'une phrase complète (tenir des caractères spéciaux : les espaces, les chiffres..)
- le déchiffement d'une phrase chiffrée en connaissant le décalage.
- la possibilité de déchiffrer une phrase chiffrée sans connaitre le décalage initiale.
Chiffrement. On remplace chaque caractère du message par sa lettre substituée.
Le message BONJOUR devient kbnzbhq.
Déchiffrement. On fait l’opération inverse : kbnkbn donne BONBON.
Il faudra proposer :
- un alphabet aléatoire qui correspond à un mélange de lettre comme par exemple :
ykcodmfjgzaxrnbutqiphwesvl - le chiffrement d'un caractère puis d'une phrase en tenant compte du mélange obtenue.
- le déchiffrement d'une phrase chiffrée en connaissant le mélange de lettre.
Pour un espion qui intercepterait un message codé, sans connaître la substitution choisie, il n’est plus possible de tester toutes les possibilités.
En effet, il y a 26 x 25 x 24 x..... x 2 x 1 choix possibles pour l’alphabet mélangé, ce qui fait environ 4 x 10^{26} clés !
Dans ce cas, on propose de déchiffrer ces messages par attaque statistique
3. Attaque statistique
Pour un texte assez long, les lettres n’apparaissent pas toutes avec la même fréquence.
En français, les lettres les plus rencontrées sont dans l’ordre :
E S A I N T R U L O D C P M V Q G F H B X J Y Z K W
La fréquence d’apparition d’une lettre est donnée par la formule :
fréquence~d’apparition~d’une~lettre = \frac{(nombre~d’occurrences~de~la~lettre)}{(nombre~total~de~lettres)} x 100
Dans un texte en français les fréquences sont proches de :

On a intercepté un message, mais on ne connaît pas la substitution.
Comment utiliser les statistiques pour déchiffrer le message ?
Voici une méthode d’attaque : dans le texte chiffré, on cherche la lettre qui apparaît le plus, et si le texte est assez long, cela devrait être le chiffrement du E, la lettre qui apparaît ensuite dans l’étude des fréquences devrait être le chiffrement du S, puis le chiffrement du A, I, N, T...
On obtient ainsi un déchiffrement partiel du message, sous la forme d’un texte à trous et il faut ensuite deviner les lettres manquantes.
Un exemple.
Déchiffrons la phrase :
jm dw ug jddbhbwm y jmlj cjtljtdjd
On compte les apparitions des lettres :
j : 7 d : 5 m : 3 b, l, t, w : 2
On suppose donc que le j chiffre la lettre E, le d la lettre S, ce qui donne :
E* S* ** ESS***** * E**E *E**E*SES
Ensuite la lettre qui apparaît le plus est le m. D’après les fréquences, elle devrait correspondre à A, I, N ou T.
Ainsi le premier mot serait EA, EI, EN ou ET. Seuls les deux derniers sont des mots valides.
Si m -> N, la phrase se déchiffre en :
EN S* ** ESS****N * EN*E *E**E*SES
ce qui n’est pas très clair, alors qu’avec m -> T c’est mieux !
ET S* ** ESS****T * ET*E *E**E*SES
En cherchant où placer les lettres les plus fréquentes suivantes (A, I, N) puis les autres, avec un peu de patience et de bon sens, on déchiffre le message :
ET SI ON ESSAYAIT D ETRE HEUREUSES
Il faudra proposer cette méthode d'attaque statistique pour déchiffrer un message chiffré par la méthode de chiffrement par substitution dont on ne connait pas le méménage des lettres ayant servi à chiffrer.
Énigmes.
Essayer de déchiffrer les trois citations suivantes. Chacune a été chiffrée par une substitution différente. Les frères Goncourt :
ay dmymndmnxlv vdm ay shvjnvhv fvd dznvgzvd ngvcyzmvd
Charles Darwin :
apy pywpfpy tdv ydjsvspng np ybng woy apy pywpfpy apy wady lbjgpy nv apy wady
vngpaavzpngpy movy fpaapy tdv y okowgpng ap mvpdc odc fionzpmpngy
Albert Einstein :
kw yjnzfcn, i nmy lqwpx zp mwcy yzqy ny lqn fcnp pn azpiyczppn. kw ofwyclqn, i nmy lqwpx
yzqy azpiyczppn ny lqn onfmzppn pn mwcy ozqflqzc. cic, pzqm wszpm fnqpc yjnzfcn ny
ofwyclqn : fcnp pn azpiyczppn ny onfmzppn pn mwcy ozqflqzc !
4. Le chiffrement de Vigenère
Un des principaux défauts du chiffre de César (et du chiffrement par substitution) est qu’une lettre (par exemple A) est toujours chiffrée par la même lettre (par exemple D).
Le chiffrement de Vigenère est une version améliorée du chiffre de César.
On regroupe d’abord les lettres de notre message par blocs, par exemple ici par blocs de longueur 3 :
IL ETAIT UNE FOIS
devient
ILE TAI TUN EFO IS
(les espaces sont purement indicatifs, dans la première phrase ils séparent les mots, dans la seconde ils séparent les blocs).
Si n est la longueur d’un bloc, alors on choisit une clé constituée de n nombres de 0 à 25 : [k1, k2, . . . , kn].
Le chiffrement consiste à effectuer un chiffrement de César, dont le décalage dépend du rang de la lettre dans le bloc :
• un décalage de k1 pour la première lettre de chaque bloc,
• un décalage de k2 pour la deuxième lettre de chaque bloc,
• ...
• un décalage de kn pour la n-ème et dernière lettre de chaque bloc.
Pour notre exemple, si on choisit comme clé [4, 2, 3] alors pour le premier bloc ILE :
• un décalage de 4 pour I donne M
• un décalage de 2 pour L donne N
• un décalage de 3 pour E donne H
Ainsi ILE devient MNH. On recommence avec le bloc TAI qui devient XCL. Le chiffrement complet donne :
MNH XCL XWQ IHR MU
autrement dit la phrase chiffrée est :
MN HXCLX WQI HRMU
Il faudra proposer :
- le découpage d'une phrase en bloc de n lettres
- la création d'une clé de n nombres de 0 à 25
- le chiffrement de chaque lettre d'un bloc par la clé pour aboutir à un message chiffré.
Peut-être pouvez-vous proposer de dechiffrer un message ? Dans ce cas essayer de déchiffrer le message suivant (et trouvez son auteur) qui a été codé par un chiffrement de Vigenère avec une clé (inconnue !) de longueur 4.
DL ZHGIVUEL OD UL LQK TYDVL OIL XEU DLC YEIOSASOI KVXJ KBBI WA PYWYC T WBH
QDVBI IBO BWZ QUFZ SDLLVBANODLZ CEFA OCHSSI VL NEMAOI
