Sunteți pe pagina 1din 14

Le protocole Diffie-Hellman

Cryptographie - EPFL

Jose R. Beuret
Gwenol Grandperrin
Juin 2006

Table des mati`


eres
1 Introduction

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

Bailey Whitfield Diffie, ne le 5 juin 1944, est un cryptologue americain.


Il est lun des pionners de la cryptographie asymetrique (utilisation dune
paire de cles publiques et privees) en collaboration avec Martin Hellman et
Ralph Merkle.
En 1965, il recoit un Bachelor en mathematiques au MIT. En 1976 avec
laide de Martin Hellman, il publie New Directions in Cryptography. La
methode revolutionnaire decrite dans cet article permet de resoudre un
probl`eme fondamentale en cryptographie : la distribution des cles. Cette
methode sera par la suite renommee en methode dechange de cles DiffieHellman et cest elle que nous allons presenter dans ce document. Ce principe est aussi `a lorigine de methodes de chiffrage asymetrique plus evoluees
comme le RSA ou ElGamal
Diffie continua ses recherches au sein de Nortel Telecom o`
u il soccupa
de larchitecture du syst`eme de securite PDSO pour les reseaux X.25. En
1991, il rejoint Sun Microsystems en Californie o`
u il continue `a soccuper
des probl`emes de securite et de cryptographie.
En 1992, il est nomme Docteur Honoris Causa par lEcole Polytechnique
Federale de Zurich. Il est aussi membre de la fondation Marconi. En 1998,
il a ecrit avec Susan Laudau le livre Privacy on the Line sur les ecoutes
telephoniques et les enjeux politiques lies `a la cryptographie.

2.2

Martin Hellman

Martin E. Hellman, ne le 2 octobre 1945, est aussi un cryptologue americain.


Il a lui aussi developpe la cryptographie asymetrique (decouverte faite en
collaboration avec Ralph Merkle et Whitfield Diffie). Hellman est aussi `a
lorigine dune attaque avec compromis temps/memoire notamment utilisee
1

Fig. 1 Whitfield Diffie et 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

La cryptologie est une science qui englobe dune part la cryptographie,


cest `a dire lecriture secr`ete des donnees, et la cryptanalyse qui est lanalyse
de cette derni`ere.
En r`egle generale les methodes de cryptage font appellent `a des cles
de cryptage. Une cle de cryptage est un ensemble de valeurs qui permet
dencoder et de decoder des donnees.
Des algorithmes tels que le RSA utilisent plusieurs nombres premiers qui
doivent etre tenus secrets. Or la difficulte est de pouvoir communiquer la cle
de cryptage dun emetteur A `a un destinataire B sans quune tiers personne
E ne puisse lintercepter.
Cest l`a que le protocole Diffie-Hellman intervient. Il propose `a A et B
de pouvoir definir une cle secr`ete meme si E ecoute leur communication.
2

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

Supposons quune troisi`eme personne, disons E, ecoute les transmissions


de A et B. Dans ce cas E na acc`es qu`a p, g, g a mod p et g b mod p. Dans
ce cas, on peut se demander pourquoi il nest pas possible `a E de calculer a
ou b afin dobtenir la cle secr`ete. Il peut, en apparence, paratre simple de
calculer a = logg (g a ) ou b = logg (g b ). Mais ce nest pas le cas car on travaille
ici en mod p. Ce qui implique de calculer un logarithme discret. Or dapr`es
la litterature, il nexiste pas `a ce jour de solution rapide pour le calculer. E
est donc dans limpossibilite de determiner (g a mod p)b mod p.
Notons tout de meme quil faut que p soit suffisement grand pour eviter
que E tente une recherche exhaustive1 . Actuellement, en utilisant un nombre
premier p de lordre de 500 `a 1024 chiffres et a et b de lordre de 100 chiffres,
il est impossible de determiner la cle secr`ete, meme avec les meilleures algorithmes de resolution de logarithme discret.
Cependant comme de nombreux algorithmes utilisent le protocole de
Diffie-Hellman, si une solution pratique pour resoudre un logarithme discret etait decouverte, elle rendrait ceux-ci inutiles. Sachant que ce protocole
est notamment utilise pour les connections securisees Internet, on laisse au
lecteur le soin dimaginer les probl`emes qui en resulteraient.
1

La recherche exhaustive consiste `


a essayer toutes les possibilites jusqu`
a ce que la cle
secr`ete soit decouverte.

Racines primitives

