Confidentialité II Systèmes à clé publique

Slides:



Advertisements
Présentations similaires
Bratec Martin ..
Advertisements

NOTIFICATION ÉLECTRONIQUE
Fragilité : une notion fragile ?
SEMINAIRE DU 10 AVRIL 2010 programmation du futur Hôtel de Ville
Phono-sémantique différentielle des monosyllabes italiens
MAGGIO 1967 BOLOGNA - CERVIA ANOMALIES DU SOMMEIL CHEZ L'HOMME
droit + pub = ? vincent gautrais professeur agrégé – avocat
Transcription de la présentation:

Confidentialité II Systèmes à clé publique 5e cours--Hiver 2014 Louis Salvail

Une approche différente Nous avons vu comment la confidentialité peut être préservée lorsque l’expéditeur et le destinataire partagent une clé secrète : Si la confidentialité doit être garantie inconditionnellement, alors une clé aussi longue que le message doit être utilisée. Si la confidentialité est garantie contre les adversaires efficaces, alors il est admis que des chiffrements sûrs à clé secrète courte sont possibles. Pouvons-nous penser avoir de la confidentialité sans le partage préalable d’une clé?

La situation E C D M M K

Systèmes à clé publique Les chiffres qui satisfont le modèle précédent sont appelés chiffres à clé publique. Ces systèmes nécessitent deux types de clés : Clés privées SK : Permettent le déchiffrement, Clés publiques PK : Permettent le chiffrement et quiconque la connaît peut envoyer un message chiffré pour M que seul le détenteur de SK peut déchiffrer. À chaque clé publique correspond une clé privée. Nous dénotons (PK,SK) une telle paire. Évidemment, les deux algorithmes suivants sont nécessaires : Chiffrement : EPK(M)=C, Déchiffrement : DSK(C)= DSK(EPK(M)) =M.

Conditions de sécurité Puisque tout le monde connaît PK, il doit être difficile de trouver SK à partir de PK : Autrement, SK pourrait être déterminée pour ensuite être utilisée pour déchiffrer. Cependant, PK doit être facile à calculer à partir de SK. Ceci permet de générer les clés nécessaires efficacement. La bonne clé publique PK doit être associée à la personne qui connaît SK : Sinon, un message destiné à Astérix pourrait être chiffré avec la clé publique de César permettant ainsi à César d’en connaître la teneur. Les clés PK doivent donc être certifiées... nous verrons comment faire plus tard.

Sécurité du chiffrement à clé publique La sécurité du chiffrement à clé publique demande que l’adversaire n’ait aucune idée à propos du message clair correspondant au message chiffré C, même étant donné PK (car l’adversaire la connaît aussi). Habituellement il n’y a qu’une clé privée associée à la clé publique PK. La fouille exhaustive de clés est donc une attaque possible contre ces systèmes : Il s’agit d’essayer toutes les clés privées SK jusqu’à ce que celle associée à PK soit trouvée. Cependant, tous les systèmes à clé publique connus sont vulnérables à des attaques beaucoup plus efficaces que la fouille exhaustive des clés. En conséquence, les clés pour ces systèmes sont beaucoup plus longues que pour les systèmes à clé secrète.

RSA RSA est le système à clé publique le plus utilisé dans la pratique. Il a révolutionné la cryptographie moderne. Il a été proposé en 1977 par Rivest, Shamir et Adleman peu de temps après l’invention de la cryptographie à clé publique. Clifford Cook, un mathématicien britannique travaillant pour les services de renseignements, a décrit un système semblable dès 1973. Ceci n’a été dévoilé qu’en 1997 parce que le travail avait été classé secret!

Clés pour RSA Une clé publique PK pour RSA est composée de deux nombres entiers PK=(N,e) tels que : N = pq pour deux grands nombres premiers p et q de la même taille. e > 1 et PGCD(φ(N), e) = 1 (c.-à-d. : e ∈ Z*φ(N)). La clé privée associée à la clé publique (N,e) est d tel que : d ∈ Z*φ(N) et ed = 1 mod φ(N).

Chiffrement/déchiffrement RSA La chance qu’il ne soit pas dans Z*N est négligeable. Chiffrement à partir de la clé publique PK=(N,e) : Il s’agit d’associer chaque message à un nombre entre 0 et N-1 Le message M ∈ Z*N est chiffré comme : C = Me mod N Déchiffrement à partir de la clé privée SK=d : Le cryptogramme C ∈ Z*N est déchiffré comme : Cd mod N = (Me mod N)d mod N = Med mod N = Mkφ(N)+1 mod N = (Mφ(N))k mod N × M mod N = 1k × M mod N = M. Par Euler!

