• Aucun résultat trouvé

1.2 Cryptographie actuelle et attaques

1.2.3 Cryptographie asymétrique

La cryptographie asymétrique (ou cryptographie à clé publique) [RSA78], utilise des fonctions à sens unique avec brèche secrète. Cela signifie que ces fonctions sont très difficiles à inverser, à moins de posséder une information secrète.

En pratique, la fonction à sens unique utilise une clé A et elle ne peut être inversée qu’en utilisant une clé B. Ce qui est chiffré avec A est déchiffrable avec B et réciproquement. L’une des clés est diffusée, par exemple A, qui est la clé publique, et l’autre est gardée secrète, c’est la clé privée (B).

Cryptogramme_A = Chiffrement(A,Message) Message = Déchiffrement(B,Cryptogramme_A)

Cryptogramme_B = Chiffrement(B,Message) Message = Déchiffrement(A,Cryptogramme_B)

On utilise la cryptographie asymétrique pour le chiffrement, mais aussi pour l’identification et la signature. En chiffrant un message secret avec la clé publique, seul le détenteur de la clé secrète peut le déchiffrer.

Dans le cas de l’identification, on envoie un message aléatoire (appelé challenge ou défi) qui a été chiffré avec la clé publique à la personne souhaitant s’identifier. Seul le détenteur de la clé privée peut retrouver le challenge original : s’il renvoit le challenge, il sera identifié, puisqu’il aura prouvé qu’il a la clé privée correspondante. Cependant, en renvoyant un message au hasard, un attaquant a toujours la possibilité d’arriver

à s’identifier, mais avec une probabilité inversement proportionnelle au nombre de messages possibles.

Challenge_A = Chiffrement(A,Challenge) Challenge = Déchiffrement(B,Challenge_A)

La signature d’un document est obtenue en chiffrant avec la clé privée le condensé (hash) de ce document : pour vérifier la signature, on la déchiffre avec la clé publique et on la compare au condensé du fichier reçu. Si le fichier a été modifié, le condensé diffère et il n’est pas possible de modifier la signature puisque seul le détenteur de la clé privée B peut générer des signatures déchiffrables en utilisant A.

Signature = Chiffrement(B,Condensé(Fichier)) Condensé_attendu = Déchiffrement(A,Signature)

Condensé(Fichier_reçu) = Condensé_attendu ?

Une clé de chiffrement asymétrique doit avoir des propriétés mathématiques spé- cifiques : il n’est pas possible de prendre une suite aléatoire de bits comme pour les clés de chiffrement symétrique. Cela explique le fait que les clés de chiffrement asy- métrique sont plus longues : il est plus facile d’attaquer ces algorithmes en utilisant les propriétés mathématiques des clés, comme une factorisation dans le cas du RSA, plutôt que de réaliser une recherche exhaustive.

À cause de sa relative lenteur par rapport à la cryptographie symétrique, on uti- lise en pratique de la cryptographie hybride, où une clé de cryptographie symétrique est choisie au hasard pour chiffrer les données efficacement. Cette clé est ensuite chif- frée en utilisant une clé de cryptographie asymétrique A. La clé symétrique chiffrée est transmise avec les données.

Lors de la réception de la clé chiffrée et des données, le destinataire utilise B pour déchiffrer la clé symétrique choisie aléatoirement par l’envoyeur : il peut alors déchiffrer les données.

Cryptogramme = Chiffrement_Symétrique(Clé_Symétrique, Données) Clé_Chiffrée = Chiffrement_Asymétrique(A, Clé_Symétrique) Clé_Symétrique = Chiffrement_Asymétrique(B, Clé_Chiffrée) Données = Chiffrement_Symétrique(Clé_Symétrique, Cryptogramme)

1.2.3.1 RSA

RSA [RSA78] est un algorithme asymétrique publié en 1977, publié par Ri- vest, Shamir et Adleman, basé sur la difficulté à factoriser efficacement les grands nombres. C’est l’algorithme de cryptographie asymétrique le plus utilisé, notamment dans le commerce électronique : HTTPS utilise TLS (anciennement appelé SSL) qui repose sur RSA.

1. On prend au hasard p et q, 2 grands nombres premiers, et on forme n = pq 2. On trouve e et d tels qu’ils sont premiers avec (p − 1)(q − 1) et que ed ≡ 1

(mod (p − 1)(q − 1))

3. Le couple (n, e) est la clé publique et le couple (n, d) est la clé privée

Le message est codé en chiffres entiers inférieurs à n. Pour chiffrer un de ces entiers M en un chiffré C, on utilise n et e pour calculer :

C ≡ Me (mod n)

Le déchiffrement se fait de manière analogue, mais en utilisant n et d : M ≡ Cd (mod n)

En effet,

