Crypt RSA
Crypt RSA
Abderrahmane Nitaj
http://www.math.unicaen.fr/~nitaj
Contenu i
Préface 1
i
ii TABLE DES MATIÈRES
2.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1.2 Définitions et propriétés . . . . . . . . . . . . . . . . . . . . . 26
2.2 Cryptanalyse de RSA par les fractions continues . . . . . . . . . . . . 37
2.2.1 L’attaque de Wiener . . . . . . . . . . . . . . . . . . . . . . . 38
Bibliographie 73
Préface
La cryptographie moderne est basée sur les mathématiques pour sécuriser l’infor-
mation. On distingue deux types de protocoles cryptographiques : la cryptographie
à clé privée et la cryptographie à clé publique. La cryptographie à clé publique à été
introduite par Whitfield Diffie et Martin Hellman en 1976, marquant ainsi la nais-
sance de la cryptographie moderne. Le principe de la cryptographie à clé publique
repose sur deux types de clés : une clé publique et une clé privée. Pour chiffrer un
message, on utilise la clé publique de son destinataire. Alors, seul le destinataire peut
déchiffrer le message reçu avec sa propre clé privée. En 1978, Ronald Rivest, Adi
Shamir et Leonard Adleman ont proposé le premier cryptosystème à clé publique,
appelé RSA. Ce cryptosystème est devenu le plus répandu dans le monde car il est
facile à réaliser mais très difficile à casser. En effet, sa sécurité repose sur l’un des
problèmes les plus difficiles en mathématiques : la factorisation des grand nombres.
Dans ce travail, nous introduisons les principes généraux du cryptosystème RSA
ainsi que certaines attaques permettant de le casser, si les paramètres de sécurité sont
mal choisis ou s’il vérifient des relations permettant à un attaquant d’en tirer profit.
Dans le chapitre 1, nous donnons les principes généraux du cryptosystème RSA et
nous présentons quelques attaques élémentaires permettant de le casser. Dans le
chapitre 2, nous présentons une introduction à la théorie des fractions continues
et leur utilisation pour attaquer le cryptosystème RSA dans certains cas. Dans
le chapitre 3, nous présentons quelques aspects de la réduction des réseaux, plus
précisément l’algorithme LLL et son utilisation pour attaquer le cryptosystème RSA
grâce à la méthode de Coppersmith.
Dans ce travail, la plupart des résultats sont illustrés par des algorithmes pro-
grammés à l’aide des systèmes de calcul Maple 12 et Magama dont un calculateur
1
2 TABLE DES MATIÈRES
Introduction au cryptosystème
RSA
Celui qui n’aime pas gravir les montagnes, vivra toute sa vie dans
les trous.
Abou Al Qasim Achabi
YK @ ª È AJ.m.Ì '@ Xñª I. m' B áÓ ð
. Q®mÌ '@ áK. Që YË@ . K
ñK @
úG. AË@ Õæ A®Ë@ .
Avant tout, pour utiliser le cryptosystème RSA, chacun des intervenants A et B doit
fabriquer son propre module RSA. L’algorithme 1 peut être alors utilisé.
3
4 CHAPITRE 1. INTRODUCTION AU CRYPTOSYSTÈME RSA
h t t+1 i
Comme p et q sont dans l’intervalle 2 2 , 2 2 , alors on a
Maple 1.1.1.
Magma 1.1.2.
Programme Commentaire
alors on a : s
Y
φ(n) = pxi i −1 (pi − 1).
i=1
Maple 1.1.4.
Dans Maple 12, la fonction φ est tout simplement phi. Attention, pour calculer
φ(N ), Maple est obligé de factoriser N , ce qui peut être très difficile si N est du
type module de RSA.
Programme Commentaires
Avec Maple 12, l’algorithme 2 peut être écrit comme ceci où on suppose que la
procédure 1.1.1 a été exécutée.
Programme Commentaires
Maple 1.1.8.
8 CHAPITRE 1. INTRODUCTION AU CRYPTOSYSTÈME RSA
Maple 1.1.10.
Avec Maple 12, l’algorithme 4 qui permet de déchiffrer un message C peut être le
suivant.
Programme Commentaires
Magma 1.1.11.
Avec Magma, l’algorithme 4 qui permet de déchiffrer un message C peut être le
suivant.
Programme Commentaires
C ≡ M eB (mod NB ), S = C dA (mod NA ).
Maple 1.1.12.
Avec Maple 12, l’algorithme 5 qui permet de chiffrer et signer un message C peut
être le suivant.
Programme Commentaires
Magma 1.1.13.
Avec Magma, l’algorithme 5 qui permet de chiffrer et signer un message C peut être
le suivant.
Programme Commentaires
Maple 1.1.14.
1.1. PRINCIPE DE RSA 11
Avec maple 12, on peut alors vérifier la signature avec un programme simple.
Programme Commentaires
aφ(N ) ≡ 1 (mod N ).
où x̄ désigne la réduction de x modulo N . Si aai = aaj , alors a(ai −aj ) ≡ 0 (mod N ),
et donc ai = aj puisque pgcd(a, N ) = 1 et |ai − aj | < N . Ainsi, on a
a1 , a2 , · · · , aφ(N ) = aa1 , aa2 , · · · , aaφ(N ) .
Qφ(N )
De plus, pour chaque i, on a pgcd(ai , N ) = 1. Donc le produit i=1 ai est inversible
modulo N , ce qui donne
aφ(N ) ≡ 1 (mod N ).
Caractère a A b z 0 1 2 ”espace” à +
Code 097 065 098 122 048 049 050 32 224 43
Maple 1.2.1.
1.2. UN EXEMPLE D’UTILISATION DE RSA 13
Dans Maple 12, la fonction qui transforme un caractère en valeur numérique est
convert(”texte en caractères”, bytes). Inversement, la fonction qui transforme
une liste de valeurs numériques en texte est convert([v1,v2,...,vn],bytes).
Programme Commentaires
Magma 1.2.2.
Dans Magma, la fonction qui transforme un caractère en valeur numérique est Bi-
naryString(”texte en caractères”) ou BString(”texte en caractères”). In-
versement, la fonction qui transforme un code ASCII n en caractère est CodeToS-
tring(n). Voici un exemple
Programme Programme
s:="Je suis à c^
oté" ; <--- Le texte
s; <--- Son affichage
t:=BString(s); <--- Transformation en code ASCII
t; <--- On obtient [74, 101, ..., 169]
l:=#t; <--- Longueur de la liste
u:=CodeToString(t[1]); <--- Transformation en texte
for i:=2 to l do <--- Formation du texte
u:=u*CodeToString(t[i]);
end for;
u; <--- Affichage du texte Je suis à c^
oté
1.2.2 L’exemple
Dans cette partie, on exécute en détail un exemple de l’utilisation du cryptosystème
RSA. On va chiffrer, puis déchiffrer le message suivant
On commence écrire le programme qui sera exécuté par Maple. La fonction seq
permet de créer une liste de valeurs et la fonction nops(liste) donne le nombre de
termes dans son argument (liste).
Maple 1.2.3.
14 CHAPITRE 1. INTRODUCTION AU CRYPTOSYSTÈME RSA
Programme
retart:
t := 100:
x1 := round(2.0^((1/2)*t)):
x2 := round(2.0^((t+1)*(1/2))):
m1 := (rand(x1 .. x2))():
p := nextprime(m1):
m2 := (rand(x1 .. x2))():
q := nextprime(m2):
N := p*q:
phi := (p-1)*(q-1):
e := (rand(3 .. phi))():
while gcd(e, phi) <> 1 do e := (rand(3 .. phi))() end do:
d := modp(1/e, phi):
message:="Cette semaine, je suis à Oujda. Je pars le 22 mai à 13h":
listeclaire:= convert(message, bytes):
listecrypte:=[seq(modp(listeclaire[k]&^e,N),k=1..nops(listeclaire))]:
listedecrypte:=[seq(modp(listecrypte[k]&^d,N),k=1..nops(listecrypte))]:
messageoriginale:=convert(listedecrypte, bytes):
listeclaire-listedecrypte;
La dernière ligne permet de vérifier que le message de départ et le message décrypté
sont identiques. La différence listeclaire-listedecrypte doit donner une liste de zéros.
Magma 1.2.4.
Programme
t:=100;
x1:=Round(2.0^(t/2));
x2:=Round(2.0^((t+1)/2));
m1:=Random(x1,x2);
p:=NextPrime(m1);
m2:=Random(x1,x2);
q:=NextPrime(m2);
N:=p*q;
phi:=(p-1)*(q-1);
e:=Random(3,Round(phi/2));
while(GCD(e,phi) gt 1) do
e:=Random(3,Round(phi/2));
end while;
1.3. CRYPTANALYSES ÉLÉMENTAIRES DE RSA 15
d:= InverseMod(e,phi);
message:="Cette semaine, je suis à Oujda. Je pars le 22 mai à 13h";
listeclaire:= BString(message);
l:=#listeclaire;
listecrypte:= AssociativeArray();
for k:=1 to l do
listecrypte[k]:=Modexp(listeclaire[k],e,N);
end for;
listedecrypte:= AssociativeArray();
for k:=1 to l do
listedecrypte[k]:=Modexp(listecrypte[k],d,N);
end for;
u:=CodeToString(listedecrypte[1]);
for i:=2 to l do
u:=u*CodeToString(listedecrypte[i]);
end for;
u;
Démonstration. Supposons que ϕ(N ) est connu. Ainsi, on dispose d’un système de
deux équations en p et q :
pq = N,
p + q = N + 1 − ϕ(N ),
p2 − (N + 1 − ϕ(N ))p + N = 0.
16 CHAPITRE 1. INTRODUCTION AU CRYPTOSYSTÈME RSA
On obtient ainsi
p
(N + 1 − ϕ(N ))2 − 4N
N + 1 − ϕ(N ) +
p = ,
p 2
N + 1 − ϕ(N ) − (N + 1 − ϕ(N ))2 − 4N
q = .
2
Maple 1.3.2.
Avec Maple 12, cette attaque peut être programmée comme dans l’exemple suivant
où on utilise la fonction solve qui permet de résoudre une équation.
Programme Commentaires
C1 ≡ M e 1 (mod N ),
C2 ≡ M e 2 (mod N ),
e1 x2 |e1 x1 − e2 x2 | 1 1
− = = < 2.
e2 x1 x1 e 1 x1 e1 2x1
Maple 1.3.5.
Avec Maple 12, cette attaque peut programmée comme dans l’exemple suivant.
Programme Commentaires
Magma 1.3.6.
Avec Maple 12, cette attaque peut programmée comme dans l’exemple suivant.
La fonction XGCD(a,b) retourne trois nombres entiers, g, x et y vérifiant g =
pgcd(a, b) = ax + by.
18 CHAPITRE 1. INTRODUCTION AU CRYPTOSYSTÈME RSA
Programme Commentaires
avec pi = N
Ni
et Mi ≡ p−1
i (mod Ni ).
k k
X X pj
x ≡ ai pi Mi + aj pj Mj ≡ ai + aj Mj Ni × ≡ ai (mod Ni ).
j6=i j6=i
Ni
1.3. CRYPTANALYSES ÉLÉMENTAIRES DE RSA 19
Ceci montre que x est solution du système. Si x0 est une autre solution du système
avec 0 ≤ x0 < N , alors pour chaque i, 1 ≤ i ≤ k, on a
x0 − x ≡ 0 (mod Ni ).
x0 − x ≡ 0 (mod N )
Maple 1.3.8.
Dans Maple, le théorème des restes chinois est la fonction
Programme Commentaires
Magma 1.3.9.
Dans Magma, le théorème des restes chinois est la fonction
Programme Commentaires
Démonstration. Supposons que le même message clair M est chiffré k fois par
Ci ≡ M e (mod Ni ),
x ≡ Ci (mod Ni ),
avec x < N . Si on suppose que M e < N , alors x = M e en tant que nombres entiers.
Ainsi
1
M = xe ,
ce qui donne le message clair M .
Maple 1.3.11.
Pour illustrer cette attaque, on teste un exemple avec e = 3 et k = 4 dans Maple.
Programme Commentaires
Magma 1.3.12.
Pour illustrer la même attaque avec Magma, on teste le même exemple avec e = 3 et
k = 4. La fonction Random(b) retourne un nombre entier aléatoire de l’intervalle
[0, b].
1.3. CRYPTANALYSES ÉLÉMENTAIRES DE RSA 21
Programme Programme
h √ i
k = xk − 2 N
h √ i
= p+q− 2 N
√
< p+q−2 N +1
(p + q)2 − 4N
= √ +1
p+q+2 N
(p − q)2
= √ +1
p+q+2 N
√
c2 N
< √ +1
2 N
c2
< + 1.
2
Il en résulte que le nombre de tests est assez petits si c est une constante qui ne
dépend pas de N .
Maple 1.3.14.
On teste maintenant la méthode de Fermat avec Maple 12 sur des modules RSA
N = pq de taille t = 100, avec |p − q| < cN 1/4 . Pour cela, on utilise le programme
suivant qui fabrique deux nombres premiers p et q avec
Magma 1.3.15.
On teste ausi la méthode de Fermat avec Magma sur des modules RSA N = pq de
taille t = 100, avec |p − q| < cN 1/4 . Pour cela, on utilise le programme suivant qui
fabrique deux nombres premiers p et q avec
Programme Programme
2.1.1 Introduction
√
On considère le nombre x = 3+ 10 ≈ 6.162277..., solution de l’équation x2 −6x−1.
On peut alors écrire x2 = 6x + 1 et donc x = 6 + x1 . En recommençant le processus,
on obtient
1
x=6+ ,
1
6+
1
6+
1
6+
···
Une telle fraction, qui peut être
√ finie, s’appelle une fraction continue,
√ ici, c’est la
fraction continue de x = 3 + 10. On note plus simplement 3 + 10 = [6, 6, 6, · · · ].
On peut aussi prendre un nombre fini d’éléments 6. On obtient ainsi
1 37
[6] = 6, [6, 6] = 6 + = ≈ 6, 166666...,
6 6
25
26CHAPITRE 2. CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES
1 228
[6, 6, 6] = 6 + = ≈ 6.162162...,
1 37
6+
6
1 1405
[6, 6, 6, 6] = 6 + = ≈ 6.162280...,
1 228
6+
1
6+
6
Chacune des fractions 6, 37 , 228 , 1405 , · · · s’appelle une réduite ou convergentes. On
6 37 228
observe que ces fractions vérifient
37 228 1405
|6 − x| > −x > −x > −x .
6 37 228
1
x1 = > 1,
x 0 − a0
ce qui donne
1
x 0 = a0 + .
x1
2.1. LES FRACTIONS CONTINUES 27
1 a0 + a1
x = a0 + = ,
a1 a1
1
x2 = > 1,
x 1 − a1
ce qui donne
1
x 0 = a0 + .
1
a1 +
x2
Ce processus s’arrête au rang n si et seulement si an = [xn ], avec an ≥ 1, et dans ce
cas, la fraction continue de x est
1
x = a0 + = [a1 , a2 , a3 , · · · , an ],
1
a1 +
1
a2 +
1
a3 +
.. 1
.+
an
x = [a1 , a2 , a3 , · · · ].
Maple 2.1.3.
Avec le logiciel Maple, la fonction qui calcule la fraction continue d’un nombre x est
est cfrac(x,n,’quotients’) : n est le nombre de quotients partiels et ’quotients’ pour
afficher la fraction continue sous la forme [a0 , a1 , a2 , · · · , an ], ce qui correspond à la
1
notation standard. Voici un exemple pour calculer la fraction continue de x = 1+7 3 .
28CHAPITRE 2. CRYPTANALYSE DE RSA PAR LES FRACTIONS CONTINUES
Programme Commentaire
avec la convention
pn
Alors tout n ≥ 0, on a qn
= [a0 , a1 , a2 , · · · , an ].
p0
Démonstration. La preuve se fait par récurrence sur n. On a déjà vu que [a0 ] = q0
.
Supposons que
pn = an pn−1 + pn−2 ,
qn = an qn−1 + qn−2 ,
pn
et que [a1 , a2 , a3 , · · · , an ] = qn
. Alors, on a aussi, en utilisant la récurrence.
1
[a1 , a2 , a3 , · · · , an , an+1 ] = [a1 , a2 , a3 , · · · , an + ]
an+1
1
an + an+1 pn−1 + pn−2
=
1
an + an+1 qn−1 + qn−2
(an an+1 + 1) pn−1 + an+1 pn−2
=
(an an+1 + 1) qn−1 + an+1 qn−2
an+1 (an pn−1 + pn−2 ) + pn−1
=
an+1 (an qn−1 + qn−2 ) + qn−1
an+1 pn + pn−1
=
an+1 qn + qn−1
pn+1
= ,
qn+1
Maple 2.1.6.
Proramme Commentaires
Magma 2.1.7.
Avec Magma, pour calculer la convergente pqnn , il faut utiliser la fonction Conver-
gents(s) où s = [a1 , a2 , · · · , an ]. La réponse est alors une matrice de la forme
pn pn−1
.
qn qn−1
Programme Commentaires
Programme Commentaires
Maple 2.1.9.
1
Vérifions ce théorème avec les convergentes de x = 1 + 7 3 .
Programme Commentaires
restart:
with(numtheory):
Digits:=100:
x:=1+7^(1/3):
s:=cfrac(x,100,’quotients’): <--- liste des quotients partiels
nu:=i->nthnumer(s,i): <--- Numérateurs des convergentes
de:=i->nthdenom(s,i): <--- Dénominateurs des convergentes
n:=7; <--- Un indice quelconque
r:=nu(n)*de(n+1)-nu(n+1)*de(n): <--- Première égalité
(-1)^(n+1)-r; <--- Différence (nulle)
n:=10; <--- Un indice quelconque
r:=nu(n)*de(n+2)-nu(n+2)*de(n); <--- Deuxième égalité
(-1)^(n+1)*s[n+3]-r; <--- Différence (nulle)
Magma 2.1.10.
1
On vérifie maintenant le théorème 2.1.8 avec les convergentes de x = 1 + 7 3 pour
n = 7 avec magma. Attention au décalage de l’exposant de −1 puisque Magma
commence les quotients partiels par a1 et non par a0 .
2.1. LES FRACTIONS CONTINUES 33
Programme Programme
On a de même
p2n+1 p2n−1 p2n+1 q2n−1 − p2n−1 q2n+1 −(−1)2n a2n+1
− = = < 0,
q2n+1 q2n−1 q2n+1 q2n−1 q2n+1 q2n−1
p2n+1 p2n−1
ce qui donne q2n+1
< q2n−1
.
Il reste à démontrer que les deux inégalités pq2n 2n
< x et x < pq2n+1
2n+1
. En écrivant x =
[a0 , a1 , a2 , · · · , an , xn+1 ] avec xn+1 = [an+1 , · · · ], on obtient, en utilisant Théorème 2.1.8,
pour tout n ≥ 0 :
pn xn+1 pn + pn−1 pn pn−1 qn − pn qn−1 (−1)n
x− = − = = .
qn xn+1 qn + qn−1 qn qn (xn+1 qn + qn−1 ) qn (xn+1 qn + qn−1 )
p2n p2n+1
Ainsi, on obtient x − q2n
> 0 et x − q2n+1
< 0.
pn
Proposition 2.1.14. Si x = [a1 , a2 , a3 , · · · ], alors les convergentes qn
de x vérifient
pour tout n ≥ 0,
pn 1
x− < .
qn qn qn+1
pn 1 1 1
x− = < = ,
qn qn (xn+1 qn + qn−1 ) qn (an+1 qn + qn−1 ) qn qn+1
ce qui termine la preuve.
p 1
x− < 2.
q q
pn 1 1
x− < < 2.
qn qn qn+1 qn
Donc, comme il y a une infinité de convergentes si x est irrationnel, il y a une infinité
de nombres rationnels pq qui vérifient
p 1
x− < 2.
q q
Démonstration. On suppose que 0 < q < qn+1 . Montrons que |qn x − pn | ≤ |qx − p|.
Soit a et b deux entiers tels que
p = apn + bpn+1 ,
q = aqn + bqn+1 .
où les termes a(qn x − pn ) et b(qn+1 x − pn+1 ) sont de même signe. Alors
On termine avec le théorème suivant, très utile pour reconnaitre les convergentes
d’un nombre réel.
p
Proposition 2.1.18. Si x est un nombre réel. Si q
est un nombre rationnel qui
vérifie
p 1
x− < 2,
q 2q
p
alors q
est une convergente de x.
p pn p pn p 1
− ≤ −x + x− ≤2 x− < 2
q qn q qn q q
Il en résulte que
qn
|pqn − pn q| < ≤ 1.
q
p pn
Ainsi, pqn − pn q = 0 et donc q
= qn
.
Maple 2.2.2.
Programme Commentaire
i:=i+1:
od:
print(‘d=‘):y; <-- Affichage de d
print(‘p=‘):p; <-- Affichage de p
print(‘q=‘):N/p2; <-- Affichage de q
Magma 2.2.3.
On vérifie maintenant l’attaque de Wiener avec un module RSA de n = 80 bits.
Programme Commentaire
Les objectifs ne sont pas atteints par les souhaits, mais par le
travail assidu.
Abu Alaa Al Maary
YgñK á» B ð
AK. C« AJK YË@ úæÒJËAK. I.Ë A¢ÜÏ @ ÉJK AÓð
ø QªÜÏ @ Z CªË@ ñK. @
43
44 CHAPITRE 3. CRYPTANALYSE DE RSA PAR L’ALGORITHME LLL
det(U ) = ±1, B 0 = U B.
Alors
Le plus souvent, la base d’un réseau n’a pas de bonnes propriétés et les calculs
peuvent être compliqués. Un moyen pour rendre les calculs plus efficaces est de
chercher une base orthogonale dans un réseau. Pour cela, on considère le produit
scalaire habituelle de deux vecteurs et la norme euclidienne d’un vecteur.
Définition 3.1.4. Soient x = (x1 · · · , xn ) et y = (y1 · · · , yn ) deux vecteurs de Rn .
1. Le produit scalaire de x et y est
n
X
T
hx, yi = x y = xi y i .
i=1
2. La norme de x est ! 12
n
1 X
kxk = (hx, xi) = 2 x i yi .
i=1
Une des méthodes les plus utilisées pour produire une base orthogonale à partir
d’une base quelconque est la méthode de Gram-Schmidt.
3.1. L’ALGORITHME LLL 45
i−1
X
b∗1 = b1 , b∗i = bi − µi,j b∗j ,
j=1
Démonstration. On va commencer par démontrer que (b∗1 · · · , b∗n ) est une base de
V . En écrivant
i−1
X
b1 = b∗1 , bi = b∗i + µi,j b∗j ,
j=1
La matrice U est est une matrice inférieure, dont la diagonale est formée de 1. Son
déterminant est donc 1. Ainsi (b∗1 · · · , b∗n ) est aussi une base de V .
On démontre maintenant que (b∗1 · · · , b∗n ) est orthogonale. Par récurrence, puisque
b∗1 = b1 et b∗2 = b2 − µ2,1 b1 , alors
hb2 , b1 i
hb∗1 , b∗2 i = hb1 , b2 − µ2,1 b1 i = hb1 , b2 i − µ2,1 hb1 , b1 i = hb1 , b2 i − hb1 , b1 i = 0.
hb1 , b1 i
Supposons maintenant que la famille (b∗1 · · · , b∗i−1 ) est orthogonale avec i ≥ 3. Alors
46 CHAPITRE 3. CRYPTANALYSE DE RSA PAR L’ALGORITHME LLL
on a pour 1 ≤ k ≤ i − 1
* i−1
+
X
hb∗k , b∗i i = b∗k , bi − µi,j b∗j
j=1
i−1
X
= hb∗k , bi i − µi,j b∗k , b∗j
j=1
= hb∗k , bi i
− µi,k hb∗k , b∗k i
hbi , b∗ i
= hb∗k , bi i − ∗ k∗ hb∗k , b∗k i
hbk , bk i
= 0.
Ainsi (b∗1 · · · , b∗i ) est orthogonale, ce qui prouve la récurrence et termine la preuve.
Maple 3.1.6.
Programme
Programme Commentaires
Programme Commentaires
2 1 0
b1 = 1 , b2 = 4 , b3 = −2 .
0 −2 −1
Programme Commentaires
Magma 3.1.8.
Dans Magma, la méthode d’orthogonalisation de Gram-Schmidtst est programmée
sous le Orthogonalize(M) où M est une matrice carrée. Elle retourne trois valeurs
N , P et n où N est une matrice dont les colonnes représentent des vecteurs orthogo-
naux, P est une matrice de passage vérifiant N = P M et n est le rang de M . Voici
un exemple simple de son utilisation. On considère la même base (b1 , b2 , b3 ) avec
2 1 0
b1 = 1 ,
b2 = 4 , b3 = −2 .
0 −2 −1
Programme Programme
et donc n n
Y Y
det(L) = 2
kb∗i k2 ≤ kbi k2 ,
i=1 i=1
√ 1
kvk ≤ n det(L) n .
Ce théorème est très théorique et la détermination d’un vecteur court est difficile
en général. Un moyen pratique pour trouver des vecteurs assez courts est d’utiliser
l’algorithme LLL.
Définition 3.1.11. Une base (b1 · · · , bn ) est LLL-réduite si, la base (b∗1 · · · , b∗n )
produite par la la méthode d’orthogonalisation de Gram-Schmidt vérifie
1
(3.1) |µi,j | ≤ , pour 1 ≤ j < i ≤ n,
2
3 ∗ 2
(3.2) kb k ≤ kb∗i + µi,i−1 b∗i−1 k2 , pour 1 < i ≤ n.
4 i−1
Maple 3.1.12.
Procédure lovasz
lovasz:=proc(M)
local i,n,G;
n:=nops(M);
G:=gramschmidt(M);
for i to n-1 do
if evalb(scal(G[1][i+1],G[1][i+1])
<(3/4-G[2][i+1][i]^2)*scal(G[1][i],G[1][i]))
then return [false, i]
end if:
end do:
return [true, 0]:
end proc
Finalement, on donne la programmation de LLL sous la forme de procédure myLLL(M).
Procédure myLLL
myLLL:=proc(M)
local N,B,x:
N:=redfaible(M):
B:=lovasz(N):
while not(B[1]) do
x := N[B[2]]:
N:=redfaible(subsop(B[2] = N[B[2]+1], B[2]+1 = x, N)):
B:=lovasz(N):
end do:
return N:
end proc:
Avec la matrice
b1 b2 b3 b4
↓ ↓ ↓ ↓
4 7 9 4
M =
,
6 −7 2 3
−1 2 −1 −1
2 −1 0 −3
54 CHAPITRE 3. CRYPTANALYSE DE RSA PAR L’ALGORITHME LLL
Parmi les nombreuses propriétés d’une base LLL-réduite, on a les inégalités sui-
vantes.
Théorème 3.1.13. Soit (b1 · · · , bn ) une base LLL-réduite et (b∗1 , · · · , b∗n ) la base
orthogonale associée par la méthode de Gram-Schmidt. Alors
1. kb∗j k2 ≤ 2i−j kb∗i k2 pour 1 ≤ j ≤ i ≤ n.
n(n−1)
2. ni=1 kbi k ≤ 2 4 det(L).
Q
i−1
3. kbj k ≤ 2 2 kb∗i k pour 1 ≤ j ≤ i ≤ n.
n−1 1
4. kb1 k ≤ 2 4 (det(L)) n .
n−1
5. Pour tout vecteur non nul v ∈ L, kb1 k ≤ 2 2 kvk.
Démonstration.
Preuve de 1. Supposons que (b1 · · · , bn ) une base LLL-réduite. Alors, en développant
l’inégalité 3.2 et en utilisant 3.1, on a
3 ∗ 2 1
kbi−1 k ≤ kb∗i k2 + µ2i,i−1 kb∗i−1 k2 ≤ kb∗i k2 + kb∗i−1 k2 ,
4 4
ce qui donne
kb∗i−1 k2 ≤ 2kb∗i k2 .
Ainsi, pour j ≤ i, on obtient
i−1 i−1
X 1X ∗ 2
2
kbi k = kb∗i k2 + µ2i,j kb∗j k2 ≤ kb∗i k2 + kb k .
j=1
4 j=1 j
3.1. L’ALGORITHME LLL 55
Théorème 3.1.14. Soit (b1 , · · · , bn ) une base LLL-réduite d’un réseau. Alors pour
tout j, 1 ≤ j ≤ n, on a
n(n−1) 1
kbj k ≤ 2 4(n−j+1) (det L) n−j+1 .
Théorème 3.1.15. Soit (b1 , · · · , bn ) une base d’un réseau L et B = maxi kbi k.
L’algorithme LLL produit une base réduite en un temps polynômial :
O n4 log3 B .
Maple 3.1.16.
Dans Maple 12, l’algorithme LLL est en fait déjà programmé sous le nom de procédure
LLL dans le package IntegerRelations. On donne, par exemple la base (b1 , b2 , b3 , b4 )
avec pour matrice
3.1. L’ALGORITHME LLL 57
b1 b2 b3 b4
↓ ↓ ↓ ↓
4 7 9 4
M =
.
6 −7 2 3
−1 2 −1 −1
2 −1 0 −3
Programme Commentaires
On peut alors vérifier que les deux bases on le même déterminant et que b01 est plus
court que les autres vecteurs de la base.
Programme Commentaires
Magma 3.1.17.
Dans Magma, l’algorithme LLL est programmé sous le nom LLL. On donne, le
58 CHAPITRE 3. CRYPTANALYSE DE RSA PAR L’ALGORITHME LLL
b1 b2 b3 b4
↓ ↓ ↓ ↓
4 7 9 4
M =
6 −7 2
.
3
−1 2 −1 −1
2 −1 0 −3
Programme Commentaires
On peut alors vérifier que les deux bases on le même déterminant et que b01 est plus
court que les autres vecteurs de la base.
3.2. CRYPTANALYSE DE RSA PAR LA RÉDUCTION DES RÉSEAUX 59
Programme Programme
Chaque terme xi est appelé un monôme. La norme Euclidienne de f est définie par
v
u n
uX
||f (x)|| = t a2i .
i=1
f (x0 ) ≡ 0 (mod N ),
|x0 | < X,
Ceci implique que toute combinaison linéaire h(x) des polynômes gjk (x) vérifiera
h(x0 ) ≡ 0 (mod bm ). Si en plus h vérifie |h(x0 )| < bm , alors on a tout simplement
h(x0 ) = 0, ce qui est facile à résoudre. Le passage de l’équation modulaire h(x0 ) ≡ 0
(mod bm ) à l’équation entière h(x0 ) = 0 peut être fixé par le théorème suivant.
Théorème 3.2.1 (Howgrave-Graham). Soit h(x) ∈ Z[x] un polynôme de degré d
ayant au plus ω monômes et X un nombre positif. Si x0 est un entier et M un
nombre positif tels que :
(1) |x0 | < X,
(2) h(x0 ) ≡ 0 (mod M ),
M
(3) kh(xX)k < √
ω
,
3.2. CRYPTANALYSE DE RSA PAR LA RÉDUCTION DES RÉSEAUX 61
M
Ainsi, si kh(xX)k < √
ω
, alors
√ √
s
X X
ai X < i
ω (ai X i )2 = ωkh(xX)k < M.
i i
Le vecteur recherché h(xX) sera donc le premier vecteur v1 (xX) de la base réduite.
62 CHAPITRE 3. CRYPTANALYSE DE RSA PAR L’ALGORITHME LLL
En effet, on considère le réseau formé par les vecteurs colonnes de la matrice définie
par les polynômes
où δ = deg(fb ) et m et t sont des entiers fixés. En explicitant les polynômes gi,j (x),
on obtient les valeurs
On observe de cette façon que les degrés des polynômes sont croissants de la position
(i, j) = (m, 0) à la position (i, j) = (1, δ − 1). On peut continuer ce tableau avec les
polynômes hi (x).
(3.5) i = 0, · · · , t − 1 ⇒ f m , xf m , x2 f m , · · · , xt−1 f m .
Une fois encore les degrés sont croissants. Globalement, les degrés remplissent to-
talement l’intervalle {0, 1, · · · , mδ + t − 1}. On peut alors considérer les matrices
définies par les coordonnées des différents polynômes gi,j (Xx) et hi (Xx), lignes par
3.2. CRYPTANALYSE DE RSA PAR LA RÉDUCTION DES RÉSEAUX 63
lignes, dans la base 1, x, x2 , · · · , xmδ+t−1 .
Nm
N mX
Mm = ,
. .
.
m δ−1
N X
− − − − N m−1 X δ
− − − − − N m−1 X δ+1
Mm−1 = ,
− − − − . . .
− −
m−1 2δ−1
− − − − − − − N X
.. .
. = ..
− − · · · − N X (m−1)δ
− − ··· − − N X (m−1)δ+1
M1 = ,
..
− − ··· − − − .
− − ··· − − − − N X (m−1)δ+δ−1
− − · · · − X mδ
− − · · · − − X mδ+1
M0 = .
. .
− − ··· − − − .
mδ+t−1
− − ··· − − − − X
Avec ses matrices, on forme la matrice carrée (n×n) M , avec n = mδ +t, qui définie
le réseau L par les colonnes de la matrice :
Mm
Mm−1
(3.6) M = ..
.
.
M1
M0
Cette matrice est diagonale est son déterminant est donc le produit des différentes
diagonales :
1 1
det(L) = N mδ · N (m−1)δ · · · · N δ X 1+2+···+n−1 = N 2 m(m+1)δ X 2 n(n−1) .
Alors l’inégalité 3.3 devient
n−1 m(m+1)δ 1 bm
2 4 N 2n X 2 (n−1) < √ .
n
Puisque b > N β , il suffit alors d’avoir
n−1 m(m+1)δ 1 N mβ
2 4 N 2n X 2 (n−1) < √ .
n
64 CHAPITRE 3. CRYPTANALYSE DE RSA PAR L’ALGORITHME LLL
avec
log n β β2 δ
ε= + − − ,
(n − 1) log N n − 1 (n − 1)δ 4n(n − 1)
qui dépend de n mais qui vérifie lim ε = 0.
n→+∞
Théorème 3.2.2. Pour tout ε > 0, il existe un entier N0 qui vérifie la propriété :
Soit N > N0 un entier de factorisation inconnue qui a un diviseur b > N β . Soit
fb (x) un polynôme de degrés δ. Toutes les solutions x0 de la congruence fb (x) ≡ 0
(mod b) vérifiant
1 β2
|x0 | < 2− 2 N δ
−ε
Théorème 3.2.3. Pour tout ε > 0, il existe un entier N0 qui vérifie la propriété :
Soit N > N0 un entier de factorisation inconnue. Soit f (x) un polynôme de degrés
δ. Toutes les solutions x0 de la congruence f (x) ≡ 0 (mod N ) vérifiant
1 1
|x0 | < 2− 2 N δ −ε
Exemple 3.2.4.
3.2. CRYPTANALYSE DE RSA PAR LA RÉDUCTION DES RÉSEAUX 65
j=0 1 2
i=3 N 3, N 3 xX, N m (xX)2
i=2 N 2 f (xX) N 2 xf (xX) N 2 (xX)2 f (xX)
i=1 N f 2 (xX) N (xX)f 2 (xX) N (xX)2 f 2 (xX)
i=0 f 3 (xX)
On pose
f (x) = a0 + a1 x + a2 x2 + x3 ,
f 2 (x) = b0 + b1 x + b2 x2 + b3 x3 + b4 x4 + b5 x5 + x6 ,
f 3 (x) = c0 + c1 x + c2 x2 + c3 x3 + c4 x4 + c5 x5 + c6 x6 + c7 x7 + c8 x8 + x9 .
x2 x3 x4 x5 x6 x7 x8 x9
1 x
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
N3 0 0 0 0 0 0 0 0 0
3
0 XN 0 0 0 0 0 0 0 0
2 3
0 0 X N 0 0 0 0 0 0 0
a0 N 2 a1 XN 2 a2 X 2 N 2 X 3 N 2 0 0 0 0 0 0
2 2 2 3 2 4 2
0 a0 XN a1 X N a2 X N X N 0 0 0 0 0
2 2 3 2 4 2 5 2
0 0 a0 X N a1 X N a2 X N X N 0 0 0 0
b0 N b1 XN b2 X 2 N b3 X 3 N b4 X 4 N b5 X 5 N X 6 N 0 0 0
0 2 3 4 5 6 7
b0 XN b1 X N b2 X N b3 X N b4 X N b5 X N X N 0 0
0 2 3 4 5 6 7 8
0 b0 X N b1 X N b2 X N b3 X N b4 X N b5 X N X N 0
c0 c1 X c2 X 2 c3 X 3 c4 X 4 c5 X 5 c6 X 6 c7 X 7 c8 X 8 X 9
Maple 3.2.5.
On ne trouve en fait aucune solution car la valeur prise par X est très grande. En
1 1
effet, dans l’inégalité |x0 | < 2− 2 N δ −ε , le rôle de ε peut être très important. En
prenant la valeur X = 500, on trouve x0 = 79.
66 CHAPITRE 3. CRYPTANALYSE DE RSA PAR L’ALGORITHME LLL
Programme Commentaires
Magma 3.2.6.
Pour Magma, on peut alors utiliser le code suivant.
Programme Commentaires
de racine 79.
En fait, dans Magma, la méthode de Coppersmith pour résoudre l’équation polyno-
miale
1 1
f (x0 ) ≡ 0 (mod N ), |x0 |X < N d ,
2
est implémentée sous la forme SmallRoots(f,N,X). Dans l’exemple c–dessous, on
veut résoudre l’équation
Magma 3.2.7.
programme programme
3.2.2 Factorisation de N
1
|p̃ − p| < N 4 ,
1
Démonstration. Supposons que |p̃ − p| < N 4 . On considère la fonction fp définie
par fp (x) = x + p̃. Alors on a fp (p − p̃) = p ≡ 0 mod p. Ainsi, x0 = p − p̃ est un
entier qui vérifie
1
fp (x0 ) ≡ 0 mod p, |x0 | < N 4 .
1
On peut donc appliquer le théorème 3.2.2 avec b = p > N 2 , en prenant β = 12 .
Maple 3.2.9.
Programme Commentaires
Magma 3.2.10.
On reprend le même exemple avec N = pq = 2535301200456606295881202795651.
On donne aussi une approximation p0 = 1125899907822525 de p et on sait que
1
|p − p0 | < N 4 . Dans le programme ci-dessous, la borne du théorème 3.2.2 avec ε = 0
s’est avérée assez grande et ne donne aucune réponse. En prenant la borne
3 1
X < 2− 2 N 4 .
On obtient alors une réponse avec le choix m = 2 et t = 2 car le choix t = 1 ne
donne pas de solution non plus. On obtient alors la réponse x0 = −979846, ce qui
donne p = p0 + x0 = 1125899906842679.
Programme
[1] D. Boneh, G. Durfee. Cryptanalysis of RSA with private key d less than N 0.292 ,
Advances in Cryptology – Eurocrypt’99, Lecture Notes in Computer Science
Vol. 1592, Springer-Verlag, 1—11 (1999).
[2] D. Coppersmith. Small solutions to polynomial equations, and low exponent
RSA vulnerabilities. Journal of Cryptology, 10(4), 233—260 (1997).
[3] G.H. Hardy, E.M. Wright. An Introduction to the Theory of Numbers.
Oxford University Press, London (1965).
[4] A. K. Lenstra, H. W. Lenstra, and L. Lovasz. Factoring polynomials with ra-
tional coefficients, Mathematische Annalen, Vol. 261, pp. 513—534, 1982.
[5] A. May. New RSA Vulnerabilities Using Lattice Reduction Methods. PhD the-
sis, University of Paderborn (2003)
http://wwwcs.upb.de/cs/ag-bloemer/personen/alex/publikationen/
[6] R. Rivest, A. Shamir, L. Adleman. A method for obtaining digital signatures
and public-key cryptosystems, Communications of the ACM, Vol. 21 (2), 120—
126 (1978).
[7] M. Wiener. Cryptanalysis of short RSA secret exponents, IEEE Transactions
on Information Theory, Vol. 36, 553—558 (1990).
73