ENSEIGNEMENT DE PROMOTION SOCIALE Cours de MATHEMATIQUES - Chiffrement RSA - H. Schyns Mai 2008
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
1 - Introduction 1. 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
2 - Définitions 2. 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. Décomposition binaire. H. Schyns 2.1
3. 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 [ ϕ(n) ] appelé fonction indicatrice d'euler tel que ( n) = ( p 1) ( q 1) ϕ [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
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 comme clé publique - e = 17 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. où k est un entier positif à déterminer. d 17 = k 220 + 1 [3.5] H. Schyns 3.2
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 : k 220 d k 13 [3.6] 17 [ 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
3.3. 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 soit, dans le cas de la lettre R ( x e ) mod n [3.7] ( 82 ) 17 mod 253 Pas de panique! Il n'est pas nécessaire de calculer 82 17 Il suffit de savoir que tout nombre [ x ] peut s'écrire sous la forme d'où x = k 253 + r [3.8] x mod 253 = r [3.9] Considérons à présent 2 2 2 2 2 ( k 253 + r) = k 253 + 2 k 253 r r x = + [3.10] 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 2 mod 253 = r 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 e 17 16 1 x = x = x x H. Schyns 3.4
La première étape consiste à remplir un tableau des modulos de [ x ] exposant une puissance de 2 : x = 82 e=17 rang e x r 2 mod 253 1 82 82 2 82 2 = 6 724 146 4 146 2 = 21 316 64 8 64 2 = 4 096 48 16 48 2 = 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 : et que 82 17 17 16 1 82 = 82 82 16 1 ( 82 mod 253) ( 82 mod 253) mod 253 mod 253 = [3.12] ( 27 82) mod 253 190 82 17 mod 253 = = 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 inscrivant directement la valeur initiale dans la colonne [ r 2 ] : x = 83 e=17 x = 65 e=17 rang e r 2 mod 253 rang e r 2 mod 253 1 83 83 1 65 65 2 83 2 = 6 889 58 2 65 2 = 4 225 177 4 58 2 = 3 364 75 4 177 2 = 31 329 210 8 75 2 = 5 625 59 8 210 2 = 44 100 78 16 59 2 = 3 481 192 16 78 2 = 6 084 12 17=1+16 83.192 = 15 936 250 17=1+16 65.12 = 780 21 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 : Lettre R S A Ascii 82 83 65 Code 190 250 21 H. Schyns 3.5
3.4. 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 soit, dans le cas de la valeur codée 190 ( y d ) mod n [3.13] ( 190 13 ) mod 253 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 r 2 mod 253 1 190 190 2 190 2 = 36 100 174 4 174 2 = 30 276 169 8 169 2 = 28 561 225 16 225 2 = 60 625 25 13 225.169.190 = 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 y = 21 d=13 rang e r 2 mod 253 rang e r 2 mod 253 1 250 250 1 21 21 2 250 2 = 62 500 9 2 21 2 = 441 188 4 9 2 = 81 81 4 188 2 = 35 344 177 8 81 2 = 6 561 236 8 177 2 = 31 329 210 16 236 2 = 55 696 36 16 210 2 = 44 100 78 13=1+4+8 250.81.236 = 4 779 000 83 13=1+4+8 82 21.177.210 = 780 570 Nous retombons donc sur la séquence initiale de codes Ascii : Code 190 250 21 Decryp 82 83 65 Ascii R S A 65 H. Schyns 3.6
3.5. 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
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
4. 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