Vous êtes sur la page 1sur 27

Chapitre 3 : Cryptographie asymétrique

Introduction
Le concept de la cryptographie asymétrique a été introduit pour la première fois par
Whitfield Diffie et Martin Hellman en 1976. Utilise l’exponentielle modulaire. L’idée neuve
dans le domaine était d’utiliser deux clés différentes pour chiffrer et déchiffrer un message
et qu’il était impossible de générer une clé à partir de l’autre. Une des clés sera publiée et
l’autre doit être maintenu secrète.

Cryptosystème asymétrique ou à clé publique. Il permet de répondre au problème


d’échange de clé dans le cas symétrique. A la même époque une nouvelle approche à clé
publique a été proposée par Rivest, Shamir et Aldeman appelée RSA.

Les algorithmes RSA, ElGamal et Rabin seront à la fois pour le chiffrement et les signatures
numériques. Utilise également l’exponentielle modulaire. Chiffrement et déchiffrement,
l’échange des clés symétriques et l’authentification des messages.

Les systèmes hybrides permettent d’augmenter les performances du système en vitesse


de chiffrement/déchiffrement: un algorithme symétrique avec une clé générée
aléatoirement servira à chiffrer / déchiffrer le message, et un algorithme à clé publique
servira à chiffrer la clé.

Les algorithmes à clé publique sont conçus pour résister aux attaques à texte en clair choisi;
leur sécurité dépend à la fois de la difficulté de déduire la clé privée à partir de la clé
publique et la difficulté de déduire le texte en clair à partir du texte chiffré.

Inconvénient majeur de ces algorithmes : La vitesse de chiffrement et de déchiffrement


sont nettement plus grandes que pour les algorithmes de la cryptographie symétrique.
Habituellement sont trop lent pour le chiffrement de données en masse.

Avantages

 Permet le chiffrement et le déchiffrement;

 Authentification des messages (sorte de signature numérique);

 Chiffrer et échanger des clés de session des algorithmes symétrique dans un réseau
non sécurisée.

Algorithme asymétrique RSA


Le principe de base de cet algorithme est fondé sur des fonctions appartenant à la famille
des fonctions trappes ou pièges. Elles sont appelées des fonctions à sens unique à brèche
secrète : facile à calculer dans un sens et difficile voir impossible à calculer dans un temps
raisonnable dans le sens inverse sans la connaissance de la brèche secrète.
Principe de RSA
L’utilisation du RSA consiste à générer tout d’abord des clés publiques et privées et ensuite
effectuer le chiffrement, le déchiffrement des messages ou l’authentification (signature
numérique des messages). Tout ça revient à la factorisation de deux nombres premiers.

Etape 1 : Génération des clés


Pour générer les deux clés d’un utilisateur, cette étape est basée sur une multiplication de
deux grands nombres premiers faciles à calculer et sur la difficulté de factoriser le résultat de
cette multiplication. Sous cette condition, cette étape consiste à calculer trois nombres e, d
et n permettant de définir :

Une clé publique Kp = ( e , n ), Une clé privée Kpr = ( d , n ).

Etape2 : Chiffrement et déchiffrement


Le chiffrement/ déchiffrement des messages est basé sur l’exponentielle modulaire de base
a et d’exposant b modulo n : ab mod n

Elle est facile à calculer dans un sens et elle est difficile à inverser (le logarithme discret)

Chiffrement C = Ekp (M) =Me mod n avec Kp= (e, n)

Déchiffrement M = Dkpr (C) = Cd mod n avec Kpr = (d, n)

Outils mathématiques utilisés par les algorithmes asymétriques

La cryptographie asymétrique utilise essentiellement la théorie des nombres et plus


particulièrement les outils suivants : Génération de très grands nombres premiers,
Arithmétique modulaire de base n, Exponentielle modulaire de base n, Inversion modulaire
de base n, Fonction d’Euler, Algorithme d’Euclide étendu et théorème d’Euler.

Génération de très grands nombres premiers

Un nombre premier est un entier dont les seuls facteurs soit 1 et lui-même. Deux nombres a
et b entiers sont premiers entre eux si leurs pgcd(a,b) = 1. C-à-d quand il n’ont d’autre
facteur en commun que 1. Par exemple, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 … sont des nombres
premiers.

L’algorithme le plus utilisé pour tester la primalité d’un entier de grande valeur est celui de
Rabin-Miller.

Arithmétique modulaire de base n

b = a mod n c’est équivalent à a ≡ b (mod n) c-à-d a est congrue à b modulo n. Il indique


aussi que a = kn + b avec a, b, k et n sont des entiers. Si a >0, b>0 et b<n alors b est le reste
de la division de a par n appelé résidu de a modulo n et représente une réduction modulaire.
L’ensemble des résidus modulo n est { 0 , 1 , …. , n-1 }. L’opération a mod n dénote le
résidu de a. Ce résidu est un nombre entier dans l’ensemble précédente. L’arithmétique
modulaire a les mêmes propriétés que l’arithmétique classique : commutativité, associativité
et distributivité.

Les formules suivantes expriment formellement certains

Propriétés :

1. Addition modulo :
(a + b) mod n = [(a mod n) + (b mod n)] mod n;

2. Soustraction modulo :
(a - b) mod n = [(a mod n) - (b mod n)] mod n;

3. Multiplication modulo :
(a x b) mod n = [(a mod n) x (b mod n)] mod n;

4. Distributivité :
(a x (b + c) ) mod n = [ ((a x b) mod n) + ((a x c) mod n)] mod n.

3. Exponentielle modulaire de base n

Définit par ax mod n : Il existe plusieurs techniques qui permettent de calculer