Complexité de générer les clés publiques pour RSA Le premier défi consiste à générer des paires (SK,PK) efficacement. Vérifions que c’est possible de le faire pour PK. PK=(N,e) : Tirer au hasard deux nombres premiers de k bits, N=pq, (cependant, le résultat n’est bon qu’avec une très très bonne probabilité!) e peut être tiré au hasard dans Zφ(N), mais il doit aussi être relativement premier à φ(N) : PGCD(φ(N), e)=PGCD((p-1)(q-1), e) = 1 Ceci coûte donc essentiellement deux fois le prix de tester la primalité de nombre de k bits. Il faut retenir p et q! Par l’algo d’Euclide

Complexité de générer les clés secrètes pour RSA Maintenant, nous voulons déterminer SK=d à partir de PK=(N,e). Nous allons avoir besoin de p et q tels que N=pq. Calculer φ(N)=(p-1)(q-1), Trouver d tel que ed=1 mod φ(N), c.-à-d. d=e-1. Trouver d peut donc être fait efficacement puisque trouver e-1 est une problème «facile». Nous avons vu que ceci est possible par l’algo d’Euclide étendu.

Complexité du chiffrement et du déchiffrement RSA Supposons PK=(N,e) et SK=d. Le message M ∈ Z*N est chiffré comme : C = Me mod N Nous avons vu que ceci peut être calculé efficacement par l’algo d’exponentiation rapide. Le cryptogramme C ∈ Z*N est déchiffré comme : Cd mod N Essentiellement, le même travail que pour le chiffrement, sauf que d est habituellement plus grand que e.

Quelle taille de clé pour RSA? La seule menace connue contre RSA est la factorisation de N. En particulier, factoriser N implique la connaissance de φ(N) et vice- versa. Le meilleur algorithme pour factoriser N est plus efficace que l’approche naïve qui essaie les facteurs possibles l’un après l’autre. En tenant compte du meilleur algorithme connu, la valeur de N devrait avoir au moins 1000 bits. Cette taille n’est pas bonne pour toujours. En 1978 (RSA), 500 bits étaient suffisants. Pour certaines applications, 2000 bits sont aujourd’hui recommandés.

La sécurité de RSA RSA peut être utilisé, semble-t-il, avec l’exposant e=3. La sécurité ne devrait pas en souffrir. Cependant, d ne peut évidemment pas être trop petit!!!!! RSA a quelques problèmes de sécurité de la façon dont nous l’avons défini : Le chiffrement du même message plus d’une fois produit toujours le même cryptogramme. Si l’adversaire sait que le message clair M correspondant au cryptogramme C est «petit» (c.-à-d. M<7 par exemple) alors M peut être déterminé en vérifiant les chiffrements de courts messages. La théorie donne des garanties de sécurité (pour autant que trouver d soit difficile à partir de N et e) seulement lorsque le message M est aléatoire dans 1...N-1.

Chiffrements de clés secrètes Les chiffrements et déchiffrements RSA (ou d’autres systèmes à clé publique) sont beaucoup moins efficaces que ceux des systèmes à clé secrète, rendant ainsi le chiffrement de masse impossible. Les systèmes à clé publique sont cependant plus versatiles puisqu’ils ne nécessitent pas le partage de clés secrètes. Nous pouvons obtenir le meilleur des deux mondes en utilisant un système à clés publiques pour partager une clé secrète de session pour votre système à clé secrète préféré : Obélix tire une clé K au hasard pour AES, il détermine la clé publique RSA d’Astérix (N,e), Transmet C=Ke mod N à Astérix, Astérix déchiffre K=Cd mod N. K est utilisée par Astérix et Obélix pour chiffrer les données avec AES... Astérix et Obélix partagent une clé secrète AES K? «key enveloping»

Problèmes avec le chiffrement RSA de clés Rappelons ce que nous disions précédemment : RSA est un système qui peut être considéré sûr si le message à chiffrer est aléatoire dans l’intervalle 1...N-1. Ceci n’est certainement pas le cas lorsque le message consiste en une clé pour AES de 128 bits ou, pire, une clé DES de 64 bits. La méthode qui consiste à ajouter des «0» au bout de la clé n’est pas sûre! Nous devons donc trouver une méthode de remplissage pour allonger les messages et les rendre aussi aléatoires que possible...

OAEP: Remplissage optimal pour chiffrement asymétrique OAEP est un standard qui permet de chiffrer des messages beaucoup plus courts que ce que la taille de N (dans RSA) permet. Supposons que N a n bits de long. Supposons les messages à envoyer ont m bits de long t.q. m=n-k0-k1. aléatoire G:{0,1}k0 -> {0,1}n-k0 H:{0,1}n-k0 -> {0,1}k0 Est une fonction d’expansion cryptographique : Un générateur pseudo-aléatoire fonction de hachage cryptographique (p.ex. SHA256)

