cryptographie

23
La cryptographie asymétrique : RSA Par Simon Chabot (chabotsi) www.openclassrooms.com Licence Creative Commons 7 2.0 Dernière mise à jour le 18/09/2010

Upload: brafellah

Post on 25-Sep-2015

8 views

Category:

Documents


3 download

DESCRIPTION

Cryptographie

TRANSCRIPT

  • La cryptographieasymtrique : RSA

    Par Simon Chabot (chabotsi)

    www.openclassrooms.com

    Licence Creative Commons 7 2.0Dernire mise jour le 18/09/2010

  • Sommaire 2Sommaire ........................................................................................................................................... 1Partager .............................................................................................................................................. 3 La cryptographie asymtrique : RSA .................................................................................................. 4Partie 1 : La thorie ............................................................................................................................. 4RSA ? Qu'est-ce donc ? .................................................................................................................................................... 4Les inventeurs du systme RSA ................................................................................................................................................................................. 4Comment a fonctionne ? ........................................................................................................................................................................................... 5Comment Bob fait-il pour envoyer un message chiffr Alice ? ................................................................................................................................. 5Comment Alice dchiffre-t-elle le message reu ? ...................................................................................................................................................... 5Qu'est-ce que l'attaque du milieu ? ............................................................................................................................................................................. 7Comment cre-t-on nos cls ? .......................................................................................................................................... 7Cration de la cl publique .......................................................................................................................................................................................... 7Cration de la cl prive ............................................................................................................................................................................................. 7Comment trouver U ? .................................................................................................................................................................................................. 9U = -713 n'est pas acceptable ! ................................................................................................................................................................................... 9Ca y est ! ..................................................................................................................................................................................................................... 9Des cls scurises ....................................................................................................................................................................................................

    10Et le chiffrage, comme a se passe ? ............................................................................................................................. 11Tout fonctionne avec des chiffres ! ............................................................................................................................................................................ 11Quelle solution prendre ? .......................................................................................................................................................................................... 11Un programme de calcul ........................................................................................................................................................................................... 12Le chiffrage proprement dit ....................................................................................................................................................................................... 12Etape 1 : remplacement des caractres par leurs valeurs ASCII .............................................................................................................................. 12Etape 2 : Premier calcul, la puissance ...................................................................................................................................................................... 13Etape 3 : Deuxime et dernier calcul : le modulo ...................................................................................................................................................... 13On a fini .................................................................................................................................................................................................................... 14Effectuer le chiffrage grce une seule et unique fonction ......................................................................................................................................

    14Le dchiffrage .................................................................................................................................................................. 15L'utilisation de la cl prive ....................................................................................................................................................................................... 15Etape 1 : Premier calcul, la puissance ...................................................................................................................................................................... 15Etape 2 : Le modulo .................................................................................................................................................................................................. 15Etape 3 : Le remplacement ....................................................................................................................................................................................... 15Le tout en une fonction ..............................................................................................................................................................................................

    16Partie 2 : La pratique ......................................................................................................................... 16GMP - "Arithmetic without limitation" ............................................................................................................................... 16L'intrt de cette bibliothque ................................................................................................................................................................................... 16Installation sous Windows ......................................................................................................................................................................................... 16Prparation... ............................................................................................................................................................................................................. 17Compilation... ............................................................................................................................................................................................................ 17Installation sous GNU/Linux ...................................................................................................................................................................................... 18Crer un projet avec notre nouvelle bibliothque ...................................................................................................................................................... 18Notre premier programme ......................................................................................................................................................................................... 18Compiler notre code ..................................................................................................................................................................................................

    19Comment utiliser GMP ? ................................................................................................................................................. 20L'objet mpz_class ...................................................................................................................................................................................................... 20Les oprateurs usuels ............................................................................................................................................................................................... 20Sommes, diffrences, produits, quotients. ................................................................................................................................................................ 21Les divisions .............................................................................................................................................................................................................. 22Quelques fonctions mathmatiques... ....................................................................................................................................................................... 22La fonction "modulo" ................................................................................................................................................................................................. 23La fonction "puissance" ............................................................................................................................................................................................. 23Une fonction idale pour RSA ! .................................................................................................................................................................................

    2/24

    www.openclassrooms.com

  • La cryptographie asymtrique : RSA

    Par Simon Chabot (chabotsi)

    Mise jour : 18/09/2010Difficult : Intermdiaire Dure d'tude : 20 jours

    Bonjour chers Zros !

    Il est sans doute probable que vous vous soyez demands comment faisait-on pour chiffrer des donnes confidentielles (parexemple, les paiements par cartes bleues, ou bien les paiements en lignes, etc..). Et bien je vais tenter d'y rpondre en vousprsentant le fonctionnement du systme RSA. Et par la suite la cration d'un programme en C++ qui permet de chiffrer desmessages grce ce systme tant utilis.

    Sommaire 3/24

    www.openclassrooms.com

  • Partie 1 : La thorie

    Dans cette partie, nous allons voir comment il est possible de chiffrer (et de dchiffrer) un message grce au systme RSA.

    RSA ? Qu'est-ce donc ?Le systme RSA est un moyen puissant de chiffrer des donnes personnelles. Aujourd'hui, il nous entoure sans mme que nousle sachions. Il est dans nos cartes bancaires, nos transactions, nos messageries, nos logiciels...Pour commencer, voyons d'abord par qui il a t invent. Nous finirons par tudier son fonctionnement gnral.

    Les inventeurs du systme RSALe systme de chiffrement RSA a t invent par trois mathmaticiens : Ron Rivest, Adi Shamir et Len Adleman, en 1977 (Onretrouve le sigle RSA dans les noms des inventeurs).

    Voici une photo des trois mathmaticiens en question

    Ce systme de chiffrement est beaucoup utilis dans le e-commerce (paiement en ligne, etc...), mais aussi dans les cartes bleues,dans les logiciels (exemple : OpenSSH), etc...

    Comment a fonctionne ?Dans l'univers de la cryptographie, on distingue deux types de chiffrement : le chiffrement asymtrique et symtrique.

    Les systmes symtriques utilisent une seule cl pour chiffrer et dchiffrer (exemple : Chiffre de Csar). On peut utiliser lamtaphore du coffre fort : le coffre fort dispose d'une seule cl qui est la mme pour ouvrir et fermer le coffre. En revanche, lessystmes asymtriques utilisent deux cls. Une pour chiffrer et une autre pour dchiffrer. On appelle cl publique la cl servant chiffrer et cl prive la cl servant dchiffrer.

    La cl publique est visible par tout le monde dans une espce d'annuaire qui associe chaque personne sa cl publique.La cl prive n'est visible et connue que par son propritaire. Il ne faut en aucun cas que quelqu'un d'autre que le propritaireentre en possession de celle-ci. Si une quelconque personne obtenait une cl prive qui n'est pas la sienne, elle serait alors enmesure de lire les messages chiffrs qui ne lui sont pas destins.

    On peut ainsi voir la cl publique comme une espce de boite aux lettres (o n'importe qui peut mettre - chiffrer - des messages)et seul le propritaire de la cl de la boite (cl prive) peut lire - dchiffrer - les messages)

    Le systme de chiffrement RSA est un systme de chiffrement dit asymtrique.

    Pour la suite du tutoriel, on va prendre deux personnages : Alice et Bob. (Ce sont les personnages que l'on utilise trs souventquand on parle de cryptographie, alors je ne vais pas changer )

    La cryptographie asymtrique : RSA 4/24

    www.openclassrooms.com

  • J'ai donc l'honneur de vous prsenter nos chers compagnons, en chair et en os, Alice : et Bob :

    Alice et Bob possdent tout deux une cl publique et une cl prive.

    Comment Bob fait-il pour envoyer un message chiffr Alice ?

    Nous avons vu prcdemment que pour chiffrer un message, on utilisait la cl publique. Bob va donc aller sur un annuaire etprendre la cl publique d'Alice. Une fois qu'il la possde, il chiffre le message qu'il veut envoyer Alice, puis le lui envoie.

    Comment Alice dchiffre-t-elle le message reu ?

    Alice vient de recevoir le message chiffr de Bob, grce sa cl prive (qu'elle seule possde), elle peut dchiffrer et lire lemessage que Bob a envoy.

    O rside la force du systme RSA ?

    1. Contrairement de nombreux systmes de chiffrement, tel que le chiffrement affine, qui sont des systmes de chiffrementsymtriques, dit cl secrte, le systme RSA ne ncessite pas de transfert de cl entre l'expditeur et le destinataire.C'est un point de scurit qui n'est nullement ngligeable puisqu'ainsi personne d'autres que les concerns ne peuventcomprendre le message chiffr.

    2. Le systme RSA, comme tous les systmes asymtriques, est bas sur les fonctions sens uniques. (C'est dire qu'il estsimple d'appliquer la fonction, mais extrmement difficile de retrouver l'antcdent la fonction partir de son imageseulement). Pour inverser cette fonction, il faut un lment supplmentaire, une aide : la cl prive.

    Mais, ce genre de systme, ce n'est pas infaillible, si ?

    Eh non, malheureusement, ce n'est pas infaillible...Il existe plusieurs attaques contre le systme RSA. Notamment les attaques de Wiener, Hastad, par chronomtrage, ou encorel'attaque du milieu. Pour ma part, je vais dtailler l'attaque du milieu, car c'est une attaque "type" des systmes asymtriques(Pour plus d'explications sur les autres types d'attaques cliquez ici)

    Qu'est-ce que l'attaque du milieu ?

    Afin d'expliquer le plus clairement possible ce qu'on appelle "attaque du milieu", je vais faire intervenir un troisime personnage,

    "l'espion" :

    Le rle de l'espion est de se faire passer pour Bob aux yeux d'Alice, et de se faire passer pour Alice aux yeux de Bob.L'espion va se placer "au milieu" d'Alice et Bob.

    Il va rcuprer dans l'annuaire la cl publique d'Alice. Puis va s'arranger pour que Bob prenne sa cl publique au lieu de celled'Alice (sans que Bob ne s'en aperoive, videment). Bob va donc chiffrer le message avec la cl publique de l'espion. Lors del'envoi du message chiffr de Bob Alice, l'espion va l'intercepter, et grce sa propre cl prive le dchiffrer et le lire. Une foisqu'il aura le message en clair, il peut ventuellement le re-chiffrer avec la cl publique d'Alice et lui envoyer le message afin depasser inaperu...

    Partie 1 : La thorie 5/24

    www.openclassrooms.com

  • Voil, normalement vous devriez avoir compris comment on pouvait, en thorie, chiffrer et dchiffrer des messages avec unsystme asymtrique.Dans le prochain chapitre, on va voir comment crer les cls prive, et publique ! (L, il y aura un peu de mathmatiques )

    Partie 1 : La thorie 6/24

    www.openclassrooms.com

  • Comment cre-t-on nos cls ?Dans cette partie nous allons apprendre crer les cls prive et publique qui nous servirons plus tard chiffrer et dchiffrer lesmessages.Il faut quelques notions en mathmatiques, mais je vais faire de mon mieux pour tre le plus explicite possible.

    Cration de la cl publiquePour crer notre cl publique il nous faut choisir deux nombres premiers.

    Un nombre premier est un nombre suprieur ou gal 2 qui possde deux diviseurs positifs distincts et uniquementdeux (1 et lui-mme). On peut prendre pour exemple 2, 3, 7, 53, 89... Il existe une infinit de nombres premiers

    Soit P et Q, ces deux nombres premiers .(Je vais prendre des valeurs titre d'exemple pour P et Q, mais n'hsitez pas les changer...)Je prends P = 53 et Q = 97

    Ensuite, on va prendre un autre nombre, N, tel que : Dans mon cas, j'ai N = 53 x 97 = 5141

    On pose .

    Ce nombre "M" est appel indicatrice d'Euler, il correspond au nombre d'entiers naturels (0, 1, 2, 3, etc...) infrieurs ougaux N qui lui sont premiers

    J'obtiens pour ma part, M = (53 - 1) x (97 - 1) = 4992

    Pour crer notre cl publique, il ne nous reste plus qu' choisir un nombre C, qui soit premier avec M.(Il en existe, l aussi, une infinit.) Je choisis C = 7.

    Deux nombres sont premiers entre eux si et seulement s'ils n'ont aucun facteur commun ( l'exception de 1 et -1). Parexemple, 16 et 12 ne sont pas premiers entre eux, car ils ont au moins un facteur commun (ici, on a 2 et 4 en commun (12= 6 * 2 = 3 * 4 et 16 = 8 * 2 = 4 * 4)

    Pour savoir facilement si deux sont premiers entre eux, il suffit que calculer le PGCD de ces deux nombres. S'il est gal 1, alors ces deux nombres sont premiers entre eux. (J'ai bien PGCD(4992, 7) = 1)...

    Au final, notre cl publique est compose de (N, C). Dans mon cas, j'ai (N = 5141, C = 7) comme cl publique.Cration de la cl prive

    Pour crer notre cl prive, on va calculer un nombre U, qui va nous permettre "d'inverser la fonction de chiffrement" trsfacilement (On verra dans quelques chapitres comment faire). C'est ce nombre qui sera important, et secret !

    Pour calculer U, on va reprendre les nombres C et M, calculs lors de la cration de la cl publique.

    Un mathmaticien, du nom d'Etienne Bzout, a dmontr que deux nombres a et b sont premiers entre eux, si et seulement s'ilexiste des solutions u et v telles que (u et v tant des nombres entiers). Or, on a dit peu avant que C et Mdevaient tre premiers entre eux. Il existe donc deux nombres entiers u et v qui rpondent l'quation.

    Nous allons chercher U, tel que (Note : la valeur de V ne nous servira pas)

    Comment trouver U ?

    Pour trouver U, il faut utiliser un algorithme spcial. Le but de ce chapitre n'est pas de vous montrer comment fonctionne cetalgorithme, mais plutt ce que l'on peut faire avec. On va donc utiliser un petit programme qui permet de trouver la valeur de Ucherche.Le programme est disponible pour GNU/Linux (cf un peu pour loin pour l'installation) , et ici pour Windows.

    Pour ceux qui seraient intresss par cet algorithme, des informations sont disponibles ici.

    Partie 1 : La thorie 7/24

    www.openclassrooms.com

  • Sous GNU/Linux, nous allons devoir compiler ce programme. Pour ce faire il faut auparavant avoir install la bibliothqueGMP. (C'est la bibliothque que l'on utilisera dans toute la partie II du tutoriel. Il faudra donc installer la bibliothqueGMP un moment o un autre (Pour Windows, j'expliquerais comment faire dans le chapitre I de la partie II))Ouvrez une console et copiez-y ce code, a fera tout pour vous

    Code : Console - Installation du programme : GNU/Linux

    cd ~mkdir RSAcd RSAwget http://ftp.sunet.se/pub/gnu/gmp/gmp-4.2.2.tar.gztar xfz gmp-4.2.2.tar.gzcd gmp-4.2.2./configure --enable-cxxmakemake checksudo make installcd ..rm gmp-4.2.2 gmp-4.2.2.tar.gzcd /usr/lib/sudo ln -s /usr/local/lib/libgmpxx.so.4 libgmpxx.so.4cd ~/RSAwget http://tuxweb79.free.fr/Bezout_linux.zipunzip Bezout_linux.zipcd Bezoutmakechmod +x bezout

    Ceci aura pour effet de compiler, puis d'attribuer les droits d'excution au programme (en ayant install la bibliothqueGMP avant...) ;Sous windows, vous extrayez l'archive .zip. Le programme est dj compil, il vous suffit de le lancer depuis la ligne decommande en faisant : dmarrer > excuter > "cmd" puis :

    Code : Console - Installation du programme : Windows

    cd chemin/vers/le/dossier/du/programme/

    Comment fonctionne le programme ?

    Il vous suffit de lancer le programme avec comme arguments C et M, comme ceci.

    Code : Console - Programme Bezout

    ./bezout C M

    Sous Windows, au lieu de taper "./bezout", il faut taper "Bezout.exe".

    Dans mon cas, j'ai :

    Code : Console - Programme Bezout

    ./bezout 7 4992PGCD = 1

    Partie 1 : La thorie 8/24

    www.openclassrooms.com

  • u = -713v = 1

    Ainsi, je connais U.

    U = -713 n'est pas acceptable !

    Comment a ? c'est pas bon ?!

    Bah.. pas tout fait. L'algorithme du systme RSA a besoin d'un U tel que , or l, on voit clairement que U estinfrieur 2 (dans mon exemple, mais a arrive souvent )

    Comment faire pour y remdier ?

    En appliquant la formule suivante (avec U0 la solution trouve prcdemment) : . On peuttrouver d'autres solutions l'quation prcdente correspondant nos besoins. Il suffit de faire varier l'entier K pour obtenir unevaleur dans l'intervale . On pose U une valeur de tel que .

    Trouver directement un U valable grce au programme prcdent

    Pour trouver directement un U qui convient, il suffit de lancer le programme Bezout, avec l'option "-rsa". Voici ce que j'obtiensdans mon cas :

    Code : Console - Programme Bezout

    ./bezout -rsa 7 49924279

    Je retiens U = 4279.

    Ca y est !

    Voil, notre cl prive est (U, N). J'ai (U = 4279 et N = 5141) comme cl priveDes cls scurises

    Je ne sais pas si vous avez remarqu, mais on construit nos cls seulement partir de P et Q.De plus, tout le monde peut connaitre N (qui est le produit de P et Q), car N fait partie de la cl publique. Il suffirait donc

    n'importe qui (notre espion , par exemple) de dcomposer N en un produit de deux facteurs premiers (P et Q) pour

    ensuite recalculer M, et grce M avoir la possibilit de trouver U... (Ce qui permettrait l'espion de dchiffrer les messages)

    La dcomposition de n'importe quel nombre en facteurs premiers est unique ( l'ordre prs). Ainsi, si on dcompose N,on retrouve forcement les valeurs de P et Q initiales, et pas d'autres !

    Eh ! tu me fais peur l !? C'est pas si scuris que a ton truc !

    En effet, ce n'est pas trs scuris si P et Q sont de petits nombres premiers. En ralit, P et Q sont des nombres composs d'unebonne centaine de chiffres, ce qui fait qu'il est trs difficile de dcomposer N pour retrouver P et Q. Mme des machines sur-

    Partie 1 : La thorie 9/24

    www.openclassrooms.com

  • puissantes relies entre elles ne pourraient pas casser N en un temps raisonnable...

    Mais, pour nous, on va prendre des petits nombres premiers... a va permettre de simplifier grandement les calculs

    Quelques exemples de vrais facteurs

    Voici un exemple de factorisation :

    N = 3107418240490043721350750035888567930037346022842727545720161948823206440518081504556346829671723286782437916272838033415471073108501919548529007337724822783525742386454014691736602477652346609

    qui est dcomposable en :

    P = 1634733645809253848443133883865090859841783670033092312181110852389333100104508151212118167511579

    Q = 1900871281664822113126851573935413975471896789968 515493666638539088027103802104498957191261465571

    (Il a fallut faire travailler 80 processeurs Opteron de 2.2GHz pendant 5 mois. pour trouver P et Q )Voil, maintenant que nous savons crer nos cls, nous allons voir dans le chapitre suivant comment chiffrer un message.

    Partie 1 : La thorie 10/24

    www.openclassrooms.com

  • Et le chiffrage, comme a se passe ?Aprs avoir cr les cls publique et prive, nous allons voir comment fait-on pour chiffrer un message quelconque (texte /chiffres ...) grce au systme RSA...

    Tout fonctionne avec des chiffres !Vous vous doutez surement que l'on va utiliser des chiffres pour chiffrer nos messages. Il va donc falloir trouver un moyend'associer chaque caractre un nombre. J'ai deux solutions vous proposer :

    1. Remplacer chaque caractre par sa position dans l'alphabet ;2. Remplacer chaque caractre par sa valeur dans la table.ASCII

    Quelle solution prendre ?

    Chacune des deux solutions a son avantage et son inconvnient. L'avantage de la solution 1) est qu'elle nous permet de grer detrs petits nombres (de 0 25), ce qui serait pratique pour les calculs. Son inconvnient dcoule directement de son avantage, onne peut grer que 26 caractres (donc pas de majuscules, pas d'espaces, pas de chiffres, pas d'accents...) Bref, vous avez comprisce n'est pas la meilleure solution pour nous, qui voulons chiffrer n'importe quel caractre.

    Nous allons donc choisir la deuxime solution qui nous permet de grer normment de caractres, avec des chiffres, desespaces, des accents, etc...

    Je vous conseille de mettre ce lien http://www.asciitable.com/ en favori, car nous allons devoir nous y rfrer assezsouvent.

    Bien, passons la suite Un programme de calcul

    Pour chiffrer nos messages, nous allons principalement utiliser le "modulo" et les "puissances". Ce genre d'oprations n'est pasfacile faire de tte ( moins d'tre un vrai gnie ). De plus, nous allons nous servir (malgr nos efforts) de nombresrelativement grands. Toutes les calculatrices ne sont pas capables d'effectuer les oprations "modulo" et "puissance" avec degrands nombres. C'est pourquoi, je vous conseille d'installer un petit programme qui va faire tout juste ce que l'on veut. Pas plus,pas moins.

    Il est disponible sous GNU/Linux et sous Windows.

    L'installation sous Linux se fait de la manire suivante : vous ouvrez une console, et vous y copiez les instructionssuivantes :

    Si vous n'avez pas install GMP, il faudra le faire ; copiez ce code, il l'installera pour vous :

    Code : Console

    cd ~mkdir RSAcd RSAwget http://ftp.sunet.se/pub/gnu/gmp/gmp-4.2.2.tar.gztar xfz gmp-4.2.2.tar.gzcd gmp-4.2.2./configure --enable-cxxmakemake checksudo make installcd ..rm gmp-4.2.2 gmp-4.2.2.tar.gzcd /usr/lib/sudo ln -s /usr/local/lib/libgmpxx.so.4 libgmpxx.so.4cd ~/RSA

    Partie 1 : La thorie 11/24

    www.openclassrooms.com

  • Pour installer le programme de calcul, copiez ces instructions :Code : Console

    cd ~mkdir RSAcd RSAwget http://tuxweb79.free.fr/Calculs_RSA_linux.zipunzip Calculs_RSA_linux.zipcd Calculs_RSAmakechmod +x calculs_RSA

    Pour Windows , tlchargez le programme de calcul ici.Puis extrayez l'archive. Pour lancer le programme ouvrez l'invite de commandes (Dmarrer -> executer -> "cmd"), puis :

    Code : Console

    cd chemin/vers/le/dossier/du/programme/

    Voil, c'est install ; on va maintenant s'en servir Le chiffrage proprement dit

    On va reprendre nos deux camarades, Alice et Bob. La situation est toujours la mme, Bob veut envoyer un message chiffr Alice. Il va donc rcuprer sa cl publique. Dans l'annuaire, il voit :

    Annuaire RSAPersonne Cl publique... (N, C)Jean (N = 187, C = 3)Alice (N= 5141, C = 7)Lucie (N= 4183, C = 19)... (N, C)

    Il prend la cl publique d'Alice : (N = 5141, C = 7). (J'ai volontairement repris la mme cl que dans le chapitre prcdent afinque vous sachiez les valeurs de P Q et tout ce qui s'ensuit)

    Etape 1 : remplacement des caractres par leurs valeurs ASCII

    Bob veut envoyer le message "Bonjour !" Alice. On a vu prcdemment, qu'on devait travailler avec des nombres. On se rfre la table ASCII, et on effectue le remplacement.

    Etape 2 : Premier calcul, la puissance

    Ensuite, on va lever chaque sous-message (nombre) la puissance C (7, dans notre cas)On a alors :

    Partie 1 : La thorie 12/24

    www.openclassrooms.com

  • Vous pouvez l'aide du programme de calcul, calculez les valeurs prcdentes ( , etc..) en tapant simplement

    Code : Console

    ./calculs_RSA 66 7

    dans la console et appuyez sur "entre" pour voir le rsultat.

    Sous Windows, tapez simplement "calculs_RSA"

    Etape 3 : Deuxime et dernier calcul : le modulo

    Le modulo, c'est quoi ?

    Le modulo, c'est le reste de la division euclidienne d'un nombre entier par un autre.

    Un exemple de modulo :

    Et oui, car dans 16, on peut placer 5 fois 3 (ce qui donne 15 ) et il reste 16 - 15 = 1.Ainsi on note .

    Nous avons effectu notre premier calcul, nous allons maintenant faire le deuxime calcul, partir des rsultats que l'on a obtenuprcdemment.

    On va calculer le modulo du rsultat obtenu prcdemment par N (le N de la cl publique)

    Il est important d'utiliser le programme de calcul partir de ce moment, sans quoi vous ne pourrez pas trouver la valeurfinale...

    On obtient (grce au programme) :

    Pour calculer ces valeurs avec le programme de calcul il suffit de taper et de valider par "entre" pour voir le rsultat :

    Code : Console

    ./calculs_RSA 66 7 5141

    On a fini

    Partie 1 : La thorie 13/24

    www.openclassrooms.com

  • Voil, plus de calculs faire. Ainsi avec la cl publique d'Alice (N = 5141, C = 7), le message "Bonjour !" devient "386 1858 21272809 1858 1774 737 3675 244"

    A partir du moment o le message est chiffr, on ne peut plus le dchiffrer sans l'aide de la cl prive. Mme Bob, qui est l'auteurdu message, ne peut le dchiffrer (mme si en thorie, il connait le message )

    Effectuer le chiffrage grce une seule et unique fonction

    On peut facilement ramener les deux oprations prcdentes en une seule et unique fonction. La voici : . Dans cette fonction "x" reprsente la valeur ASCII du caractre chiffrer.Cette fonction lve x la puissance C et calcule le reste de la division euclidienne de xC par N.

    Ainsi on a :

    On utilisera cette fonction dans le programme que l'on ralisera dans la partie pratique du tutoriel.

    Voil, vous savez maintenant comment on chiffre des messages.

    Vous pouvez vous entrainer chiffrer d'autres messages, en crer d'autres cls. Cela peut tre intressant.

    Dans le chapitre suivant, nous allons voir comment peut-on faire pour dchiffrer le message.

    Partie 1 : La thorie 14/24

    www.openclassrooms.com

  • Le dchiffrageAlice vient de recevoir un message de Bob, le voici : "386 737 970 204 1858". Notre mission, trouver sa signification

    L'utilisation de la cl priveNous allons nous mettre dans la peau d'Alice pour ce chapitre.Notre cl prive est la mme que celle calcule avant : (U = 4279, N = 5141)

    Donc on a reu un message de Bob, et on veut le lire. Le message est "386 737 970 204 1858".

    (J'ai volontairement pris un autre message que celui chiffr dans le chapitre prcdent... (a aurait t trop simple ))

    Tout comme le chiffrage, le dchiffrage se compose en trois tapes : deux calculs, et un remplacement

    Etape 1 : Premier calcul, la puissance

    A l'instar du chiffrement, on va lever chaque sous-message (nombre) une puissance. Cette puissance sera U

    On a alors :

    Etape 2 : Le modulo

    Dans cette tape, on va calculer le modulo des rsultats obtenus prcdemment par N (Nous avons N = 5141)

    Ce qui nous donne :

    Etape 3 : Le remplacement

    Les rsultats que nous venons d'obtenir son en ralit la valeur ASCII du caractre original. On va donc se rfrer la tableASCII (je vous l'avais dit, on s'en sert beaucoup ), et effectuer les remplacements ncessaires.

    Voil, nous venons de reconstituer le message envoy par Bob : "Bravo"

    Le tout en une fonction

    L aussi il est ais de ramener les tapes 1 et 2, en une seule fonction mathmatique.Cette fonction est : (O U et N les valeurs de la cl prive, et x le sous-message).Cette fonction renvoie un nombre qui est la valeur ASCII du caractre chiffr.

    Vous noterez que cette fonction est quasiment identique celle qui nous sert chiffrer.

    Voil, vous tes maintenant capables de chiffrer et de dchiffrer des messages si vous connaissez les cls. Sympathique non ?

    Partie 1 : La thorie 15/24

    www.openclassrooms.com

  • Partie 2 : La pratique

    C'est ici que nous allons utiliser ce que nous avons vu dans la partie prcdente.Que les choses soient claires pour tout le monde : le but de cette partie n'est pas de crer un super-crypteur-de-la-mort-qui-tue-en-un-coup, mais plutt de dcouvrir une bibliothque qui sert grer de grands nombres (la bibliothque GMP), et commentimplmenter ce qu'on a vu prcdemment en C++.

    tant donn que l'on va coder notre programme en C++, il est vivement conseill d'avoir quelques bases (notamment utilisation /cration d'objets). Vous trouverez un cours sur le C++ ici, n'hsitez pas vous y rfrer !

    Voil : sur ce... l'attaque !

    GMP - "Arithmetic without limitation"Cette partie prsente l'intrt d'une telle bibliothque et explique comment l'installer (sous GNU/Linux, et Windows), et finit par lacration d'un petit programme d'exemple...

    L'intrt de cette bibliothqueEuh... une bibliothque ? mais c'est pour quoi faire ?

    La bibliothque GMP est une bibliothque qui va nous permettre de grer de trs trs grand nombre, et d'effectuer tout un tas decalculs rapidement.

    Un "double" ou un "float" peut trs bien pu suffir pour grer nos grands nombres, non ? Pas la peine de prendrecette... GMP !

    La rponse est non (vous deviez vous en douter ^^). Le type "double", le plus grand destypes primitifs, a pour extrma et . Or, je sais pas si vous vous rappelez, mais dans le chapitre surle dchiffrage, on avait un moment donn ce calcul : . Autant vous dire que le rsultat dpasse largement le type"double". (Mme un "unsigned double" ne ferait pas l'affaire pour ceux qui y auraient pens...)

    Pour la petite histoire, j'ai calcul avec la bibliothque GMP, et le rsultat est compos d'exactement 11069 chiffres,un double aurait rendu l'me bien avant d'afficher le rsultat . On ne peut donc pas se passer d'une telle bibliothquepour faire notre programme.

    Passons l'installation .Installation sous WindowsPrparation...

    Pour installer la bibliothque GMP sous Windows, nous allons installer une sorte de paquetage, compos d'un shell (uneconsole en gros ) et de plusieurs petits programmes, qui va nous permettre de compiler les sources de la bibliothque, pourque l'on puisse ensuite s'en servir... Ce paquetage ce nomme MSYS, et est disponible en tlchargement ici.

    Pour continuer, vous devez avoir MinGW d'install sur votre machine ! Si ce n'est pas le cas, vous devez le faire. (Sivous avez Dev-Cpp ou Code-Blocks, il doit tre prsent...)

    Allez dans le rpertoire d'installation de MinGW, puis dans le dossier "bin". (Ce rpertoire est pour ma part "C:\MinGW", mais ilpeut tre "C:\Dev-Cpp", tout dpend de votre machine) Dans ce rpertoire "bin", vous devriez trouver un fichier nomm"mingw32-make.exe". Copier-le dans ce mme dossier sous le nom de "make.exe".

    Il faut maintenant installer MSYS. Lancer l'excutable tlcharg. Les options par dfaut devraient faire l'affaire. A la fin del'installation, une console s'ouvre et vous pose quelques questions. Rpondez par "y" aux deux premires questions. On vousdemande ensuite o est le dossier d'installation de MinGW. Copiez-y alors l'adresse de ce dossier.

    Voici un screen de ce que j'ai :

    Partie 1 : La thorie 16/24

    www.openclassrooms.com

  • Rpondez aux questions suivantes par "y" puis Entre.

    Une fois ceci fait, nous pouvons tlcharger la bibliothque proprement dite. Rendez-vous sur la page de tlchargement du site, savoir ici. Tlchargez l'archive de la dernire version de la bibliothque. Extrayez ensuite l'archive dans un dossier faciled'accs... "C:\gmp" par exemple.

    Compilation...

    Nous pouvons dornavant compiler la bibliothque. Pour ce faire, lancez MSYS. (Double-cliquez sur l'icne MSYS de votrebureau pour le lancer.) Une console s'ouvre...

    Dplacez-vous dans le dossier o sont les sources de GMP, grce la commande "cd", ce qui donne : cd c:/gmp

    Ensuite il faut prparer et vrifier si la compilation de la bibliothque est faisable. Cette prparation se fait avec la commandesuivante : ./configure --prefix=/c/dev-cpp --enable-cxx

    Note : Remplacez "c/dev-cpp" par le chemin correspondant votre IDE. Si le chemin de votre IDE est "C:\Code-Blocks\"tapez "c/Code-Blocks"

    Laissez travailler. Une fois cela fini (Il ne devrait pas y avoir d'erreur...) On peut compiler... La compilation se fait avec lacommande : make . La compilation peut tre longue... Il faut tre patient . A la fin de la compilation, tapez make checkpuis make install , pour installer la bibliothque. (Encore un peu de patience... )

    Normalement, rendu ce point, la bibliothque devrait tre (correctement) installe.

    (Si tout c'est bien droul, vous devriez avoir dans le dossier "include" de votre IDE les fichiers "gmp.h" et "gmpxx.h")Installation sous GNU/Linux

    Normalement, la bibliothque GMP est dj installe sur votre machine si vous avez suivi le tutoriel dans l'ordre. Si vous l'avezinstall, vous pouvez aller directement la dernire partie de ce chapitre. Sinon ouvrez une console et copiez-y :

    Code : Console

    cd ~mkdir RSAcd RSAwget http://ftp.sunet.se/pub/gnu/gmp/gmp-4.2.3.tar.gztar xfz gmp-4.2.3.tar.gzcd gmp-4.2.3

    Partie 2 : La pratique 17/24

    www.openclassrooms.com

  • ./configure --enable-cxxmakemake checksudo make installcd ..rm -rf gmp-4.2.3 gmp-4.2.3.tar.gzcd /usr/lib/sudo ln -s /usr/local/lib/libgmpxx.so.4 libgmpxx.so.4cd ~/RSA

    Voil, c'est install Crer un projet avec notre nouvelle bibliothqueNotre premier programme

    Afin de voir si tout fonctionne correctement, on va faire un petit programme (trs simple) qui affiche une liste de nombrespremiers...

    Crez un nouveau projet et dans le fichier "main.cpp" copiez le code suivant : (Je vous expliquerais plus en dtail commentutiliser cette bibliothque, ce code est juste fait pour vrifier si le tout marche, et montrer comment on link la bibliothque...)

    Code : C++

    /* Ce code a pour but d'afficher, grce une boucle, un nombredtermin de nombrespremiers */

    #include #include //On inclut la bibliothque gmp

    #define MAX 10 //On affichera MAX nombres premiers...

    int main(int argc, char **argv){ mpz_class a(0); //On cr un objet mpz_class nomm a. Onl'initialise zro.

    //On va calculer puis afficher MAX nombres premiers for(int i = 0 ; i < MAX ; i++) { //Cette fonction attribue "a" le premier nombre premier aprs"a" mpz_nextprime(a.get_mpz_t(), a.get_mpz_t());

    std::cout

  • Comme vous pouvez le constater, j'ai plac sur l'image des petits numros, ils vous permettent de vousreprer quant l'ordre des oprations effectuer.

    Une fois cela fait, vous pouvez ensuite compiler... Tout devrait bien se passer.

    Avec un makefile

    Si vous utilisez makefile ou la ligne de commande pour compiler, vous devez linker la bibliothque avec vote programme entapant : -lgmpxx -lgmp. Ce qui donne par exemple : g++ -o executable main.cpp -lgmpxx -lgmp

    Et voil, votre programme devrait compiler et fonctionner correctement. Il devrait afficher ceci :

    Code : Console

    2 3 5 7 11 13 17 19 23 29

    Nous venons d'installer la bibliothque GMP, dans le prochain chapitre, nous verrons quelques fonctions de bases de cettebibliothque, et nous attaquerons notre programme de chiffrage.

    Vous pouvez, si le cur vous en dit, d'ores et dj consulter la documentation de GMP, disponible au format PDF, ici.

    Partie 2 : La pratique 19/24

    www.openclassrooms.com

  • Comment utiliser GMP ?Maintenant que nous avons install et vrifi que la bibliothque GMP tait fonctionnelle, nous pouvons apprendre nous enservir !

    L'objet mpz_classLa bibliothque GMP permet de grer de grands nombres ; elle a donc son propre type de variables (d'objet, plus prcisment) ;mpz_class qui va nous permettre d'utiliser simplement les oprateurs arithmtiques usuels (+, -, *, /) avec nos grandsnombres. Voyons ensemble comment on se sert de ce nouvel objet !

    Code : C++

    #include #include

    int main (int argc, char **argv){ std::string nombre("35");

    mpz_class a(16), b(nombre), c;

    std::cout

  • int main (int argc, char **argv){ mpz_class a(16), b(15), c;

    c = a + b;

    std::cout

  • (mpz_class ; mpf_class ; mpq_class (nous ne verrons pas ce dernier)) ont t crs pour l'occasion. Cependant, toute labibliothque n'a pas bascul en C++, c'est pourquoi il subsiste encore des fonctions telles que ces trois-l."mpz_t" dcoule du fait que la bibliothque tait l'origine en C. Il s'agit d'un des trois types de variables crs l'originede la GMP.Ces trois fonctions ont chacune leur propre rle :

    La premire permet d'obtenir le quotient de la division euclidienne de "n" par "d".La deuxime permet d'obtenir le reste de la division euclidienne de "n" par "d".Et la dernire permet d'obtenir le quotient et le reste de la division euclidienne de "n" par "d".

    Maintenant que l'on sait quoi servent ces fonctions, et que l'on sait pourquoi le prototype utilise des "mpz_t" et non des"mpz_class", on va voir comment on les utilise. Pour s'en servir, il va falloir que l'on "transforme" notre objet "mpz_class" en unevariable du type "mpz_t". C'est pour cela que la mthoque get_mpz_t() a vu le jour !

    Je ne fais l'exemple que d'une fonction, les autres, vous pourrez les tester vous mme : c'est le mme principe.

    Code : C++

    #include #include

    int main (int argc, char **argv){ mpz_class dividende(35), diviseur(15), quotient, reste;

    mpz_fdiv_qr(quotient.get_mpz_t(), reste.get_mpz_t(), dividende.get_mpz_t(), diviseur.get_mpz_t());

    std::cout

  • Vous noterez que les fonctions mpz_mod et mpz_fdiv_r font le mme travail ; cela dit, nous voulons le modulo, alorsautant utiliser la fonction prvue cet effet...

    La fonction "puissance"

    La fonction "puissance" est aussi une des fonctions la base du systme RSA. Voici son prototype :

    void mpz_pow_ui (mpz_t rop, mpz_t base, unsigned long int exp )

    Cette fonction effectue le calcul suivant : rop = baseexp

    L'exposant doit tre un entier de type "unsigned long int", et non un "mpz_class" !

    La mthode get_ui() permet de transformer un mpz_class en "unsigned long int" ; cependant, attention vrifierque votre objet loge dans "unsigned long int" !

    Une fonction idale pour RSA !

    Nous pourrions trs bien faire notre programme RSA en utilisant seulement les deux dernires fonctions que l'on vient de voir.Cependant, calculer une puissance puis un modulo (l'un aprs l'autre) demande de nombreux calculs, et donc du temps. L'astuceconsiste en fait calculer le modulo et la puissance en mme temps ! . Et grce un algorithme et un peu de magiemathmatique ( ), on gagne du temps !

    Voici le prototype de la fonction "RSA" :

    void mpz_powm (mpz_t rop, mpz_t base, mpz_t exp, mpz_t modulo )

    Cette fonction effectue le calcul suivant : rop = baseexp mod (modulo)

    Vous l'aurez devin ; c'est cette fonction qui va nous servir lors du chiffrage et du dchiffrage de nos messages secrets.Voil, je pense que les prsentations de bases sont dsormais faites.

    A vous de manipuler les objets mpz_class (et pourquoi pas mpf_class, si vous dsirez travailler avec des flottants).

    Au prochain chapitre, nous attaquons les choses srieuses ! La cration du programme commencera...

    Ce tutoriel n'est pas fini ! Venez de temps en temps vrifier s'il n'y a pas de nouveaux chapitres !

    Partie 2 : La pratique 23/24

    www.openclassrooms.com

    SommairePartager La cryptographie asymtrique : RSAPartie 1 : La thorieRSA ? Qu'est-ce donc ?Les inventeurs du systme RSAComment a fonctionne ?Comment Bob fait-il pour envoyer un message chiffr Alice ?Comment Alice dchiffre-t-elle le message reu ?Qu'est-ce que l'attaque du milieu ?

    Comment cre-t-on nos cls ?Cration de la cl publiqueCration de la cl priveComment trouver U ?Comment fonctionne le programme ?

    U = -713 n'est pas acceptable !Comment faire pour y remdier ?Trouver directement un U valable grce au programme prcdent

    Ca y est !Des cls scurisesQuelques exemples de vrais facteurs

    Et le chiffrage, comme a se passe ?Tout fonctionne avec des chiffres !Quelle solution prendre ?Un programme de calculLe chiffrage proprement ditEtape 1 : remplacement des caractres par leurs valeurs ASCIIEtape 2 : Premier calcul, la puissanceEtape 3 : Deuxime et dernier calcul : le moduloUn exemple de modulo :

    On a fini Effectuer le chiffrage grce une seule et unique fonction

    Le dchiffrageL'utilisation de la cl priveEtape 1 : Premier calcul, la puissanceEtape 2 : Le moduloEtape 3 : Le remplacementLe tout en une fonction

    Partie 2 : La pratiqueGMP - "Arithmetic without limitation"L'intrt de cette bibliothqueInstallation sous WindowsPrparation...Compilation...Installation sous GNU/LinuxCrer un projet avec notre nouvelle bibliothqueNotre premier programmeCompiler notre codeAvec un IDEAvec un makefile

    Comment utiliser GMP ?L'objet mpz_classLes oprateurs usuelsSommes, diffrences, produits, quotients.Les divisionsQuelques fonctions mathmatiques...La fonction "modulo"La fonction "puissance"Une fonction idale pour RSA !