Anda di halaman 1dari 7

INF582 : Cryptologie

Attaque de cls RSA par la mthode de Wiener


Nicolas DOUZIECH - Thomas JANNAUD - X2005
19 mars 2008

Table des matires


1 Quelques rappels sur le cryptosystme RSA

2 Principe de lattaque de Wiener

3 Lalgorithme des fractions continues


3.1 Principe . . . . . . . . . . . . . . . . . . . . . .
3.2 Quelques unes des proprits fondamentales des
3.3 Lide de Wiener . . . . . . . . . . . . . . . . .
3.4 Dmonstration . . . . . . . . . . . . . . . . . .
3.5 Estimation de la borne sur d . . . . . . . . . .

. . . . . . . . . . .
fractions continues
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

2
3
3
3
4
4

4 Pratique
4.1 Algorithme complet . . . .
4.2 Implmentation . . . . . . .
4.3 Amliorations implmentes
4.4 Quelques rsultats . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

4
4
5
6
6

.
.
.
.

.
.
.
.

.
.
.
.

5 Conclusion

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

LALGORITHME DES FRACTIONS CONTINUES

Quelques rappels sur le cryptosystme RSA

Le principe de RSA repose sur le chiffrement asymtrique cl publique / cl


prive suivant : Pour e et d bien choisis, x Z/nZ, (xe )d = x mod n. On rend alors
publique la cl e. Si lon a un message m Z/nZ, on nous envoie me et connaissant
d nous retrouvons le message initial.
La puissance du procd tient dans le fait que connaissant m et e, il est trs dur
de retrouver d sans connatre la dcomposition en facteurs premiers de n.
La mthode consiste donc choisir 2 nombres premiers p et q aussi grands que
ncessaire, et poser n = p q. On choisit alors e plus ou moins "alatoirement", on
le rend publique, et il reste calculer d.
Choix de e et d : x fix, {xk , k Z} est un sous-groupe multiplicatif de (Z/nZ)? ,
isomorphe daprs le thorme chinois (Z/pZ)? (Z/qZ)? . Le cardinal du sousgroupe divise donc ppcm(p 1, q 1). Ainsi, si e est premier avec p 1 et q 1,et si
d est linverse de e dans Z/(p 1)(q 1)Z (i.e tel que ed = 1 mod (p 1)(q 1)),
alors (xe )d = x mod n.

Principe de lattaque de Wiener

Lattaque de Wiener sapplique tout particulirement lorsque lexposant secret d


est faible. Elle repose sur lquation dfinissant d daprs lexposant public e et la
fonction de Carmichael applique au module n = p q :
ed=1

mod (n)

De cette quation, on en dduit lexistence dun entier K tel que e d = 1 + K (n).


, avec G = pgcd(p 1, q 1). Il
De plus, (n) = ppcm(p 1, q 1) = (p1)(q1)
G
K
k
vient alors ed = 1 + G (p 1)(q 1) = 1 + g (p 1)(q 1), aprs rduction tel que
pgcd(k, g) = 1.
On en dduit alors le pivot de lalgorithme des fractions continues appliques
cette attaque :
p+q1
e
k
=
(1
pq
dg
pq

g
k

f 0 = f (1 )

p+q1 g

k
qui sera efficace si =
est trs faible.
pq
Or, comme pgcd(k, g) = 1 par dfinition et pgcd(k, d) = 1 (daprs la formulation
k
de Bzout : ed = 1+k (p1)(q1)
), si on dtermine la fraction dg
, on obtiendra aisment
g
k et le produit dg.

Lalgorithme des fractions continues

Le dveloppement en fractions continues permet de calculer le numrateur et


le dnominateur dun nombre rationnel x (de manire exacte). Ainsi, sachant que
f 0 = f (1 ) et que lon connait f 0 , on va pouvoir remonter non pas f , mais
2

3.1

Principe

LALGORITHME DES FRACTIONS CONTINUES

son numrateur et son dnominateur, ce qui apporte considrablement plus dinformations. Cela permet en loccurence de "casser" le systme puisque connaissant ces
informations on verra que lon parvient remonter p, q, et d.

3.1

Principe

Tout rel x peut scrire de manire unique sous la forme


x = q0 +

1
q1 +

, q1 , q2 , N

1
q2 +

1
1
q3 +
q4 +...

Par construction, qi = b ri11 c et ri = ri11 qi .


On peut noter (q0 , q1 , q2 , . . . ) le dveloppement dun rel x. On peut intuiter quune
certaine notion de "continuit" se dgage : Si x est proche de y, les premiers termes
du dveloppement de x seront gaux ceux de y.

3.2

Quelques unes des proprits fondamentales des fractions


continues

Dune part, le dveloppement converge rapidement, et il est fini si et seulement si


x est rationnel.
Dautre part, pour i pair :
(q0 , q1 , . . . , qi ) < (q0 , q1 , . . . , qi+1 ) < (q0 , q1 , . . . , qi + 1)
et pour i impair :
(q0 , q1 , . . . , qi + 1) < (q0 , q1 , . . . , qi+1 ) < (q0 , q1 , . . . , qi )
La suite x(q0 , q1 , . . . , qi ) est donc alterne, et les sous-suites dindices pairs seulement
ou impairs seulement sont monotones.
Enfin, en dfinissant ni et di tels que i, ni
di = (q0 , . . . , qi )), on a (q0 , q1 , . . . , qi ) =
qi ni1 +ni2
i
et
n
d

