Vous êtes sur la page 1sur 5

L’arithmétique modulaire

Avant de faire un exemple d’encryption RSA, il faut d’abord comprendre ce qu’est


le modulo. Cette fonction donne le résiduel d’une division. Par exemple, 46 divisé
par 17 égale 2 résiduel 12, donc:

46 (mod 17) = 12

Tout le monde pratique ce genre d’arithmétique sans même le réaliser, par exemple,
supposons qu’il est 22h et que vous devez régler votre réveil-matin de manière à
dormir 8 heures. Le calcul que vous faîtes intuitivement est le suivant:

22+8 (mod 12) = 6 car 30 divisé par 12 = 2 résiduel 6, donc vous mettrez votre
réveil à 6h00.

Ce qui est encore plus intéressant est d’ajouter un exposant x au premier terme, de
manière à obtenir l’expression 3^x (mod 17), si vous choisissez x de manière
aléatoire, la réponse aura une probabilité égale d’être n’importe quel chiffre
compris entre 0 et 17:

3^3 (mod 17) = 10


3^4 (mod 17) = 13
3^5 (mod 17) = 5
3^6 (mod 17) = 15
3^7 (mod 17) = 11
3^8 (mod 17) = 16

Comme vous pouvez voir, cet algorithme ne suit aucun « pattern » prévisible. Si


vous avez une équation de type C = b^e (mod m)

b = 9
e = 3
m = 23

C= 9^3 (mod 23) = 729 (mod 23) = 16

Car 729 = 31 * 23 + 16

Si b, e et m ne sont pas négatifs et que b est plus petit que m, il n’existera qu’une
seule solution, ce qui est une propriété intéressante pour un cryptographe. De plus,
l’opération est à sens unique, car même si je vous donne la réponse C (16) et m
(23), vous ne serez pas capable de deviner b et e.

Un autre concept mathématique à maîtriser pour comprendre le fonctionnement du


chiffrage RSA est le totient d’Euler (fonction Phi). Le totient d’Euler donne le
nombre de nombres entiers qui sont premiers relativement à N (c’est-à-dire dont le
plus grand dénominateur commun est 1).

Par exemple, si on prend N=9, la fonction Phi[9] = 6 car si on divise 9 par 1, 2, 4,


5, 7 et 8, la réponse n’est pas un nombre entier autre que 1. Il y a donc 6 chiffres
qui ne divisent pas neuf en un nombre entier différent de 1.

Cependant, si N est un nombre premier, Phi[N] sera égal à N-1 car en tant que
nombre premier, aucun chiffre ne peut diviser N en un nombre entier autre que 1.

Par ailleurs, si N est le produit de deux nombres premiers P et Q, Phi[N] = Phi[P] *


Phi[Q] = (P-1)*(Q-1).

La fonction du totient d’Euler. La ligne formée par les points en haut sont des
nombres premiers, le résultat étant n-1.

Finalement, le chiffrage RSA fait usage du théorême d’Euler:

1 = M^Phi[N] (mod N)

Par exemple, 3^Phi[9] (mod 9) = 3^6 (mod 9) = 729 (mod 9) = 1

Ce théorême fait le lien entre l’arithmétique modulaire et le totient d’Euler et est


crucial pour le chiffrage RSA.

Un exemple simplifié
La première étape consiste à ce qu’Alice construise sa boîte et la clé. Elle choisit
simplement deux nombres premiers P et Q. Pour mon exemple, j’utiliserai 11 et
17, mais il serait préférable d’utiliser des nombres beaucoup plus grands.

Alice calcule ensuite N = P * Q = 11 X 17 = 187

Puis elle calcule Z = (P-1) * (Q-1) = 10 X 16 = 160

Notez que Z est en fait équivalent à Phi[N] = Phi[187] = 160.

Alice doit ensuite choisir son exposant d’encryption E de manière à ce que ce


chiffre soit compris entre 1 et Z, et qu’il soit un nombre premier relativement à P et
Q. J’ai décidé d’utiliser E = 3 car si je divise P ou Q par 3, la réponse n’est pas un
nombre entier autre que 1.

Alice doit ensuite calculer son exposant de décryption D en utilisant la formule


