Spécialité terminale S La cryptographie à clés publiques : le système RSA I Objectifs Présenter un système de cryptage récent. En faire une implémentation sous le tableur Excel. II Propriété fondamentale n = pq est le produit de deux entiers premiers p et et q distincts. On pose m = (p – 1)(q – 1) et on note c un nombre premier avec m. On note x un entier naturel. a) Démontrer qu'il existe des entiers d et k tels que : cd = mk + 1 (c'est-à-dire cd ≡ 1 [m]) b) Cas où x est non divisible par p. Démontrer que xp-1 ≡ 1 [p]. En déduire que xkm ≡ 1 [p], puis que xcd ≡ x [p] Cas où x est divisible par p. Démontrer que xcd ≡ x [p]. c) Démontrer de façon analogue que pour tout entier naturel x, xcd ≡ x [q]. d) En déduire que pour tout entier naturel x, xcd ≡ x [n]. III Principe du cryptage • Pour chiffrer un message (cartes bancaires, internet, …), on choisit deux nombres premiers p et q très grand et on calcule n = pq. On pose m = (p – 1)(q – 1). On cherche deux entiers naturels c et d tels que cd ≡ 1 [m]. • Les messages x seront des entiers naturels appartenant à [0;1;….;n – 1]. Le codage de ce message consiste à calculer C(x) ≡ xc [n]. Le décodage consiste à calculer D(y) ≡ yd [n]. On a bien D(C(x)) ≡ xcd ≡ x [n]. • Pour chiffrer un message on a besoin de connaître c et n. 1 Spécialité terminale S La cryptographie à clés publiques : le système RSA Le couple (n;c) est appelé la clé publique car elle est connue de tous et repertoriée dans un annuaire. • Pour déchiffrer, il faut connaître d et n. d est appelé la clé privée car elle n'est connue que de la personne qui reçoit le message codé. IV Notes • Les trois lettres RSA sont les initiales de Rivest, Shamir, Adleman qui ont mis au point cet algorithme en 1978. • Les nombres premiers p et q doivent demeurés cachés car leur connaissance entraîne celle de m = (p – 1)(q – 1), puis celle de d en résolvant l'équation de Bézout : cd – km = 1 (ce qui est possible car c est dans l'annuaire). Le sytème RSA 1 024 bits correspond à un nombre n = pq de l'ordre de 21024 ≈ 10308 s'écrivant avec 309 chiffres décimaux. V Application 1 Alexandre veut choisir une clé publique (n;c) et sa clé privée d. Il prend p = 5, q = 11 et donc n = 55 (p et q sont choisis petits, contrairement à la réalité, pour la simplicité des calculs). a) Démontrer qu'il peut choisir c = 3 et d = 27. b) Les lettres de l'alphabet sont chiffrés par : A B C D …. Y Z 01 02 03 04 …. 25 26 Paul qui connait la clé publique d'Alexandre, crypte le message : "VIVE LA CRYPTOGRAPHIE" et lui envoie. Quel message crypté Alexandre reçoit-il ? Comment le décode-t-il ? c) A l'aide du tableur Excel, implémenter les fonctionnalités suivantes : • Vérifier que les couples (c;n) et (d;n) donnés sont corrects. • A l'aide de formules Excel implémenter le codage et le décodage d'un message. 2 Spécialité terminale S La cryptographie à clés publiques : le système RSA On pourra utiliser les fonctions Excel suivantes : • CODE() : codage ASCII d'un caractère • CAR() : fournit le caractère alphabétique correspondant à un code ASCII • MOD() : donne le reste de la division euclidienne d'un nombre par un autre. d) A quel problème est-on confronté lors de l'implémentation du décodage ? Proposer alors deux algorithmes à implémenter avec deux procédures écrites en Visual-Basic qui contournent le problème : une de codage et une de décodage. V Application 2 Lise a pour clé publique (n;c) avec n = pq, p = 3, q = 13. a) Démontrer qu'elle peut choisir c = 29 et d = 5. b) Elle reçoit le message crypté suivant de Julie : 28 01 12 21 11 12 03 28 05. Décrypter ce message. 3 Spécialité terminale S La cryptographie à clés publiques : le système RSA CORRECTION II Propriété fondamentale a) c et m étant premiers entre eux, d'après le théorème de Bézout il existe des entiers d et l tels que cd + lm = 1 Soit cd = km + 1 en prenant k = -l. b) Si x est non divisible par p, alors le petit théorème de Fermat assure que : xp-1 ≡ 1 [p]. Or xm = x(p-1)(q-1) = (x(p-1))(q – 1) ≡ 1q-1 ≡ 1 [p] Donc xkm ≡ 1k ≡ 1 [p]. Et xcd = xkm×x ≡ x [p] Si x est divisible par p, alors x ≡ 0 [p] et donc xcd ≡ x [p]. Conclusion, pour tout x, xcd ≡ x [p]. c) p et q ayant un rôle symétrique, le résultat est immédiat. d) xcd – x est divisible par p et par q. Or comme p et q sont premiers entre eux (puisque ce sont deux nombres premiers) alors xcd – x est divisible par leur produit pq. Soit : xcd ≡ x [n]. V Application 1 a) m = (p – 1)(q – 1) = 4×10 = 40 Si c = 3 et d = 27. 3 et 40 sont premiers entre eux. cd = 3×27 = 81 ≡ 1 [40] Donc le choix de c et d est valable. b) La lettre "V" est codée par 33 car 223 ≡ 33 [55]. La lettre "I" est codée par 14 car 93 ≡ 14 [55]. Etc …. Le message codé est alors : 33 14 33 15 23 01 27 02 05 26 25 20 13 02 01 26 17 14 15 4 Spécialité terminale S La cryptographie à clés publiques : le système RSA CORRECTION c) • La vérification des couples (c;n) et (d;n) est faite dans la cellule I4 par la formule :=SI(MOD(E4*E5;(B4-1)*(B5-1))=1;"OK";"KO") • La lettre en cellule B10 (V dans l'exemple) est chiffrée en B11 par la formule : =SI(B10="";"";CODE(B10)-64) et ce nombre est cryptée avec la clé publique RSA en cellule B12 par la formule : =SI(B11="";"";MOD(B11^$E$4;$B$4*$B$5)) • Le nombre à déchiffrer en cellule B14 (28 dans l'exemple) est décryptée avec la clé secrète RSA en cellule B15 par la formule : =SI(B14="";"";MOD(B14^$E$5;$B$4*$B$5)) et ce nombre décrypté est traduit par la lettre correspondante en cellule B16 par la formule : =SI(B15="";"";CAR(B15+64)) d) Excel ne parvient à décrypter les nombres différents de 1 avec d = 27. En effet, y27 est un nombre "trop grand" pour le tableur. Le même problème peut se produire pour le cryptage si on prend pour c une valeur assez grande. 5 Spécialité terminale S La cryptographie à clés publiques : le système RSA CORRECTION Grace à deux procédures Visual-Basic, on peut contourner ce problème : A l'aide d'une boucle, on peut évaluer par étape xc [n] sans calculer xc explicitement. Algorithme de cryptage RSA : Données : n,c : entiers (constituant la clé RSA de codage) i,j : entier de boucle r : entier lettre_codee : lettre de l'alphabet msg : message à crypter msg_crypte : message crypé Traitement Pour i = 1 à longueur(msg) Faire r1 Pour j = 1 à c Faire lettre_codee code_ascii(msg(j)) - 64 r Mod(r*lettre_codee,n) j Suivant msg_crypte(i) r i Suivant Procédure Visual Basic correspondante Public Sub code_RSA() n = Cells(4, 2) * Cells(5, 2) For i = 2 To 2000 If Cells(10, i) = "" Then Exit For End If r=1 For j = 1 To Cells(4, 5) r = (r * (Asc(Cells(10, i)) - 64)) Mod n Next j Cells(11, i) = r Next i End Sub 6 Spécialité terminale S La cryptographie à clés publiques : le système RSA CORRECTION Algorithme de décryptage RSA : Données : n,d : entiers (constituant la clé RSA de décodage) i,j : entier de boucle r : entier msg : message à décrypter msg_decrypte : message crypé Traitement Pour i = 1 à longueur(msg) Faire r1 Pour j = 1 à d Faire r Mod(r*msg(i),n) j Suivant msg_decrypte(i) lettre_ascii(r + 64) i Suivant Procédure Visual Basic correspondante Public Sub decode_RSA() n = Cells(4, 2) * Cells(5, 2) For i = 2 To 2000 If Cells(13, i) = "" Then Exit For End If r=1 For j = 1 To Cells(5, 5) r = (r * Cells(13, i)) Mod n Next j Cells(14, i) = Chr(r + 64) Next i End Sub V Application 2 a) On vérifie que cd = 29×5 = 145 ≡ 1 [24] b) 28 01 12 21 11 12 03 28 05 se décode en SALUTLISE 7