l’exponentielle modulaire sans engendrer des résultats démesurés.

Exemple : a8 mod n ,

1. par l’approche simple c’est d’effectuer 7 multiplications suivies d’une coûteuse


réduction modulo n:

a8 mod n = (a x a x a x a x a x a x a x a ) mod n

1. On peut faire 3 multiplications plus petites ainsi que 3 réductions modulo n


également plus petites:

a8 mod n = ((a x a) mod n) 2 mod n) 2 mod n

Le meilleur algorithme est celui de Montgomery.

4. Inversion modulaire de base n

Le calcul de l’inverse modulaire est un problème difficile à résoudre par rapport à l’inversion
classique ( l’inverse de 4 est x=1/4 car on a 4 x = 1) .

Corollaire : l’équation ax mod n =1 (ax ≡ 1 mod n) avec a et x Є { 0 , n-1} a une solution


unique a-1 si a et n sont premiers entre eux c-à-d pgcd(a , n)=1, sinon pas de solution.
Par exemple, l’inverse de 5 mod 14 est 3 car 5x3=15 est congrue à 1mod14. Mais, 2mod14
n’a pas d’inverse, car 2 et 14 ne sont pas premiers.
Si n est premier, chaque entier de l’ensemble des résidus est premier par rapport à n et
chacun a un inverse dans cet ensemble calculé par : x = a-1 mod n est appelé l’inverse
multiplicatif modulo n de a. L’algorithme d’Euclide étendu ou le théorème d’Euler
permettent de calculer l’inconnu x.

Remarque : Algorithme Euclide permet de calculer le pgcd(a, b). Or, pgcd(a, b)=d = a x + b y.
Par contre, la version étendue permet de calculer les coefficients de Bézout (x, y) et d.

5. Fonction d’Euler

Le théorème/fonction d’Euler permet de calculer l’inverse modulaire d’un entier modulo n


en utilisant l’ensemble restreint des résidus modulo n, noté Ф(n), est le nombre d’entiers
positifs plus petits que n et premiers avec n.

1. Si n est premier alors Ф(n) est le cardinal de l’ensemble des résidus


{0, 1, 2, …, n-1}-{0} : ensemble restreint des résidus. Ф(n) = n -1.

2. Si n = p x q avec p et q nombre premiers alors


Ф(n) = Ф(p) Ф(q) = (p - 1)(q – 1)

La fonctionne Ф est appelée fonction indicateur d’Euler.

Théorème d’Euler: Si a et n sont premiers entre eux alors aФ(n) mod n =1. Donc, il est facile
de calculer l’inverse de a modulo n. La résolution de ax mod n =1 est aФ(n)-1 mod n.

Exemple, l’inverse de 5 modulo 7. pgcd(5, 7)=1, Ф(7) = 7-1= 6. Donc,

56-1 mod 7=3. Par la généralisation du théorème d’Euler, l’inversion de ax mod n = b


(pgcd(a,n)=1) est calculée par : x = (b aФ(n)-1 ) mod n

Par l’algorithme d’Euclide Etendu, on a x = b (a-1 mod n) mod n

Factorisation La factorisation d’un nombre consiste à chercher tous les facteurs premiers
qui les composent (10 = 2 x 5, 60 = 2 x 2 x 3 x 5).

Génération des clés publique et privée d’un correspondant

Calcul des nombres n, e et d


2. Trouver deux entiers premiers p et q dont les valeurs sont extrêmement grandes,
valeurs usuelles sont codées sur 2048 et 4096 bits. Puis calculer n =p q.

3. Calculer la fonction d’Euler Ф (n) = (p -1)*(q-1)

Calculer les nombres : e et d.


Condition pour avoir le chiffrement par (e , n) et le déchiffrement par (d , n) :

(Me mod n)d mod n = Med mod n, Si ed mod Ф (n) = 1  M mod n = M


Par conséquent, M mod n = M impose la décomposition du message à chiffrer ou à
déchiffrer sous la forme de blocs dont la taille est inférieur à celle du modulo n (0<M<n).

Calcul du nombre e (clé publique)


Pour que ed mod Ф (n) = 1 possède une solution unique il faut que le pgcd(e , Ф (n)) = 1
(Vérification à travers l’algorithme d’Euclide étendu). De ce fait, e doit appartenir à
l’ensemble restreint des résidus de n. Ensuite il faut choisir e dans cet ensemble {2 ,…, n –
1}. Donc, (e , n) représente la clé publique Kp =(e,n)à publier.

Calcul du nombre d (clé privée)


L’inversion de e modulo n peut être calculé par le théorème d’Euler : selon le théorème
d’Euler nous avons eФ (n) mod n =1 et donc l’inverse est donné par d = e-1 = eФ (n)-1 mod n.

Remarque : e-1 peut être également calculé par l’algorithme d’Eculide étendu d = e -1 mod
Ф (n) avec d Є {2 ,…, Ф (n) – 1}. (d , n) représente la clé privée Kpr =(d,n)à garder secrète.

Si la valeur retourner par l’algorithme est négatif, alors il faut chercher une valeur u = u + k
Ф (n) tel que 2<u< Ф (n) et k =-1, -2, -3, ….

Les nombres p, q et Ф (n) doivent être détruits après leurs utilisations dans le
chiffrement/déchiffrement. Ainsi, le chiffrement d’un message M est effectué par C=M e
mod n et le déchiffrement du message C par M = Cd mod n.

Exemple 1:

Supposons qu’un utilisateur a un message M=8 à chiffrer. Le processus de chiffrement via


RSA est suit les étapes suivants:

Etape 1 : Génération des clés publique et privée

Choix de deux nombres premiers, par exemple p=3 et q= 5;