– ed ≡ 1 (mod (p − 1)(q − 1)) donc ed = k(p − 1)(q − 1) + 1

– Une généralisation du petit théorème de Fermat nous donne MΦ(n) ≡ 1 (mod n),

avec Φ(n) la fonction indicatrice d’Euler (qui correspond au nombre d’éléments de Z/nZ)

– Or, Φ(n) = (p − 1)(q − 1), d’où M(p−1)(q−1)≡ 1 (mod n)

– D’où Cd≡ (Me)d≡ Med ≡ Mk(p−1)(q−1)+1 ≡ M (mod n)

La sécurité de RSA repose sur deux conjectures : il faut factoriser n pour casser RSA et il n’est pas possible de factoriser un nombre en temps polynomial. Cela implique qu’en choissant n suffisamment grand, le RSA est considéré sûr, et cela fait 25 ans qu’il est cryptanalysé, sans succès.

RSA Laboratories organise un concours permanent qui consiste à décrypter des messages chiffrés avec des tailles de clé de plus en plus longues. Actuellement, le record de factorisation porte sur un chiffre de 663 bits et date de 2005. La taille de clé minimum utilisée en 2007 est de 1024 bits, mais le NIST (États-Unis), la DCSSI (France) et le BSI (Allemagne) recommandent d’utiliser des clés de 2048 bits à partir de 2011.

1.2.3.2 Courbes elliptiques

La cryptographie basée sur des courbes elliptiques utilise des courbes vérifiant l’équation

y2+ a1xy + a3y = x3+ a2x2+ a4x + a6

que l’on utilise sous la forme simplifiée

y2 = x3+ ax + b

sur les corps de Galois GF (n). L’usage des courbes elliptiques en cryptographie a été proposé, de manière indépendante, par Neal Koblitz et Victor Miller en 1985. Les algorithmes basés sur les courbes elliptiques utilisent des clés plus courtes que le

RSA. Cela permet de combiner des clés asymétriques de 384 bits à des algorithmes symétriques de 256 bits, alors que le RSA nécessiterait des clés de 15000 bits à sécurité comparable.

Cependant, les opérations de chiffrement et de déchiffrement nécessitent plus d’opérations à effectuer et à coordonner. Même si la cryptographie sur courbes el- liptiques est très prometteuse, elle est encore mal connue parce que les standards sont relativement jeunes et un grand nombre de brevets freine son développement.

Une courbe elliptique sur un corps fini, notée E(a, b, n), est de la forme y2 =

(x3+ax+b) en choisissant a et b sur ce corps fini (défini par un polynôme irréductible

sur Z/nZ) et où les opérations d’addition et de multiplication sont celles du corps fini sur lequel on se place. Les couples (x, y) qui vérifient cette équation sont les coordonnées de points qui forment un groupe abélien lorqu’ils sont munis d’une opération d’addition.

Cela signifie que pour tous points P , Q, R de la courbe : – P + Q = Q + P

– (P + Q) + R = P + (Q + R)

– il existe un élément neutre O tel que P + O = O + P = P – il existe −P tel que (−P ) + P = P + (−P ) = O

Cela entraine l’existence de la multiplication d’un point P par un scalaire k : kP = P + (k − 1)P , avec 1P = P et −kP = k(−P ).

L’ensemble des kP défini alors un sous-groupe cyclique de la même manière que l’exponentiation modulaire dans le cas du RSA. On peut alors définir de manière analogue un algorithme de chiffrement qui utilise ce groupe : p, q, n, e, d sont choisis de la même manière.

Le sous-groupe kP a un cardinal qui divise le cardinal de l’ensemble des points : P (avec P 6= O) est générateur d’un groupe des points de la courbe de cardinal p, q ou n.

Le chiffrement et le déchiffrement se font par multiplication scalaire : C = eM et M = dC.

La cryptographie sur courbes elliptiques, tout comme les autres algorithmes de chiffrement asymétrique, peut aussi être utilisée pour l’établissement d’un canal de communication sécurisé.

Supposons que 2 personnes (A et B) souhaitent établir un secret partagé sur un canal qui n’est pas sécurisé. Il choisissent publiquement :

– E(a, b, p), une courbe elliptique

– P , un point de cette courbe, de préférence générateur de la courbe

Secrètement, A choisit un entier dA, et B un entier dB. A envoie le point dAP, et

B envoie dBP. Chacun calcule dA(dBP ) = (dAdB)P qui est un point de la courbe,

et constitue leur clef secrète commune.

Un espion connaît E(a, b, p), P, dAP, dBP. Pour pouvoir calculer dAdBP, il faut

garithme discret sur une courbe elliptique. Or, actuellement, si les nombres sont suffisamment grands, on ne connaît pas de méthode efficace pour résoudre ce pro- blème en un temps raisonnable.