suivante:

E*D (mod Z) = 1
3D (mod 160) = 1
En isolant D, on obtient sa valeur de 107. Donc D = 107

Notez que ce calcul peut être fait à partir du théorême d’Euler.

D = ((2*Z)+1)/e = ((2*160)+1)/3 = 107

Alice peut rendre publiques les valeurs de E et N, mais doit absolument garder
P, Q, Z et D secrets. Les valeurs de E et N constituent sa boite ouverte.

De son côté, Bob veut envoyer un message secret M à Alice, soit le chiffre 15.

Donc M = 15

Bob calcule la valeur encryptée de son message C = M^E (mod N) en utilisant les
valeurs transmises par Alice.

C = 15^3 (mod 187) = 9 Car 15^3 = 3375 = 18*187 + 9

Bob peut ensuite envoyer la valeur de C (9) à Alice de manière publique. Pour le
décrypter, Alice n’aura qu’à utiliser son exposant secret D:

M = C^D (mod N) = 9^107 (mod 187) = 15

Le message est décrypté. Notez que si un espion dispose des valeurs de E, N et C, il


lui est excessivement difficile de décrypter le message. Il faut être en mesure de
factoriser N, ce qui est très fastidieux.

Difficile, mais pas impossible. Il faut juste y dédier un puissant ordinateur qui
essayera toutes les combinaisons possibles, ce qui prendra des jours, voire des
années, lorsque les valeurs utilisées ont des centaines de chiffres. Tout ce qu’il faut
pour que le code soit indéchiffrable est de changer les valeurs de la clé dans un
intervalle de temps suffisamment court pour qu’aucun pirate n’ait le temps de les
calculer.

Exemples
1. p = 5, q = 11, et e = 3. Question 4. Combien valent N, ϕ(N), et d ?
Considérons alors le message M = 13 et les signatures S1 = 9 et S2 = 7.
Question 5. Laquelle de ces deux signatures correspond à M? Question 6.
Calculez (à la main) une signature valide pour le message M = 7.
Fastidieux, n’est-il pas ? Essayez de ruser pour ne pas avoir à calculer 26
produits modulo N.

2. Alice génère ses clés RSA en choisissant deux nombres premiers : p=11 et


q=13. Le module n=p×q=143. L'indicatrice d'Euler en n
ϕ(n)=(p−1)x(q−1)=120. Elle choisit 7 comme clé publique RSA e et calcule
sa clé privée RSA en utilisant l'algorithme d'Euclide étendu, ce qui lui
donne 103.

3. p = 7 et q = 19
n = 7 * 19 = 133
m = (p-1) * (q-1) = 6 * 18 = 108
Choix de e premier avec m PGCD(2,108) = 2 ; PGCD(3,108) = 3 ;
PGCD(4,108) = 4 ; PGCD(5,108) = 1 → e = 5
Détermination de d tel que de mod m = 1 Autrement dit, il existe k tel
que d = (1+km) / e k = 0 → d = 1/5 ; k = 1 → d = 109/5 ; k = 2 → d = 217/5
; k = 3 → d = 325/5 = 65
● Clé publique : (n = 133 ; e = 5)
● Clé privée : (n = 133 ; d = 65)

RSA : n = pq ; m = (p-1)(q-1) ; e et m premiers entre eux de mod m = 1


Clé publique : (e,n)
Clé privée : (d,n)
Cryptage : y = xe mod n ● Décryptage : x = yd mod n

n = 133 ; e = 5 ; d = 65

Supposons qu'on cherche à transmettre x = 6


Cryptage y = xe mod n = 65 mod 133 = 7776 mod 133 = 62
Décryptage x = yd mod n = 6265 mod 133 = 62 * 6264 mod 133 = 62 *
(622 ) 32 mod 133 = 62 * (3884)32 mod 133 = 62 * (3884 mod 133)32 mod
133 = 62 * 12032 mod 133 = 62 * 3616 mod 133 = 62 * 998 mod 133 = 62
* 924 mod 133 = 62 * 852 mod 133 = 62 * 43 mod 133 = 2666 mod 133 =
6.

Vous aimerez peut-être aussi