ni

1di
=
(1)
.
i i1
qi di1 +di2

3.3

Lide de Wiener

Rappelons que f 0 = f (1 ), o semble tre de petite taille, et lon aimerait connatre le numrateur et le dnominateur de f , sachant ceux de f 0 . Lide de
Wiener consiste effectuer le dveloppement en fractions continues de f 0 : On note
0
0
(q0 , q1 , . . . , qm ) le dveloppement de f et (q00 , q10 , ,qm
0 ) celui de f .
0
Si f et f sont suffisamment proches, alors les premiers termes du dveloppement
de f et de celui de f 0 sont gaux. Et avec un peu de chance, m0 m, ce qui ferait
que le dveloppement de f serait un sous-dveloppement de celui de f 0 . Lalgorithme
va fonctionner si et seulement si les m premires valeurs du dveloppement de f 0 sont
celles de f , cest dire si :
m est pair et (q0 , q1 , . . . , qm 1) < f 0 (q0 , q1 , . . . , qm ) = f
3

3.4

Dmonstration

4 PRATIQUE

m est impair et (q0 , q1 , ,qm + 1) < f 0 (q0 , q1 , ,qm ) = f


(ceci entrainerait que le dveloppement de f 0 continue plus loin quau rang m)
Cette condition est remplie si < 3 n 1 d o nm et dm sont le numrateur et le
2 m m
dnominateur de f .
Ce qui semble tre de la "chance" nen est en fait pas. La condition m0 m qui
semble tre alatoire est en fait vrifie sur lintervalle des rationnels compris entre
(q0 , q1 , . . . , qm 1) et (q0 , q1 , . . . , qm ) = f (si m est pair), qui est en fait de largeur f .

3.4

Dmonstration

On prouve le rsultat dans le cas o m est un entier pair 2. On a linquation


