Mathématiques Pour l Informatique I : Arithmétique et Cryptographie Serge Iovleff 15 novembre 2004
Table des matières 1 Arithmétique 2 1.1 Arithmétique dans Z....................... 2 1.2 Arithmétique modulaire..................... 2 1.2.1 Définition du modulo dans Z.............. 2 1.2.2 Définition de Z/mZ................... 2 1.2.3 Opérations dans Z/mZ................. 2 1.2.4 Le petit théorème de Fermat et le théorème RSA... 2 1.2.5 Résolution des équations de congruence........ 2 1.2.5.1 Une équation à une inconnue......... 2 1.2.5.2 Deux équations à une inconnue........ 2 1.2.5.3 Le théorème chinois des restes........ 3 1.3 Algorithmes d arithmétique utilisés en Cryptographie..... 3 1.3.1 Algorithme d Euclide................... 3 1.3.2 Génération de Nombres Premiers............ 4 1.3.3 Elévation à la puissance modulo............ 5 1.3.4 Logarithme Discret.................... 6 2 La Cryptographie 7 2.1 Définitions............................. 7 2.2 Buts de la cryptographie..................... 7 2.3 Principes de la cryptographie.................. 8 2.3.1 Cryptographie symétrique................ 8 2.3.1.1 Le système à clef jetable........... 9 2.3.1.2 Le système DES (Data Encryption Standard) 9 2.3.2 Cryptographie assymétrique............... 9 2.3.3 Les fonctions à sens unique............... 10 2.4 La méthode RSA......................... 12 1
Chapitre 1 Arithmétique 1.1 Arithmétique dans Z 1.2 Arithmétique modulaire 1.2.1 Définition du modulo dans Z 1.2.2 Définition de Z/mZ 1.2.3 Opérations dans Z/mZ 1.2.4 Le petit théorème de Fermat et le théorème RSA 1.2.5 Résolution des équations de congruence 1.2.5.1 Une équation à une inconnue On cherche à résoudre l équation suivante : ax c[m] (1.1) où a, c, m sont des constantes et x un nombre inconnu. Théorème 1.2.1 Il existe une solution de l équation (1.1) si et seulement si a m c. Si une solution existe, alors il existe un unique nombre vérifiant l équation (1.1) et tel que 0 x < m. 1.2.5.2 Deux équations à une inconnue On cherche à résoudre le système d équations suivant : { x a1 [m 1 ] x a 2 [m 2 ] (1.2) 2
Théorème 1.2.2 Le système (1.2) possède une solution si et seulement si m 1 m 2 a 2 a 1. Si une solution existe alors il existe un unique x solution de (1.2), vérifiant 0 x < m 1 m 2 1.2.5.3 Le théorème chinois des restes On cherche à résoudre un système avec plusieurs équations de congruence. Théorème 1.2.3 Soient m 1, m 2,...,m n des entiers 2 à 2 premiers entre eux m i m j = 1, i j alors le système x a 1 [m 1 ] x a 2 [m 2 ]... x a n [m n ] possède une unique solution x qui vérifie 0 x < n i=1 m i. (1.3) 1.3 Algorithmes d arithmétique utilisés en Cryptographie 1.3.1 Algorithme d Euclide Version récursive (la procédure EE s appelle elle-même). Le type Integer est une classe permettant de calculer en précision infinie. La procédure prend en entrée deux entiers a et b et renvoie d = a b et au + bv = d. void EE(const Integer a, const Integer b, Integer& d, Integer& u, Integer& v) { if (b==0) { d =a; u =1; v =1;} else { EE(b, a % b, d, u, v); Integer tmp = u; u = v; v = tmp - (a/b) * v; } } 3
1.3.2 Génération de Nombres Premiers En pratique, il n existe pas d algorithme permettant de trouver la décomposition en nombres premiers d un nombre x en un temps de calcul raisonnable. Pour générer un nombre premier, on utilise le test Miller-Rabin. Le test de Miller-Rabin : Le test de Miller-Rabin permet de déterminer si un nombre est composé (n est pas premier) avec une probabilité inférieure à 1/2. Proposition 1.3.1 Soit n un nombre positif impair, et soient s et t les deux nombres qui vérifient n 1 = t2 s avec t impair. Alors si a > 1 est un nombre, on a a n 1 1 = a t2s 1 = (a t 1)(a t + 1)(a t2 + 1)... (a t2s 1 + 1) Par exemple 23 1 = 11 2 1, et 29 1 = 7 2 2. On sait que si n est un nombre premier, alors d après le théorème de Fermat a n 1 1[n] Donc si n est premier l un des termes, (a t 1), où a 2tj + 1 doit être congru à 0 modulo n. Définition 1.3.2 Soit n un nombre impair, on dit que n = t2 s réussit le test de composition de Miller-Rabin avec le nombre a si on montre que l une des propriétés suivantes est vérifiée : a t 1 0[n] a t2j + 1 0[n], 0 j < s Proposition 1.3.3 Si n est composé, la probabilité qu un nombre a pris au hasard dans {2, 3,..., n 1} ne réussisse pas le test de Miller-Rabin est inférieure à 1/2. On admettra que si n est impair et composé, moins de (n 1)/2 nombres ne passent pas le test de Miller-Rabin. 4
Algorithm 1 Algorithme pour déterminer un nombre premier avec une probabilité plus petite que 2 m : la procédure Test effectue un test de composition de Miller-Rabin Require: m > 0 Tirer au hasard un nombre entier n flag = true while flag do for j = 1 to m do Tirer au hasard un nombre a {2,..., n 1} flag = Test(a,n) if flag then n = n+2 break end if end for end while Afficher n 1.3.3 Elévation à la puissance modulo Soient a et b deux entier, on veut calculer rapidement a b [n] : on peut effectuer ce calcul en effectuant 2 log 2 (b) multiplications modulo n. Par exemple : a 11 = a a 10 = a (a 5 ) 2 = a (a a 4 ) 2 = a (a (a 2 ) 4 ) 2 soit 3 élévations au carré et 2 multiplication (5 opérations). La procédure récursive suivante réalise l élévation d un nombre a à la puissance k modulo n : Integer PM(const Integer a, const Integer k, const Integer n) { if (k==0) { return 1;} else { Integer m = PM(a, k/2, n); m = (m*m) % n; if (k % 2 == 1) m = (m*a) % n; return m; } } 5
1.3.4 Logarithme Discret On se place dans Z/mZ et on rappelle que Z m représente le sous ensemble des éléments inversibles de Z/mZ, ce sous-ensemble est de cardinal φ(m). Définition 1.3.4 On dit qu un élément g de Z/mZ est un generateur de Z/mZ si la séquence (g 1, g 2,... g φ(n) ) contient tous les éléments de Z/mZ. Les valeurs de m pour lesquels il existe des générateurs sont les suivantes : 2, 4, p n, 2p n pour p 3 premier Par exemple dans Z/7Z, 3 est générateur. Définition 1.3.5 Pour a dans Z m et g un générateur de Z m, le plus petit entier positif z tel que g z = a[n] est appelé le logarithme discret en base g de a modulo n. On écrit z = log g (a)[n] Théorème 1.3.6 Si g est un générateur de Z m, alors g x g y [n] x y[φ(n)] Dans l état actuel des connaissances : 1. Il est très facile de calculer g z 2. Etant donné y, il n existe pas d algorithme pour calculer z tel que g z = y. La seule méthode consiste à essayer toutes les possibilités. Par exemple si p = 10 100, if faut effecteur à peu près 10 8 opérations pour calculer g z, soit environs une seconde sur un PC actuel. Par contre tester toutes les possibilités demande environ 10 100 opérations, soit environ 10 92 secondes!!! 6
Chapitre 2 La Cryptographie 2.1 Définitions Définition 2.1.1 La cryptographie consiste à chiffrer puis à déchiffrer un texte. Chiffrer un texte consiste à le transformer en une séquence de nombres, calculés à partir du texte. Déchiffrer un texte est l opération réciproque qui permet de retrouver le texte source à partir de la séquence chiffrée. On note E et D respectivement les opérations de chiffrement et déchiffrement (E comme Encode et D comme Decode ). Si ces opérations sont paramétrées par une clef, on les note D K et E K (K comme Key ). Soit M un message quelconque. On doit avoir D(E(M)) = M ce qui implique que D et E sont injectives. D est gardée secrète (ou est paramétrée par une clef K secrète), c est à dire qu il est très difficile de trouver D si on ne la connait pas. Par contre E peut être secrète ou public. 2.2 Buts de la cryptographie La cryptographie a trois motivations principales 1. La Confidentialité : qui consiste à empècher l accès aux informations qui transitent pour ceux qui ne sont pas autorisés. Ils peuvent éventuellement lire ce qui passe sur le canal, mais ne peuvent pas le déchiffrer. 2. L authentification : Elle consiste à signer électroniquement un document afin de prouver en être l auteur et qu il ne s agit pas d un faux. 7
3. L intégrité : Elle permet de vérifier que le message n a pas subi d altérations lors de son parcours. Le chiffrement classique ne s interessait auparavant qu au premier aspect et, jusqu à ces dernières années, ne s intéressait qu aux clefs secrètes. Avec le développement d internet : L authentification devient aussi, voire même plus, importante que le secret. Une partie de la clef ne doit pas être privée afin de ne pas provoquer une explosion du nombre de clefs lorsque l on doit communiquer avec un grand nombre de personnes. 1. Confidentialité Bob Alice 2. Intégrité du Message Bob Eve Eve Alice 3. Authentification du Message Bob Eve Alice 2.3 Principes de la cryptographie 2.3.1 Cryptographie symétrique Pour la première fois utilisée au 1er siècle avant J.C. par Jules César. Sur la base d une seule clef secrète, réaliser une transformation capable de respectivement de rencre illisible et de restituer une pièce d information. 8
Il existe principalement deux types de chiffrement : le système à clefs jetables ( One time pad ) et le sytème DES utilisé par les cartes de crédit. 2.3.1.1 Le système à clef jetable Ce système repose sur un sytème de clef privée K où la clef n est utilisée qu une fois. On utilise la relation (M K) K = M Pour envoyer un message de n bits, il faut avoir une clef K secrète de n bits. 2.3.1.2 Le système DES (Data Encryption Standard) Ce système fonctionne par blocs, il travaille sur des blocs de 64 bits en utilisant une clef de 56 bits. Le même algorithme est utilisé pour chiffrer et déchiffrer. La transformation employée peut s écrire sous la forme P 1 (F (P (M))), où P est une permutation et F une fonction combinant permutation et substitution. 2.3.2 Cryptographie assymétrique On utilise deux clés différents - une secrète et une publique - respectivement pour les opérations de cryptage et de décryptage. Chaque utilisateur dispose d un porte-clés contenant, au moins, sa clef publique et sa clef privée. 9
Plusieurs cas de figure peuvent se présenter. 2.3.3 Les fonctions à sens unique Ce sont des fonctions faciles à calculer dans un sens mais impossibles à calculer dans le sens contraire. Exemple : md5sum /etc/passwd 379f62d7c431e2b9a204bd339bddfec0 /etc/passwd 10
Si on veut assurer le secret : L expéditeur crypte l information avec la clef publique du destinataire. Le destinataire décrypte l information avec sa clef privée. Si on veut assurer l authenticité : L expéditeur signe l information avec sa clef privée. Le destinataire vérifie la signature avec la clef public. On applique la signature au digest résultat d une fonction à sens unique. 11
2.4 La méthode RSA Dans le système RSA, un utilisateur crée son couple (clef publique, clef privée) en utilisant la procédure suivante : 1. Choisir au hasard deux grands nombres premiers p et q (plus de 100 chiffres). 2. Calculer n = pq 3. Choisir un entier e qui est premier avec φ(n) 4. Calculer d, l inverse de e modulo φ(n) 5. Publier la paire P = (e, n) comme la clef publique RSA 6. Garder secrète la paire S = (d, n) qui est la clef privée RSA. Le chiffrement RSA consiste à effectuer m = E P (m) = m e [n] Le déchiffrement RSA consiste à effectuer E S ( m) = m d [n] On a D S (E P (m)) = m ed [n] = m 1+kφ(n) [n] = m d après le théorème RSA. Les caractères sont souvent codés dans un codage standard comme la table ASCII. Voici un extrait des lettres de l alphabet latin. A 01000001 J 01001010 S 01010011 B 01000010 K 01001011 T 01010100 C 01000011 L 01001100 U 01010101 D 01000100 M 01001101 V 01010110 E 01000101 N 01001110 W 01010111 F 01000110 O 01001111 X 01011000 G 01000111 P 01010001 Y 01011001 H 01001000 Q 01010001 Z 01011010 I 01001001 R 01010010 espace 00100000 12
Par exemple le message ASCII du message «UNE CLE» est la chaîne : 01010101010011100100010100100000010000110100110001000101 On applique l algorithme RSA par bloc de 512 bits ou 1024 bits. Exemple de génération d une clef avec ssh-keygen : ssh-keygen -b512 -f exemple -trsa1 Generating public/private rsa1 key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in exemple. Your public key has been saved in exemple.pub. The key fingerprint is: 2a:03:3b:ee:24:2d:6a:1f:70:31:53:f5:ff:43:3f:ba iovleff@mickey clef public : 512 35 87599705148632455510290734140096553337466234 487123934588176004944628245369960452106223222100731 833928080810059796242072659537979744846212520681277 21002321 iovleff@mickey 13