Ce paragraphe a pour but de demontrer le petit theor`eme de Fermat


ainsi que definir et de prouver lexistence dune racine primitive dans Fp .
Dans lalgorithme presente auparavant, A et B devait se mettre daccord
sur un nombre premier p et une seconde valeur g comme cles publiques.
Le premier resultat montre que tout nombre eleve `a une certaine puissance vaut 1 mod p et donc quen choisissant mal g on pourrait simplifier
le travail dune personne voulant trouver la cle secr`ete. En effet, si A resp B
choisissent a, b R tels que g a mod p = 1 alors (g a )b mod p = 1 egalement
et donc la cle est plus simple `a trouver. Le second resultat montre quil est
possible pour A et B de trouver une valeur g qui permette de choisir a, b R
sans craindre que cet incident facheux ne se produise.
4.1 D
efinition. Soit n N {0}, on note (n) le nombre dentiers k avec
1 k n tel que n et k sont premiers entre eux. On appelle la fonction
dEuler (ou indicatrice dEuler ).
4.2 Proposition. (n) = card ((Z/nZ) )
Preuve. Soient k, n N avec 1 k n. On va monter que :
k et n sont premiers entre eux si et seulement si k est inversible dans Z/nZ.
(k, n) = 1 r, s Z tels que kr + ns = 1
r Z tel que kr 1 est multiple de n
r Z tel que kr 1 0 dans Z/nZ
r Z tel que kr = 1 dans Z/nZ
r est inversible dans Z/nZ

On peut verifier que la fonction dEuler poss`ede les proprietes suivantes :


4.3 Propri
et
es. Soient m, n, p, r N avec p premier.
1. Si m et n sont premiers entre eux, alors (nm) = (n)(m).
2. (p) = p 1.
3. Si n = pr , alors (pr ) = pr pr1 = pr1 (p 1).
4.4 Proposition. Soit Cn le groupe cyclique dordre n. Le nombre de generateurs de Cn est (n).
Autrement dit :
card {g Cn |hgi = Cn } = (n).
4

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.

De plus pour tout k Z on a :


kp k

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

(b1 b2 )n = 1 bn1 = bn2 = 1


ce qui nous permet decrire les equivalences :
((b1 b2 )n = 1) bn1 = bn2 = 1 n1 | n et n2 | n

ppcm(n1 , n2 ) | n n1 n2 | n
4.9 Th
eor`
eme. Soit Fp le corps `
a p elements avec p premier. Alors le

groupe (Fp , ) est cyclique.


5


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

Tout les elements x de Fp ne peuvent pas verifier xp1 pm = 1, sinon le


cardinal de Fp serait inferieur au nombre maximum de racines du polynome
1 1

X p1

m
p
m

1, soit p11 1 pmm , ce qui est absurde.


1 1

Soit donc a1 Fp tel que a11

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

#include <i o s t r e a m >


#include <s t r i n g >
#include <NTL/ZZ . h>
NTL CLIENT
int main ( int argc , char argv [ ] ) {
long l e n g t h =350;
bool time=f a l s e ;
2

Number Theory Library disponible sur http ://www.shoup.net/ntl/

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 ) ;

c o u t << KeyA and KeyB have been updated << e n d l ;


i f ( keyA==keyB ) {
c o u t << KeyA = KeyB = << keyA << e n d l ;
}
else {
c o u t << E r r o r Keys A (= << keyA << ) and B
(= << keyB << ) a r e d i f f e r e n t . . . << e n d l ;
}
t p = GetTime ( )t p ;
i f ( time ) {
c o u t << e n d l << Time << e n d l ;
c o u t << ========================= << e n d l <<
endl ;
c o u t << time f o r data :
<< t d << s <<
endl ;
c o u t << time f o r p r o t o c o l : << t p << s <<
endl ;
}
// c i n >> a ; // pour l i n u x
return 0 ;
}

R
ef
erences
[1]

Wikipedia : fr.wikipedia.org

[2]

A. Menezes, P. van Oorschot, S. Vanstone : Handbook of Applied Cryptography


CRC Press, 1996
venaz : Cours ex-cathedra - Alg`ebre I & II
J. The
EPFL, 2006

[3]
[4]

D-J. Mercier : Corps fini


IUFM de Guadeloupe, Morne Ferret, BP399, Pointe-`
a-Pitre cedex 97159

[5]

Cristoph Schiller : Motion Mountain, The Adventure of Physics, p. 1272


May 2006

10

S-ar putea să vă placă și