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.