. . . . . . . . . . .
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
mod (n)
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.
3.1
Principe
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
1
q1 +
, q1 , q2 , N
1
q2 +
1
1
q3 +
q4 +...
3.2
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
3.4
Dmonstration
3.5
m m
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
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.
G2 ed
n
soit d2
n n
G2 e .
n
G2 .
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
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
CONCLUSION
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