• Aucun résultat trouvé

1.2 La cryptographie

1.2.3 Chiffrement asymétrique

Le chiffrement asymétrique, dit aussi à clé publique, est basé sur des fonctions qui sont aisément cal- culables mais que leurs inverses sont extrêmement difficiles à solutionner. On peut assimiler "difficile" à "impossible" si on prouve théoriquement que le temps de calcul de l’inversion est infini (plusieurs centaines d’années) en utilisant les machines les plus puissantes au monde. Ces fonctions sont choi- sies de manière qu’elles soient difficiles à inverser à l’exception de celui qui détient une information tenue secrète. Le chiffrement asymétrique implique une paire de clés composée d’une clé publique et une clé privée. La clé publique est publiée dans des annuaires communs et donc connue de tous les intervenants alors que la clé privée n’est connue que de la personne détentrice de la paire de clés. Ce procédé est connu sous le nom de chiffrement de Deffie-Hellman [43], les inventeurs de ce type de cryptographie, mais sans donner concrètement les fonctions.

Le chiffrement à clé publique présente des avantages considérables par rapport au chiffrement à clé secrète. En effet, une communauté de n intervenants n’a besoin de posséder que n clés publiques et n clés secrètes. Cependant, dans le cas de chiffrement à clé secrète, cette même communauté a besoin de n.(n − 1) clés. Cet avantage augmente si le nombre d’intervenants d’une communauté est grand. Cependant, ces algorithmes sont lents (DES est 1000 fois plus rapide que RSA par exemple) et leur sécurité repose sur la limitation des ordinateurs actuels à élaborer des calculs arithmétiques particuliers et résoudre certains problèmes comme la factorisation des grands nombres et le logarithme discret dans un temps raisonnable. Une amélioration exponentielle potentielle des processeurs arithmétiques des machines de calcul peut rendre obsolète un système de chiffrement à clé publique. Actuellement, on est toujours à l’abri de ce danger.

Le système de chiffrement RSA

Le système de chiffrement RSA [44,45] a été inventé en 1978 par Rivest, Shamir et Adleman et bre- veté par Massachusetts Institute of Technology (MIT) en 1983 . Ce système est le plus connu et utilisé des systèmes de chiffrement à clé publique. Il est essentiellement utilisé aussi bien pour encrypter de l’information que pour la signature numérique. Le brevet de RSA fait partie de Security Dynamics et aux Public Key Parteners. Le principe de RSA est simple et se base sur la difficulté de décomposer un très grand entier naturel en ses facteurs premiers. En effet, étant donnés deux nombres premiers p et q, il est facile de calculer leur produit n = p.q. Cependant, il est très difficile de décomposer l’entier n suffisamment grand en ses facteurs premiers p et q. La création des clés par un agent dans le système RSA suit le schéma suivant :

1. il choisit deux entiers naturels premiers p et q suffisamment grands et dispersés ;

2. il calcule la fonction indicatrice d’Euler φ(n)=(p − 1).(q − 1). Cette fonction fournit le nombre d’entiers premiers avec n et inférieurs à n ;

3. il choisit un entier e tel que 1 < e < φ(n) et premier avec φ(n) ;

4. il calcule d tel que e.d ≡ 1 mod φ(n) ce qui signifie que d ≡ e−1 mod φ(n). L’entier d existe selon le théorème de Bachet-Bézout ;

5. la clé publique de cet intervenant est (n, e) et sa clé privée est (n, d).

L’envoi d’un message crypté d’un agent A à un agent B consiste en les étapes suivantes :

1. A récupère la clé publique de B : (n, e) ;

2. A calcule c ≡ memod n, m étant le message clair et c le message encrypté.

La décryption du message par B consiste en l’étape simple suivante :

1. B calcule m ≡ cdmod n.

La preuve de correction du système RSA s’explique par le suivant : Le texte encrypté reçu par B étant c ≡ memod n. Quand B calcule cd≡ me.dmod n et comme e.d ≡ 1 mod φ(n), on obtient, par la

Pour choisir un nombre premier de grande taille, on crée une suite aléatoire de bits, puis on lui ap- plique un test de primalité. Comme l’utilisation d’un algorithme du type le crible d’Ératosthène est trop lent, on utilise un test de primalité probabiliste, le test de primalité de Miller-Rabin par exemple. Ce test ne donne pas l’assurance que le nombre est premier, mais il donne une probabilité forte qu’il le soit. On peut aussi utiliser un test de primalité déterministe en temps polynomial (quoique plus lent) qui assure que le nombre est premier à l’instar du test de primalité AKS [47] proposé par Manindra Agrawal, Neeraj Kayal et Nitin Saxena et publié en 2002 dans un article intéressant intitulé «PRIMES is in P».