Calcul le produit de ces nombres n = pq =3x5=15;

Calcul de la fonction d’Euler Ф (n) = (p-1)(q-1) = 8;

Enfin, le calcul des nombres e et d;

Choix de e dans l’ensemble {2 , …, n-1} premier avec Ф (n), par exemple e =11 (Vérification
à travers l’algorithme d’Euclide étendu).

Alors la clé publique générée est donnée par le couple suivant:

Kp = ( 11 , 15 )

Alors la clé privée est générée via la relation suivante :

d= e-1 mod 8= 3 (via Euclide étendu). Ce qui donne le couple : Kpr = ( 3 , 15 ).


Etape 2: Chiffrement du message en clair M

Tout d’abord, il faut représenter le message M comme un nombre tel que 1<m<n. Avec la clé
publique générée ci-dessus le cryptogramme obtenu est : C = 811 mod 15 =2

Etape 3: Supposons qu’un autre utilisateur/récepteur a reçu le cryptogramme C. Il le


déchiffre avec sa clé privée calculée comme suit:

M = 23 mod 15 =8

Exemple 2

1. On choisit: p = 2357 et q = 2551 (en pratique p et q seront beaucoup plus grands) ;


d’où n = p q = 6012707

2. Indicateur d’Euler est Ф (n) = (p − 1)(q − 1) = 6007800.

3. Choix de e, par exemple e = 3674911 et vérifie qu’il est premier avec grâce à
l’algorithme d’EUCLIDE ;

4. Trouver d aussi par cet algorithme tel que e d mod Ф (n)=1. On trouve : d, et
donc la clé privée est (d,n)=(422191, , 6012707)

5. La clef publique est (e, n) = (3674911, 6012707).

6. Pour chiffrer le message m = 5234673 < 6012707, on utilise la clé publique et on c =


m^e mod n = 3650502.

7. Pour déchiffrer le message c, on calcule c^d mod n = 5234673 et retrouve bien m.

Exemple 3: Supposons que l’émetteur a un message en clair M =« couleurs » a envoyé à un


récepteur via un canal non sécurisé suivant RSA.

Etape 1: Génération des clés publique et privée

Choix de deux nombres premiers p = 53 et qA= 17  n = pq = 901

1. Calcul de la fonction d’Euler Ф(n) = (p - 1) (q - 1) = 832

2. Calcul de e et d

3. Choix de e dans {2 , …, 900} premier avec Ф(n) par exemple e=83. Donc la clé
publique est Kp = ( 83 , 901 )

4. Ainsi, d = 83-1 mod 832 = 411, ce qui donne la clé privée

Kpr = ( 411 , 901 ) (via Euclide étendu)

Etape 2: Chiffrement de M maintenant


On chiffre le message M avec la clé publique Kp= (83, 901). La taille de n est trois chiffres ce
qui impose de découpé le message en bloc de taille 3.

Le message M = m1 m2 m3 m4 m5 m6 m7 m8 = c o u l e u r s est codé en ASCII par


099 111 108 101 11 7 114 115.

Etape 3: Déchiffrement du cryptogramme C

Maintenant supposons que le récepteur a bien reçu un cryptogramme C. Il le déchiffre avec


sa clé privée. Il va découper C en des blocs de taille 3 chiffres (après le codage ASCII). Le
tableau ci-après donne les résultats de calcul.
Donc, on trouve M = 099 111 117 108 101 117 114 115 = c o u l e u r s.

On peut remarquer que l’utilisation de l’élévation à la puissance puis l’utilisation du modulo


permet de changer la base des registres choix et d’introduire une discontinuité. Par exemple,
m7 = 114 et m8 = 115 sont des valeurs proches. Par contre leurs cryptogrammes c7 = 198 et
c8 =378 sont des valeurs très différents.

Authentification des messages via RSA


L’authentification d’un message peut être considéré comme une signature numérique. En
effet,

1. un utilisateur signe son message M en utilisant sa clé privée : Kpr =(d, n) .


C = DKpr (M) = Md mod n.

2. il envoie le résultat à son correspondant;

3. Le récepteur déchiffre le cryptogramme C en utilisant la clé publique de


l’eméteur : Kp =(e, n).

4. Il trouve M = EKp(C) = Med mod n.

L’inconvénient majeur : est que M peut être déchiffré par n’importe qui puisque la clé Kp
=(e, n) est publique. Donc, n’importe qui peut qui ayant l’accès à cette clé vérifier la
signature. La signature du message n’est pas son chiffrement.

En combinant les deux protocoles signé et chiffré, on peut créer des messages à la fois
chiffrés et signés. L’expéditeur commence par joindre sa signature numérique au message,
puis chiffre la paire message-signature par la clé publique du destinataire. Ce dernier
déchiffre le cryptogramme par sa clé privée pour obtenir à la fois le message en clair et sa
signature numérique. Maintenant, il peut vérifier la signature avec la clé publique de
l’expéditeur.

En outre, on distingue deux scénarios permettant d’assurer l’authentification entre


l’émetteur A et le récepteur B. A possède une paire de clés (KA =(eA, nA), KA pr=(dA, nA)) et
également B a une paire de clés (KB, =(eB, nB) , KB pr = (dB, nB)) .

Scénario 1 :

1. L’émetteur A chiffre le message en clair M avec sa clé privée.

2. Il chiffre le résultat C1 avec la clé publique de B (authentification de B par A).

3. B déchiffre le cryptogramme reçu C par sa clé privée.

4. Il déchiffre en suite le cryptogramme obtenu M1 en utilisant la clé publique de A


(authentification de A par B).

Scénario 2 :

1. L’émetteur chiffre M avec la clé publique de B (authentification d récepteur par A).

