TP 1 : Initiation au Cryptage
1) Le cryptage de César:
Ce système de cryptage est très simple à mettre en œuvre, cependant étant totalement
symétrique, il suffit de faire une soustraction pour connaître le message initial. Une méthode primaire
est d’essayer les 26 combinaisons possibles et voir si l’on peut obtenir un message compréhensible.
Une méthode plus évoluée consiste à calculer les fréquences d'apparition des lettres dans le message
chiffré (ce qui est beaucoup plus facile lorsque le message est long).
Effectivement, selon la langue, certaines lettres reviennent plus couramment que d'autres
(en français, par exemple, la lettre la plus utilisée est la lettre E), ainsi la lettre apparaissant le plus
souvent dans un texte crypté par le chiffrage de César correspondra vraisemblablement à la lettre E,
une simple soustraction donne alors la clé de cryptage.
Substitution mono-alphabétique :
La technique est élémentaire : il suffit de remplacer chaque lettre du texte à chiffrer par la lettre qui
se situe n places plus loin dans l’alphabet. Par exemple si n=3, on remplacera A par D, B par E, C par
F etc.
CLAIR 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
-> décalage = 3
CODE 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
2) Le cryptage de Vigenère:
Substitution poly-alphabétique :
Pour crypter, on choisit une clef (mot ou phrase). A chaque lettre du texte clair on fait correspondre
une lettre de la clef (la clef étant répétée autant de fois que nécessaire).
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 1/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
En posant C le texte codé, T le texte et K la clé, on peut traduire ceci par la formule :
C = T + K [mod 26]
Exemple :
ABCDEFGHI 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
Texte
R E N D E Z V O U S A M I D I
17 04 13 03 04 25 21 14 20 18 00 12 08 03 08
Clé:
B O N J O U R
01 14 13 09 14 20 17
R+B E+O N+N D+J E+O Z+U V+R O+B U+O S+N A+J M+O I+U D+R I+B
17+01 04+14 13+13 03+09 04+14 25+20 21+17 14+01 20+14 18+13 00+09 12+14 08+20 03+17 08+01
Texte crypté :
S S A M C T L P I F J A C U K
18 18 26=0 [26] 12 28=2 45=19 [26] 37=11 [26] 15 34=8 [26] 31=5 [26] 09 26=0 [26] 28=2 [26] 20 09
[26]
Manipulation :
1) Taper le programme 1.
Dite de quel cryptage s’agit-il ?
En déduire le déchiffrage ?
2) Taper le programme 2.
Dite de quel cryptage s’agit-il ?
En déduire le déchiffrage ?
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 2/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
Programme 1 :
clear all
base = ['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'];
plain = input('the original word or sentence (small letters only) ...
','s');
i = 1;
n = input('how many shifts ? ... ');
if n > 26
n = mod(n,26);
end
flag = 0;
while i <= length(plain)
if ismember(plain(i),'A':'Z') == 1
fprintf('The input is not suitable to this code. \n')
flag = 1; %helps breaking the loop
pleno = 'Please restart the program.';
break
elseif isletter(plain(i)) == 1
y = strfind(base,plain(i));
z = y+n;
if z > 26
z = z - 26;
end
pleno(i) = base(z);
elseif isletter(plain(i)) == 0
if plain(i) == ' ' %lets space be space
pleno(i) = plain(i);
else
fprintf('The input is not suitable to this code. \n')
flag = 1;
pleno = 'Please restart the program.';
end
end
i = i+1;
if flag == 1 %breaking the loop if there are capital letters or numbers
in the input
break
end
end
fprintf('Result = %s',pleno)
fprintf('\n')
Programme 2 :
message=input('secret message:','s');
password=input('password:','s');
opp=input('decrypt(-1) or encrypt(1):');
password=password-97;
[notused size_of_message]=size(message);
[notused size_of_password]=size(password);
pos=1;
output=[];
for i=1:size_of_message
output(i)=message(i)+password(pos).*opp;
pos=pos+1;
if (pos>size_of_password);%
pos=1;
end
end
out=sprintf('the mesaage est :%s',output);
disp(out)
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 3/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
TP 2 : Réseau de Feistel
Rappel :
Les algorithmes à clé secrète réduite cherchent, bien sûr, à tendre vers la perfection. Et
la perfection, en cryptographie, c'est l'aléatoire : il faut que le message codé paraisse aussi
aléatoire que possible, pour limiter au minimum les risques d'une attaque par analyse du texte
chiffré, de ses redondances, etc...
Le problème est que, si l'on sait depuis longtemps construire des fonctions qui ont l'air
aléatoire, on ne savait pas avant les travaux de Feistel construire des bijections aléatoires. La
solution apportée par Horst Feistel, ingénieur chez IBM qui dirigea l'équipe qui conçut
l'algorithme de chiffrement DES, est très élégante : on suppose par exemple qu'on a une
fonction f "presque aléatoire" qui prend comme argument un mot de n bits, et renvoie un mot
de n bits (qui donne l'impression d'avoir été choisi au hasard). F n'est pas supposée bijective,
c'est-à-dire que deux mots différents peuvent avoir la même image par F (ceci signifie encore
que, si on dispose d'un mot de n bits chiffré par F, on ne peut pas retrouver le mot initial).
Principe :
Un algorithme utilisant un schéma de Feistel va procéder en chiffrant des blocs de 2n
bits, qu'on partage en 2, partie gauche G, partie droite D. L'image du bloc (G,D) par le schéma
de Feistel est le bloc (L,R), avec L=D, et R=G⊕F(D) ou ⊕désigne le "ou exclusif" bit à bit.
Cette transformation est cette fois bijective, car si on a un tel couple (L,R), on
retrouve (G,D) par D=L et G=R⊕F(L).
Manipulation :
1) Ecrire un programme en Matlab qui permet de chiffrer par un réseau de Feistel à deux
rondes (2 tours) un message constitué de quatre bits, en utilisant deux clés K1 et K2 (cas :
identiques et cas : non identiques). Voir l’effet dans les deux cas.
2) En déduire le programme qui permet de faire l’opération de déchiffrage, toujours à deux
rondes et à deux clés. Interpréter les résultats.
3) Augmenter le nombre de rondes à 4 et à 8. Quel est l’effet sur le cryptage. (Pensez à utiliser
une boucle).
4) Augmenter à présent la taille du message (utiliser un message par exemple texte) et le
nombre de rondes à quatre. Interpréter. En déduire le déchiffrage.
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 4/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 5/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 6/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 7/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 8/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
TP 4 : DES_Image
But :
On veut appliquer un cryptage symétrique_DES sur des images. Pour cela, on dispose
de certaines fonctions ;
Scalling, convert2bin, binary2dec, reshape, wkeep, DES-64bits, imshow.
Il est demandé donc de chiffrer une image en la découpant en bloc de 64bits.
Travail demandé :
encrypt_msg=[];
decrypt_msg=[];
Img=imread('images\Lena.jpg');
Data_Img=wkeep(Img,[64 64]);
figure(1),imshow(………………);
[row,col]=size(Data_Img);
Data=Scalling(Data_Img,………);
Data_binary=convert2bin(……………);
encrypt_msg(……,:)=DES(………………………….,'ENC',K);
encrypt_msg_dec(:,………)=Binary2Dec(encrypt_msg(………,:));
end
Chiffr=uint8(reshape(…………………………,[…………,…………]));
figure(2);imshow(Chiffr);
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 9/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
BUT :
On veut crypter un message (plaintext) en utilisant le AES128 et en utilisant la clé donnée
(key).
Sachant que le AES calcule des clés de rondes pour chiffrer, il est demandé de réaliser :
1) Ecrire une fonction qui permet de calculer les sous-clés (key_expansion) en s’inspirant de
l’exemple ci-dessous. On utilisera la 2eme méthode vue en cours.
2) Exécuter la fonction de cryptage AES 128bits (cipher) en s’inspirant de l’exemple.
3) En déduire la fonction de décryptage ?
plaintext=['A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O''P'];
key = ['1' '2' '3' '4' '5' '6' '7' '8' '9' '1' '2' '3' '4' '5' '6' '7'];
w = key_expansion (key, s_box, rcon);
ciphertext = cipher (plain, w, s_box, poly_mat,ind_matleft);
ciphertext = reshape(ciphertext,1,16);
ciphertext = char(abs(ciphertext-96))
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 10/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 11/12
Master II: Réseaux et Télécommunication TP : Cryptographie et Sécurité Réseaux
Dr. A. Seddiki & Dr. A. Ghaz Dept. de Télécommunication, Faculté de Génie Electrique, UDL SBA p. 12/12