next up previous contents index
suivant: La fonction de codage monter: Codage RSA précédent: Codage RSA   Table des matières   Index

Le cryptage des nombres avec la méthode RSA

Tartanpion choisit deux grand nombres premiers p et q et pose n = pq, puis il choisit m un nombre premier avec (p - 1)(q - 1) (par exemple il prend pour m un nombre premier plus grand que (p - 1)/2 et que (q - 1)/2).
Il calcule l'entier u pour que um = 1 mod(p - 1)(q - 1) (d'après l'identité de Bézout il existe des entiers u et v tel que um = 1 + v(p - 1)(q - 1)). Puis il met dans l'annuaire les nombres u et n (quand n est grand p et q sont difficiles à obtenir à partir de n), le couple (u, n) est la clé publique alors que (m, n) est la clé secréte qui va servir à décoder le message : bien sûr p et q restent secrets, car sinon n'importe qui peut calculer m en fonction de u avec l'identité de Bézout.

La fonction de codage f est la suivante :
à un entier a inférieur à n = pq f fait correspondre au mod n.

La fonction de décodage g est la suivante :
à un entier b, g on fait correspondre bm mod n.

Pour montrer que g(f (a)) = a, on utilise le petit théorème de Fermat amélioré:
si p et q sont premiers, si n = pq si a est inférieur à n = pq alors :
ak(p-1)(q-1)+1 = a  mod n
On peut appliquer ce théorème ici car : - si a est premier avec n, p et q sont premiers, n = pq et donc a est premier avec p et est premier avec q donc :
av(p-1)(q-1) = 1v = 1  mod n (d'après le petit théorème de Fermat) ap-1 = 1  mod p et aq-1 = 1  mod q donc
av(p-1)(q-1) = 1v = 1  mod p et av(p-1)(q-1) = 1v = 1  mod q
donc
av(p-1)(q-1) = 1v = 1  mod n.
- si a n'est pas premier avec n, c'est que a est soit un multiple de p soit un multiple de q (puisque a < n = pq). Supposons que a soit un multiple de p, a est donc premier avec q puisque a < p*q et on a :
a = 0 mod p donc ak(p-1)(q-1)+1 = a = 0  mod p
aq-1 = 1  mod q car q est premier et a est premier avec q (th de Fermat), donc
ak(p-1)(q-1)+1 = a  mod q
Donc ak(p-1)(q-1)+1 - a est un multiple de p et de q donc est un multiple de n = pq (car p et q sont premiers).
on a donc bien :
g(f (a)) = g(au)  mod n = aum  mod n = av(p-1)(q-1)+1  mod n = a
Un exemple :
p = 123456791 et q = 1234567891
: n = p*q = 152415790094497781
$ \varphi$ = (p - 1)(q - 1) = 152415788736473100
m = 12345701 (m est un nombre premier et m ne divise pas $ \varphi$)
On cherche u en tapant $ \tt inv(m \% \varphi)$ on trouve :
(-36645934363466299) % 152415788736473100 et on a :
u = - 36645934363466299 + $ \varphi$ = 115769854373006801
Pour coder, on utilise la clé publique u et n et pour décoder, on utilise la clé secréte m et n.

Remarque
Pour passer d'un message à une suite de nombres, on groupe plusieurs caractères (car sinon on pourrait décrypter le message en utilisant des statistiques de fréquence des caractères en fonction de la langue), le groupement est l'écriture d'un nombre en une base donnée (256 ici correspondant au codage ASCII d'un caractère), par exemple, puisque asc("BONJOUR")=[66,79,78,74,79,85,82], si on groupe par 3, BONJOUR devient les nombres (66*256+79)*256+78=4345678, (74*256+79)*256+85=4869973, (82*256+0)*256+0 =5373952 qui seront transformés par f en 156330358492191937, 126697584810299952, 50295601528998788 car powmod(4345678,u,n)=15633035849219193 etc...
Pour décoder on applique à ces nombres la fonction g on a :
powmod(15633035849219193,m,n)=4345678 etc...


next up previous contents index
suivant: La fonction de codage monter: Codage RSA précédent: Codage RSA   Table des matières   Index
Documentation de giac écrite par Renée De Graeve