2. A chiffre à nouveau cryptogramme obtenu C1 avec sa clé privée.

3. B déchiffre le cryptogramme reçu C par la clé publique de A (authentification de


l’émetteur par B).

4. Il déchiffre en suite le cryptogramme obtenu M1 en utilisant sa clé privée.

Attaque sur l’algorithme RSA :


Les nombres n et e sont publiques, de ce fait il y a une possibilité de chercher p et q puis
Ф(n) en se basant sur la factorisation de n en deux nombres premiers. Si on arrive,
l’algorithme sera cassé car le calcul de e et de d devient très facile.

Sécurité de RSA :
La sécurité de RSA réside au niveau de la longueur des nombres p et q qui doivent être très
grands. Ces deux nombres ont été codés sur 512 bits, 640 bits et 1024 bits. Actuellement
sont codés sur 2048 et 4096 bits.

Performances :
Le RSA est moins rapide que le DES à cause des calculs des puissances modulo. Dans les
réalisations matérielles le RSA est environ 1000 fois plus lente que le DES. Au niveau logiciel,
le chiffrement de RSA est bien plus rapide si vous choisissez bien la valeur de e (les plus
courants sont 3, 17 et 65537).
Conclusion sur RSA:
Le RSA est le plus populaire parmi les algorithmes à clé publique. Vu la complexité de calculs,
le RSA est souvent utilisé au début des communications pour échanger des clés de session
(faible quantité d’information à communiquer), puis des algorithmes symétriques qui seront
utilisés pour effectuer des communications en différés ou en temps réel.

Algorithme d’échange de clés


Diffie et Hellman ont été les fondateurs de la cryptographie à clés publiques. Leur algorithme
a permis de résoudre le problème d’échange des clés de la cryptographie à clé symétrique.
Son principe est basé sur l’exponentielle modulaire. La fonction utilisée est

gm mod n,

Où g et n sont deux grands entiers premiers entre eux et sont publiques, m est un entier
aléatoire gardé secret.

 KA p = gX mod n est la clé publique de A et sa clé privée est KA pr=X.

 KB p = gY mod n est la clé publique de B et sa clé privée est KB pr=Y.

Pour trouver les clés privées X et Y un attaquant doit résoudre l’inverse de g X mod n ou gY
mod n. Cette résolution reste un problème très redoutable en mathématique. Le protocole
d’échange des clés secrètes se déroule comme suit :

1. Au début deux correspondants A et B se mettent d’accord sur deux nombre entiers n


et g,

2. A choisit un grand nombre entier aléatoire X gardé secret et calcul : gX mod n et


envoie le résultat à B,

3. B choisit un grand nombre entier aléatoire Y gardé secret et calcul : gY mod n et


envoie le résultat à A,

4. A reçoit gY mod n, puis calcul (gY mod n) X mod n = gYX mod n,

5. B reçoit gX mod n, puis calcul (gX mod n) Y mod n = gXY mod n,

Ainsi, la valeur K s= gYX mod n reçue par les deux parties devient leur secret partagé et par
conséquent, elle peut être utilisé comme clé de session pour communiquer en utilisant un
algorithme à clé symétrique comme DES et AES.
Algorithme d’ElGamal
La version de base de cet algorithme, publiée en 1985, a été utilisée pour effectuer des
signatures numériques. Elle tire également sa sécurité sur la difficulté de calculer les
logarithmes discrets. Une autre version modifiée a été proposée pour le chiffrement et le
déchiffrement des messages.

Signature numérique d’Elgamal


Pour générer une paire de clé, un correspondant doit choisir un nombre premier n et deux
nombres aléatoire g et x < n. Ensuite, il doit calculer : y = gx mod n,

Ce qui permet de générer : Une clé publique Kp =(y, g, n); Une clé privée Kpr = x. La
signature d’un message M nécessite le choix d’un nombre aléatoire k tel que k et n-1 soient
premiers entre eux. Cette signature sera composée de deux parties:

a. La première partie de la signature est exprimée par :

a = gk mod n.

La deuxième partie de la signature est obtenue en résolvant l’équation ci-dessous avec


l’algorithme d’Euclide étendu: M = (xa + kb) mod ( n-1).

La signature de M sera donc représentée par a et b. Pour vérifie une signature, un


correspondant B reçoit le message M, et sa signature aA et bA. Il utilisera la clé publique de
A : Kp (yA, gA, nA ) pour confirmer l’égalité suivante : yaA abA mod nA = gMA mod nA. S’il
trouve l’égalité la signature est valide. Il faut prendre à chaque opération de chiffrement et
signature une valeur différente de k.

Exemple de signature
1- Clé publique et privée de A
• nA = 11, gA = 2 < nA , xA < nA , xA = 8, yA = gAxA mod nA = 28 mod 11 =3.

On trouve après le calcul les clés: KAp = (3, 2, 11) KApr = 8.

2- Signature de M=5 (A vérifier)

 Choix de kA = 9, nA – 1 = 10, pgcd(9,10) = 1;

 Calcul de aA = gkA mod nA = 29 mod 11 =6;

 Résolution de M = (xA a + kA b) mod ( nA-1):

5 = (8*6 + 9*bA) mod 10. L’algorithme d’Euclide étendu donne bA = 3, Signature de M =


(6,3)

3- Le correspondant B reçoit M = 5 et (6 ,3), pour confirmer la signature de A, il calcul :


yaAAabAA mod nA = gMA mod nA  36 .63 mod 11 = 25 mod 11 = 10. Donc, il est sûr que c’est
A qui a signé le message M.