OAEP (II) Soient : G:{0,1}k0 -> {0,1}n-k0 un générateur pseudo-aléatoire H:{0,1}n-k0 -> {0,1}k0 une fonction de hachage cryptographique comme SHA256. Alors, le message m∈{0,1}n-k0-k1 sera codé pour r aléatoire de longueur k0 par : OAEP(m) = (m || 0k1)⊕G(r) || H((m || 0k1)⊕G(r))⊕r Sur réception de OAEP(m) le destinataire sépare le bourrage en deux parties O1||O2= OAEP(m). Calculer H(O1)⊕O2 = r, et G(r)⊕O1 = m || 0k1.

Génération de clés secrètes La cryptographie à clé publique est née (officiellement) du problème de génération de clés secrètes à partir d’information publique, tandis que RSA permet de chiffrer. Le protocole de Diffie-Hellman (1976) permet à deux parties de s’échanger une clé secrète à partir d’une discussion publique. Il est utilisé dans SSH pour la création d’un canal sécurisé. L’hypothèse de calcul est différente de RSA (factorisation), elle repose sur la difficulté d’extraire des logarithmes discrets.

Mise en place Considérons le groupe multiplicatif Zp*={1,...,p-1} l’ensemble des entiers modulo un nombre premier p. Le groupe Zp* possède des générateurs (aussi appelé éléments primitifs). Un générateur g pour Zp* est tel que : Zp* ={g0,g1,g2,...,gp-2}. Il est possible de produire un nombre premier p de taille donnée et un générateur g pour Zp* par un algorithme efficace. De plus, il est conjecturé que pour y=gx mod p, il est difficile de trouver x à partir de y, p, g. Autrement dit, calculer le logarithme dans Zp* est difficile.

Échange de clé Diffie-Hellman Soit p un nombre premier et g∈Zp* un élément primitif. Le problème de Diffie-Hellman : étant donnés g et p premier, gx mod p, gy mod p trouver gxy mod p. Le problème de Diffie-Hellman est supposé difficile. O=gx mod p A=gy mod p y∈Zp-1 x∈Zp-1 K=Ax mod p =(gy)x mod p= gxy mod p= (gx)y mod p= Oy mod p=K

Attention à l’homme du milieu! O=gx mod p C=gc mod p C’=gc’ mod p A=gy mod p K’=gc’x mod p K=gcy mod p K’=gc’x mod p K=gcy mod p Le protocole d’échange de clé de Diffie-Hellman n’est sûr que si le canal entre Obélix et Astérix est authentifié. Autrement, César peut partager une clé avec Obélix et une avec Astérix tandis qu’ils croient partager une clé entre eux. Nous verrons plus loin comment ce problème peut être résolu!

Conclusion Le chiffrement à clé publique offre des avantages indéniables par rapport au chiffrement à clé secrète. Cependant, ces systèmes nécessitent plus de puissance de calcul et de longues clés. Le chiffrement de clés symétriques par des méthodes asymétriques devient intéressant. Le chiffrement à clé publique doit être utilisé avec une bonne méthode de remplissage sûre. Même si les systèmes à clé publique permettent la distribution de clés, il faut absolument que l’expéditeur soit persuadé de l’intégrité de la clé publique utilisée pour le chiffrement. Nous reviendrons à ce problème un peu plus tard.

Conclusion (II) Nous avons vu comment un système à clé publique peut être utilisé pour l’échange de clés secrètes. Il s’agit du protocole de Diffie-Hellman. Celui-ci est utilisé en pratique par SSH. Il y a beaucoup d’autres systèmes à clé publique mais ceux-ci sont très peu utilisés dans la pratique : El-Gamal et courbes elliptiques, Paillier, Rabin.

Les limites de la sécurité

Séance de pratique (authentification) Plusieurs pays ont des restrictions sur l’exportation de logiciels et matériels cryptographiques. Il semble que le chiffrement est davantage réglementé que l’authenticité. Le premier est considéré plus dangereux que le second. Rivest (R dans RSA) prétend que cette distinction est tout à fait arbitraire : Ces règles supposent que les systèmes autorisés ne peuvent être utilisés pour offrir la confidentialité. Ce que Rivest défend, c’est que les modifications nécessaires sont très faciles à mettre en place sans nécessiter de cryptographie additionnelle.

Confidentialité à partir de l’intégrité Supposons que tous les (M,t) sont valides pour une clé K. Boîte inviolable CAM (soft ou hard) M (M,t) t oui/non K Pouvez-vous utiliser une telle boîte pour obtenir de la confidentialité?

Si Mi=0 alors ti∈{0,1}l aléatoire Solution M=M1,M2,...,Mk où Mi∈{0,1} R=R1,R2,...,Rk où Ri∈{0,1}n sont aléatoires Si Mi=1 alors Ri (R1,t1),(R2,t2),...(Rk,tk) CAM (soft ou hard) K CAM (soft ou hard) K ti∈{0,1}l Si oui alors Mi=1 Sinon Mi=0 Si Mi=0 alors ti∈{0,1}l aléatoire

