RÉSUMÉ DE COURS DE CRYPTOGRAPHIE DUT Informatique, S4 Parcours Études Courtes 1 Arithmétique élémentaire 1.1 Division, congruence Division euclidienne Soient a et b deux entiers avec b 6= 0 ; il existe un unique couple d’entiers (q, r) tel que a = q.b + r et 0 ≤ r < |b|. a s’appelle le dividende, b s’appelle le diviseur, q s’appelle le quotient de la division de a par b, r s’appelle le reste de la division de a par b. 2. Pour tout entier c non nul, a ≡ b [m] ⇔ a.c ≡ b.c [m.c]. 3. Si a ≡ b [m.n], alors a ≡ b [m] et a ≡ b [n]. 4. La relation de congruence modulo m est une relation d’équivalence : – pour tout entier a, a ≡ a [m] (réfléxivité), – si a ≡ b [m], alors b ≡ a [m] (symétrie), – si a ≡ b [m] et b ≡ c [m], alors a ≡ c [m] (transitivité). Entiers modulaires On note Z/nZ l’ensemble des entiers modulo n, Divisibilité c’est-à-dire l’ensemble des classes d’équivalence Notation : a | b ⇔ a divise b ⇔ b est un multiple pour la relation de congruence modulo n. Chaque de a ⇔ ∃k ∈ Z, b = ak élément de Z/nZ a un unique représentant compris entre 0 et n−1. L’addition et la multiplication sont bien définies dans Z/nZ. Propriétés Pour tout entier a, 1 | a et a | a (réflexivité). Si a | b et b | c, alors a | c (transitivité). 1.2 Exponentiation modulaire Si a | b et a | c, alors a | (b + c). Pour tout entier c non nul, a | b ⇔ a.c | b.c Algorithme d’exponentiation rapide : Pour calculer ab modulo n : Congruence – Ecrire P b comme somme de puissances de 2 : Notation : a ≡ b [n] ⇔ a est congru à b modulo n b = ki=0 bi 2i (écriture binaire). k ⇔ n divise b − a ⇔ ∃k ∈ Z, a = b + k.n. – Calculer a2 , a4 , a8 , . . . a2 modulo n par mises au carré successives. i Propriétés – Faire le produit des a2 modulo n pour les indices i tels que bi = 1. 1. L’addition et la multiplication sont compatibles avec la relation de congruence : si Le problème inverse s’appelle problème du loa ≡ b [m] et c ≡ d [m], alors a+b ≡ c+d [m] garithme discret : étant donnés a et c, trouver et a.c ≡ b.d [m] b tel que ab ≡ c [n]. C’est un problème difficile. 1. 2. 3. 4. Résumé de cours Méthode naı̈ve de factorisation : Pour 1. Alice et Bob choisissent un modulo N (de décomposer un entier n en nombre premier, on si p | n pour tout nombre préférence un grand nombre premier) et un teste successivement √ premier p < n ; en cas de succès, on recommence entier g ; N et g ne sont pas secrets. à partir de p en remplaçant n par n/p, sinon, n 2. Alice choisit un nombre secret a. Bob choisit est premier. un nombre secret b. Lemme d’Euclide 3. Alice calcule ca ≡ g a [N ] et le transmet à Soient a et b deux entiers et p un nombre premier. Bob. Bob calcule cb ≡ g b [N ] et le transmet Alors p | ab ⇒ p | a ou p | b . à Alice. ca et cb ne sont pas secrets. Echange de clés Diffie-Hellman : 4. Alice reçoit cb et calcule Kab ≡ (cb )a ≡ (g b )a ≡ g ba [N ]. Bob reçoit ca et calcule 2.2 Kab ≡ (ca )b ≡ (g a )b ≡ g ab [N ]. PGCD et nombres premiers entre eux 5. Alice et Bob disposent maintenant d’une clé commune Kab dont ils peuvent se servir pour Définitions : Soient a et b deux entiers. Le plus grand commun diviseur de a et b, noté pgcd(a, b) chiffrer leur correspondance. ou a ∧ b, est le plus grand entier d tel que d | a Un attaquant passif qui écoute les échanges et d | b. Le plus petit commun multiple de a et b, connaı̂t N , ca ≡ g a [N ] et cb ≡ g b [N ] mais il noté ppcm(a, b) ou a ∨ b, est le plus petit entier m ne connaı̂t ni a ni b : il ne peut pas calculer (faci- tel que a | m et b | m. lement) la clé Kab . On dit que a et b sont premiers entre eux si leur pgcd vaut 1. 2 2.1 Nombres premiers, théorème de Bézout pgcd, Décomposition en nombres premiers Lien avec la décomposition en nombres premiers Si a = pα1 1 pα2 2 . . . pαk k et b = ±pβ1 1 pβ2 2 . . . pβk k , alors a ∧ b = pγ11 pγ22 . . . pγkk a ∨ b = pδ11 pδ22 . . . pδkk où γi = min(αi , βi ) et δi = max(αi , βi ). Définition : Un nombre premier est un nombre entier différent de ±1 qui n’est divisible que par Propriétés 1 et par lui-même. Exemples : 2, 3, 5, 7, 11, 13, - (a ∧ b) × (a ∨ b) = ab. En particulier si a et 17 . . . On note P l’ensemble des nombres premiers, b sont premiers entre eux, a ∨ b = ab. cet ensemble est infini (théorème d’Euclide). - a ∧ b = b ∧ a, a ∧ (b ∧ c) = (a ∧ b) ∧ c. Théorème (Répartition des nombres premiers). - 0 ∧ a = a, a ∧ a = a, 1 ∧ a = 1. Si on note π(x) le nombre de nombres premiers - Si x | a et x | b, alors x | (a ∧ b). x , c’est-à-dire inférieurs à x, alors π(x) ∼ ln(x) - Si a | x et b | x, alors (a ∨ b) | x. x π(x)/ ln(x) →x→∞ 1. - ma∧mb = m(a∧b). En particulier, si a∧b = d, alors d | a, d | b, et (a/d) ∧ (b/d) = 1. Informellement, autour d’un grand nombre n en- Pour tout entier k, a ∧ b = a ∧ (b + ak) viron un entier sur ln(n) est premier. Lemme de Gauss Décomposition en nombre premier Si a | bc et a ∧ b = 1, alors a | c. Tout nombre entier n peut se décomposer en facteurs premiers : n = ±pα1 1 pα2 2 . . . pαk k , pi ∈ P. Algorithme d’Euclide : pour calculer le pgcd Cette écriture est unique à permutation des fac- de deux entiers a et b, 1. si a < b, échanger a et b ; teurs premiers près. 2 IUT d’Orsay Département d’informatique Cryptographie – S4 PEC 2. faire la division euclidienne de a par b : a = bq + r ; 3. si r = 0, le pgcd est égal à b, sinon, remplacer a par b, b par r et retourner à l’étape 2. 2.3 Théorème de Bézout et applications Théorème de Bézout : Deux entiers a et b sont premiers entre eux si et seulement si il existe deux entiers u et v tels que au + bv = 1. Plus généralement, si a∧b = d, alors il existe deux entiers u et v tels que au + bv = d. 1. On calcule d = a ∧ b par l’algorithme d’Euclide. Si d - c, l’équation n’a pas de solution ; sinon, en divisant par d on obtient l’équation équivalente a0 x + b0 y = c0 où a0 = a/d, b0 = b/d, c0 = c/d (en particulier a0 ∧ b0 = 1). 2. D’après le théorème de Bézout il existe deux entiers u et v tels que a0 u + b0 v = 1 ; on les calcule par l’algorithme d’Euclide étendu. 3. L’ensemble des solutions est alors {(c0 u + kb0 , c0 v − ka0 ) ; k ∈ Z}. Entiers inversibles modulo n Un entier a est inversible modulo n si et seulement si il existe un entier b tel que ab ≡ 1 [n]. Cet entier b, s’il existe, est unique modulo n et s’appelle inverse modulaire de a ; on note b ≡ a−1 [n]. Algorithme d’Euclide étendu : pour calculer Propriété u et v, on utilise l’algorithme d’Euclide étendu : Un entier a est inversible modulo n si et seulement si a et n sont premiers entre eux. A l’aide de 1. On effectue les divisions successives comme l’algorithme d’Euclide étendu, on calcule les coefdans l’algorithme d’Euclide. On note ficients de Bézout u et v tels que au + nv = 1. r0 , r1 , . . . , rm et q1 , q2 , . . . , qm−1 les restes Alors a−1 ≡ u [n]. et les quotients successifs, avec a = r0 et b = r1 : Chiffrement El Gamal : a = q1 b+r2 , ... b = q2 r2 +r3 , r2 = q3 r3 +r4 , rm−2 = qm−1 rm−1 + rm Le dernier reste non nul rm est égal au pgcd d de a et b. 2. On calcule par récurrence une série d’égalité de la forme d = uk rk−1 + vk rk , en partant de l’égalité d = rm = rm−2 − qm−1 rm−1 (c’està-dire um−1 = 1 et vm−1 = −qm−1 ) : si d = uk+1 rk + vk+1 rk+1 , comme rk−1 = qk rk + rk+1 , en remplaçant rk+1 on obtient d = uk+1 rk + vk+1 (rk−1 − qk rk ) = vk+1 rk−1 + (uk+1 − qk vk+1 ) rk . On a donc ( uk = vk+1 vk = uk+1 − qk vk+1 1. Alice choisit un modulo N (de préférence un grand nombre premier) et deux entiers g et s, et elle calcule h ≡ g s [N ]. 2. Alice rend public N , g et h (sa clé publique) et garde secret s (sa clé privée). 3. Pour envoyer un message chiffré m, Bob choisit un entier aléatoire r, calcule c1 ≡ g r [N ] et c2 ≡ hr .m [N ], et envoie (c1 , c2 ) à Alice. 4. Pour déchiffrer le message reçu (c1 , c2 ), Alice calcule (cs1 )−1 .c2 ≡ ((g r )s )−1 .hr .m ≡ (g rs )−1 .g sr .m ≡ m [N ]. Un attaquant passif qui écoute les échanges ne peut pas retrouver facilement r ou s (problème du log discret), et ne peut alors pas calculer m. Ce cryptosystème ne fonctionne correctement que si l’entier r est choisi suffisamment aléatoirement. 3. On remonte ainsi jusqu’à trouver d = u1 r0 + v1 r1 = u1 a + v1 b. 2.4 Théorème des restes chinois et applications. Applications aux équations diophantiennes : Étant donnés trois entiers a, b et c, on veut déterminer tous les couples d’entiers (x, y) Théorème des restes chinois : Soient m et n deux entiers premiers entre eux, et a et b deux ensolutions de l’équation ax + by = c. IUT d’Orsay Département d’informatique 3 Résumé de cours tiers quelconques. Alors le système de congruences 3.2 ( x ≡ a [m] x ≡ b [n] Le système RSA La sécurité de ce système repose sur la difficulté de calculer des “racines e-ièmes modulaires” : étant donnés des entiers e, n et a, trouver un entier x tel que xe ≡ a [n]. On ne sait résoudre efficacement ce problème que quand la factorisation de n est connue. admet une solution x, unique modulo mn. En particulier, si x ≡ y [m] et x ≡ y [n], alors Génération des clés : Alice choisit deux grands x ≡ y [mn]. nombres premiers p et q et calcule leur produit Résolution pratique : à l’aide de l’algorithme n = pq. Elle choisit un entier e premier avec d’Euclide étendu, on calcule les coefficients de (p − 1)(q − 1) et calcule avec Euclide étendu son Bézout u et v tels que mu + nv = 1. Alors inverse d modulo (p − 1)(q − 1). Alice publie (n, e) x ≡ bmu + anv [mn]. (la clé publique) et garde secret d (la clé privée). Utilisation en confidentialité (chiffrement) : 3 3.1 Théorème de Fermat et RSA Le petit théorème de Fermat 1. Pour transmettre un message m à Alice, Bob récupère sa clé publique (n, e), calcule c ≡ me [n] et envoie le message chiffré c à Alice. 2. Pour déchiffrer le message reçu c, Alice calcule m0 ≡ cd [n]. On vérifie qu’on a bien m0 ≡ m [n] : Petit théorème de Fermat : Soit p un nombre Comme on a de = 1 + k(p − 1)(q − 1), modulo premier. Alors pour tout entier a, ap ≡ a [p]. p on trouve que m0 ≡ (me )d ≡ m1+k(p−1)(q−1) ≡ De façon équivalente, si a 6≡ 0 [p], alors ap−1 ≡ m × (mp−1 )k(q−1) ≡ m [p] avec le petit théorème 1 [p]. de Fermat, et on trouve de même que m ≡ m0 [q] ; comme p et q sont premiers entre eux, le théorème Application à la primalité 0 On peut se servir de ce théorème comme test de des restes chinois implique que m ≡ m [n]. primalité : pour vérifer si un nombre n est preUtilisation en authentification (signature) : mier ou pas, on teste pour plusieurs entiers a si 1. Pour authentifier un message m, Alice calan ≡ a[n]. En cas d’échec, on sait que n n’est cule sa signature s ≡ md [n] et envoie (m, s) pas premier, sinon n est probablement (mais pas à Bob. sûrement) premier. Conséquence : prouver qu’un nombre n’est pas 2. Pour s’assurer que le message reçu (m, s) a premier est beaucoup plus facile que de factoriser bien été envoyé par Alice, Bob récupère sa un nombre. clé publique (n, e) et vérifie que m ≡ se [n]. 4 IUT d’Orsay Département d’informatique