Cryptographie Classique
Cryptographie Classique
Cryptographie Classique
RAPPORT FINAL
CRYPTOGRAPHIE CLASSIQUE
ELISA CRESPY AUORE BRUNET HUSSON JULIA NORE MAXIME
Nous avions choisi comme projet pour le parcours Innovation la cryptographie classique. Nos objectifs taient de
dcouvrir le monde de la cryptographie grce plusieurs mthodes de cryptage. Nous avons donc tudi les deux
techniques les plus simples : le code Csar et le chiffrement affine. Aprs les avoir tudis mathmatiquement, nous
sommes passs la partie programmation faite grce au logiciel de programmation Python. Dans ce rapport nous
allons tenter de rsumer les grandes tapes de nos travaux ainsi que nos rsultats finaux.
1. LE CODE CESAR :
Rappelons pour commencer la mthode simple qui permet de dcrypter un texte grce au code Csar partir dun
texte crypt.
Pour crypter le texte, il sagit uniquement de choisir un dcalage gard secret et dappliquer ce dcalage toutes les
lettres de notre texte original (par exemple, si on choisit un dcalage de 5, Lyon devient qdts )
- Si le texte original contient plus despaces que de E le dcryptage sera impossible, nous avons donc utilis
une fonction permettant de supprimer tous les espaces dun texte trs rapidement .
- Nous avons remarqu que lorsque lon souhaite appliquer un dcalage au texte compris entre 20 et 44, le
dcryptage du texte ne se fait pas intgralement. Le dcryptage sarrte sur le caractre cod par le numro
ASCII 10, qui correspond line feed soit fin de ligne . Nous navons cependant pas eu le temps de
chercher plus loin les causes ce problme.
1
CRYPTER UN TEXTE :
La fonction cesar_chiffre :
Paramtres (x, d) avec x le numro de la
lettre coder et d le dcalage que lon
souhaite appliquer notre texte
On utilise le modulo 128 car on largit notre
cryptage tous les caractres donc la
table ASCII qui comporte 128 caractres et
non plus aux simples lettres de lalphabet.
La fonction cesar_crypt :
Paramtres (texte, d) avec texte le texte
que lon souhaite crypt et d le dcalage
que lon souhaite appliquer ce texte
Ord(letr) permet de convertir la lettre
en son numro ASCII tandis que
chr(nbr_cryp) permet de convertir un
numro ASCII en une lettre
2
DECRYPTER UN TEXTE :
La fonction compte :
Paramtre (fichier) avec fichier le nom du fichier
dcrypter
La fonction cesar_dechiffre :
Maintenant que nous connaissons le dcalage, il
suffit dutiliser la fonction inverse la fonction de
cryptage qui consiste enlevant le dcalage la
place de le rajouter.
On ouvre ensuite le fichier contenant le texte crypt
auquel on applique la fonction cesar_decrypt pour
finalement afficher le texte.
Enfin, on cre un nouveau fichier, toujours avec le
mode w afin dy enregistrer le texte dcrypt.
On demande aussi au programme de nous afficher le
texte original qui a t crypt afin de vrifier si notre
dcryptage est juste.
3
2. LE CHIFFREMENT AFFINE
Le cryptage par chiffrement affine consiste crypter un texte grce une fonction du type AX + B et non plus par un
simple chiffre appel dcalage. Voici la mthode qui permet de crypter un texte grce au chiffrement affine :
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
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Pour ce qui est du dcryptage, la tche est beaucoup plus complexe et repose entirement sur larithmtique. Il sagit
de trouver la fonction inverse de AX + B = Y [128].
Trouver les deux caractres qui reviennent le plus souvent dans le texte crypt et en dduire leur numro
ASCII (par exemple, Y1 = 52 et Y2 = 40)
On sait que la lettre ayant la plus grande frquence dapparition en langue latine est le E puis en seconde
place, la lettre A suivi par le I
Attribuer Y1 X1 qui correspond au numro ASCII de E soit 101 et attribuer Y2 X2 qui correspond au
numro ASCII du A soit 97
On obtient deux quations de la forme A x X1 + B = Y1[128] et A x X2 + B = Y2[128]
12
On en dduit une expression de A qui serait de la forme [128]
12
IMPORTANT : il faut faire modulo [128] chaque rsultat trouv !!
Maintenant que lon connait une expression pour A, nous pouvons en dduire celle de B qui serait de la forme
12
Y2 - x X2 [128]
12
Nous connaissons toutes les valeurs ncessaires puisque nous les avons dtermins en amont, il suffit juste
de les remplacer dans les expressions de A et de B afin de dterminer la fonction inverse qui permet de
dcrypter le texte.
4
CRYPTER UN TEXTE :
La fonction affine_chiffre :
Il sagit de la mme fonction que pour le code
Csar hormis que lon a une fonction affine qui
crypte donc de la forme AX+ B. A et B sont
dterminer par celui qui crypte et doivent tre
gards secrets.
La fonction affine_crypt :
Cest exactement la mme fonction que celle
utilise dans le Code Csar.
5
DECRYPTER UNE FONCTION :
La fonction compte :
Pour ce qui est de la fonction inverse qui permet de dcrypter, nous navons pas eu le temps de travailler dessus en
programmation. Nanmoins, nous sommes maintenant capables de dcrypter un texte la main, de faon
mathmatique, car nous connaissons la valeur de A et de B.
6
Les problmes rencontrs avec le chiffrement affine :
- Le raisonnement avec les modulos est compliqu, toutes les rgles de calcul habituelles ne sont plus valables
pour certaines avec le modulo. De plus, il faut le prendre en compte chaque rsultat trouv ! AUCUN
RESULTAT NE DOIT ETRE PRIS SANS AVOIR FAIT LE MODULO
- Comme pour le code csar, nous avons eu besoin de supprimer les espaces mais nous avons galement dcid
de supprimer tous les caractres avec accents pour faciliter le cryptage.
- ATTENTION : notre programme permettant de trouver les valeurs de A et B ne marche quavec certaines
valeurs, par exemple les couples (3,5), (2 ,2), (5,6) fonctionnent tandis que (10,11) ne marchent pas.
En conclusion, nous pourrions dire que ce projet nous a aid mieux se servir de Python. Nous avons acquis les bases
de la cryptographie classique grce au Code Csar et au chiffrement affine. Quelques amliorations pourraient tre
apportes en plus nos programmes afin de les rendre plus simples et plus courts.
Nous remercions M Saber, notre professeur rfrant, pour nous avoir accompagn dans lavancement de notre projet.
Nous remercions galement M Pellegrini, professeur de programmation, pour nous avoir aid dans la partie
programmation pour le chiffrement affine.