La sécurité de RSA repose sur le fait que le temps que prennent les algorithmes classiques pour facto- riser un nombre en ses facteurs premiers croît exponentiellement avec la longueur de la clé. En 1996 apparut une attaque sur RSA réalisée par Peter W. Shor [48] exhibant un algorithme de factorisation de grands nombres en un temps non exponentiel, ce qui permet donc d’attaquer [49] le système RSA par force brute, mais sur des ordinateurs quantiques. Plus récemment, en 2014, Santanu Sarkar [50] a montré qu’il est possible d’attaquer un système RSA modulo n = prq en un temps polynomial. De leur côté, en 2015, Abderrahmane Nitaj et Tajjeeddine Rachidi ont exhibé trois attaques concrètes en temps polynomial [51] sous les mêmes conditions de Sarkar et pour des formes particulières de p et q. D’autres attaques sur ce système ont été rapportées [52–54]. Ceci a ravivé les interrogations sur le futur du RSA et réactivé les recherches dans cette direction. En dépit de tout, on peut affirmer que RSA demeure toujours sûr si la taille de la clé est suffisamment grande et les nombres premiers choisis sont aléatoires et dispersés.

Le système de chiffrement El-Gamel

Le système de chiffrement El-Gamel [55] constitue un classique du chiffrement asymétrique. Il a été proposé en 1982 par Taher El Gamal. Il se base sur l’égalité :

(gx)y = gxy = (gy)x

Dans ce système, un agent A choisit un nombre x qu’il garde secret, ensuite il clacule X ≡ gx mod n qu’il fournit à un agent B. De la même façon, l’agent B choisit un nombre y qu’il garde secret et calcule Y ≡ gy mod n et l’envoie à A. L’agent A détient donc une clé privée x et B une clé privée y. La clé publique de B est la pair (n, g). Pour encrypter un message m, l’agent A envoie à l’agent B le message c ≡ m.Yxmod n et X. L’agent B de son côté calcule m ≡ c/(Xy) mod n ou encore m ≡ m.(gy)x/(gx)y mod n qui revient au message clair. La méthode de El-Gamel est sécuritaire. En effet, un intrus n’est capable de récupérer que X ou Y, et si de plus il connaît g et n, il n’est pas capable de calculer x et y car le calcul logarithmique x ≡ logg(X) est extrêmement difficile [56] à résoudre dans

le groupe cyclique Zn∗. Ce problème est connu sous le nom du problème de logarithme discret [57].

Néamoins, ceci ne protège pas les protocoles qui utilisent le système de El-Gamel contre les attaques de type Homme-au-Milieu.

Le système de sac à dos

Le système de sac à dos, proposé par Ralph Merkle et Martin Hellman [58] en 1978, repose sur un problème mathématique qui s’énonce comme suit : ayant n objets de poids respectifs a1, ..., an, quels

objets faut-il mettre dans un sac à dos pour obtenir un poids total égal à p ?

Ce problème est difficile à résoudre sauf dans le cas où la suite (an) est supercroissante. Dans ce cas

la solution est simple à trouver. Une suite (an) est dite supercroissante quand elle vérifie la condition

suivante :

i−1

X

j=1

aj < ai.

Un système de chiffrement asymétrique de sac à dos s’énonce comme suit :

1. on part d’un entier n, d’une suite supercroissante (an), et d’un entier V tels que : n

X

j=1

aj < V.

On construit ainsi un sac à dos supercroissant facile à résoudre ;

2. on choisit aléatoirement un entier Q, inférieur à V − 1, et premier avec V − 1 ; 3. on définit une permutation aléatoire σ dans l’ensemble {1, ..., n} ;

4. on définit le vecteur de camouflage bj = aσ(j)Q mod V pour transformer le problème de sac à

dos supercroissant en un problème de sac à dos général difficile à résoudre.

La clé publique dans ce système est la suite (bn) et la clé privée est l’ensemble {V, Q, σ, (an)}.

L’ecryption d’une suite de bits (αn) est donnée par la formule, modulo V , suivante :

C =

n

X

j=1

αjbj.

La décryption s’effectue selon le schéma, modulo V , suivant :

D = Q−1C = Q−1 n P j=1 αjbj = Q−1 n P j=1 αjaσ(j)Q = n P j=1 αjaσ(j).

Bien que l’idée soit attrayante et simple, les algorithmes de sac à dos ont été démontrés non sûrs [59] et plusieurs failles exploitables en temps polynomial [60] ont été rapportées. Ce qui a mené à l’abandon de ces systèmes cryptographiques.

Le système de chiffrement de Cramer–Shoup

Le système de Cramer–Shoup [61] est un schéma d’encryption asymétrique qui constitue une exten- sion du système cryptographique El-Gamel. Il a été conçu pour résister aux attaques adaptatives des textes encryptés choisis (adaptive chosen ciphertext attack) dites aussi attaques IND-CCA2 [62]. Dans une telle attaque, l’adversaire envoie un certain nombre de textes encryptés pour être décryptés, et le résultat de ces décryptions lui servira pour sélectionner des textes encryptés pour monter des attaques. On parle de malléabilité des messages.

