Transcript powerpoint
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
M
E
C
D
K
M
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.
Ceci coûte donc essentiellement
PK=(N,e) :
deux fois le prix de tester la
primalité de nombre de k bits.
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é!)
Il faut retenir p et q!
e peut être tiré au hasard dans Zφ(N), mais il doit aussi être
relativement premier à φ(N) :
Par l’algo d’Euclide
PGCD(φ(N), e)=PGCD((p-1)(q-1), e) = 1
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.
Nous avons vu que ceci
Calculer φ(N)=(p-1)(q-1),
est possible par l’algo
d’Euclide étendu.
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».
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 viceversa.
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.
Astérix et Obélix partagent une clé
secrète AES K?
«key enveloping»
K est utilisée par Astérix et Obélix pour chiffrer les données avec AES...
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.
Est une fonction
n-k0
d’expansion cryptographique :
Un générateur pseudo-aléatoire
G:{0,1}k0 -> {0,1}
fonction de hachage
H:{0,1}n-k0 -> {0,1}k0 cryptographique
(p.ex.
SHA256)
aléatoire
Soient :
OAEP (II)
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
x∈Z
p-1
x
K=A mod
p
=(gy)x mod
p=
gxy mod
p=
y∈Zp-1
(gx)y mod
p=
Oy mod
p=K
Attention à l’homme du milieu!
O=gx mod
p
C’=gc’ mod
p
K’=gc’x mod p
C=gc mod
p
A=gy 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
M
(M,t)
CAM
t
(soft ou hard)
K
oui/non
Pouvez-vous utiliser une telle boîte pour obtenir de
la confidentialité?
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)
ti
∈{0,1}l
CAM
CAM
(soft ou hard)
(soft ou hard)
K
K
Si Mi=0 alors ti∈{0,1}l aléatoire
Si oui alors Mi=1
Sinon Mi=0
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
★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.
message
M1
M2
indice
1
2
CAM
Liste des messages
transmis dans l’ordre
transmis...
t1
t2
M3
3
t3
M4
4
t4
CANA
L
Indice CAM
(M3,3,t3)
(M4,4,t4)
3
✔
(M2,2,t2)
4
✔
2
✔
(M1,1,t1
)
(M1,1,t1
)
Puisque 4
messages ont
été reçus
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
M1
M2
M3
indice
1
2
3
CAM
t1
t2
Indice CAM
★La probabilité que i* ne soit pas dans la table
est 2/(N+2), auquel cas Mi* sera une redite
CANA
L
(M3,3,t3)
(M4,4,t4)
(M2,2,t2)
t3
(Mi*,i*,ti*)
M4
4
i ✔
t4
César tire au hasard un
indice i* parmi les N+1
messages transmis.
César redit Mi*
j ✔
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’
X0 h
h
X
1
h
Nous avons donc que :
h(h(x0),h(x1))=h(h(x’0),h(x’1))
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))
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.
Déchiffrons maintenant:
RSA
Supposons qu’une clé publique pour RSA est N=33 et e=13.
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
Z33*={1,2,4,5,7,8,10,13,14,16,17,19,20,23,25,26,28,29,31,32}
= 26*(252)2 mod 33
*|= φ(33)=20.
33=3*11 (p=3,q=11) et |Z=3326*(625
mod 33)2 mod 33
= 26*312 mod 33
Nous avons donc que= d26*
satisfait
e*d =33)
1 mod
(961 mod
modφ(33)
33 -> 13*d = 1 mod 20.
L’algorithme d’Euclide= étendu
fait 33
ce travail...
26*4 mod
= 104 mod 33 = 5!!!!!
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!!!!!