Éric Wegrzynowski 29 avril 2010 Le problème Comment Alice et Bob peuvent-ils faire pour partager une clé secrète? Réponses : Impraticable se rencontrer physiquement pour échanger une clé secrète ; Praticable utiliser l une des deux méthodes suivantes : 1. protocole d échange de clés de Diffie-Hellman ; 2. système de chiffrement asymétrique.
Protocole d échange de clé Un protocole d échange de clé permet à deux protagonistes d échanger une clé secrète k ; en communiquant sur un canal non sécurisé ; en ne dévoilant rien à un espion qui lui rende la tâche de retrouver k plus facile que la recherche exhaustive. Le protocole de Diffie-Hellman Paramètres : un groupe cyclique G, un générateur g G. (n désigne le cardinal de G) Alice 1. génère un entier x A compris entre 0 et n 1 au hasard ; 2. calcule k A = g x A ; 3. envoie k A à Bob ; 4. reçoit k B et calcule k BA = k x A B. Bob 1. génère un entier x B compris entre 0 et n 1 au hasard ; 2. calcule k B = g x B ; 3. envoie k B à Alice ; 4. reçoit k A et calcule k AB = k x B A. Un exemple Paramètres : G = F 31, g = 3. (alors n = 30) Alice 1. génère l entier x A = 23 ; 2. calcule k A = g x A = 3 23 (mod 31) = 11 ; 3. envoie k A à Bob ; 4. reçoit k B = 22 et calcule k BA = k x A B = 2223 (mod 31) = 3. Bob 1. génère un entier x B = 17 ; 2. calcule k B = g x B = 3 17 (mod 31) = 22 ; 3. envoie k B à Alice ; 4. reçoit k A = 11 et calcule k AB = k x B A = 1117 (mod 31) = 3. C est la clé secrète partagée. k AB = k BA C est la clé secrète partagée. k AB = k BA = 3
Sécurité du protocole Ève, l espionne, écoute les échanges entre Alice et Bob, et connaît donc k A, k B, et bien entendu les paramètres G et g. Son problème est donc le suivant Étant donnés k A et k B, calculer k. Ce problème est connu sous le nom de problème de Diffie-Hellman. Il est lié au problème du logarithme discret. Aucun algorithme efficace connu actuellement. Solution du problème de Diffie-Hellman pratiquement incalculable dans F p dès lors que p est un (grand) nombre premier. du chiffrement asymétrique ou à clé publique k Pub(Bob) k Priv(Bob) m E c D m L utilisation de clés distinctes pour les opérations de chiffrement et de déchiffrement justifient l appellation de Alice Bob Chiffrement : Alice chiffre son message m à l aide de la clé publique de Bob k Pub(Bob), elle obtient un chiffré c qu elle envoie à Bob. Déchiffrement : Bob utilise sa clé privée k Priv(Bob) pour déchiffrer c. Ne nécessite pas d échange préalable de clé secrète. chiffrement asymétrique ou chiffrement à clé publique.
de base Utiliser une fonction à sens unique pour le chiffrement, que tout le monde peut utiliser ; avec une trappe permettant le déchiffrement, que seule la personne connaissant la trappe peut effectuer. est l un des premiers systèmes de chiffrement asymétrique (1977). C est le système le plus largement répandu (carte bancaire, protocole SSL,... ). Son nom est l acronyme des trois auteurs Rivest, Shamir et Adleman. Constitution des clés Une paire de clés est construite à partir d un entier n = p q produit de deux nombres premiers distincts, nommé modulus ; d un entier e premier avec ϕ(n) = (p 1)(q 1), nommé exposant de chiffrement ; d un entier d inverse de e modulo ϕ(n), nommé exposant de déchiffrement. La clé publique est le couple (n, e). La clé privée est l entier d.
Exemple de clés n = 11 17 = 187 ; e = 3, nombre premier avec ϕ(n) = 10 16 = 160 ; d = 107 inverse de e modulo ϕ(n). En effet e d = 321 = 160 2 + 1. La clé publique est le couple (187, 3). La clé privée est l entier 107. Chiffrement Un message à chiffrer par est un entier compris entre 0 et n 1. Soit m un tel message. Le chiffré est obtenu en utilisant la clé publique du destinataire et en calculant c = m e (mod n). Le chiffré est donc un entier compris entre 0 et n 1. Exemple : Le message m = 15 chiffré avec la clé publique (n = 187, e = 3) donne c = 15 3 (mod 187) = 9. Déchiffrement Soit c un message à déchiffrer. Pour le déchiffrer, le destinataire utilise sa clé privée et calcule m = c d (mod n). Il retrouve ainsi le message clair initial. Exemple : Le chiffré c = 9 se déchiffre avec la clé privée d = 107 m = 9 107 (mod 187) = 15. Sécurité de Ève, l espionne, écoute les échanges entre Alice et Bob, et connaît la clé publique de Bob. Son problème est donc le suivant Étant donnés un chiffré c et la clé publique de Bob (n, e), calculer le clair m. Ce problème est connu sous le nom de problème. Il est lié au problème de la factorisation des entiers. Aucun algorithme efficace connu actuellement. Solution du problème pratiquement incalculable dès lors que n est le produit de deux grands nombres premiers : au moins 1024 bits pour chacun de ces deux nombres, soit un modulus d au moins 2048 bits (cf record établi en décembre 2009 (http ://eprint.iacr.org/2010/006.pdf)).
Inconvénient de présente l inconvénient d être beaucoup plus lent que les systèmes symétriques comme l AES par exemple. Il n est utilisé que pour chiffrer de petits messages. Par exemple une clé d un système symétrique, ou encore pour signer des messages. standardisé est standardisé par le PKCS#1 (cf http://www.rsa.com/rsalabs/node.asp?id=2124) dans la version 1.5 de PKCS#1 un message M à chiffrer a une taille m = M qui ne peut excéder k 11 octets (où k est la taille en octets du module de la clé publique). Une chaîne PS d octets aléatoires non nuls de longueur k m 3 est générée. Et on forme une chaîne EM de longueur k de la forme EM = 00 02 PS 00 M. C est cette chaîne EM, convertie en un entier de Z n, qui est chiffrée. la version 2.1 de PKCS#1 définit un autre schéma de codage des données à chiffrer plus sûr. C est le -OAEP (Optimal Asymmetric Encryption Padding). Rabin Rabin Constitution des clés Une paire de clés du système de Rabin est construite à partir d un couple de deux nombres premiers distincts p et q tels que p = 3 (mod 4) et q = 3 (mod 4) ; du produit de ces deux nombres premiers n = pq ; de deux entiers a et b tels que (coefficients de Bezout). ap + bq = 1 La clé publique est l entier n. La clé privée est le quadruplet (p, q, a, b).
Rabin Exemple de paires de clé p = 19 = 4 4 + 3, q = 23 = 4 5 + 3 deux nombres premiers congrus à 3 modulo 4 ; n = pq = 437 ; a = 6 et b = 5. Clé publique : n = 437. Clé privée : (p, q, a, b) = (19, 23, 6, 5). Rabin Chiffrement de Rabin Un message à chiffrer est un entier compris entre 0 et n 1. Soit m un tel message. Le chiffré est obtenu en utilisant la clé publique n du destinataire et en calculant le carré de m moduo n : c = m 2 (mod n). Le chiffré est donc un entier compris entre 0 et n 1. Exemple : Le message m = 15 chiffré avec la clé publique n = 437 donne c = m 2 (mod n) = 225. Rabin Déchiffrement Soit c un message à déchiffrer. Pour le déchiffrer, le destinataire utilise sa clé privée (p, q, a, b) et calcule 1. r = c (p+1)/4 (mod p) ; 2. s = c (q+1)/4 (mod q) ; 3. x = (aps + bqr) (mod n) ; 4. y = (aps bqr) (mod n). Le message clair est l un des quatre nombres x, n x, y, n y. Exemple : Le chiffré c = 225 se déchiffre avec la clé privée (p, q, a, b) = (19, 23, 6, 5) r = 4 s = 8 x = 422 y = 376 Le message clair est l un des quatre nombres 422, 15, 376, 61. Rabin Sécurité de Rabin Ève, l espionne, écoute les échanges entre Alice et Bob, et connaît la clé publique de Bob. Son problème est donc le suivant Étant donnés un chiffré c et la clé publique de Bob n, calculer le clair m. Il est lié au problème du calcul d une racine carrée modulo un entier composé dont on ne connaît pas la factorisation. On démontre que le problème de Ève est équivalent au problème de la factorisation des entiers. Aucun algorithme efficace connu actuellement.
De nombreux autres systèmes asymétriques Merkle-Hellman, proposé en 1978, fondé sur la difficulté de résoudre le problème du sac à dos. Système cassé en 1982 par Shamir à l aide de l algorithme LLL. Mc Eliece, proposé en 1978, fondé sur la difficulté du problème du décodage (théorie des codes correcteurs). Elgamal, proposé en 1985, fondé sur la difficulté du problème du logarithme discret. et bien d autres.
Taille d un entier En base 10 La taille d un entier non nul n écrit en base 10 est donnée par n 10 = log 10 (n) + 1. En base 2 La taille d un entier non nul n écrit en base 2 est donnée par En résumé n 2 = log 2 (n) + 1. Rapport des tailles Le rapport de la taille de l écriture d un entier en base 10 à celle en base 2 est n 10 n 2 log 10(n) log 2 (n) = ln(2) ln(10) = log 10(2) 0, 301. Le rapport de la taille de l écriture d un entier en base 2 à celle en base 10 est n 2 log 2(n) n 10 log 10 (n) = ln(10) ln(2) = log 2(10) 3, 322. n b log b (n). Algorithme d exponentiation modulaire rapide ou square and multiply algorithm Entrée: a, b et n trois entiers naturels. Sortie: a b (mod n) r 1 s a k b tant que k 0 faire si k est impair alors r r s (mod n) fin si s s 2 (mod n) k k 2 fin tant que retourner r
Exemple d exponentiation Calcul de a b (mod n) avec a = 67 par b = 21 et n = 97. r s k Initialisation 1 67 21 Début itération k est impair 67 27 10 k est pair 67 50 5 k est impair 52 75 2 k est pair 52 96 1 k est impair 45 1 0 k est nul Fin itération a b (mod n) = r = 45. Complexité de cet algorithme Nombre d élévations au carré = b 2. Nombre de multiplications = nombre de 1 dans l écriture binaire de b en enlevant le bit de poids fort. Dans tous les cas, le nombre de multiplications modulo (mod n) est majoré par 2 b 2 2 log 2 (b). Entrée: a, b deux entiers naturels. Sortie: d = pgcd(a, b), u et v tels que au + bv = d. a 1 a ; b 1 b ; u 1 0 ; u 2 1 ; v 1 1 ; v 2 0 ; tant que b 1 0 faire q a 1 b 1 ; r a 1 qb 1 ; x u 2 qu 1 ; y v 2 qv 1 ; a 1 b 1 ; b 1 r ; u 2 u 1 ; u 1 x ; v 2 v 1 ; v 2 y ; fin tant que retourner d = a 1, u = u 2, v = v 2.
Exemple de déroulement de l algorithme d Euclide étendu Calcul du pgcd et des coefficients de Bezout pour a = 160 avec b = 107. i q r u 1 u 2 v 1 v 2 a 1 b 1 0 0 1 1 0 160 107 1 1 53 1 0-1 1 107 53 2 2 1-2 1 3-1 53 1 3 53 0 107-2 -160 3 1 0 L identité de Bézout qui en résulte est 1 = 160 2 + 107 3. Complexité de l algorithme une division euclidienne, deux multiplications et deux soustractions à chaque étape du tant que ; les différentes valeurs intermédiaires calculées au cours de l algo ne dépassent pas (en valeur absolue) le plus grand des deux entiers a et b ; le nombre d étapes est en O(n), où n est la taille du plus petit des deux entiers a et b Algorithme polynomial en la taille des entiers donnés en entrée (cubique si algos classiques de division et de multiplication). Nombre de nombres premiers Théorème des nombres premiers En notant π(x) = card({n N n x et n premier}), on a pour x 59 ( x 1 + 1 ) < π(x) < x ( 1 + 3 ) ln(x) 2 ln(x) ln(x) 2 ln(x) En particulier, π(x) x ln(x) lorsque x +. Corollaire Lorsque t est un entier au moins égal à 3, le nombre π t de nombres premiers de t bits est minoré par π t = π(2 t ) π(2 t 1 ) > 2 t 2 (t 1) ln(2). Avec t = 1024, cela donne π 1024 > 0, 63 10 305.
Trouver des nombres premiers Pour trouver un nombre premier d une taille donnée t (en bits) : 1. choisir un entier p impair de taille t au hasard ; 2. tester si p est premier ; 3. s il est premier alors retourner p, sinon recommencer au point 1. La probabilité P t qu un entier impair de taille t choisi au hasard soit premier est minorée par P t = π t 2 t 2 > 1 (t 1) ln(2). Il faut donc en moyenne tester 1 P t < (t 1) ln(2) nombres pour trouver un nombre premier de taille t. Avec t = 1024, il faut en moyenne tester la primalité de moins de 709 nombres. Un test élémentaire de primalité Test par recherche du plus petit diviseur supérieur à 1. Entrée: n un entier au moins égal à 3. Sortie: déterminer si n est premier. k 2 tant que k ne divise pas n et k n faire k k + 1 fin tant que si k divise n alors retourner NON sinon retourner OUI fin si Coût de cet algo dans le pire des cas : O( n) divisions. Pour tester un entier de taille t bits : O(2 t/2 ) divisions. algorithme exponentiel en fonction de la taille. Un problème de la classe P Depuis août 2002, on sait que ce problème est de la classe des problèmes polynomiaux (test de primalité Agrawal-Kayal-Saxena). Malheureusement, l algorithme AKS est inutilisable en pratique. Deux théorèmes Théorème de Fermat Si n est un nombre premier, alors pour tout a N, non multiple de n, on a a n 1 = 1 (mod n). Théorème de Miller Soit n > 1 un entier impair. On pose n 1 = 2 s u avec u impair. S il existe un entier 1 < a < n tel que a u 1 (mod n) et a 2i u 1 (mod n) pour i [[0, s 1]], alors n est composé, et l entier a est appelé témoin de non primalité de n. De plus, si n est un entier impair composé, au moins les trois quarts des entiers a compris entre 1 et n sont des témoins de non primalité de n.
Un algorithme probabiliste Test de Miller-Rabin. Entrée: n un entier impair au moins égal à 3. Sortie: déterminer si n est premier. 1: choisir au hasard a [[2, n 2]] 2: calculer g = pgcd(a, n) 3: si g > 1 alors 4: retourner NON 5: fin si 6: calculer u et s tels que n 1 = 2 s u avec u impair 7: b0 a u (mod n) 8: si b0 = 1 alors 9: retourner (probablement) OUI 10: fin si 11: pour 1 i s faire 12: bi bi 1 2 (mod n) 13: fin pour 14: si bs = 1 alors 15: j min{0 i bi+1 = 1} 16: sinon 17: retourner NON 18: fin si 19: g pgcd(bj + 1, n) 20: si g = 1 ou g = n alors 21: retourner (probablement) OUI 22: sinon 23: retourner NON 24: fin si Analyse du test de Miller-Rabin 1. Algorithme probabiliste toujours correct si réponse négative ; possibilité d erreur si réponse positive ; réponse toujours correcte si n est premier ; possibilité d erreur si n est composé, mais probabilité d erreur < 1 4. 2. Complexité algorithmique (dans le pire des cas) : deux calculs de pgcd ; une exponentiation modulaire ; s élévations au carré. Algorithme cubique en nombre d opérations sur les bits. Difficulté de la factorisation Étant donnés deux entiers p et q, il est facile de les multiplier. 149 331 = 49319. Avec l algorithme de l école primaire, cela demande de l ordre de n 2 opérations sur les chiffres en notant n le nombre de chiffres des deux entiers à multiplier. Mais, étant donné un entier composé m, il est bien plus difficile de trouver deux nombres p et q plus grands que 1 dont le produit est m. C est le problème de la factorisation des entiers. Aucun algorithme efficace n est connu aujourd hui.
Le record 768 = 123018668453011775513049495838496272077285356959533\ 479219732245215172640050726365751874520219978646938\ 995647494277406384592519255732630345373154826850791\ 702612214291346167042921431160222124047927473779408\ 0665351419597459856902143413 nombre de 232 chiffres (768 bits) qui se factorise en deux nombres premiers p = 334780716989568987860441698482126908177047949837137\ 685689124313889828837938780022876147116525317430877\ 37814467999489 et q = 367460436667995904282446337996279526322791581643430\ 876426760322838157396665112792333734171433968102700\ 92798736308917 Record établi en décembre 2009. (cf http://eprint.iacr.org/2010/006.pdf) Difficulté du logarithme discret Étant donnés un groupe cyclique G, un générateur g, et un entier x, il est facile de calculer Le record g x. Avec l algorithme d exponentiation modulaire rapide, cela demande de l ordre de log 2 (b) opérations dans G. Mais pour certains groupes G, etant donnés un générateur g et un élément h de G, il est en général bien plus difficile de trouver un entier x tel que Calcul d un logarithme discret réalisé dans le corps à 2 613 éléments. Record établi en septembre 2005. h = g x. C est le problème du logarithme discret. Aucun algorithme efficace n est connu à ce jour. Si on sait résoudre efficacement le problème du logarithme discret, alors on sait résoudre efficacement le problème de Diffie-Hellman.