L'algorithme RSA.

Øprésentation :

Les avantages offerts par le cryptage à clef publique entraîna tout naturellement la réalisation d’algorithmes suivant ce procédé. Si celui à empilement, de Merkle fut le premier du genre, le RSA (du nom de ses inventeurs Ron Rivest, Adi Shamir et Leonard Adleman, et datant de 1978) parut peu après. Son indéniable popularité provient de sa simplicité (du point de vue de sa réalisation comme de sa compréhension). Par ailleurs, même si sa sécurité n’est pas théoriquement démontrée, RSA résiste pour l’instant à toute les tentatives de craquage, ce qui suggère un certain niveau de confiance dans l’algorithme.

En fait, les clefs publiques et privées sont générées à partir de deux grands nombres premiers (plus de 100 chiffres). Retrouver le texte en clair à partir d’une des clefs est équivalent à la factorisation du produit des deux nombres premiers. Par conséquent le niveau de sécurité de RSA dépend directement de la difficulté de factoriser des grands nombres. 

ØGénération des clefs :

La première étape consiste à choisir deux nombres premiers p et q et d’en calculer le produit :

n = p * q

Ensuite, la clef de chiffrement e est choisie aléatoirement, de telle sorte que e et 

(p - 1)*(q - 1) soient premiers entre eux

Il reste alors à calculer la clef de déchiffrement d, qui vérifie :

d = e-1 mod ((p - 1)*(q - 1))

Ainsi :

e*d = 1 mod ((p - 1)*((q - 1))

d et e sont ainsi premiers entre eux.

Les nombres e et n forment la clef publique, le nombre d est la clef privée. p et q ne servent plus : ils peuvent être jetés, mais pas révélés.

Remarquons que pour le programme réalisé en Scheme on a choisi les nombres :

p=1234567891011121314151617181912139

q=2019181716151413121110987654451

n=2492816912877266687794240983917596973374166417784717890774280689

e=135791113151719212325272931

d=1672375233889116393189907035665861569376320879041961999959883771

ØChiffrement et déchiffrement d’un message.

Pour commencer, découpons le message m à crypter en blocs numériques ayant chacun une représentation unique modulo n. Ainsi, si p et q sont tous deux des nombres premiers de 100 chiffres, n aura tout juste moins de 200 chiffres et chaque bloc de message mi doit avoir juste moins de 200 chiffres. Le message chiffré c sera constitué de manière similaire de blocs ci d’à peu près la même longueur.

La formule de chiffrement est simplement :

ci = mi e mod n

Pour déchiffrer un message, prenons chaque bloc ci et calculons :

mi = cid mod n

Cette formule permet de retrouver le message de départ. En effet (toutes les opérations sont effectuées modulo n) :

ci d = (mi e) d = mied = mi k (p - 1) (q - 1) + 1 = mi * mi k (p - 1) (q - 1) = mi*1 = mi

Le message aurait évidemment pu être chiffré avec d et déchiffré avec e.

ØUn petit exemple.

Afin de clarifier les idées voici un exemple simple :

Prenons p = 47 et q = 71, alors

n = p*q = 3337

La clef de chiffrement e ne doit pas avoir de facteurs communs avec :

(p - 1)*(q - 1) = 46*70 = 3220

Choisissons e aléatoirement, ... disons 79. Dans ce cas :

d = 79-1 mod 3220 = 1019

Ce nombre peut être calculé à l’aide de l’algorithme d’Euclide étendu (voir II).

Il nous reste alors à publier e et n, à oublier p et q, et à garder d secret.

Pour chiffrer le message : m = 688232687966683

procédons d’abord à son découpage en blocs de trois chiffres (c’est le maximum dans ce cas). On obtient :

m1 = 688

m2 = 232

m3 = 687

m4 = 966

m5 = 668

m6 = 3

Le premier bloc est chiffré par : 68879 mod 3337 = 1570 = c1

En effectuant la même opération pour tous les blocs, il vient :

c = 1570 2756 2091 2276 2423 158

Le déchiffrement s’effectue de la même manière, mais en utilisant la clef de déchiffrement. Donc :

15701019 mod 3337 = 688 = m1

Le reste du message s’obtient par la même méthode.

ØAvantages et inconvénients de l’algorithme RSA.

ØAvantages.

· Un des gros avantages du RSA est d’être un algorithme de chiffrement à clef publique. Il échappe ainsi aux inconvénients majeurs des codages à clef secrète, notamment la transmission des clefs (voire la présentation générale du cryptage pour plus de détails).

· De part sa sécurité, RSA est principalement utilisé pour transmettre les clefs des algorithmes à clef secrète comme le DES ou pour les signatures, ce qui atténue le problème de la transmission des clefs pour de tels algorithmes.

· RSA est actuellement considéré comme incassable en un temps ou avec des moyens raisonnables. 

ØInconvénients.

· Un premier problème réside dans le choix des deux nombres premiers p et q. Il est en effet préférable de ne pas choisir ces nombres sans précautions. De fait, les concepteurs du système RSA ont donné un certain nombre de règles qu’il est conseillé de suivre lorsqu’il s’agit de choisir le quadruplet (p, q, d, e), car un mauvais choix de ces paramètres peut rendre le système de codage relativement vulnérable et cassable par un bon algorithme de factorisation spécialisé.

Choix de p et q :

- prendre p et q de tailles sensiblement différentes, mais pas trop.

- choisir des nombres premiers p et q "sûrs", de la forme 2x + 1, avec x premier, et tel que x - 1 possède de grands facteurs premiers.

Choix de d et e :

- choisir d en premier, tel que d et (p -1)*(q - 1) soient premiers entre eux.

- choisir ensuite e et vérifier que e >> log2 (n).

- ne retenir e que si n et e sont premiers entre eux.