Dans le système de Cramer–Shoup, la génération de clés s’effectue comme suit :

1. un agent A choisit deux générateurs g1et g2 dans un groupe cyclique G d’ordre q ;

2. ensuite, il choisit cinq valeurs aléatoires (x1, x2, y1, y2, z) dans {0, ..., q − 1} ;

3. puis, il calcule c = gx1 1 g x2 2 , d = g y1 1 g y2 2 et h = g1z;

4. enfin, il publie la clé (c, d, h) et garde secrète la clé (x1, x2, y1, y2, z). Le groupe G est partagé

entre les utilisateurs.

Un agent B, qui encrypte un message m par la clé publique de A, exécute les étapes suivantes :

1. d’abord, il convertit m dans G ;

2. ensuite, il choisit un nombre aléatoire k dans {0, ..., q − 1} ;

3. puis, il calcule :

a) u1= g1k;

b) u2= g2k;

c) e = hkm ;

d) α = H(u1, u2, e), où H est une fonction de hachage à faible taux de collision ;

e) v = ckdkα.

4. enfin, il envoie le texte encrypté (u1, u2, e, v).

L’agent A, qui reçoit le message encrypté (u1, u2, e, v), exécute les étapes suivantes pour le décrypter :

1. il calcule α = H(u1, u2, e) et vérifie si v = ux11u2x2(uy11uy22)α. Si cette vérification échoue, le

2. il calcule m = e/uz1.

La preuve de correction du protocole est simple à établir puisqu’on constate bien que :

u1 = gkz1 = hket m = e/hk

Le système de Cramer–Shoup est l’un des rares systèmes qui résiste aux attaques IND-CCA2. Cepen- dant, plusieurs critiques lui ont été attribuées qui sont principalement les suivantes :

1. il repose une partie de sa sécurité sur une fonction de hachage ;

2. pour les messages longs -dont la taille est plus large que G- ce système doit être utilisé dans un système hybride (symétrique et asymétrique) car si on décompose les messages, la propriété de non-malléabilité ne sera plus tenue ;

3. aucune étude n’a rapporté les performances de ce système (rapidité et tailles des messages).

Les courbes elliptiques

La théorie des courbes elliptiques est très ancienne [63]. On attribue le nom des courbes elliptiques à leur relation avec les intégrales elliptiques utilisées pour calculer les longueurs d’arcs. Elles ont été à l’origine de plusieurs résultats très intéressants dans plusieurs domaines. Le résultat le plus marquant est sans doute la preuve du dernier théorème de Fermat en 1995 par Andrew John Wiles [64]. Leur utilisation dans la cryptographie (ECC) a été proposée par Victor Miller [65] et Neal Koblitz [66] au milieu des années quatre-vingt. Une courbe elliptique [63,67–69] est un objet algébrique E(a, b, p) défini sur un corps K.

Exemple 1.2.1. Soit la courbe elliptique E(a, b, p) définie par :

E(a, b, p) :: y2= x3+ a1x + a2mod p

avec a1et a2 des éléments de K = R et p un nombre premier.

Il est possible de définir une structure de groupe sur une courbe elliptique qu’on munit d’une addition géométrique sur ses points. La propriété de ce groupe est qu’à partir d’un point P de la courbe et d’un nombre ka, il est facile de calculer kaP . Par contre, sachant P et kaP , il faut résoudre le problème

de logarithme discret dans ce groupe pour trouver ka, qui est plus difficile que celui dans le groupe

cyclique Zn∗. Dans un système cryptographique basé sur les courbes elliptiques, deux agents A et B rendent publics une courbe elliptique E(a, b, p) et un point P de cette courbe. Chaque agent choisit un entier secret ka (respectivement kb). L’agent A envoie à B le produit kaP et l’agent B envoie à

A le produit kbP . Chaque agent de son côté calcule le produit kakbP qui est un point de la courbe.

L’encryption d’un point M de la courbe par l’agent A se fait en choisissant un entier n aléatoire et en envoyant les messages nP et M + nkbP à B. La décryption de ces messages par B s’effectue d’abord

C’est-à-dire, en effectuant l’opération : M + nkbP − nkbP = M .

Les systèmes cryptographiques basés sur les courbes elliptiques sont de nos jours -au moins- aussi sécuritaires que le système RSA. Pour atteindre cet objectif, le NIST recommande d’utiliser quinze courbes elliptiques différentes sur dix corps différents. La taille des clés dans la cryptographie des courbes elliptiques est beaucoup moins élevée que dans le système RSA. On démontre par exemple qu’une clé de 192 bits dans la cryptographie basée sur les courbes elliptiques offre la même sécurité qu’une clé de 1024 bits en RSA. Cet avantage va s’amplifier avec le temps vu l’expansion des petits ordinateurs à capacité limitée [70–74].