ENSEIGNEMENT DE PROMOTION SOCIALE —————————————————————— Cours de MATHEMATIQUES - Chiffrement RSA —————————————————————— H. Schyns Mai 2008 Chiffrement RSA Sommaire Sommaire 1. INTRODUCTION 2. DÉFINITIONS 2.1. Nombres premiers 2.2. Nombres premiers entre eux 2.3. Fonction modulo 2.4. Décomposition binaire. 3. LE CRYPTAGE RSA 3.1. Principe 3.2. Les clés 3.3. Le cryptage 3.4. Le décryptage 3.5. RSA dans un tableur 4. SOURCES H. Schyns S.1 Chiffrement RSA 1. 1 - Introduction Introduction De nombreux documents exposent la théorie du systeme de chiffrementr à clé publique / clé privée encore appelé système RSA. Ces exposés utilisent un formalisme mathématique qui est souvent obscur pour le non initié. Si les quelques exemples fournis illustrent la suite des opérations, ils ne donnent que rarement le détail du calcul et ses limites. Le présent document a pour objectif d'illustrer la méthode aussi simplement que possible à l'aide de nombreux exemples détaillés. H. Schyns S.1.1 Chiffrement RSA 2. 2 - Définitions Définitions Le système RSA repose sur quatre concepts arithmétiques : - les nombres premiers, les nombres premiers entre eux, la fonction modulo, la décomposition binaire. Nous allons illustrer ces principes ci-après. Le lecteur déjà familiarisé avec ces concepts peut passer directement au chapitre suivant. 2.1. Nombres premiers Definition Exemple Recherche si un nombre est premier ou non Premier voisin de 6 Suite des premiers est infinie 2.2. Nombres premiers entre eux PGCD Euclide Euclide étendu 2.3. Fonction modulo Division Euclidienne Modulo d'un carré à partir du modulo de la base Modulo d'une somme ou d'une différence 2.4. H. Schyns Décomposition binaire. 2.1 Chiffrement RSA 3. 3 - Le cryptage RSA Le cryptage RSA 3.1. Principe Le cryptage RSA repose sur le choix d'un couple de deux nombres premiers généralement appelés [ p ] et [ q ] que l'on doit absolument garder secrets. Les nombres premiers choisis doivent être les plus grands possible afin de compliquer au maximum la tâche de celui qui veut craquer le système. Ce couple élu va engendrer d'autres nombres qui vont constituer la clé du procédé. 3.2. Les clés Le principe du système RSA est beaucoup plus facile à comprendre à partir d'un exemple. Commençons avec deux nombres premiers simples à garder secrets : p = 11 q = 23 Le nombre [ n ] qui résulte de leur produit constitue la clé publique du système. Elle peut être connue de tout le monde : n = p⋅q [3.1] n = 11 ⋅ 23 = 253 Certes, le choix de notre exemple n'est pas vraiment génial car il ne faudra pas longtemps à quelqu'un connaissant ses tables de multiplications pour factoriser ce nombre et retrouver [ p ] et [ q ]. Dans la réalité, [ p ] et [ q ] sont des nombres de plus de cent chiffres, ce qui donne plus de deux cents chiffres pour [ n ] ce qui demande des outils informatiques particuliers. Mais continuons... A partir des nombres [ p ] et [ q ], nous allons générer un autre nombre [ appelé fonction indicatrice d'Euler tel que ϕ (n) = (p − 1) ⋅ (q − 1) ϕ(n) ] [3.2] ϕ (253 ) = (11 − 1) ⋅ (23 − 1) ϕ (253 ) = 10 ⋅ 22 = 220 C'est ce nombre [ ϕ(n) ] et non [ n ] qui consitute le secret du cryptage. L'astuce est que [ n ] est tellement grand qu'il est pratiquement impossible de le factoriser pour retrouver [ p ] et [ q ] et, à partir de ces valeurs, de reconstituer [ ϕ(n) ]. La fonction indicatrice d'Euler nous dit qu'il y a 220 nombres inférieurs à 253 et qui sont premiers avec 253. Autrement dit, dans l'ensemble des nombres compris entre 1 et 253, on peut en trouver 220 qui n'ont aucun facteur premier commun avec 253 (1). 1 Ce nombre de 220 peut sembler très élevé mais il ne faut pas oublier que le nombre choisi 253 est le produit des deux nombres premiers 11 et 23. Donc, dans la liste de tous les nombres allant de 1 à 253, il suffit de supprimer tous les multiples de 11 (il y en a 22) et tous les multiples de 23 (il y en a 10). H. Schyns 3.1 Chiffrement RSA 3 - Le cryptage RSA Nous choisissons ensuite un nombre [ e ], "presque" quelconque, qui sera l'exposant de chiffement. Il y a deux conditions sur ce nombre : - il doit être supérieur à 3, - il ne doit pas nécessairement être premier mais il doit être premier avec [ ϕ(n) ] en d'autres mots leur PGCD doit être égal à 1. Prenons par exemple : e = 17 Comme 17 est un nombre premier, il est fatalement premier avec 220. Le couple (253, 17) constitue la clé publique proprement dite. Que nous ayons choisi un nombre premier est purement fortuit; nous aurions tout aussi bien pu prendre 21, 39 ou 49 qui ne sont pas premiers. Ceci a une première conséquence importante : Pour une clé publique [ n ] donnée, plusieurs exposants de chiffrements [ e ] sont possibles. Plus [ n ] est grand, plus il existe de possibilités pour [ e ]. Chaque couple (n,e) donne une clé publique de cryptage différente et unique. A ce stade, nous avons publié deux nombres connus de tous : - n = 253 e = 17 comme clé publique comme exposant de chiffrement Maintenant, n'importe qui peut nous envoyer un message chiffré et, ce qui est plus surprenant, l'auteur lui-même ne pourra pas décrypter son propre message à l'aide de la clé publique. Une personne qui aurait choisi un exposant différent pourrait crypter ses propres messages sans être pourtant capable de déchiffrer les nôtres et réciproquement. L'étape suivante consiste à créer un exposant de décryptage. La procédure est plus délicate. Il nous faut trouver un nombre [ d ] tel que : (d ⋅ e ) mod ϕ (n) = 1 [3.3] Ceci signifie qu'il doit rester 1 quand on divise le produit des exposants de cryptage [ e ] et de décryptage [ d ] par [ ϕ(n) ]. Dans le cas qui nous intéresse, l'expression devient (d ⋅ 17 ) mod 220 = 1 [3.4] Nous pouvons écrire cette expression sous une autre forme en disant que le produit [ d.17 ] doit être un multiple de 220 auquel on a ajouté 1. d ⋅ 17 = k ⋅ 220 + 1 [3.5] où k est un entier positif à déterminer. H. Schyns 3.2 Chiffrement RSA 3 - Le cryptage RSA Ca a l'air un peu compliqué comme ça mais dans le cas de cet exemple, c'est relativement simple. - d'une part, le produit recherché doit être très proche d'un multiple 220 puisque le reste de la division est petit et vaut 1 : d≅ k ⋅ 220 ≅ k ⋅ 13 17 [3.6] [ d ] doit être un multiple de 13 ou proche d'un multiple de 13. d = 13, 26, 39, 42... - d'autre part, le membre de droite de l'expression [3.5] se termine par 1, or les seuls multiples de 17 qui se terminent par 1 sont ceux pour lesquels [ d ] se termine par 3 : d = 3, 13, 23, 33... En comparant les deux séries, nous trouvons d = 13 e ⋅ d = 13 ⋅ 17 = 221 221 mod 220 = 1 Le couple (253, 13) constitue la clé privée proprement dite. A partir de maintenant, tout le monde peut oublier [ p ], [ q ] et [ ϕ(n) ]. En réalité, ce n'est pas le cas et des organismes tels que VeriSign et Thawte vendent des couples de clés privées et clés publiques à tout ceux qui le désirent. Vu la taille des nombres, il y a des milliards de milliards de combinaisons possibles. Remarquons que les exposants de cryptage [ e ] et de décryptage [ d ] sont interchangeables : un texte codé avec [ e ] peut être décodé avec [ d ] et réciproquement. Notons que le choix e = 21 comme exposant de cryptage aurait été particulièrement malheureux car il conduit à prendre d = 21 comme exposant de décryptage. En effet, (21⋅ 21) mod 220 = 1 or, pour assurer la confidentialité il est évident que l'exposant de cryptage qui est public doit être différent de l'exposant de décryptage, qui est secret. Dans la réalité, les nombres sont plus grands, la recherche de [ d ] à partir de [ e ] n'est pas aussi simple mais elle est néanmoins très rapide grâce à une technique connue sous le nom d'algorithme d'Euclide étendu. H. Schyns 3.3 Chiffrement RSA 3.3. 3 - Le cryptage RSA Le cryptage Le cryptage permet de transformer un nombre [ x ] strictement plus petit que [ n ] en un autre nombre [ y ], lui aussi strictement plus petit que [ n ]. Pour imposer la règle strictement plus petit que [ n ] l'algorithme utilise la fonction "modulo n" ou "mod n" c'-est-à-dire le reste de la division par [ n ]. En effet, le reste de la division par [ n ] est forcément un nombre compris entre 0 et [ n-1 ]. Dans le cas de notre exemple, nous pouvons coder 253 valeurs différentes soit pratiquement tous les codes ASCII. Supposons que nous voulions envoyer la chaîne Ascii contenant le mot "RSA" : Lettre R S A Ascii 82 83 65 Chaque nombre [ x ] (code Ascii) subit l'opération (x e ) mod n soit, dans le cas de la lettre R [3.7] (82 ) mod 253 17 Pas de panique ! Il n'est pas nécessaire de calculer 8217 Il suffit de savoir que tout nombre [ x ] peut s'écrire sous la forme x = k ⋅ 253 + r [3.8] x mod 253 = r [3.9] x 2 = (k ⋅ 253 + r ) = k 2 ⋅ 253 2 + 2 ⋅ k ⋅ 253 ⋅ r + r 2 [3.10] d'où Considérons à présent 2 Les deux premiers termes sont des multiples de 253; il n'interviennent donc pas dans le calcul du modulo. On en déduit que : x 2 mod 253 = r 2 mod 253 [3.11] Autrement dit, nous pouvons calculer facilement le modulo du carré d'un nombre à partir du carré de son modulo. En appliquant plusieurs fois le processus, nous calculons facilement les modulos de [ x ] élevé aux puissances 2, 4, 8, 16, etc. Pour calculer le modulo d'une puissance quelconque de [ x ], nous appliquerons une décomposition binaire à l'exposant. Dans le cas de notre exemple : 17 = 16 + 1 x e = x 17 = x16 ⋅ x1 H. Schyns 3.4 Chiffrement RSA 3 - Le cryptage RSA La première étape consiste à remplir un tableau des modulos de [ x ] exposant une puissance de 2 : x = 82 e=17 rang e x 1 82 r mod 253 82 2 - 2 2 146 2 64 2 48 2 82 = 6 724 4 146 = 21 316 8 64 = 4 096 16 48 = 2 304 27 17=1+16 82.27 = 2 214 190 la première ligne contient la valeur x et son modulo n. les lignes suivantes reprennent le carré du modulo de la ligne prédécente et calculent le modulo de ce carré Nous établissons la dernière ligne en sachant que : 8217 = 8216 ⋅ 821 et que ( )( ) 8217 mod 253 = 8216 mod 253 ⋅ 821 mod 253 mod 253 [3.12] 8217 mod 253 = (27 ⋅ 82)mod 253 = 190 Dans notre exemple, la lettre R de code Ascii 82 est codée sous le nombre 190, ce qui est le code Ascii du caractère ¾. Nous procédons de la même manière pour les lettres suivantes [ S ] et [ A ]. Nous voyons dans le tableau ci-dessus, nous pouvons faire l'économie d'une colonne en 2 inscrivant directement la valeur initiale dans la colonne [ r ] : x = 83 e=17 rang e 2 mod 253 rang e 83 83 1 r 1 r 2 mod 253 65 65 2 2 65 = 4 225 177 75 4 177 = 31 329 2 210 2 59 8 210 = 44 100 2 78 2 192 16 78 = 6 084 2 12 250 17=1+16 65.12 = 780 21 2 58 2 2 83 = 6 889 4 58 = 3 364 8 75 = 5 625 16 59 = 3 481 17=1+16 x = 65 e=17 83.192 = 15 936 Ainsi, la lettre S de code Ascii 83 est codée sous le nombre 250, tandis que la lettre A de code Ascii 65 est codée sous le nombre 21 : H. Schyns Lettre R S A Ascii 82 83 65 Code 190 250 21 3.5 Chiffrement RSA 3.4. 3 - Le cryptage RSA Le décryptage Le décryptage utilise exactement le même processus pour transformer un nombre [ y ] strictement plus petit que [ n ] dans le nombre [ x ] initial, lui aussi strictement plus petit que [ n ]. Chaque nombre y subit l'opération (y ) mod n d [3.13] soit, dans le cas de la valeur codée 190 (190 ) mod 253 13 A nouveau, il n'est pas nécessaire de calculer 190 13 nous utilisons un tableau comme à l'étape précédente y = 82 d=13 rang e y 1 190 r 2 mod 253 190 2 174 2 169 2 225 2 25 2 190 = 36 100 4 174 = 30 276 8 169 = 28 561 16 225 = 60 625 225.169.190 13 82 = 7 224 750 Nous retrouvons bien la valeur initiale 82. Nous procédons de la même manière pour les codes suivants [ 250 ] et [ 21 ] : y = 250 d=13 mod 253 rang e 250 250 1 rang e r 1 2 y = 21 d=13 2 2 250 = 62 500 2 4 9 = 81 8 81 = 6 561 16 13=1+4+8 9 2 mod 253 21 21 21 = 441 188 r 2 2 2 177 2 210 2 81 4 188 = 35 344 2 236 8 177 = 31 329 236 = 55 696 2 36 16 210 = 44 100 78 250.81.236 = 4 779 000 83 13=1+4+8 21.177.210 = 780 570 65 Nous retombons donc sur la séquence initiale de codes Ascii : H. Schyns Code 190 250 21 Decryp 82 83 65 Ascii R S A 3.6 Chiffrement RSA 3.5. 3 - Le cryptage RSA RSA dans un tableur Le cryptage et le décryptage RSA, avec [ n ] et [ e ] ou [ d ] connus, reposent sur des calculs qui ne sont pas difficiles mais seulement fastidieux. Il est très facile de les implémenter dans une feuille de tableur de type Excel. Les cellules encadrées contiennent une donnée ou une formule originale Les pointillés indiquent que la formule de la cellule est simplement recopiée en la tirant vers le haut ou vers le bas. fig. 3.1 Décomposition binaire de l'exposant fig. 3.2 Calcul des modulos H. Schyns 3.7 Chiffrement RSA 3 - Le cryptage RSA fig. 3.3 Calcul du produit cumulé et son modulo C'est le même tableau qui sert aussi bien au codage qu'au décodage, ce qui rend l'algorithme RSA particulièrement simple à programmer. H. Schyns 3.8 Chiffrement RSA 4. 3 - Le cryptage RSA Sources - Mathématiques et cryptographie Michel Rigo Département de Mathématiques, Université de Liège http://www.discmath.ulg.ac.be - Mathématiques discrètes - Notes de cours 2007-2008 Michel Rigo Département de Mathématiques, Université de Liège - Le chiffrement par clé publique - Notes provisoires, chapitre 6 R. Dumont H. Schyns 4.1