Documente Academic
Documente Profesional
Documente Cultură
Cryptographie - EPFL
Jose R. Beuret
Gwenol Grandperrin
Juin 2006
2 Histoire : Les cr
eateurs
2.1 Whitfield Diffie . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Martin Hellman . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
1
3 Le protocole de Diffie-Hellman
3.1 A quoi sert le protocole . . . . . . . . . . . . . . . . . . . . .
3.2 Procedure . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Pourquoi cette methode est securisee . . . . . . . . . . . . . .
2
2
3
3
4 Racines primitives
5 Conclusion
A Code source
Bibliographie
10
Introduction
Depuis la nuit des temps des empires cherchent `a cacher des informations
`a leurs ennemis. Ils ont pour cel`a developpe des methodes pour encoder et
decoder leurs donnes. Aujourdhui avec l`ere de linformatique et la puissance de calcul qui en decoule, la cryptologie est une science primordiale
pour les services secrets, mais egalement pour le secteur bancaire et plus
generalement les entreprises.
Dans ce document nous expliquerons les fondements theoriques du protocole de Diffie-Hellman. Pour cel`a nous demontrerons les resultats dalg`ebre
necessaires `a son fonctionnement, cest `a dire ceux sur le groupe Fp et ses
proprietes.
2
2.1
Histoire : Les cr
eateurs
Whitfield Diffie
2.2
Martin Hellman
pour trouver des mots de passe. Cette technique a par la suite ete amelioree
par Philippe Oechslin.
En 1966, Martin Hellman obtient un bachelor `a lUniversite de New York,
suivi dun master `a lUniversite de Stanford en 1967 et un doctorat en 1969.
De plus 1968 `a 1969, il travaille chez IBM o`
u il rencontre un autre cryptologue tr`es connu, Horst Feistel. De 1969 `a 1971, il est professeur assistant
au MIT. En 1971, il retourne `a Stanford pour poursuivre ses recherches.
Il est actuellement `a la retraite.
3
3.1
Le protocole de Diffie-Hellman
A quoi sert le protocole
3.2
Proc
edure
Nous allons vous presenter la procedure etape par etape. Elle permet
dechanger des cles de mani`ere securisee. Considerons deux individus, A et
B, qui souhaitent senvoyer un message crypte. Les donnees et les echanges
sont les suivants :
Tout dabord A et B se mettent daccord sur un nombre premier p.
Puis ils conviennent dune racine primitive g (voir la definition du
paragraphe 4.7).
A choisi un nombre secret 0 a p 1.
A envoie la valeur g a mod p `a B.
B choisi un nombre secret 0 b p 1.
B envoie la valeur g b mod p `a A.
A peut desormais calculer la cle secr`ete key = (g b mod p)a mod p.
B proc`ede de mani`ere analogue et obtient la meme cle que A : key =
(g a mod p)b mod p.
A et B sont alors en possession chacun de la meme cle secr`ete (key) et
peuvent ainsi utiliser un simple algorithme de cle privee.
3.3
Pourquoi cette m
ethode est s
ecuris
ee
Racines primitives
4.5 Th
eor`
eme (Theor`eme dEuler). Soient n N {0} et k Z tels que
k et n sont premiers entre eux. Alors
k (n) 1
mod n.
Preuve. (Z/nZ) est un groupe fini dordre (n). Tout k (Z/nZ) est tel
que k(n) = 1. En effet lordre dun element divise lordre du groupe. Donc
k (n) 1 mod n
4.6 Th
eor`
eme (Petit theor`eme de Fermat). Soient p R un nombre premier et k Z. Si p et k sont premiers entre eux alors
k p1 1
mod p.
mod p.
Preuve. Comme p est premier, les proprietes enoncees donnent (p) = p1.
On applique alors le theor`eme dEuler et on optient le premier resultat.
Si k 0 mod p alors la deuxi`eme egalite est claire. Si k 6= 0 mod p
alors il suffit de multiplier les deux membres de la premi`ere equivalence par
k.
4.7 D
efinition. Soit Fp . On appelle une racine primitive si les deux
conditions suivantes sont satisfaites :
wi 6= 1, pour 1 i < p 1
wi = 1, pour i = p 1
4.8 Lemme. Soient b1 , b2 deux elements de Fp . Soient n1 , n2 les ordres
respectifs de b1 , b2 . Si pgcd(n1 , n2 ) = 1, alors lordre de b1 b2 est n1 n2 .
n
a la fois `a hb1 i et `a hb2 i.
Preuve. Si bn1 bn2 = 1, alors bn1 = bn
2 , et b1 appartient `
Son ordre divisera les ordres n1 et n2 de ces deux groupes. Par hypoth`ese
n1 et n2 sont premiers entre eux, alors ordre(bn1 ) = 1. On en deduit
ppcm(n1 , n2 ) | n n1 n2 | n
4.9 Th
eor`
eme. Soit Fp le corps `
a p elements avec p premier. Alors le
Preuve. Nous savons dej`a que (Fp , ) est abelien. Lordre de Fp est p 1.
Nous effectuons la decomposition en produit de facteurs premiers de p 1,
que nous noterons h.
h = p1 1 pmm avec 1 m N
1 1
X p1
m
p
m
p 1
b1 1
m
p
m
ah1
=
= 1 de sorte que lordre de b1 soit de la forme
lon avait s < 1 , nous pourrions ecrire
ps
6= 1. Si b1 = a12
ps1
m
p
m
, alors
o`
u s 1 . Si
m
ps p2 2 p
m
b11 = 1 a11
=1
ce qui est absurde. Donc b1 est dordre est dordre p1 1 . Cette methode nous
permet dexhiber un element bi dordre pi i pour tout i.
Nous devons encore montrer que b = b1 bm est dordre h. Or ceci fut
demontre par le lemme precedent.
4.10 Remarque. Il existe une racine primitive dans Fp .
Conclusion
Apr`es avoir presente les createurs du protocole et avoir explique le fonctionnement de ce dernier, le lecteur a pu observer une suite de preuves
mathematiques justifiant les fondements mathematiques de cette methode.
En ce qui concerne laspect pratique, un code implementant le protocole
Diffie-Hellman est disponible en annexe, il necessite la librairie NTL2 .
Code source
bool prime=f a l s e ;
bool r o o t=f a l s e ;
double t d , t p ;
ZZ g , q ;
ZZ p ;
ZZ a , b ;
ZZ one , two ;
conv ( one , 1 ) ;
conv ( two , 2 ) ;
ZZ keyA , keyB ;
i f ( argc >=2) {
i f ( ( s t r i n g ( argv [ 1 ] ) . compare ( s e l e c t )==0) | | (
s t r i n g ( argv [ 1 ] ) . compare ( s )==0)) {
c o u t << P l e a s e e n t e r your l e n g t h : ;
long l e n g t h t m p ;
c i n >> l e n g t h t m p ;
i f ( length tmp <2) l e n g t h =2;
e l s e l e n g t h=l e n g t h t m p ;
}
e l s e i f ( ( s t r i n g ( argv [ 1 ] ) . compare ( time )==0)
| | ( s t r i n g ( argv [ 1 ] ) . compare ( t )==0)) {
time=true ;
}
e l s e i f ( ( s t r i n g ( argv [ 1 ] ) . compare ( prime )==0)
| | ( s t r i n g ( argv [ 1 ] ) . compare ( p )==0)) {
prime=true ;
}
e l s e i f ( ( s t r i n g ( argv [ 1 ] ) . compare ( h e l p )==0)
| | ( s t r i n g ( argv [ 1 ] ) . compare ( h )==0)) {
c o u t << e n d l ;
c o u t << ========================= << e n d l ;
c o u t << D i f f i e Hellman P r o t o c o l << e n d l ;
c o u t << ========================= << endl<<
endl ;
c o u t << Copyright ( c ) 2006 J o s e Beuret &
Gwenol Gra nd perrin << e n d l ;
c o u t << e n d l ;
c o u t <<
=========
,.
,<<< e n d l ;
7
c o u t << :
/ ( ) // \\
/ =|
| s s e l e c t
<<< e n d l ;
c o u t << <| ///
//
/<| p prime
<<< e n d l ;
c o u t << : \======//========\
| t time
<<<
endl ;
c o u t <<
0
(0)
\<<< e n d l << e n d l
;
return 0 ;
}
i f ( argc >=3) {
i f ( ( s t r i n g ( argv [ 2 ] ) . compare ( time )==0) | | (
s t r i n g ( argv [ 2 ] ) . compare ( t )==0)) {
time=true ;
}
}
}
i f ( l e n g t h >200) c o u t << P l e a s e w a i t . . . << e n d l ;
t d = GetTime ( ) ;
i f ( prime ) {
ZZ tmp , tmp11 ;
conv ( tmp , 3 9 0 5 1 ) ;
conv ( tmp11 , 1 1 ) ;
q=tmp power ( two , 6 0 0 2 )one ;
}
e l s e GenGermainPrime ( q , l e n g t h ) ; // q premier , e t p
=2q+1 p r e m ier a v e c prob exp ( 80)
p=twoq+one ;
c o u t << e n d l ;
c o u t << Datas c o l l e c t i o n << e n d l ;
c o u t << ========================= << e n d l << e n d l
;
c o u t << P u b l i c Key p ( prime ) : << p << e n d l <<
endl ;
8
while ( ! r o o t ) {
RandomBnd( g , p2) ; // Genere a l e a t o i r e m e n t un
nombre e n t r e 0 e t p2
g+=one ;
i f ( ( PowerMod ( g , two , p ) != one )&&(PowerMod ( g , q , p
) != one ) ) r o o t=true ;
}
c o u t << P u b l i c Key g ( p r i m i t i f r o o t ) : << g <<
e n d l << e n d l ;
RandomBnd( a , p2) ; // Genere a l e a t o i r e m e n t un
nombre e n t r e 0 e t p2
a+=one ;
keyA=PowerMod ( g , a , p ) ;
c o u t << S e c r e t Key a ( f o r A) : << a << endl<<
endl ;
RandomBnd( b , p2) ; // Genere a l e a t o i r e m e n t un
nombre e n t r e 0 e t p2
b+=one ;
keyB=PowerMod ( g , b , p ) ;
c o u t << S e c r e t Key b ( f o r B) : << b << endl<<
endl ;
t d = GetTime ( )t d ;
t p = GetTime ( ) ;
c o u t << P r o t o c o l << e n d l ;
c o u t << ========================= << e n d l << e n d l
;
c o u t << A s e n d s keyA t o B ( g power a ) : << keyA
<< endl<< e n d l ;
c o u t << B s e n d s keyB t o A ( g power b ) : << keyB
<< endl<< e n d l ;
c o u t << A computes keyB power a << e n d l ;
ZZ c ( keyA ) ;
keyA=PowerMod ( keyB , a , p ) ;
c o u t << B computes keyA power b << e n d l ;
keyB=PowerMod ( c , b , p ) ;
R
ef
erences
[1]
Wikipedia : fr.wikipedia.org
[2]
[3]
[4]
[5]
10