Chiffrement d’ElGamal
Un correspondant B envoie un message m au correspondant A, en utilisant la clé publique de
A : KAp = ( yA, gA , nA). Le message chiffré sera composé de deux parties comme suit :

ψ1 = gkBA (mod nA), ψ2 = m ykBA (mod nA),

kB est un nombre aléatoire choisi par B et premier avec nA-1. Le couple C = (ψ1, ψ2) est le
cryptogramme obtenu dont la taille est le double de celle de m.

Déchiffrement d’ElGamal
Le correspondant A reçoit le cryptogramme C et le déchiffre avec sa clé privée xA en utlisant
l’expression suivante :

m = ψ2 ψ1 nA-1-xA (mod nA).

En effet: puisque, ψ1 nA-1≡1(mod nA) , on a

ψ2 ψ1 nA-1-xA (mod nA) ≡ m ykBA (gkBA)-xA (mod nA) ≡ m (gxAA)kBA (gkBA)-xA (mod nA) = m

Exemple de chiffrement
Clés publique et privée de A sont :
KAp = (yA, gA, nA) = ( 3, 2, 11) et KApr = xA =8.

B chiffre le message m=5 en utilisant sa clé kB = 3, pgcd( 3,10 ) =1. Il trouve alors les deux
parties suivantes:
ψ1= 2^3 mod 11 = 8,
ψ2 = 33 x 5 mod 11 = 3^3 mod 11 x 5 mod 11 = 5 x 5 mod 11 =3.
Ensuite, B envoie au récepteur A le cryptogramme C=(8, 3). A utilise sa clé privée xA = 8 et
déchiffre C et trouve le message en clair suivant

m= ψ2 ψ1 nA-1-xA (mod nA)= 3 * 811-1-8 (mod 11) = (3 * 64 = 192) (mod 11) =5

Remarque on a bien t(C) = 2 (2 chiffres) > 1= t(M).

Résumé sur l’algorithme d’ElGamal:


Le chiffrement / déchiffrement, l’authentification et la signature d’ElGamal ne peuvent être
effectués que sur des messages dont la taille est entre 8 à 64 caractères (de 64 bits à 512
bits). Ceci est dû à la complexité du calcul de l’exponentielle modulaire qui utilise des clés
publiques ou privées représentées par des nombres de grandes valeurs de 100 à 500 chiffres
(de 512 bits à 2048 bits). ElGamal est parmi les créateurs du protocole SSL.

Exemple de clé publique codé sur 1024 bits en Hexadécimal :


3081 8902 8181 00CF 8424 B08C CD71 9110 7E44 2B2E 8014 35F0 49CE 8C3E 8CA9 3516
5FC7 9EB8 B4D2 9A89 637C 20C4 DB30 97AF ECB3 37F2 A000 00E8 E350 BA90 2B20 EEE5
9D5B 4A87 E0D5 895A B6A4 05A6 B2C4 2715 555F 6699 0A68 95AD 3963 6071 4C00 8431
7693 7EC0 20F9 8C31 EC2A 8585 9054 3478 4DD1 366B 9024 67B1 E8C8 C812 6EE9 E35B
5D04 700D 7C28 2702 0301 0001

Conclusion
La caractéristique principale des algorithmes asymétriques est que sont très coûteux en
temps de calcul et bien entendu en espace mémoire nécessaire.

Utilisation courante : Echange des clés de session des algorithmes symétriques (8 caractères
(64 bits) à 32 caractères (256 bits)) en utilisant le service de chiffrement / déchiffrement.

Signature et l’authentification des messages plus longs n’est possible que sur des résumés
des messages.

Puisque une partie de la clé est publique une garantie et vérification de la relation entre
cette partie et le correspondant est nécessaire et ce qui possible via la certification des clés
publiques – PKI : Public Key Infrastructure.

Chapitre 4 : Protocoles d’authentification


L’objectif est de garantir la validité des clés publiques. Pour cela, on se base sur une partie
tierce appelée Autorité de Certification(AC) qui donne la certification de la clé publique via
sa signature numérique.
Définition de la signature numérique

La signature numérique doit avoir les mêmes caractéristiques qu’une signature manuscrite à
savoir :

1. Elle ne peut être limitée pour prouver que le signataire a délabrement signé son
document;

2. Elle doit authentifier la signature;

3. Elle n’appartient qu’à un seul document : pas réutilisable;

4. Un document signé ne peut être modifié (intégralité);

5. Elle ne peut être reniée (non répudiation). La non-répudiation signifie la possibilité de


vérifier que l'envoyeur et le destinataire sont bien les parties qui disent avoir
respectivement envoyé ou reçu le message/clé.

Existence d’une relation biunivoque entre un document signé et la signature qui


l’accompagne.

Outils pour avoir une signature numérique:

1. Les algorithmes asymétriques permettent une signature numérique des messages


très court (<256 bits);

2. Pour les messages de grandes tailles, il faut utiliser une fonction de contraction ou de
condensation appelée fonction de hachage à sens unique. Elle permet de générer
un résumé du message appelé une empreinte digitale ou un condensé ou un digit du
document initial.

Notion de fonction de hachage à sens unique (one way hach function).

Définition de hachage :
C’est une fonction mathématique facile à calculer dans un sens (chiffrement facile) et est
extrêmement difficile à calculer dans le sens inverse (déchiffrement difficile). Elle opère sur
un message M de taille quelconque et donne un résumé (hachage) de taille fixe.

Propriété de la fonction de hachage H(M) :


2. M est de taille variable;

3. empreinte digitale ou hachage h=H(M) est de taille fixe;

4. elle est facile de calculer h à partir de M;

5. impossible de remonter à M à partir de H(M);

6. rapidité du calcul de l’empreinte;


