Le projet choisit : RSA (Ronald Rivest, Adi Shamir et Leonard Adleman):
L’algorithme RSA est un algorithme de cryptage asymétrique qui se base sur les clefs
publique (e, n) et privée (d, n), afin de trouver ces clefs deux utilisateurs négocie le p et le q
qui seront des nombres premiers positive, âpres on calculera le n = p * q et le phi(n) = p-1 * q1
-La clé publique e est choisit selon les conditions suivantes : 3<e<phi(n) et
phi(n))=1
-La clé prive d est choisit si on aura un inverse de e mod phi(n)
- Pour chiffrer
pgcd(e,
e*d = 1 mod (phi(n))
C = C e mod (n)
-Pour déchiffrer
M = Md mod(n)
Question 1 : Donner l’algorithme de cryptage et de décryptage RSA d’un message M sachant
les clés.
//Var global
Entier p ;
Entier q ;
Entier n ;
Entier t ;
//phi(n)
Grand Entier e [50] ;
//pour avoir le choix de clefs à prendre
Grand Entier d [50] ;
Entier msg [5000000] ;
Entier cipher [5000000] ;
Entier cipher_tmp [5000000] ;
Entier m [5000000] ;
Entier cle ;
Entier i ;
Entier j ;
//fonctions et procédures
Entier mod (entier) ;
Entier pgcd (entier) ;
Procédure key_e ;
//indice de la cle à prendre
Procédure key_d ;
Cryptage
Prod encrypt ()
Entier tmp ;
Entier C ;
i=0;
tant que (msg[i] != ‘\0’ )
tmp=msg[i] ;
tmp=tmp-96 ;
C= 1 ;
pour (j=0 jusqu’à e [cle] ; j++)
C =C*tmp ;
C =C % n ;
cipher_tmp[i] = C ;
tmp = C + 96 ;
cipher[i] = tmp ;
i++ ;
cipher[i] = -1 ;
//marquer la fin
écrire (‘votre message cryptée : ’) ;
pour (i=0 ;cipher[i] != -1 ;i++)
écrire (cipher[i]) ;
Décryptage
prod decrypt ()
Entier tmp ;
Entier M ;
i=0 ;
tant que (cipher[i] != -1)
tmp= cipher_tmp[i] ;
M=1;
pour (j=0 jusqu’à d [cle] ; j++)
M =M*tmp ;
M =M % n ;
tmp = M + 96 ;
cipher[i] = tmp ;
i++ ;
m [i] = -1 ;
//marquer la fin
écrire (‘votre message décryptée : ’) ;
Pour (i=0 jusqu’à m[i] != -1 ; i++)
écrire (m[i]) ;
Question 2 : Préciser les structures de données nécessaires
-des entiers exemples : i, j, tmp…
-des tableaux (list) de chaine de caractères exemples : msg, cipher, cipher_tmp, m
-des tableaux d’entier exemples : e et d
Question 3: Identifier les paramètres clés des algorithmes qui vont directement ou
indirectement influer sur la complexité
Direct :
-la taille du message à chiffrer et ensuite déchiffrer va influer sur la complexité temporaire et
spatiale.
-les clefs publique et privée qu’on utilise vont influez sur la complexité temporaire
Indirect :
Comme le choix des clefs e et d est dépend de phi(n) qui est a son tour dépend de p et q on
pourra déduire que les variables suivantes vont influer sur la complexité de façon indirect :
-phi (n) sur la complexité temporaire.
-p sur la complexité temporaire.
-q sur la complexité temporaire.
p et q peuvent influer un petit peu sur la complexité spatial car la taille des clefs varie de 4 à
32 oct dépendamment de la grandeur de p et q
Question 4 : Analyse et calculer la complexité temporelles et spatiales des algorithmes.
Cryptage
Complexité Temporaire :
La complexité temporaire dépend de la taille du message et de la taille de la cle publique de cryptage
(e) comme on la vu dans la question précédente.
On peut voir dans la procédure de cryptage que la boucle (pour j=0 à e [cle]) de taille dépendante de
e est imbrique dans la boucle (tant que msg[i] != ‘\0’) dépendante de la taille du message ‘length’.
hors pour chaque itération de la 2eme boucle qui dépend de la taille du message on effectue un
nombre d’opération qui sera variable de la taille de la cle publique e
Alors la complexité temporaire de cette algorithme est d’ordre O(e*length)
Complexité Spatiale:
On a comme information que :
Int 4oct
Char 1oct
Tableau (taille du type de son élément)* taille du tableau
tmp
4oct
C
4oct
i
4 oct
msg
1 oct *5000000=5 000 000oct
j
4oct
e
32 oct * 50 = 1600 oct
n
4 oct
Cipher_tmp
1 oct *5 000 000=5 000 000oct
Cipher
1 oct *5 000 000=5 000 000oct
Alors on aura besoin de 15 001 620 oct pour faire fonctionner notre procédure qui est de ≈ 15 MO
Si les tableaux msg, cipher_tmp… auront une allocation dynamique. Alors la complexité spatiale de
cet algorithme sera d’ordre O (length) mais comme ce n’est pas notre cas alors on aura la valeur 15
MO
Décryptage
Complexité Temporaire :
Comme dans l’algorithme de cryptage on aura 2 boucles imbriquées, la première qui dépend
de la taille du message chiffrée de taille ‘length’ et l’autre qui dépendra de la taille de la cle
privée de déchiffrement d.
Alors la complexité temporaire sera d’ordre O (length * d)
Complexité Spatiale:
tmp
4oct
m
4oct
Cipher
5 000 000oct
Cipher_tmp
5 000 000oct
j
4oct
d
1600 oct
m
5 000 000oct
Alors la complexité spatiale de cet algorithme est de 15 MO ou O (length) si les tableaux sont
dynamiques
Question 5 : Implémenter les algorithmes dans le langage de votre choix.
-vous trouverez 2 fichiers dans le compte rendu : RSA.c et RSA++.c
Le 1ere demande à l’utilisateur de donner le message et de sélectionner la combinaison de clefs de
cryptage et décryptage
Le 2eme ou on demande à l’utilisateur de donner la taille du message et la combinaison de clefs de
cryptage et décryptage et donne aussi le temp d’exécutions
Dans ces captures d’écran on donnera le 1ere algorithmes
Test de l’algorithme :
Question 6 : Analyser la complexité pratique en présentant les différents graphes qui illustrent
l’évolution des temps d’exécution en fonction des différents paramètres.
-Même taille length=500 000 avec différents clefs pour p=7 et q=11
Numéro de la
combinaison
des clefs
Temp
d’exécutions
du cryptage
(ms)
Temp
d’exécutions
du décryptage
(ms)
Num 1
7----43
Num2
11----11
Num3
13----37
Num 11
43-----7
Num 12
47----23
Num 9
37--13
Num 13
49----49
Num 15
59----59
31
62
78
281
312
250
328
391
281
62
234
31
141
78
328
390
-Même taille length= 100 000 avec différents clefs pour p=13 et q= 2969
Numéro de la
combinaison
des clefs
Temp
d’exécutions
du cryptage
(ms)
Temp
d’exécutions
du décryptage
(ms)
Num1
5--28493
Num 2
11--19427
Num 8
29--8597
Num 15
59---1811
Num 34
125---3989
Num 45
163---35179
0
15
31
78
172
218
40824
27852
12610
2639
5834
50398
On voit bien qu’on ayant la taille du message fixe et faire varier les clefs de cryptage et décryptage on
a la complexité temporaire qui évolue de façon linaire O(e) pour le cryptage et O(d) pour le
décryptage et cela confirme la complexité temporaire théorique calculée précédemment
On remarque aussi que lorsque p et q deviennent plus grand on aura des clefs qui seront aussi
grande se qui prouve que p et q influe aussi sur la complexité temporaire indirectement en influent
sur le pi(n) qui influe sur la tailles des clefs
-Même p=13, q=2969 pour la combinaison de cle Num 15 (e=59---d=1811) et on varie la taille du
message length
Tailles
Temp
d’exécutions du
cryptage
Temp
d’exécutions du
décryptage
1000
5000
10 000
50 000
100 000
500 000
1 000 000
0
0
15
47
78
390
812
31
140
250
1313
2636
13086
26156
On voit que dans ce cas lorsque les grandeurs des clefs est fixe et que la taille du message varie la
complexité temporaire du cryptage et décryptage évolue linéairement en fonction de la taille du
message ‘length,’ alors la complexité des deux procédures deviens O (length) et cela confirme la
complexité temporaire théorique calculée précédemment.