Introduction à la cryptologie

publicité
8INF433
Introduction à la cryptographie
Terminologie
• Expéditeur
• Destinataire
• Message
– texte en claire
– texte chiffré (cryptogramme)
texte en clair
texte chiffré
Chiffrement
texte en clair
Déchiffrement
Terminologie
• Cryptologie: Branche de l'informatique
théorique qui s’intéresse à la transmission
secrête des données
• Cryptographie: Partie de la cryptologie qui
s’intéresse au chiffrement
• Cryptanalyse: Partie de la cryptologie qui
s’intéresse au déchiffrement
Formalisation
• M : suite de caractères (message)
• Fonction de chiffrement
E(M)=C
• Fonction de déchiffrement
D(C)=M
• On doit avoir D(E(M))=M
Algorithme cryptographique
• Paire de fonctions utilisées pour le chiffrement et
le déchiffrement.
• Algorithme restreint: l'algorithme est secret
–
–
–
–
Cela n'est plus utilisé
La conception d'un tel algorithme nécessite un expert
On ne peut utiliser d'algorithmes commerciaux
Différents algorithmes pour différents utilisateurs.
Clef cryptographique
• Valeur K provenant d'un grand ensemble de valeurs
possibles (espace des clefs).
• En général on a besoin de deux clefs
– K1 : pour le chiffrement
– K2 : pour le déchiffrement
• L'algorithme cryptographique est connu de tous mais
dépend des deux clefs:
– EK1(M)=C
– DK2(C)=M
Clef cryptographique
K1
M
Chiffrement
K2
C
Déchiffrement
M
Le secret réside dans la (ou les) clef(s) et non
dans les détails de l'algorithmes.
Deux types d'algorithmes
• Algorithmes à clef secrète
– K1 peut être calculé à partir K2 et vice versa.
– On a souvent K1=K2
– K1 et K2 doivent être secrètes
• Algorithmes à clef publique
–
–
–
–
K1K2
K2 ne peut pas être calculé à partir de K1
K1 peut être publique
K2 doit être secrète (clef privée)
Algorithme à clef secrète
• DES, AES, etc.
• Chiffre à substitution: Chaque caractère du message est remplacé
par un autre caractère.
– Exemple: Chaque caractère du message est remplacé par celui qui se
trouve K places plus loin (modulo 26)
• Code de Jules César: K=3
– Si le message est en binaire, on peut le segmenter en blocs de
longueur L et remplacer chaque bloc B par
(B+K) mod 2L
où K < 2L est la clef.
– Machines à rotors (Enigma)
Algorithme à clef secrète
• Chiffre à transposition: Les caractères du message
sont inchangés mais leur position est modifiée.
– Exemple (transposition simple en colonne):
"L'assassin est le docteur Matrix, regardez derrière l'horloge"
LASSASSIN
ESTLEDOCT
EURMATRIX
REGARDEZD
ERRIERELH
ORLOGE
"LEERE OASUE RRSTR GRLSL MAIOA EAREG SDTDR ESORE EICIZ LNTXD H"
Algorithme à clef secrète
• Technique du masque jetable (one–time pad, 1919): Seule
méthode connue 100% sécure.
– On veut chiffrer un message.
MASQUEJETABLE
– On choisit de façon aléatoire une séquence de caractères:
TBFRGFARFMIKL
– On effectue une substitution pour obtenir un message totalement
aléatoire:
GCYIBKKWZNKWQ
Algorithme à clef secrète
– Si on ne connait pas la clef TBFRGFARFMIKL alors il est impossible de
retrouver le message original.
– Toutes les clef sont également probables et celle-ci aurait aussi bien pu
être
RXDCXFHVQBYRX
– Si on déchiffre GCYIBKKWZNKWQ avec cette clef on obtient:
OEUFSDECAILLES
– Si on avait choisit la clef:
RTFDAPUVHMGNX
on aurait obtenu le texte en clair:
OISEAUPARADIS
Échange de clefs
Le principal problème de la technique du masque jetable
est la distribution de la clef.
Le premier algorithme d'échange de clefs a été inventé par
Diffie et Hellman en 1976.
Alice et Bernard se mettent d'accord sur deux grands
entiers n et g de telle manière que g soit primitif par
rapport à n.
Nombres primitifs
g est primitif par rapport à n si tous les nombres entre
1et n-1 peuvent être exprimés sous la forme: gi mod n.
Exemple: g=2 et n=11
210 = 1024
21 = 2
28 = 256
22 = 4
24 =16
29 = 512
27 = 128
23 = 8
26 = 64
25 = 32
= 1 (mod 11)
= 2 (mod 11)
= 3 (mod 11)
= 4 (mod 11)
= 5 (mod 11)
= 6 (mod 11)
= 7 (mod 11)
= 8 (mod 11)
= 9 (mod 11)
= 10 (mod 11)
Protocole de Diffie et Hellman
(1976)
• Alice choisit un grand nombre entier aléatoire x et envoie à Bernard
le résultat du calcul:
A=gx mod n
• Bernard choisit un grand nombre entier aléatoire y et envoie à Alice
le résultat du calcul:
B=gy mod n
• Alice calcule k = Bx mod n
• Bernard calcule k' = Ay mod n
• Les valeurs k et k' sont toutes deux égales à gxy mod n
Fonction à sens unique
• Fonction facile à calculer mais dont l'inverse est difficile
à calculer (même de façon probabiliste).
• Logarithme discrêt: fonction inverse de:
f(x) = gx mod n
• Factorisation: Il est possible de multiplier efficacement
deux grands nombres entiers mais aucun algorithme
efficace n'est connu pour factoriser un grand nombre.
Cryptologie à clef publique
• Clef publique K1
• Clef privée K2
• Fonction de chiffrement: EK1(M)
• Fonction de déchiffrement: DK2(C)
• DK2(EK1(M)) = EK1(DK2(M)) = M
Comment cela fonctionne?
• Chaque utilisateur doit posséder une clef
publique et une clef privée.
• Si Alice veut envoyer un message M à Bernard
elle utilise la clef publique K1 de Bernard et
envoie:
C = EK1(M)
• Bernard reçoit C et utilise sa clef privée K2 pour
calculer:
M = DK2(C)
Quel est l'avantage?
1. N'importe qui peut envoyer un message à Bernard en
utilisant sa clef publique.
2. Bernard peut utiliser sa clef privée pour signer un
message M:
– Il calcule d'abord:
S = DK2(M)
– Puis il envoie à Alice le message:
(M,S)
– Pour vérifier que le message a bien été envoyé par Bernard,
Alice calcule:
T = EK1(S)
– Si M = T alors Alice sait que seul Bernard a pu signer ce
message et que le message n'a pas été modifié.
RSA
(Rivest, Shamir et Adleman 1978)
1. Choisir aléatoirement deux grand nombres premiers p et q différents.
2. Calculer n=pq et (n)=(p-1)(q-1)
3. Choisir un entier e impair relativement premier à (n)
4. Calculer d tel que ed mod (n) = 1
5. Publier la clef publique (e,n)
6. Garder secrète la clef privée (d,n)
•
Fonction de chiffrement: E(M) = Me mod n
•
Fonction de déchiffrement: D(C) = Cd mod n
Étape 1
Comment trouver un nombre premier aléatoire:
1.
2.
3.
On choisit un grand nombre impair au hasard
On effectue le test de Miller-Rabin pour déterminer s'il
est premier
S'il n'est pas premier on l'incrémente de 2 puis on
refait l'étape précédente
Théorème de densité des nombres premiers: Pour tout
entier k, il y a environ k/lg k nombres premiers plus
petit que k.
Étape 2
Calculer n=pq et (n)=(p-1)(q-1)
Nous avons déjà vu des algorithmes efficaces pour calculer
le produit de deux grands nombres entiers.
Étape 3
On veut un entier e impair et relativement premier à (n).
On choisit e<(n) au hasard puis on appelle Euclide(e, (n)):
Euclide(a,b)
si b=0 alors retourner a
sinon retourner Euclide(b,a mod b)
Si e n'est pas relativement premier à (n) alors on incrémente e
successivement jusqu'à ce que l'on obtienne le nombre désiré.
Étape 4
Nous avons besoin de l'algorithme d'Euclide étendu qui permet de trouver
trois valeurs entières (d,x,y) tels que:
t = PGCD(a,b) = ax + by
Euclide_étendu(a,b)
si b=0 alors retourner (a,1,0)
sinon
(t',x',y') = Euclide_étendu(b,a mod b)
retourner (t,x,y) = (t',y',x'- a/b y')
En supposant que l'appel récursif fonctionne correctement on obtient:
t = t' = bx' + (a mod b) y'
= bx' + (a - a/b b) y'
= ay' + b (x' - a/b y')
Ce qui correspond bien aux valeurs retournées par l'algorithme.
Étape 4 (suite)
L'algorithme d'Euclide étendu calcule un triplet (t,x,y) tel que:
t = PGCD(a,b) = ax + by
On a donc
1 = PGCD(e, (n)) = ex + (n) y
Ce qui implique
ex mod (n) = 1
Il suffit donc de prendre d=x.
Pourquoi cela fonctionne-t-il?
Si M mod p = 0 alors Med mod p = M mod p=0
Sinon
Med mod p = M1+k(p-1)(q-1) mod p (pour un certain k)
= M(M(p-1))k(q-1) mod p
= M(1)k(q-1) mod p
(Fermat)
= M mod p
Similairement : Med mod q = M mod q
Pourquoi cela fonctionne-t-il?
Theorème du reste chinois:
Soit p1, p2, ..., pk des nombres relativement premiers.
Alors le système d'équations
x = ai mod pi (1i k )
Possède une solution unique modulo n=p1p2...pk
Corollaire:
On a
b = a mod p et
b = a mod q
si et seulement si
b = a mod n
Pourquoi cela fonctionne-t-il?
Conclusion: Si M < n=pq alors
Med mod p = M
Med mod q = M
donc par le théorème du reste chinois:
Med mod n = M
Utilisation de RSA
• Puisque
D(E(M)) = M mod n
alors on doit avoir M<n
• Pour chiffrer de plus long messages il suffit de le diviser
en blocs M=M1 M2 ... Mt de sorte que Mi<n pour tout
1≤i≤t
• On peut aussi utiliser RSA pour transmettre une clef et
ensuite utiliser un algorithme à clef secrète.
Exemple d'utilisation de RSA
• Prenons p=47 et q=71
• n = 3337 et (n) = 4670 = 3220
• Choisissons e=79 et d=1019
(on peut vérifier que ed = 80501 = 1+ 25 3220)
• Pour chiffrer le message 688232687966668 on commence par le
diviser en petit blocs de trois chiffres:
m1 m2 m3 m4 m5 m6 = 688 232 687 966 668
• En utilisant la clef (e,n)=(79, 3337) on calcule le premier bloc:
68879 mod 3337 = 1570 = c1
Exemple d'utilisation de RSA
• Les autres blocs sont chiffrés de la même manière et on obtient:
c1 c2 c3 c4 c5 c6 = 1570 2756 2091 2276 2423
• Pour déchiffrer le message on utilise la clef (d,n)=(1019, 3337) et on
obtient pour le premier bloc:
15701019 mod 3337 = 668 = m1
• Le reste du message en clair est obtenu de la même manière.
Signature numérique
Nous avons vu que Bernard pouvait signer un message M en utilisant
sa clef privée pour calculer S = D(M) et envoyer (M,S).
En général, M est trop grand pour que ce calcul puisse être effectué de
manière efficace et on veut une signature qui ne soit pas trop
longue.
On peut alors utiliser le chaînage par bloc:
1. M est divisé en bloc m1 m2 ... mt de longueur fixe.
2. Calculer s1 = m1d mod n
3. Pour i = 2 à t faire si= (mi  si-1)d mod n
4. La signature est S = st
Note: L'opérateur  est le OU-exclusif.
Fonction de hachage à sens unique
En pratique, on ne signe pas le message lui-même mais plutôt une
empreinte digitale obtenue à l'aide d'une fonction de hachage h
satisfaisant les propriétés suivantes:
1.
2.
3.
Étant donné M, il est facile de calculer h(M).
Étant donné h(M) , il est difficile de calculer M.
Étant donné M, il est difficile de trouver un autre message M' tel
que h(M)=h(M').
On exige quelquefois une quatrième propriété:
4.
Il est difficile de trouver deux messages aléatoires M et M' tels
que h(M)=h(M').
Nombres pseudo-aléatoires
Un générateur de nombres pseudo-aléatoires est une fonction g qui
prend en entrée une séquence x de t bits et produit en sortie une
séquence g(x) plus longue (disons t2 bits) telle que g(x) "semble"
aléatoire.
Soit f(x) une fonction à sens unique telle que RSA
( f(x)= xe mod n où (e,n) est la clef publique).
• Si x est une séquence de bits aléatoires on calcule f(x) et on choisit
un des bits
• On calcule ensuite f(f(x)) et on choisit un des bits
• On poursuit de la même manière t2 fois.
Nombres pseudo-aléatoires
Si on utilise RSA, il suffit
de prendre le bit le plus
significatif.
Le bit le moins significatif
ne produit pas de bon
résultat.
Jouer à pile ou face
Alice et Bernard veulent jouer à pile ou face par téléphone. Comment peuventils y parvenir s'il ne se font pas confiance?
•
Bernard choisit un nombre x d'un ensemble contenant autant de nombres
pairs que de nombres impairs.
•
Bernard calcule y=f(x) où f est une fonction à sens unique telle que RSA
•
Bernard envoie y à Alice
•
Alice choisit un bit b et envoie son choix à Bernard
•
Bernard envoie x à Alice
•
Alice vérifie que y=f(x)
•
Alice gagne si b représente la parité de x.
Téléchargement