7. impossible de générer deux documents/textes différents ayant la
même empreinte. (H(M) est sans collision)

8. très difficile de trouver deux messages aléatoires qui donnent la même signature.

Principe de fonctionnement :
Le message M est décomposé en des sous blocs Mi de même taille. Donc, on a M = M0 M1
…MN-1. Chaque bloc Mi subira un hachage : H(Mi) = f(Mi, H(Mi-1)): f est la fonction de
hachage à sens unique.

Pour le premier bloc M0, une constante sera utilisée comme valeur initiale, pour le bloc M1,
H(M0) représente une valeur d’initiation et ainsi de suite. A la fin du hachage, H (M N-1)
représente l’empreinte digitale du message M.

Remarques sur la fonction de hachage


- La taille du résumé H(M) est entre deux valeurs standards 128 ou 160 bits. Particularité
des fonctions de hachage :

• Algorithmes associés sont publiques;

• Une fois M haché on ne peut plus restituer M (sens unique).

- Assure l’intégralité mais ne peuvent pas authentifier l’auteur de M. Ce qui nécessite la


cryptographie asymétrique qui offre le service d’authentification.

- H(M) et RSA ou ELGAMAL == à signature numérique.

- Fonction de hachage à sens unique avec clé (ou à brèche secrète).


Exemples d’utilisation
La fonction de hachage utilise l’un des algorithmes suivants:

-MD4 : Message Digist version 4 (produit des empreintes de 128 bits);


-MD5 : Message Digist version 5 (produit des empreintes de 128 bits);
-SHA2 : Secure Hach Algorithm version 2 (produit des empreintes de 160 bits);
-RIPEMD 160 : Ripe Message Digest.

Elle utilise aussi un algorithme asymétrique comme RSA & ELGAMAL. ou bien utilise le
standard de signature numérique (DSS) : DSA Digital Signature

Création d’une signature numérique


Le correspondant A signe un message M en utilisant une fonction de hachage H(M) et en
chiffrant le résultat avec sa clé privée KApr le résultat est transmis à un correspondant B.

S(M)=EKApr(H(M))

Remarque :
Le message M peut être clair ou chiffré avec un algorithme symétrique dont la clé a été
préalablement échangée entre A et B en utilisant un algorithme asymétrique. Dans ce cas B
reçoit C= EKBp(M) et S(M)

Vérification d’une signature numérique


Le correspondant B reçoit le message Mr et une signature S(M) . Il utilise la clé publique de
A (KAp) pour déchiffrer la signature S(M).