Les redites Supposons qu’Astérix et Obélix soient connectés par un canal qui transmet toujours le message envoyé au destinataire, mais avec un délai possible arbitrairement long. Ils utilisent un système sûr pour l’intégrité. Obélix ne transmet jamais deux fois le même message. Ceci est garanti par un numéro de séquence. Astérix peut ranger au plus N messages reçus acceptés par Obélix. L’adversaire a le contrôle du canal (il peut tenter des redites). Lorsqu’Astérix reçoit un nouveau message avec un CAM valide, il doit déterminer si celui-ci est nouveau ou s’il s’agit d’une redite. Montrons que si Obélix transmet au plus N+1 messages, alors Astérix peut y parvenir tandis que si N+2 messages ou plus sont transmis, alors Astérix ne peut résoudre le problème.

Solution 3 ✔ 4 ✔ 2 ✔ Rejet! CANAL Les redites sont impossibles si le message est toujours dans la table. Lorsque Astérix a rempli son tableau, il peut espérer un seul message supplémentaire avant de fermer la session. Liste des messages transmis dans l’ordre transmis... message indice CAM M1 1 t1 M2 2 t2 M3 3 t3 M4 4 t4 Indice CAM (M3,3,t3) 3 ✔ CANAL (M4,4,t4) 4 ✔ (M2,2,t2) (M1,1,t1) 2 ✔ Puisque 4 messages ont été reçus Rejet! (M1,1,t1)

Impossibilité pour N+2 messages César attend que N+1 messages aient été transmis. La table d’Astérix ne contient alors de l’information que sur N messages. César réussira son attaque si i* n’est pas dans la tableau. Le message sera accepté par Astérix puisqu’il peut recevoir jusqu’à N+2 messages. message indice CAM M1 1 t1 M2 2 t2 M3 3 t3 M4 4 t4 Indice CAM La probabilité que i* ne soit pas dans la table est 2/(N+2), auquel cas Mi* sera une redite (M3,3,t3) (M4,4,t4) (M2,2,t2) CANAL i ✔ j ✔ (Mi*,i*,ti*) César tire au hasard un indice i* parmi les N+1 messages transmis. César redit Mi*

Fonctions de compression et de hachage Soit h une fonction de hachage cryptographique qui prend 256 bits et produit une empreinte de 128 bits. Peut-on construire une fonction H qui accepte des entrées de 512 bits, produit des empreintes de 128 bits et H est une fonction de hachage cryptographique comme h? soit X une chaîne de 512 bits. Nous écrivons X=(X0,X1) où X0 et X1 sont chacun de 256 bits. Supposons qu’une collision x≠x’ sur H est trouvée : H(x)=H(x’) avec x≠x’ h X0 X1 Nous avons donc que : h(h(x0),h(x1))=h(h(x’0),h(x’1)) h 2) Si (h(x0),h(x1))=(h(x’0),h(x’1)) alors ou bien x0≠x’0 ou bien x1≠x’1. Ceci donne aussi une collision pour h. Ex. : Si x0≠x’0 alors h(x0)=h(x’0) est une collision. 1) Si (h(x0),h(x1))≠(h(x’0),h(x’1)) alors nous avons une collision sur ces deux entrées! H(X)=H(X0,X1)=h(h(X0),h(X1))

RSA Supposons qu’une clé publique pour RSA est N=33 et e=13. Z33*={1,2,4,5,7,8,10,13,14,16,17,19,20,23,25,26,28,29,31,32} 33=3*11 (p=3,q=11) et |Z33*|= φ(33)=20. Nous avons donc que d satisfait e*d = 1 mod φ(33) -> 13*d = 1 mod 20. L’algorithme d’Euclide étendu fait ce travail... Nous trouvons d=17 car 13*17=221 = 1 mod 20. Le message M=5 est chiffré par C=513 mod 33= 5*((53)2)2 mod 33 = 5*((125 mod 33)2)2 mod 33= 5*(262)2=5*(676 mod 33)2 mod 33 5*162 mod 33 = 5*256 mod 33 = 5*25 mod 33 = 125 mod 33 = 26!!!!! Déchiffrons maintenant: 2617 mod 33 = 26*(((262)2)2)2 mod 33 = 26*(((676 mod 33)2)2)2 mod 33 = 26*((162)2)2 mod 33 = 26*(252)2 mod 33 = 26*(625 mod 33)2 mod 33 = 26*312 mod 33 = 26* (961 mod 33) mod 33 = 26*4 mod 33 = 104 mod 33 = 5!!!!!