0 ,q1 ,...,qm 1)
.
ci-dessus si et seulement si < 1 (q(q
0 ,q1 ,...,qm )
En utilisant les notations ni et di vues dans la partie "proprits fondamentales",
m1 dm2 nm2 dm1
linquation se rcrit : < (qm nm1n+n
Et aprs rduction,
m2 )(qm dm1 +dm2 dm1 )
en utisant la proprit fondamentale cite en dernier, on obtient < nm (dm1dm1 ) .
Par voie de consquence, < nm1dm est suffisant pour obtenir la convergence de
lalgorithme. (et donc < 3 n 1 d aussi)
2

3.5

m m

Estimation de la borne sur d


1

On utilise les notations de larticle. Il y est crit que pour d < n 4 le "cassage" du
code russit grce lalgorithme des fractions continues.
1
Condition de russite : < nm1dm = kdg
.
p+q1 g

1
k
Or =
donc il suffit que p+q
pq
pq < kdg pour que lalgorithme marche. On peut

estimer p et q par n puisque n = pq.

1
Une condition de russite est donc 1n kdg
soit d kgn .

n
K
G
Or k = P GCD(K,G)
et g = P GCD(K,G)
donc il suffit que d KG
.
ed1
ed
Comme G = P GCD(p 1, q 1) et K = P P CM (p1,q1) P P CM (p1,q1)
, cela

quivaut d

G2 ed
(p1)(q1)

avec (p 1)(q 1) n.

Une condition est donc d

G2 ed
n

soit d2

n n
G2 e .

Comme e < n, une condition

n
G2 .

plus stricte est d2


p et q tant premiers, avec une forte probabilit les facteurs de (p 1) et (q 1)
nont que de petits facteurs premiers et G(= P GCD(p1, q 1)) est trs petit devant
1
n (soit O(1)). On retrouve donc la condition d < n 4 .

Pratique

4.1

Algorithme complet

Voici lalgorithme complet de lattaque de Wiener contre une cl publique (n, e).

4.2

Implmentation

4 PRATIQUE

CasserRSA(n, e)
1 m 0, q0 be/nc, r0 e/n q0 , n0 q0 et d0 1
2 while (rm 6= 0)
3
do if m est pair
4
then k/dg < q0 , . . . , qm + 1 >
5
else k/dg < q0 , . . . , qm >
 On vrifie si le dveloppement partiel convient pour k/dg
6
edg e dg
7
(p 1)(q 1) bedg/kc
8
g edg mod n
9
if (g = 0)
10
then goto FinTest  le dveloppement ne convient pas
11
p + q n (p 1)(q 1)
12
if p + q impair
13
then goto FinTest  le dveloppement ne convient pas
2
2
= ( p+q
14
( pq
2 ) p
2 ) n
pq
pq 2
15
(( 2 ) )  racine carr entire
2 =
2
)
nest pas un carr parfait
16
if ( pq
2
17
then goto FinTest  le dveloppement ne convient pas
pq
p+q
pq
18
p p+q
2 + 2 , q 2 2
19
d dg/g
 Fin des vrifications, retour de d
20
return d
FinTest :
 Calcul de llement suivant du dveloppement de e/n
21
qm+1 = b r1m c et rm+1 = r1m qm+1
22
23
if (m=0)
24
then n1 = q0 q1 + 1 et d 1 = q1
25
else nm+1 = qm+1 nm + nm1 et dm+1 = qm+1 dm + dm1
26 return "Cl incassable"

4.2

Implmentation

Pour implmenter cet algorithme, nous avons opt pour dvelopper une classe dont
les membres seront nos variables n, e, metap , la liste des qi , celle des ni et di et ri est
stock sous le format numrateur (variable ri ) et dnominateur (variable ri1 ).
Pour ce qui est des fonctions de calcul, nous avons :
Une fonction casser qui prend en argument le mode de calcul choisi. Nous verrons quil sagit en fait des amliorations que nous proposerons plus bas.
Une fonction breaker qui est limplmentation de lalgorithme de base mais dans
lequel nous entrons le numrateur et le dnominateur de f 0 qui approche, de
k
.
manire infrieure f = dg
Une fonction calcul_next qui calcule llment m + 1 du dveloppement en
fraction continue et met jour les listes qi , ni et di .

4.3

Amliorations implmentes

4 PRATIQUE

Une fonction Verifier qui, connaissant le dveloppement (partiel) de f 0 vrifie sil


convient pour f . Cette fonction prend en argument une structure (qui contient
n, p, q, e, d) qui sera remplie si la vrification savre positive et retournera VRAI,
sinon retournera FAUX.
Paralllement, nous avons dvelopp une classe principale qui permet de choisir
diffrents formats dentres (lancement en ligne de commande). On peut spcifier la
valeur de n, soit directement, soit via un fichier, celle de e de la mme manire. On
peut aussi demander la gnration alatoire dune cl dont on spcifie la taille (la taille
de p et de q). Un mode permet aussi de lancer k tests gnrant alatoirement des cls
et les testant. Enfin, on peut spcifier le mode de calcul qui prcise si on travaille avec
la version de base (par dfaut) ou avec une amlioration.
Pour gnrer une cl, nous choisissons "alatoirement" p et q premiers de la taille
spcifie. n est alors le produit des deux et (n) = (p 1) (q 1). On choisit alors d
alatoirement de taille le quart de celle de n (BigInteger(n.bitLength()/4, rand))
et on essaie dinverser d pour obtenir e ( mod (n)). Cependant, on sait que d nest
pas toujours inversible, dans ce cas, on rejette simplement la cl et on en essaie une
autre.
Notons en passant que pour calculer la racine carre de n, nous avons dvelopp
une fonction sqrt sur les BigInteger qui calcule le plus grand entier (format BigInteger )
m tel que m2 n par la mthode de Newton.

4.3

Amliorations implmentes

Nous avons implment deux amliorations proposes dans larticle. Les deux reposent sur le principe dapprocher mieux f par f 0 (toujours infrieurement). Cependant, elles peuvent ne pas fonctionner dans des cas o lattaque classique fonctionne
(car on peut se retrouver avec f 0 > f )
e
Pour la premire (mode 1), il sagit de remplacer f = ne par (n1)
2 , ce qui
amliore la borne maximale de d.
Pour la deuxime (mode 2), on souhaite toujours sapprocher infrieurement de
e+i
f . Aussi, en supposant e et n grands, on peut remplacer f = ne par f = n+i
avec i
faible. Aussi, on essaie avec i variant de 1 100.

4.4

Quelques rsultats

A titre dillustration, nous avons test le programme.


Concernant lalgorithme de base, nous avons test la cration de 10000 cls de
taille 512 bits. On constate que seulement 3106 cls ont pu tre gnres jusquau
bout (linversion de d choue donc 70%) Parmi ces 3106 cls, seulement 186 nont
pas pu tre casses par lattaque de Wiener, ce qui est un taux dchec de seulement 6%. Sur un ordinateur normal, le test de ces 10000 cls nont pris que sept
minutes. Notons cependant quun mme test de 10000 cls mais en choisissant d
par BigInteger(n.bitLength()/4-1, rand) ne gnre statistiquement aucune cl
incassable !
Concernant les amliorations, nous avons simul 100000 cls comme prcdemment
mais lorsquune cl nest pas cassable par la mthode de base, alors nous tentons de la
6

CONCLUSION

casser par la version amliore 1 et par la version amliore 2. Comme prcdemment,


seules 30% des cls ont pu tre gnres jusquau bout (30740 sur 100000), parmi cellesci, 2528 nont pu tre casses par lattaque de base (soit environ 8%). Cependant,
parmi ces 2528 cls, lamlioration 1 a permis den casser 35, ce qui est certes faible
mais montre lintrt de cette dernire. Malheureusement, la deuxime amlioration
na pu en casser aucune.
A titre dexemple, nous donnons deux cls non casses par lattaque de base mais
o la premire amlioration a russi. (lalgorithme prend n et e en entre et retourne
p, q et d)
n = 70990494030001599640080903246441464168842099185167979830804237584
33289579173108817896300591492009567791999934739593004568871009503
131459978891354924312293
e = 48005908034150990030627757037922111639133161882587151998768898523
13170606286055738477024546386917266428978625003752903913458502326
735919960727075651872551
p = 11508828851147182312244593799942653914112392688894980821147253
5165876275496561
q = 61683508329281807565351436038255300788903211021652367784374438
456266874137013
d = 337422556629262957727680320823671598551
n = 79478250450888673021255166218266744053326219188904001113739531926
86372655283817780032069006123459813237808835720603847399750713676
056080125818747986349447
e = 65250991076258620857828154985020403953700383722287976469263460012
10798760639534281686270769728390307520787356063937712875520895609
435211848104334474937457
p = 10207579030162629329865273138350643418501537095062044194402680067
2878142881511
q = 77861998634579671292796168351241574690743437854156047879769199419
749680302177
d = 301966617421833780895723945603018123793

Conclusion

Comme le montre les rsultats, lattaque de Wiener est efficace pour peu que
1
d < n 4 . De plus, nous constatons que lamlioration qui consiste remplacer ne par
e

savre utile mais ne peut pas tre gnralise car on se retrouve frquemment
( n1)2
au dessus de

k
dg

et lalgorithme des fractions continues nest donc plus efficace.

Anda mungkin juga menyukai