Spécialité terminale S La cryptographie à clés publiques : le

publicité
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
Téléchargement