1. H(M)=EKAp(S(M))=EKAp(DkApr(H(M));

2. Il hache le message Mr pour calculer H(Mr);

3. Si H(Mr)=H(M) alors la signature est valide sinon M est à jeté.

Inconvénient majeur du protocole de la signature numérique : certification de la clé publique


du correspondant. Ce qui nécessite une autorité de gestion de clé.

Gestion des clés et certificat numérique


Le problème majeur de la cryptographie asymétrique est la publication des clés publiques
des différents utilisateurs. Cette publication doit offrir l’assurance que :

 les clés publiques sont bien celles des utilisateurs à qui elles sont associées;

 l’organisme qui publie les clés publiques doit être digne de confiance (tiers de
confiance);

 Les clés publiques sont validées.


Pour cela, on a recours à un certificat numérique. Un certificat numérique est un document
numérique fixant les relations qui existent entre une clé publique et son propriétaire (un
utilisateur, une application, un site, une machine…). La figure suivante montre la génération
de la certification de la clé publique.

Le certificat est conçu pour:

 garantit l'identité d'un ordinateur distant;

 garantit votre identité auprès d'un ordinateur distant;

 assure que le logiciel provenait d'un éditeur de logiciels;

 protège le logiciel contre toute modification après sa publication;

 protège le courrier électronique;

 permet aux données d'être signées avec l'heure en cours;

 permet aux données sur le disque d'être cryptées;

 permet une communication sécurisée sur Internet.

La gestion technique et administrative de ces certificats sont assurées par une infrastructure
de gestion des clés IGC ou Public Key Infrastructure (PKI). Une PKI repose sur les organismes
suivants :

 Autorité de Certification (AC), dont la fonction est de définir la politique de certification


(PC) et de la faire appliquer, garantissant ainsi un certain niveau de confiance aux
utilisateurs.

 Autorité d’Enseignement (AE), dont la fonction est de vérifier que le demandeur est
bien la personne qu’il prétend être, conformément aux règles définies par l’autorité de
certification. Elle garantit la validité des informations contenues dans le certificat.
L’autorité d’enseignement est le lien entre l’opérateur de certification et l’abonné.

 Opérateur de Certification (OC), dont la fonction est d’assurer la fourniture et gestion


du cycle de vie des certificats. Son rôle consiste à mettre en œuvre une plate forme
opérationnelle, fonctionnelle, sécurisée, dans le respect des exigences énoncées dans la
politique de certification (PC) et dont les modalités sont détaillées dans la déclaration
des pratiques de certification (DPC).

La figure suivante montre la génération de la certification de la clé publique via des


organismes de certification.

Quand un utilisateur veut communiquer avec un autre il télécharge de l’annuaire Le


certificat. Puis il vérifie la validité du contenu du certificat en appliquant d’une part la
fonction de hachage au contenu du certificat et d’autre part il déchiffre l’empreinte avec la
clé publique d’AC et s’il trouve l’égalité des informations du certificat valides.

Description de l’algorithme de hachage MD5


MD5 est une version améliorée de MD4. Le principe de base de cet algorithme, conçu par R.
Rivest, est fondé sur la manipulation de blocs de 512 bits chacun (64 caractères). Chaque
bloc est décomposé sous la forme de 16 sous blocs de 32 bits chacun. Ces sous blocs
constituent une des entrées de l’algorithme. 4 fonctions non linéaires sont utilisées. Chaque
fonction est utilisée dans une ronde (MD5 possède 4 rondes). Chaque ronde effectue 16
itérations. La sortie de l’algorithme est un ensemble de 4 variables de 32 bits. De ce fait, le
résultat de hachage est codé sur 128 bits.

Étape 1 : pré traitement du message


Le message M peut avoir une taille quelconque, il doit être complété de manière à ce que sa
taille soit multiple de 512 bits (M mod 512 =0). Pour cela, rajouter 1 suivi d'autant de 0 que
nécessaire. Message multiple de 512 bits est noté par M’.

Message M initial Complément de M taille de M

Codé la taille du message initial sur 64 bits, et concaténer ces 64 bits au résultat précédent.
Le nouveau message est M’.

- Découpage de M’ en blocs de 512 bits chacun

Chaque bloc Bi est découpé en 16 sous blocs de 32 bits chacun, Bi  M[0], M[1], …, M[15].

Définition de 4 registres/variables de 32 bits A, B, C, D. Par la suite les calculs seront


effectués sur ces registres. A la fin, le résumé est donné en concaténant ces 4 variables /
registres.

Étape 2: Initialisation pour le traitement de B0

Les 4 variables (variables de chaînage) A,B,C,D de 32 bits sont initialisées par :

A = 01 23 45 67 B = 89 AB CD EF

C = FE DC BA 98 D = 76 54 32 10

Ces 4 variables sont copies dans 4 autres variables :

AA = A, BB = B,

CC = C, DD = D.

Étape 3 : Calcul itérative des 4 rondes (4*16=64 itérations)

Dans chaque ronde, on calcul de nouvelles valeurs des variables A, B, C, D à partir des
anciennes valeurs en utilisant dans chaque ronde une fonction non linéaire. Elle permet
d’évoluer ces variables de manière non-linéaire, et d'assurer les propriétés de sens unique.

Ronde 1

F(X,Y,Z)=(X AND Y) OR ( NOT(X) AND Z)

Ronde 2

G(X,Y,Z)=(X AND Z) OR (Y AND NOT(Z))


Ronde 3

H(X,Y,Z)=(X XOR Y XOR Z)

Ronde 4

I(X,Y,Z)=Y XOR (X XOR NOT(Z))

Où X, Y et Z dénotent l’un des variables A, B,C ou D. Ces fonctions renvoient des valeurs sur
32 bits qui seront ajoutées à la 4 eme variable (non impliquée dans le calcul), et au sous bloc
considéré et à une constante T. Ce nouveau résultat sera ensuite décalé circulairement vers
la gauche de S positions. Enfin, le résultat de ce décalage est ajouté à l’une des variables
A,B,C ou D.

Détails du calcul de A,B,C et D

Ronde 1

A = B + [(A + F(B,C,D) + M[j] + T[i])<<<S[i]]

B = C + [(B + F(C,D,A) + M[j] + T[i])<<<S[i]]

C = D + [(C + F(D,A,B) + M[j] + T[i])<<<S[i]]

D = A + [(D + F(A,B,C) + M[j] + T[i])<<<S[i]]

Ronde 2

A = B + [(A + G(B,C,D) + M[j] + T[i])<<<S[i]]

B = C + [(B + G(C,D,A) + M[j] + T[i])<<<S[i]]

C = D + [(C + G(D,A,B) + M[j] + T[i])<<<S[i]]

D = A + [(D + G(A,B,C) + M[j] + T[i])<<<S[i]]

Ronde 3

A = B + [(A + H(B,C,D) + M[j] + T[i])<<<S[i]]

B = C + [(B + H(C,D,A) + M[j] + T[i])<<<S[i]]

C = D + [(C + H(D,A,B) + M[j] + T[i])<<<S[i]]

D = A + [(D + H(A,B,C) + M[j] + T[i])<<<S[i]]

F, G, et H dénotent des fonctions non-linéaires. M[i] dénote le bloc (32 bits) courant du
message en clair. M[j] : j (0 à 15) ème bloc, T[i] : constante calculée à l’itération i par
429467296 . abs(sin[i]) (i en radian). S[i] : nombre de décalages correspondant à l’itération i
(0 à 63).
Ronde 4

A = B + [(A + I(B,C,D) + M[j] + T[i])<<<S[i]]

B = C + [(B + I(C,D,A) + M[j] + T[i])<<<S[i]]

C = D + [(C + I(D,A,B) + M[j] + T[i])<<<S[i]]

D = A + [(D + I(A,B,C) + M[j] + T[i])<<<S[i]]

A la fin de la 4eme ronde on fait les mise à jour des variables :

A = A + AA B = B + BB

C = C + CC D = D + DD

Ces 4 variables seront utilisées comme entrée pour le traitement du bloc suivant B1.

Les 4 rondes sont effectuées autant de fois qu’il y a de blocs de 512 bits dans le message
complété M’.

Étape 4 : Empreinte du message M

L’empreinte du message sera codée sur 128 bits en regroupant les 4 variables A, B, C et D de
32 bits.
Concurrents de MD5
SHA 1 : empreinte sur 160 bits;
SHA 2 : 3 choix 256, 384 ou 512 bits;
RIPEMD 160 : empreinte sur 160 bits;

Le standard de la signature numérique DSS.

L’algorithme de signature à clé publique (DSA : Digital Signature Algorithme) a été proposée
par le NIST en 1991, comme standard de signature numérique (DSS : Digital Signature
Standard).

Le DSA est une variante de l’algorithme de signature d’ElGamal.

Génération d’une paire de clés d’un correspondant


 n nombre premier de taille entre 512 et 1024 bits;

 q nombre premier avec (n-1) de taille160 bits;

 calculer g=h(n-1)/q mod n où h<n-1 tel que g>1;

 calculer y=gx mod n avec x<q;

 la paire de clé est:

une clé publique Kp=(q,y,g,n), une clé privée Kpr=x.

Signature de l’empreinte H(M) d’un message M


Choix aléatoire d’un nombre tel que K<q. Après il faut calculer :

R = (gk mod n) mod q 1ere partie de la signature;


S = (K-1 (H(M)+x*R)) mod q 2eme partie de la signature;

(R,S) représente la signature du message M, en utilisant la fonction de


hachage SHA1.

Un correspondant A ayant la clé publique (qa,ya,ga,na) hache son message et le signe en


utilisant sa clé privée xa et Ka, il envoie à B l’empreinte Ha(M), le message M en clair ou
chiffré et la signature (Ra, Sa).

Vérification de la signature
Un correspondant B reçoit l’empreinte Ha(M) et (Ra, Sa). Il utilisera la clé publique de A pour
calculer :

W = S-1A mod qA
U1 = (HA(M)*W mod qA
U2 = RA*W mod qA
V = ((gU1A*yU2A) mod nA ) mod qA.
Si V=RA alors la signature est vérifiée. Donc, A a bien signé le message M en utilisant HA(M)
avec sa clé privée xA et le nombre KA.

Exemple :
Génération d’une paire de clés d’un correspondant A : nA= 124540019 nombre premier entre
512 et 1024;

qA= 17389 nombre premier avec (n-1) de 160 bits;

(n-1)/qA=7162 et h=11021752 < 124540018;

gA= 1102175287162 mod 124540019 = 10083255 > 1;

xA= 12496 < qA

yA= 1008325512496 mod 124540019 = 119946265

une clé publique KpA = (qA,yA,gA,nA), une clé privée KprA=xA

Signature par A de l’empreinte HA(M) d’un message M. Choix aléatoire de KA=9557 <qA

Après il faut calculer :

a. première partie de la signature


RA=(100832559557 mod 124540019) mod 17389 =34.

b. deuxième partie de la signature


SA=(9557-1 (5246+12496*34)) mod 17389 =13049. Avec H(M)=5246.

A envoie à B la signature (34, 13049).

Vérification de la signature

Le correspondant B reçoit d’un correspondant A l’empreinte HA(M) (le message en clair ou


chiffré et (RA=34, SA=13049). Il utilisera la clé publique de A pour calculer :

W= 34-1 mod 117389 = 1799


U1=(5246*1799) mod 117389 = 12716
U2 = 13049* 1799 mod 117389 = 8999
V=((1008325512716A*y8999A) mod nA) mod 117389 =34

Il trouve V=RA=34 alors la signature est validée. Donc, A a bien signé le message M en
utilisant HA(M) avec sa clé privée xA = 12496 et le nombre KA= 9557.

Norme X.509
X 509 est un standard de cryptographie de l’Union international des télécommunications
pour els infrastructures à clés publique. X509 établit entre autres les formats standards de
certificats électroniques et un algorithme de validation de chemin de certification. X509 a
été créé en 1988 dans le cadre du standard X500. Il repose sur un système hiérarchique
d’autorités de certifications.

Un certificat X.509 est décomposé en deux parties :

• La partie contenant les informations (version, n° de série du certificat,


algorithme utilisé , nom, date de validité, clé publique du propriétaire du
certificat, …)

• La partie contenant la signature de l’autorité de certification

Exercice :

Discuter les cas suivants:

1. Deux certificats différents contiennent la même clé publique.

2. Deux certificats différents ont la même signature.


Annexe

Certificat X.509
Euclide Etendu:
Quel est le plus grand diviseur commun (=pgcd) de 126 et 462? On apprend au collège à
calculer ce pgcd en décomposant les 2 nombres en produits de facteurs premiers, et en
réunissant les facteurs en commun. Cette méthode n'est plus envisageable quand les entiers
deviennent grands (plusieurs centaines de chiffres décimaux), car la factorisation est un
problème difficile. On calcule donc le pgcd en appliquant l'algorithme d'Euclide, qui repose
sur la constation suivante :

Si a et b sont deux entiers avec par exemple a>=b, si r est le reste de a par b, alors le pgcd de
a et b vaut le pgcd de b et r. On effectue donc des divisions euclidiennes, jusqu'à ce qu'on
trouve un reste nul. Le dernier reste non nul est le pgcd de a et b.

L'algorithme d'Euclide permet aussi de calculer les coefficients de Bezout de a et b (on


l'appelle algorithme d'Euclide étendu). Rappelons que si d est le PGCD de a et b, il existe des
entiers u et v tels que au+bv=d. L'algorithme d'Euclide permet de calculer ces coefficients u
et v. Pour cela, il suffit de remonter les calcules, en exprimant le pgcd d en fonction des
autres nombres.

Ex : On souhaite calculer le pgcd de 255 et 141. 255=1×141+114 141=1×114+27 114=4×27+6


27=4×6+3 6=2×3+0 Le pgcd de 255 et 141 est donc 3.

Ex : Pour 255 et 141, on élimine tout ce qui n'est pas ni 255, ni 141, ni 3.
27=4×6+3, 114=4×27+6 ×(-4) (on élimine les 6). 141=1×114+27 ×17 (on élimine les 27, il y
en a 1 à gauche, et -16 à droite). 255=1×141+114 ×(-21) (on élimine les 114). On somme
tout, on regroupe, et on trouve : 38×141-21×255=3