2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 TPE réalisé par les élèves Maxime Juramy, Mathieu LanFranco, Timo Jolivet et Michel Pham. Suivi par les professeurs M. Ghilini et M. Strozza. 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 Un nombre premier est un entier supérieur ou égal à 2 dont les seuls diviseurs positifs sont 1 et lui-même. Depuis des siècles des mathématiciens se sont intéressés aux nombres premiers et ont essayé, par tous les moyens, de percer le mystère qui se cache derrière eux. Jusqu’à il y a quelques décennies, trouver une fonction qui fabriquerait des nombres premiers était juste un grand défi mathématique, mais l’enjeu est maintenant beaucoup plus important. La raison pour laquelle tant d’énergie est investie dans la recherche de ces nombres est qu’ils ont aujourd’hui une très grande utilité dans le domaine de la cryptographie et de la protection de données en général. Nous répondrons à la problématique en étudiant deux différents aspects du sujet : La recherche des nombres premiers : nous nous sommes confrontés nousmêmes à ce problème et avons essayé d’élaborer des méthodes afin de trouver des nombres premiers. Nous exposerons donc nos propres travaux ainsi que ceux effectués par les "grands" mathématiciens au fil des siècles. L’application des nombres premiers : nous verrons ici à quoi les nombres premiers sont utiles en nous basant sur un exemple : le système de cryptage RSA sur lequel nous avons fait des expériences et des tests afin de voir quel rôle ont les nombres premiers dans son utilisation. - 2 Voyons de quelle manière les mathématiciens recherchent ces nombres, avec des moyens variés, de la théorie sur papier datant de plusieurs siècles ou encore de l’algorithme intelligent traité par un ordinateur supercalculateur… A) Les recherches avant l’ordinateur Nous exposons ici tout ce qui a été utile pour nos recherches (et pour les recherches en général). Ce sont des résultats théoriques qui pourront être exploités par un ordinateur par la suite. Il existe une infinité de nombres premiers : La quête d’un plus grand nombre premier ne sera jamais terminée : il existe une infinité de nombres premiers. Ce résultat fut démontré par Euclide. La preuve est simple : (par l’absurde) Supposons que lP, l’ensemble des nombres premiers, soit fini. Soit alors p1 =2 ; p 2 =3 ; … ; p n les x nombres premiers. N p1 p2 ... pn 1 Ce nombre n’est ni divisible par Et pourtant p1 , p 2 ni par p n . N (comme tout nombre) admet un diviseur premier p. Donc p est premier et p p1 ; p2 ;...; pn p1 ; p2 ;...; pn lP , contraire à l’hypothèse. Les Cribles : Une des méthodes les plus courantes pour trouver des nombres premiers est la méthode des "cribles" (dont le plus connu est celui d’Eratosthène). Le principe est simple ; on dresse la liste de tous les nombres compris entre 1 et un entier n choisi. On procèdera ensuite à l’élimination de tous les nombres qui ne sont pas premiers dans le tableau (on enlève d’abord tous les nombres pairs et > 2). 3 Exemple : Le crible d’ Eratosthène : On désire trouver la liste des nombres premiers inférieurs à 100. On dresse donc la liste. 11 21 31 41 51 61 71 81 91 2 12 22 32 42 52 62 72 82 92 3 13 23 33 43 53 63 73 83 93 4 14 24 34 44 54 64 74 84 94 5 15 25 35 45 55 65 75 85 95 6 16 26 36 46 56 66 76 86 96 7 17 27 37 47 57 67 77 87 97 8 18 28 38 48 58 68 78 88 98 9 19 29 39 49 59 69 79 89 99 10 20 30 40 50 60 70 80 90 100 On raye tous les multiples de 2 supérieurs à 2. On procède ensuite de la même manière pour 3. Pas pour 4 car cela a déjà été fait avec 2. Donc on ne vérifiera plus avec aucun entier pair. On continue donc avec 5, 7 et cela jusqu’à n (10 dans ce cas). Les nombres restants et non rayés sont donc des nombres premiers. Les nombres de Fermat et de Mersenne : Il existe des nombres que l’on appelle nombres de Fermat et nombres de Mersenne (nom de leurs inventeurs). Fn 2 2 1 n Fermat : Mersenne : M p 2 p 1 , avec p premier Ces nombres qui ne sont pas toujours premiers constituent un moyen efficace de noter les nombres premiers et aussi de les rechercher sans être encombré par la taille d’un nombre de l’ordre de 21000000 par exemple. Fermat pensait que sa formule ne donnait que des nombres premiers. Cependant ils ne sont tous premiers que jusqu’au cinquième. 4 Le "petit" théorème de Fermat : Le théorème dit : Soit p un nombre premier et a un entier non divisible par p. Alors a p1 1 0 p On peut donc utiliser ce résultat et dire que si p est premier, alors a p 1 1 0 p . Cela nous permettra donc de vérifier si p est premier ou non. La densité des nombres premiers : Densité de nombres premiers autour de n: 1 ln( n) Le nième premier est environ égal à n. ln( n) Quantité de premiers inférieurs à n : n ln(n) 1 Ecart moyen entre deux premiers consécutifs : ln( n) Ces formules, qui donnent des résultats imprécis permettent de donner une approximation du comportement des nombres premiers. Ces formules permettent d’étudier, entre autres, la répartition et la densité des nombres premiers. Le couplage de ces formules et d’un ordinateur puissant peu donner des résultats intéressants. B) Nos propres recherches Nous avons utilisé les outils exposés dans la partie A) afin d’effectuer des tests probabilistes, d’étudier le comportement des nombres premiers et d’essayer de trouver une fonction génératrice de nombres premiers. Approche d’une fonction des nombres premiers (EXCEL) : Nous allons chercher une fonction qui nous donnerait tous les nombres premiers, ou du moins, une fonction qui nous en donnerait le plus possible ou qui nous rapprocherait de ceux-ci, car il n’a été trouvée pour l’instant aucune fonction qui à chaque « x » associe une valeur « y » qui correspond à un nombre premier. 5 Entrée des données dans EXCEL (tableau) et traçage de courbe : Entrons dans un tableau les nombres premiers jusqu’à 2000. N° 1 2 3 … 300 Nombre 1er correspondant 2 3 5 … 1999 Traçons une courbe en nuages de points avec : X : le n° du nombre premier Y : la valeur du nombre premier Ainsi, nous avons eu une courbe représentant la valeur de chaque nombre premier (Y) en fonction de son n° (X). C’est la courbe qui a x associe y , le x = 300. x ième nombre premier jusqu’à Courbe des nom bres prem iers 2500 2000 1500 Nombres Premiers 1000 500 0 0 100 200 300 Méthode d’approximation de la courbe : C’est ici qu’EXCEL va devenir très utile grâce à la fonction " Ajouter une courbe de tendance ". Nous allons pouvoir tester successivement plusieurs courbes de types différents (polynomiale, exponentielle, logarithme, …) et les comparer afin de voir laquelle se rapproche le plus de la "vraie" fonction qu’on appellera "C". 6 La courbe exponentielle : En voyant les valeurs des nombres premiers, et en remarquant que les nombres premiers croissent rapidement, on peut penser, à vue d’œil, que la fonction exponentielle serait la plus adaptée. Approche d'une fonction par une fonction Exponentielle 2500 y = 97,823e 0,012x 2000 Nombres premiers 1500 1000 Exponentiel (Nombres premiers) 500 0 0 100 200 300 On remarque alors que la courbe exponentielle prend des valeurs beaucoup trop élevées pour être considérée comme la fonction qui se rapprocherait le plus de la fonction des nombres premiers. La courbe logarithme : On peut aussi tenter de voir, si une fonction logarithme se rapproche plus de la courbe C. Approche d'une fonction par une fonction logarithme 2500 y = 526,71Ln(x) - 1575 2000 Nombres Premiers 1500 Logarithmique (Nombres Premiers) 1000 500 0 0 100 200 300 La courbe logarithme croit trop lentement pour être la courbe donnant les nombres premiers. 7 La courbe puissance : La fonction puissance peut-être assez intéressante, elle ajoute un exposant adapté à la courbe des nombres premiers, la forme f(x)=x a, voyons ce que cela donne. Approche d'une fonction par une fonction Puissances 2500 y = 1,6532x1,2483 2000 Nombres premiers 1500 Puissance (Nombres premiers) 1000 500 0 0 100 200 300 On voit qu’elle se rapproche assez bien de la courbe des nombres premiers, mais à partir du 250ième nombre premier, elle prend des valeurs beaucoup trop élevées par rapport à la courbe des nombres premiers, d’autant plus que l’échantillon est faible, car ils ne constituent que les nombres premiers inférieurs à 2000. La courbe linéaire : La fonction linéaire est tout simplement une fonction affine de la forme f(x) = ax+b. Il est peu probable qu’une fonction de ce type nous mène au résultat voulu. De plus, elle aurait déjà été découverte. Mais regardons quand même ce que cela donne. Approche d'une fonction par une fonction Linéaire 2500 y = 6,7634x - 113,64 2000 Nombres premiers 1500 Linéaire (Nombres premiers) 1000 500 0 0 100 200 300 En effet, elle ne se confond pas beaucoup avec la courbe C, elle est peu précise, et cet écart de précision augmentera plus l’échantillon sera grand. 8 La courbe polynomiale de second degrés : La fonction polynôme de second degrés est une fonction du type f(x)=ax²+bx+c, ce type de fonctions est assez extensible : Approche d'une fonction par une fonction Pôlynomiale de second degrès 2500 y = 0,0046x2 + 5,354x - 41,998 2000 Nombres premiers Polynomial (Nombres premiers) 1500 1000 500 0 0 100 200 300 On voit nettement que cette courbe est semblable à celle des nombre premier. On pourrait donc penser que , si les nombres premiers avaient une courbe représentative, une de ses approximations les plus précises serait une fonction polynomiale. La courbe polynomiale de degrés quatre : Essayons de confirmer le résultat précédent, en ajoutant 2 degrés supplémentaires. La fonction sera donc du type f(x)=ax4+bx3+cx²+dx+e. Approche d'une fonction par une fonction Polynomiale de degrès 4 2500 y =1E-07x4 - 7E-05x3 + 0,0223x2 + 3,8597x -12,192 2000 Nombres premiers 1500 Polynomial (Nombres premiers) 1000 500 0 0 100 200 300 La courbe de degrés 4 se rapproche plus que celle de degrés 2. L’extensibilité des fonctions polynomiales augmente en fonction du degrés de la fonction. Plus le degrés est élevé, plus notre approximation sera précise. 9 Bilan sur ces approximations : On peut conclure de nos approximations que la fonction qui se rapproche le plus de la "vraie" fonction est polynomiale, on pense donc que la fonction la plus proche de la fonction des nombres premiers est une fonction polynomiale de degrés élevé. Notre travail est cependant limité : -Notre échantillon ne représente que 300 nombres premiers. L’étude d’un échantillon plus grand aurait donné des résultats plus précis. -Aussi, nous avons seulement conjecturé, sans aucune généralisation car nous n’avons rien trouvé de pertinent, mais il faut passer par des travaux intuitifs et expérimentaux avant de pouvoir émettre quelque hypothèse. La fonction qui se rapproche le plus de la fonction des nombres premiers est donc : (selon nos travaux) f(x) = - 1E-7x4 - 7E-5x3 + 0.0223x² + 3.8597x -12.192 Etude des incréments : Il s’agit de l’étude de l’écart entre chaque nombre premier. L’incrément du n ième nombre premier Pn est l’espace entre ce nombre et le prochain nombre premier moins l’espace entre ce nombre et le nombre premier précédent. On le calcule ainsi : I n Pn1 Pn Pn Pn1 Ci-dessous : représentation graphique de ces incréments jusqu’au 30ième nombre premier incréments 6 incrément 4 2 0 -2 0 5 10 15 20 25 30 -4 -6 nièm e nom bre prem ier La moyenne de cette série est 1 (proche de 0), et la moyenne des valeurs absolues est 26 2,25. On remarque un "schéma-type" qui se répète en se déformant un peu : d’abord une série de "-2 ; 2" avec un palier à 2, puis un "-4 ; 4" suivi d’un palier à –2. L’erreur est située entre le 3ème et le 12ème nombre premier. Comme toujours, nous n’obtenons que des tendances, rien d’exact ni rien de généralisable. 10 Etude de la densité : Nous allons étudier ici la densité des nombres premiers, le nombre de nombre premiers qui se trouvent de 1 jusqu'à n. (De 1 à 5 par exemple, il y a 2, 3 et 5 : Donc 3 nombres premiers.) Nous allons analyser plus précisément la densité avec la formule n , qui nous donne ln(n) 1 approximativement le nombre de nombres premiers entre 1 et n. Avec EXCEL. Comparons dans un tableau les informations fournies par cette formule avec les "vraies" valeurs : n ln(n) 1 n 100 500 1500 … 10000 27,78 95,88 237,6 … 1217,9763 Vraies valeurs 26 96 235 … 1127 Variation 1,78 -0,12 2,6 … 90,9763 % d'erreur 1,78 0,024 0,1733333 … 0,909763 Nous avons représenté l'écart entre la valeur fournie par la formule avec la "vraie" valeur; puis nous avons représenté cette variation par une marge d'erreur en %. Voici des représentations graphiques qui offrent une meilleure visualisation : Nombre de nombres premiers Nombre de nombres premiers avant n 1400 1200 1000 800 600 400 200 0 Formule Valeur exacte 0 2000 4000 6000 n 8000 10000 12000 % d'erreur de la Formule 2 % d'erreur 1,5 1 0,5 0 -0,5 0 2000 4000 6000 8000 10000 12000 n 11 On remarque que la formule donne des valeurs légèrement supérieures aux données exactes. Aussi, le % d'erreur varie fortement au début puis se stabilise a 1% dès lors qu'on prend des valeurs de n supérieures à 2000. Sachant cela, il est possible de créer une autre formule qui serait plus précise : n 0,95n ln(n) 1 100 D'une manière analogue à précédemment, nous obtenons ce tableau : n ln(n) 1 n 1500 2000 2500 … 9000 223,35 283,988 342,6 … 1024,928 Vraies valeurs 235 291 348 … 1025 Variation 11,65 7,012 5,4 … 0,072 % d'erreur 0,7766667 0,3506 0,216 … 0,0008 Qui donne sous forme graphique : % d'erreur avec la nouvelle formule % d'erreur 1 0,8 0,6 0,4 0,2 0 0 2000 4000 6000 8000 10000 n Nous avons ici une meilleure précision, la marge d'erreur avoisine les 0%. Cette formule est un exemple des formules concernant la densité des nombres premiers. Nous en avons élaboré une qui est précise mais son seul intérêt réside dans l'étude du comportement global des nombres premiers. Le fait que cette formule n'est pas absolument exacte nous empêche de l'utiliser afin de "trouver" des nombres premiers. 12 C) Jusqu’où les recherches sont-elles arrivées ? Grâce à la puissance de calcul des ordinateurs, il est possible de réaliser des calculs jusqu’alors infaisables "à la main" car trop longs à faire. Le but des recherches est double : - Trouver le nombre premier supérieur au plus grand connu. - Trouver le type de croissance ou même mieux l’expression (bien que théoriquement impossible) de la fonction (n ) qui associe à tout entier n le nombre de nombres premiers inférieurs à n ou encore mieux la fonction que nous nommons P(n) qui associe à n le nième nombre premier. On a donc inventé de nombreuses manières de trouver de grands nombres premiers pour subvenir à nos besoins. Mis à part les "vieilles" méthodes telles que le crible d’Eratosthène, des tests plus rapides, ont été mis au point. La plupart sont des tests probabilistes qui ne sont donc pas sûrs à 100% ou qui demandent des vérifications supplémentaires. Ils utilisent en majorité les propriétés du petit théorème de Fermat : Le test de Fermat : On obtiendra ici soit "nombre non-premier" ou bien "peut-être premier". On prend a < p, a est appelé la "valeur de base" du test. a p1 1 0 p Si cette relation n’est pas vérifiée, alors p est composé (il est le produit de nombres premiers), on peut être sur que p n’est pas premier. Si elle est vérifiée, on ne peut pas dire si p est premier ou non, car la réciproque ne marche pas : en effet, certains nombres non-premiers vérifient aussi cette propriété, ils sont appelés nombres "pseudo-premiers" et ils sont très rares. On sait donc seulement qu’il y a une forte probabilité que p soit premier. En recommençant le test avec d’autres valeurs de base a, on augmente la probabilité que p soir premier si l’on trouve 1 plus souvent. Le test de "Miller-Rabin" : On obtiendra ici soit "nombre non-premier" ou bien "peut-être premier". On décompose l’exposant n-1 sous la forme « (2^k)e, avec e impair( ?) et on considère la suite : p0 a e ; p1 a 2 e ; p2 a 4 e ;...; pk a k 1 , tous ces calculs étant effectués mod n. Chaque pi , i > 0 est égal au carré du précédent : pi ( pi 1 ) . Or si n est premier, le 2 dernier terme de la suite vaut 1 (petit théorème de Fermat) et l’équation x²=1 (mod n) a seulement deux solutions : 1 et –1. 13 On en déduit donc que deux cas et seulement 2 sont possibles pour la suite des pi lorsque n est premier : SOIT : p0 1 et donc i, pi 1 OU BIEN : Il existe i < k tel que pi 1 , et donc j i, p j 1 . Si aucune de ces deux propriétés n'est vérifiée, alors n n’est pas premier. Si l’une des deux est vérifiée, encore une fois, on peut juste affirmer qu’il y a une forte probabilité que n soit premier. Remarque : si l’une des propriétés est vérifiée alors que n est composé, on dit alors que a est "menteur" (pour ce n) et que n est fortement pseudo-premier. Le test de Lucas-Lehmer : Ce test sert à vérifier si un nombre de Mersenne est premier ou non. Son énoncé est le suivant : Soit la suite S1 4 S n telle que : 2 Sn ( Sn1 ) 2 Pour n>2, le nombre de Mersenne Mn est premier Mn Il est aussi possible de commencer avec divise Sn S1 10 ou d’autres valeurs selon n. C’est une méthode utilisée aujourd’hui pour tester la primalité des plus grands nombres encore en phase de "test". (Le plus grand nombre premier trouvé à ce jour a été criblé avec cette méthode.) Finalement, la seule méthode qui vérifie à 100% la primalité d’un nombre est la méthode la plus lourde : vérifier si un entier n est divisible par d’autres nombres que 1 et n. Il faut procéder en prenant chaque entier inférieur à n et vérifier si il divise n ou non. De nombreuses méthodes sont utilisées afin de réduire le nombre de calculs nécessaires à effectuer (comme par exemple le crible d’Eratosthène mais en version grandement optimisée ou encore le test de Lucas-Lehmer). Aussi, pour rendre le calcul plus rapide sur un ordinateur, on utilise des algorithmes. Utilisation d’Algorithmes : Afin d’économiser beaucoup de temps, on met tous les calculs à faire sous forme d’algorithme (une boucle que l’ordinateur répètera jusqu’à un moment donné). 14 Le premier exemple qui vient à l’esprit est alors un algorithme qui, pour vérifier la primalité d’un entier n effectuerait des divisions successives de n par 2 ; 3 ; … ; E( n ). Ainsi, si aucun des restes des division n’est nul, alors n est premier. Choisir p, p entier naturel. i=2 Tant que i E ( p ) Si i divise p Si i ne divise pas p Alors p n’est pas premier. On ajoute 2 à i et on recommence l’algorithme. FIN de l’algorithme. Si lorsque i > E ( p ) on n’a pas trouvé i tel que i divise p, alors p est premier. L’inconvénient de cet algorithme est sa lourdeur, en effet, le nombre de calculs à effectuer pour un nombre très grand est bien trop élevé et donc il est peu rentable. Un autre algorithme qui lui est plus rentable est un algorithme basé sur le test de Lucas-Lehmer. Il permet de déterminer si un nombre premier ou non. Soit la suite S n définie par : Alors 2 n 1 est premier si 2n 1 est S1 4 2 n Sn1 Sn 2 mod 2 1 S n1 0 Choisir n, n entier naturel et n>2 i=4 Tant que i n Si Alors Sn1 0 2n 1 est premier. Si Sn1 0 On ajoute 1 à i et on recommence l’algorithme. FIN de l’algorithme. Si on n'a pas trouvé Sn1 0 , alors 2 n 1 est peut-être premier. Grâce à cet algorithme, le plus grand nombre premier qui a passé le test de primalité à ce jour (supposé le 40ème nombre de Mersenne) à été découvert le 17 novembre 2003 : M 20 996 011 220 996 011 1 15 Le fait de protéger des informations a toujours été d'une très grande importance, lors d’une guerre par exemple. Un des premiers codages était utilisé par Jules César, il cryptait chaque lettre en lui associant la deuxième lettre suivante, par exemple la lettre A par C, B par D ... Mais, évidemment, il était assez aisé de comprendre le code, et donc de "casser le codage". Les techniques de codage ont évolué avec les moyens de communication et maintenant l'une des meilleures cryptographies connues, est un algorithme de chiffrement à clef publique. Celui-ci utilise des nombres premiers très grands, qui de par leur taille rendront le décryptage pirate extrêmement long, d'où l'importance de faire des recherches sur les nombres premiers pour en trouver de très grands. Le premier algorithme de chiffrement à clef publique a été développé par R.Merckle et M.Hellman en 1977, et, en 1978, l'algorithme à clé publique de Rivest, Shamir, et Adelman (d'où son nom RSA) apparaît. Cet algorithme sert encore aujourd’hui à protéger les données concernant l’armement nucléaire des armées américaines et russes ... A) Fonctionnement du cryptage RSA Ce cryptage repose sur une fonction qui va crypter un message et sa fonction inverse qui les décryptera. On aura donc F(clair)=crypté et G(crypté)=clair Aussi, F(G(clair))=clair. Le fait que le passage de G(crypté)=clair soit beaucoup plus laborieux que F(clair)=crypté est la base de cette cryptographie. Il est facile de multiplier deux nombres pour obtenir un produit, mais difficile de factoriser ce produit et de retrouver les deux grands nombres premiers qui le composent. Afin d’illustrer le fonctionnement, prenons deux personnes : Bob : C’est le récepteur des messages. Il ne pourra qu’en recevoir et non en envoyer. Il pourra recevoir des messages grâce à sa clé publique qu’il aura créée. Alice : C’est elle qui va envoyer des messages en utilisant la clé publique de Bob. 1) Clés : Dans un premier temps, Bob va créer ses clés. Créer 4 nombres p,q, e et d : o p et q sont deux grands nombres premiers distincts. (Plus ils sont grands, plus le cryptage sera sur.) e est un entier premier avec le produit (p-1)(q-1). o d est tel que o e d 1 mod( p 1)(q 1) . Autrement dit, ed-1 est un multiple de (p-1)(q-1). 16 Ainsi, le couple (n,e) sera la clé publique de Bob. Il la rendra publique dans un annuaire afin que les personnes désirant lui transmettre un message puissent le coder. Le couple (n,d) sera sa clé privée. Il la gardera secrète et l’utilisera pour décoder ses messages. 2) Envoi d'un message : Alice veut envoyer un message codé à Bob. Elle le représente sous la forme d'un ou plusieurs entiers M compris entre 0 et n-1. Pour représenter son message avec les entiers M elle associera chaque lettre de l'alphabet au nombre correspondant à sa position. Donc B=02, C=03, etc. On prendra A=27 et non 1 car sinon la valeur de A resterait la même. (En effet, n Z,1n 1 ). Alice possède la clé publique (n,e) de Bob. Elle calcule C tel que C M e mod n pour chaque lettre. C'est donc une suite de nombres créés ainsi qu'elle envoie à Bob. 3) Réception du message codé : Bob reçoit les nombres C, et il trouve grâce à sa clé privée chaque lettre correspondant au nombre C : M C d mod n . B) Mettons cela en pratique 1) Créons nos clés Prenons p=3 et q=11. Nous avons donc n=33. (p-1)(q-1)=2x10=20 On prend ensuite e=7 car 7 et 20 sont premiers entre eux. e d 1 mod( p 1)(q 1) , 7 d 1mod 20 On peut donc résoudre l'équation 7d-1=20 , donc d=3 Notre clé publique est donc (33,7) et la clé privée (33,3). 2) Cryptons le mot "TPE" (le rôle d'Alice) T=20 , P=16 , E=05. Chaque lettre suivie d'une prime correspondra à cette même lettre codée. 17 T ' T e mod n Pour trouver T', Nous multiplierons la partie entière de En soustrayant le résultat obtenu à Te Te n puis la multiplierons par 33. nous obtenons T'. Application numérique: T : 20^7=1280000000 1280000000/33=38787878,79 38787878*33=1279999974 1280000000-1279999974=26 Donc T=26=Z P :16^7=268435456 268435456/33=8134407,758 8134407*33=268435431 268435456-268435431=25 Donc P=25=Y E : 5^7=78125 78125/33=2367,424242 2367*33=78111 78125-78111=14 Donc E=14=N Nous avons donc le mot "TPE" crypté : "TPE" correspond à 26 25 14 , également "ZYN" sous forme de "mot". 2) Décryptons le mot "ZYN" (le rôle de Bob) Z=26 , Y=25 , N=14 D'une manière analogue que précédemment, nous effectuons le calcul Z ' Z d mod n 18 Application numérique : Z : 26^3=17576 17576/33=532,60606... 532*33=17556 17576-17556=20 Donc Z=20=T Y : 25^3=15625 15625/33=473,4848... 473*33=15609 15625-15609=16 Donc Y=16=P N : 14^3=2744 2744/33=83,1515... 83*33=2739 2744-2739=5 Donc N=5=E Nous avons bien retrouvé notre mot du début "TPE", qui ne pouvait être décodé seulement que par Bob. 3) Comment pouvoir "casser" le code ? Mettons nous dans la peau d'un espion qui aurait intercepté un message crypté M' et qui voudrait, sans avoir la clé privée (n,d), décoder le message. Tout l'intérêt du système RSA repose sur le fait qu'à l'heure actuelle il est pratiquement impossible de retrouver dans un temps raisonnable p et q à partir de n si celui-ci est très grand (ou alors, si c'est possible, les cryptanalystes qui ont trouvé la méthode la gardent secrète). Bob est donc la seule personne à pouvoir calculer d dans un temps court. Donc le seul moyen pour l'espion de décoder le message est de factoriser le nombre n de la forme n=p*q , ce qui est extrêmement long avec des nombres premiers de l'ordre de 10^10000 ou même encore plus. Dans notre application, il est aisé de voir que n=33 est le produit de 3 et de 11. En ayant la clé publique (33,7) et en faisant le calcul e d 1 mod( p 1)(q 1) , on retrouve la valeur de d (3) et alors le message est décryptable avec la même d méthode que celle de Bob : . M'M mod n 19