DETERMINER L’EXISTENCE D’UN a est inversible dans Z/nZ INVERSIBLE DANS Z/nZ Ù a et n sont premiers entre eux Ù il existe b tel que a × b = 1 [n] Ù pgcd(a, n) = 1 Calcul du pgcd : le dernier reste non nul de la division de a par n est le pgcd (a, n) pgcd (18, 35) 35 = 18 + 17 18 = 17 + 1 17 = 17 + 0 ⇒ 18 admet donc un inversible dans [35] pgcd (21, 32) 32 = 22 + 10 22 = 10 × 2 + 2 20 = 2 × 10 + 0 ⇒ 22 n’admet donc pas d’inversible dans [32] pgcd(47, 53) 53 = 47 × 1 + 6 47 = 6 × 7 + 5 6= 5+1 ⇒ 47 admet donc un inversible dans [53] pgcd (22, 32) CALCULER 32 = 21 + 11 21 = 11 + 10 11 = 10 + 1 ⇒ 21 admet donc un inversible dans [32] UN INVERSIBLE DANS Z/nZ * Théorème de Bezout : ∀ a, b ∈ N , pgcd (a, b) = 1 Ù ∃ u,v ∈ Z / au + bv = 1 Algorithme d’Euclide étendu : permet de calculer les coefficients de Bezout - On effectue la division de a par n jusqu’à avoir un reste égal à 1 (Euclide) - On remonte à l’envers les égalités pour obtenir le coefficient cherché 1 - Calcul de l’inverse de 18 [35] D’après le théorème de Bezout, on a : 18u + 35v = 1 où u : inverse de 18 [35] 35 = 18 + 17 (1) On remonte les égalités d’après (2) 18 = 17 + 1 (2) 1 = 18 – 17 1 = 18 – (35 – 18) d’après (1) 1 = 18 – 35 + 18 = -35 + 2 × 18 ⇒ donc u = 2, donc l’inverse de 18 [35] est 2 Vérification 18 × 2 [35] = 36 =1 [35] [35] 2 - Calcul de l’inverse de 21 [32] 21u + 32v = 1 (D’après Bezout) On remonte les égalités 32 = 21 + 11 1 = 11 – 10 21 = 11 + 10 1 = 11 – (21 – 11) = 2 × 11 – 21 11 = 10 + 1 1 = 2 × (32 – 21) – 21 = 32 × 2 – 3 × 21 ⇒ donc u = -3, donc l’inverse de 21 [32] est -3 Vérification 21 × -3 [32] = -63 [32] = -63 + 2 × 32 [32] =1 [32] 3 - Calcul de l’inverse de 11 [7] 11u + 7v = 1 (D’après Bezout) 11 = 7 + 4 7 =4+3 4 =3+1 On remonte les égalités 1=4–3 1 = 4 – (7 – 4) = 4 – 7 + 4 = 2 × 4 – 7 1 = 2 × (11 – 7) – 7 1 = 2 × 11 + 2 × (-7) – 7 1 = 2 × 11 – 3 × 7 ⇒ donc u = 2, donc l’inverse de 11 [7] est 2 Vérification 11 × 2 [7] = 22 =7×3+1 =1 [7] [7] [7] THEOREME DES RESTES CHINOIS (CRT) • Si pgcd(p, q) = 1 , Z/pqZ = Z/pZ × Z/qZ • Si pgcd(p, q) = 1 , ∀ α, β ∈ Z, ∃! x, 0 ≤ x < p.q (∃u,v ∈ Z / pu + vq = 1 d’après Bezout) / x mod p = α mod p x mod q = β mod q x = αvq + βpu + λp.q (λ ∈ Z ) Ù x = αvq + βpu mod(p.q) Quels sont les entiers x tels que x = 4 mod 47 et x = 12 mod 53 ? pgcd(47, 53) 53 = 47 × 1 + 6 47 = 6 × 7 + 5 6= 5+1 Sujet du 06/06/2003 Ex. 7 ⇒ pgcd(47, 53) = 1 donc 47 et 53 sont premiers entre eux D’après le théorème des restes chinois, on a : ⇒ Z/47 × 53Z = Z/47Z × Z/53Z ⇒ x = αvq + βpu mod(p.q) x = 4 × 53v + 12 × 47u mod 2491 Euclide Euclide étendu 53 = 47 × 1 + 6 47 = 6 × 7 + 5 6= 5×1+1 1=6–5 = 6 – (47 – 6 × 7) = 6 – 47 + 6 × 7 = 6 × 8 – 47 = 8 × (53 – 47) – 47 = 8 × 53 – 47 × 8 – 47 = 8 × 53 + 47 × (-9) ⇒ u = 8 et v = -9 ⇒ 53u + 47v = 1 (Bezout) SQUARE AND ⇒ x = 4 × 53v + 12 × 47u [2491] x = 4 × 53 × (-9) × 47 × 8 [2491] x = 1696 – 5076 [2491] x = -3380 [2491] x = 1602 [2491] Vérification 1602 mod 47 = 4 1602 mod 53 = 12 MULTIPLY Méthode du Square and Multiply - On écrit l’exposant en binaire - A chaque ligne on ajoute 1 bit à l’exposant en partant de celui de gauche - Si le bit de gauche est égal à 1, le résultat de la ligne précédent étant B Alors Axxx1 mod Y = (B2 mod Y) × (A mod Y) Sinon Axxx0 mod Y = B² mod Y - On s’arrête lorsque tous les bits sont consommés. Calcul de 7213 mod 10 (213)10 = (11010101)2 71 711 7110 71101 711010 7110101 71101010 711010101 mod 10 = 7 mod 10 = (72 mod 10) × 7 mod 10 = 63 mod 10 mod 10 = 32 mod 10 mod 10 = 92 mod 10 × 7 mod 10 = 7 mod 10 mod 10 = 72 mod 10 = 49 mod 10 mod 10 = 92 mod 10 × 7 mod 10 = 7 mod 10 mod 10 = 72 mod 10 = 49 mod 10 mod 10 = 92 mod 10 × 7 mod 10 = 7 mod 10 ⇒ 7213 mod 10 = 7 =3 =9 =7 =9 =7 =9 =7 TESTER SI UN NOMBRE EST PREMIER 2 Méthodes : - Pour un nombre n, on essaye toutes les divisions par D, allant entre 1 et √n + 1, si aucune division ne tombe juste, on peut affirmer que n est premier - n est premier ⇒ ∀x premier avec n (non multiple de n), xn-1 = 1 mod n (Test de Fermat, probabiliste) CALCUL DE ϕ(n) L’indicateur d’Euler ϕ(n) représente : - le nombre de nombre premier avec n entre 1 et n - le nombre d’éléments inversibles dans Z/nZ Si p est premier alors Sinon ϕ(p) = p – 1 ϕ(p) = ϕ(n) × ϕ(m) = ϕ(nm) = (n – 1) × (m – 1) p = n × m (n et m étant premier entre eux) ϕ(13) = 13 – 1 = 12 ϕ(10) = ϕ(5) × ϕ(2) = 4 × 1 = 4 CALCUL DE gx mod p Méthode : - Si le calcul de (p-1)2 est facile et que x est facilement convertible en binaire, on peut appliquer directement la méthode Square and Multiply. - Sinon on simplifie : g par g mod p x par x mod ϕ(p) - On termine éventuellement les calculs par un Square and Multiply Exemple 1 : 789579562 mod 10 Sujet du 06/06/2003 Ex. 8 10 = 5 × 2 (5 et 2 étant premiers) ⇒ ϕ(10) = (5 – 1) × (2 – 1) = 4 78957 = 7 956 = 2 [10] [ϕ(10)] ⇒ 789579562 = 72 [10] = 9 [10] Exemple 2 : 358247 mod 13 13 est un nombre premier ⇒ ϕ(13) = 12 358 247 = 27 × 13 + 7 [13] =7 [13] =7 [ϕ(13)] 358247 = 77 [13] ⇒ 358247 mod 13 = 6 Square and Multiply (7)10 = (111)2 71 711 7111 mod 13 = 7 mod 13 = 72 mod 13 × 7 mod 13 = 10 mod 13 × 7 mod 13 = 5 mod 13 = 52 mod 13 × 7 mod 13 = 12 mod 13 × 7 mod 13 = 6 ONE TIME PAD (« MASQUE JETABLE ») Imaginons que nous ayons un message de n octets. Pour l'encrypter: - Créer une suite S (même taille que n) d'octets aléatoires (S est appelé pad ou masque). - Appliquer ce masque octet par octet au message (généralement avec une opération logique XOR) Pour le décrypter, il suffit de ré appliquer le même masque. 2 XOR successifs s'annulent. Ainsi, si vous ne connaissez pas le masque S, le message EDRJVQUIKEGDNCTUIO peut très bien se décrypter en : Ma réponse est oui ou Ma réponse est non ou Le lavabo est bleu. Tout dépend de S ! Si vous n'avez pas S, vous pouvez toujours essayer de décrypter le message : il peut vouloir dire n'importe quoi ! Quelle que soit votre puissance de calcul, vous ne pourrez jamais décrypter le message. Pièges à éviter : - Les octets du masque doivent être réellement aléatoires. Si vous les créées à partir d'un programme, ils ne sont pas aléatoires ! Il devient possible de deviner la suite d'octets du masque. - Le masque ne doit jamais servir plusieurs fois, sinon il devient possible de décrypter les messages suivants. Il faut sans cesse créer un nouveau masque pour encrypter de nouvelles données. - Le masque doit être de la taille des données à encrypter. Pas toujours pratique à manipuler. - Enfin, pour que votre correspondant puisse décrypter, vous devez aussi lui envoyer le masque ! Et vous devez le faire par un moyen parfaitement sûr. Faiblesse du One Time Pad La faiblesse au niveau sécurité du One Time Pad est sa vulnérabilité aux cryptanalyses partielles. En effet la connaissance d’un bit de clair fournit immédiatement un bit de clé. Il n’est donc pas résistant aux attaques à clair connu et encore moins aux attaques à clair choisi. Les attaques en clair Attaque à clair connu : le cryptanalyste dispose d’un (ou plusieurs) texte en clair et le (ou les) cryptogramme(s) correspondant(s). Attaque à clair choisi : il dispose d’un (ou plusieurs) texte en clair de son choix et le (ou les) cryptogramme(s) correspondant(s). LE PROBLEME DE LA GENERATION DE NOMBRES ALEATOIRES Il est impossible de créer des nombres aléatoires avec un programme. On peut au mieux créer des nombres pseudo aléatoires. La plupart des générateurs de nombres aléatoires sont assez mauvais : - on retrouve rapidement les mêmes suites de valeurs au bout d'un certain temps. - certaines valeurs sortent plus que d'autres. - avec certains générateurs, on peut trouver toute la suite de nombres simplement en connaissant deux valeurs successives ! Quand on a besoin de nombres réellement aléatoires (pour le One Time Pad), tels que ceux créés avec des phénomènes physiques impossibles à prévoir : - écoulement de fluides (lava-lamps, particules dans un liquide en circulation, vent et tourbillons) - bruit blanc généré par un pont de diodes - émission de particules issues de la décomposition de matière radioactive Ce n'est pas à la portée de tout le monde. Il faut un dispositif physique, et non pas seulement logiciel. Certains ont inventé des systèmes ingénieux avec une Webcam qui filme des lava-lamps. Comme ces écoulements de fluide et la convection les rendent impossible à prévoir à long terme, ils font un bon générateur de nombres aléatoires. Il suffit de filmer l'image et d'utiliser la valeur des pixels pour générer des nombres aléatoires. DIFFIE-HELLMANN : LA CRYPTOGRAPHIE A CLE PUBLIQUE Depuis les origines de la cryptographie, et jusqu'à récemment, tous les procédés étaient basés sur une même notion fondamentale: chaque correspondant était en possession d'une clef secrète, qu'il utilisait pour chiffrer et déchiffrer. Cela a un inconvénient majeur : comment communiquer la clef au correspondant ? Il faut pour cela utiliser un canal sûr, par exemple une valise diplomatique. De toute manière, il faut un contact préalable avec la personne qui devra (dé)chiffrer nos messages. Le milieu des années 70 a vu l'avènement d'une nouvelle méthode de cryptage : le système à clefs publiques. L'idée de ce système a été proposée en 1976 par Diffie et Hellman, qui ont proposé une méthode totalement nouvelle: une clef pour chiffrer et une autre pour déchiffrer. Bien entendu, il existe un lien mathématique entre ces deux clefs, mais ce lien est constitué par ce que les deux inventeurs appellent une « fonction trappe à sens unique ». Cette fonction permet de calculer aisément la clef de chiffrement en connaissant la clef de déchiffrement. En revanche, l'opération inverse est pratiquement impossible. L'intérêt de ce système est considérable. En effet, toute personne ou toute entreprise disposant de moyens informatiques peut élaborer sa clef de déchiffrement - qu'elle garde secrète pour son usage exclusif - puis en déduire la clef de chiffrement correspondante. Tous les utilisateurs de ce système agissant de même, les clefs de chiffrement peuvent ensuite être groupées dans une sorte d'annuaire mis à la disposition du public. Ainsi deux correspondants peuvent-ils communiquer secrètement sans aucun contact préalable. 1ère étape Alice Bob Echange de deux valeurs publiques, Y et P. Nous prendrons dans notre exemple Y=7 et P=11. Ces valeurs peuvent être transmises sur un réseau non sur. (gx mod P = Y mod P / P est premier et Y < P) 2ème étape Choix d’un nombre A, gardé secret. (A=3). 3ème étape Alice applique à A la fonction à sens unique, soit : YA[P] ⇔ 73[11] = 343[11] =2 4ème étape Alice appelle ce dernier résultat a (soit a=2), et l’envoie à Bob. Alice calcule maintenant : ⇔ 43[11] = 64[11] = 9 ⇔ clé = 9 Choix d’un nombre, B, gardé secret. (B=6). Bob applique à B la fonction à sens unique, soit : YB[P] ⇔ 76[11] = 343[11] = 4 Bob appelle ce dernier résultat b (soit b=4), et l’envoie à Alice. Bob calcule maintenant : aB[P] ⇔ 26[11] = 64[11] = 9 ⇔ clé = 9 Eve Eve peut intercepter les valeurs de Y et de P, et on admet qu’elle les connaît. Eve peut aussi choisir son nombre secret C, également gardé secret (C=9). Eve peut aussi faire ce que font les deux autres applique à C la fonction à sens unique, soit : YC[P] 9 ⇔ 7 [11] = 40 353 607[11] =8 Eve peut encore intercepter a et b, et on suppose qu’elle connaît donc a et b. Eve peut aussi calculer : aC[P] et bC[P] 3 ⇔ 4 [11] = 64[11] =9 et 43[11] = 64[11] =9 ⇔ clé1 = 3 et clé2 = 6 5ème étape bA[P] 6ème étape Bob et Alice ont la même clé et peuvent donc communiquer, alors que Eve qui a deux clés dont aucune n’est la bonne…ne peut rien faire !