APPLICATIONS DES MATHEMATIQUES - Cryptographie Programmation en Python 3 AMOS / 2021-2022 - Collège Sismondi

La page est créée Pauline Marty
 
CONTINUER À LIRE
APPLICATIONS DES MATHEMATIQUES - Cryptographie Programmation en Python 3 AMOS / 2021-2022 - Collège Sismondi
APPLICATIONS
                DES
           MATHEMATIQUES

                   Cryptographie
                        Partie 2
                  Programmation en Python 3

Picchione Serge                          AMOS / 2021-2022
APPLICATIONS DES MATHEMATIQUES - Cryptographie Programmation en Python 3 AMOS / 2021-2022 - Collège Sismondi
AVANT-PROPOS
• Ce document a été conçu pour l’enseignement de l’applications des mathématiques
  dispensé au Collège de Genève. Cela dit, il peut servir de support de cours pour d’autres filières
  d’enseignement.

• Vous trouverez dans ce chapitre de la théorie (définitions, théorèmes, démonstrations, etc.)
  et des exercices qui vous permettront progressivement de vous familiariser et de maîtriser les
  diverses notations et concepts en lien avec : les mathématiques, l’informatique et la physique.
  À la fin du chapitre se trouvent les corrections des exercices.

• Des QR CODES apparaissent à certains endroits du cours. Une fois scannés avec vos
  smartphones, ils donnent (aux personnes ayant un compte EDUGE) accès à la lecture
  de vidéos dont le contenu est en lien avec certains sujets du cours.

          Vous pouvez télécharger ce document au format PDF à l’adresse suivante :

      https://www.sismondi.ch/disciplines/applications-des-mathematiques/cours-eleves

Table des matières

2.3 Cryptographie et cryptanalyse                                                           1
         2.3.1 Rappels et résumé                                                            1

         2.3.2 Chiffrement symétrique et asymétrique                                        2

         2.3.3 Le chiffrement RSA                                                           6

         2.3.4 Authentification par signature RSA                                           13

         2.3.5 Programmes en Python 3 pour le chiffrement RSA                               16

         2.3.6 Attaque de l’homme du milieu                                                 25

         2.3.7 Certification des clés publiques RSA                                         27

         2.3.8 Blockchain et Bitcoin                                                        29

         2.3.9 L’ordinateur quantique                                                       30

2.4 Corrections des exercices et activités                                                  33

Picchione Serge                                                                  AMOS / 2021-2022
APPLICATIONS DES MATHEMATIQUES - Cryptographie Programmation en Python 3 AMOS / 2021-2022 - Collège Sismondi
2.3 Cryptographie et cryptanalyse
2.3.1 Rappels et résumé
La cryptologie et la stéganographie sont deux procédés visant à protéger des messages afin
d'assurer notamment la confidentialité des échanges ou des données.
Avec la cryptographie, la sécurité repose sur le fait que le message ne sera sans doute pas compris
car il est rendu inintelligible. En revanche, avec la stéganographie, la sécurité repose sur le fait que
le message ne sera sans doute pas détecté car il est dissimulé.

             Cryptologie                                             Sténographie

                Cryptographie                                         Cryptanalyse
            (chiffrer et déchiffrer des                           (déchiffrer les messages
             messages à l’aide de clé)                            sans en posséder la clé)

               Chiffrement                                             Chiffrement
               symétrique                                              asymétrique
             Clé privée partagée                                  Clé publique : expéditeur
              par l’expéditeur                                                +
              et le destinataire.                                 Clé privée : destinataire

   • Mono-alphabétique :                                        • Mono-alphabétique :
   - décalage (César), affine, substitution, etc.               - RSA
   • Poly-alphabétique :                                        • Par bloc :
   - Vigenère, Hill, etc.                                       - RSA

• Un système cryptographique doit posséder au minimum trois qualités :
 1) la confidentialité ; garantir que seul l’expéditeur et le destinataire pourront lire le message.
 2) l’authenticité du message ; garantir l’identité de l’expéditeur.
 3) l’intégrité du message ; garantir qu’il n’a pas été modifié par une tierce personne.
• Principe de Kerckhoffs : « La sécurité d’un système de chiffrement ne doit reposer que sur
  la clé. » Autrement dit : « L’ennemi peut avoir connaissance du système de chiffrement
  (fonction de chiffrement et de déchiffrement mais pas de la clé.»
• Grâce au chiffrement asymétrique, la communication chiffrée est possible sur des réseaux
  informatiques non-sécurisé. Cela permet développer le commerce en ligne (vente en ligne).

________________________________________________________________________________
P.S. / 2021-2022                        1                   Cryptographie_p02 / AMOS
APPLICATIONS DES MATHEMATIQUES - Cryptographie Programmation en Python 3 AMOS / 2021-2022 - Collège Sismondi
2.3.2 Chiffrement symétrique et asymétrique

Définition
 Une méthode de chiffrement est dite symétrique ou encore à clé privée, si elle utilise
 une même clé pour chiffrer et déchiffrer un texte (message).

Schéma            ALICE (l’expéditrice) veut envoyer un texte à BOB (le destinataire) sur
                  un canal non sécurisé. OSCAR est l’opposant (le hacker ou le cryptanalyste).

                                             Transmission de la
                                             clé privée K :

                                         ALICE                         BOB

                                                    OSCAR

             ALICE                                                                 BOB

                                                     Canal
                                                      non
                                                    sécurisé.

Ck et Dk sont bijectives et vérifient :
Ck ( Dk ( y ) )= y= I d ( y )   et   Dk ( Ck ( x ) ) = x = I d ( x )     ∀x ∈ A ∀y ∈ B
Autrement dit, Ck et Dk sont réciproques l’une de l’autre.

Exemple
Le chiffrement par décalage (de César) est un chiffrement symétrique. Il peut être utilisé par
ALICE et BOB que s’ils se sont transmis au préalable la même clé privée qui est un nombre entier
K ∈ {0;1;2;........;24;25} représentant le décalage des lettres de l’alphabet.

Remarques
a) Un chiffrement symétrique présente deux inconvénients majeurs :
   1) la transmission de la clé entre les interlocuteurs que sont ALICE et BOB.
       En effet, la clé qui doit rester totalement confidentielle, doit être transmise au correspondant
       et de façon sûre. Toute interception par OSCAR, détruit la confidentialité de l’échange
       d’information entre ALICE et BOB.
   2) l’authentification par BOB de l’expéditrice qui est ici ALICE.
      Si OSCAR c’est emparé de la clé, il pourrait très bien fabriquer de faux messages ou changer
      subrepticement une partie d’un message intercepté ; l’intégrité du message n’est donc pas
      assuré. Ces falsifications demeurent indétectable pour BOB.

________________________________________________________________________________
P.S. / 2021-2022                        2                   Cryptographie_p02 / AMOS
APPLICATIONS DES MATHEMATIQUES - Cryptographie Programmation en Python 3 AMOS / 2021-2022 - Collège Sismondi
Ces deux inconvénients sont illustrés par la situation concrète suivante :
ALICE (l’expéditrice) communique avec sa banque via internet (e-banking) et donne un ordre
de paiement à son banquier, BOB (le destinataire). Pour que leurs communications restent
confidentielles ils utilisent un système de chiffrement symétrique dont la clé privée est K.

1) ALICE n’habite pas dans la même ville que le siège de la banque ou travaille BOB.
 Pour se transmettre la clé privée K ils doivent se déplacer.
 Il est exclu que BOB envoie la clé privée dans un mail non chiffré ou dans une lettre
 et par la poste à ALICE car OSCAR peut intercepter le mail (ou la lettre) et donc la clé.

 Il est inutile que BOB envoie la clé privée K dans un mail chiffré à ALICE car elle
 ne pourra pas déchiffrer le mail ; elle n’est pas encore en possession de la clé.

2) Supposons qu’OSCAR ait pu intercepter l’ordre de paiement chiffré par ALICE et qu’il
   arrive avec une méthode de cryptanalyse (par exemple la force brute) a obtenir l’ordre
   de paiement en clair et aussi la clé privée K.

  OSCAR décide de modifier le contenu de l’ordre de paiement par exemple, le montant
  ou le nom du destinataire. BOB ne sera pas en mesure de vérifier l’authenticité ou l’intégrité
  du message.
  En l’absence d’une signature de l’expéditeur, ces falsifications demeurent indétectables.

b) Jusqu’à la veille des années 1970, toutes les méthodes de chiffrement étaient symétriques
   et ne possédaient pas de signatures :
   Chiffrement de César, affine, substitution, Vigenère, etc.

________________________________________________________________________________
P.S. / 2021-2022                        3                   Cryptographie_p02 / AMOS
APPLICATIONS DES MATHEMATIQUES - Cryptographie Programmation en Python 3 AMOS / 2021-2022 - Collège Sismondi
Le problème de la transmission des clés et de l’authentification de l’expéditeur été résolu
grâce au chiffrement asymétrique et en particulier grâce au chiffrement RSA dont nous allons
décrire les étapes et les concepts mathématiques en détails dans les pages suivantes.

Définition

 Une méthode de chiffrement est dite asymétrique ou encore à clé publique, si elle utilise
 deux clés : une clé publique pour chiffrer un texte (message) et une autre clé privée pour
 le déchiffrer.
 La clé privée ne doit pas pouvoir être déduite à partir de la clé publique.

Schéma ALICE (l’expéditrice) veut envoyer un texte à BOB (le destinataire) sur
       un canal non sécurisé. OSCAR est l’opposant (le hacker ou le cryptanalyste).

                                                                      BOB génère deux clés.
                        Canal non
                                                                 Clé publique transmise à ALICE
                        sécurisé.
                                                                 Clé privée gardée secrète par BOB

                                                                      Canal sécurisé.

                                                  OSCAR
            ALICE                                                                BOB

                                                   Canal
                                                    non
                                                  sécurisé.
C et D sont bijectives et vérifient :
C ( D ( y ) )= y= I d ( y )   et    D (C ( x )) = x = Id ( x )     ∀x ∈ A ∀y ∈ B
Autrement dit, C et D sont réciproques l’une de l’autre.

Remarques
a) BOB génère deux clefs :
• une clef publique    qu’il diffuse largement (sur internet par exemple) et qui va permettre à
  à ALICE de chiffrer son texte. OSCAR peut lui aussi chiffrer des messages avec la clef publique.
• une clef privée      qu’il conserve et gardée secrète. Cette clef va permettre à BOB de déchiffrer
  le texte chiffré par ALICE ou par une autre personne ayant reçu la clef publique.
Autrement dit, tout le monde peut chiffrer un texte destiné à BOB, mais il est le seul à pouvoir le
déchiffrer.
Il y a une condition cruciale pour que ce système fonctionne : il doit être impossible pour une tierce
personne, par exemple OSCAR, de déduire la clé privée à partir de la clé publique ou à partir du
texte chiffré intercepté.

________________________________________________________________________________
P.S. / 2021-2022                        4                   Cryptographie_p02 / AMOS
APPLICATIONS DES MATHEMATIQUES - Cryptographie Programmation en Python 3 AMOS / 2021-2022 - Collège Sismondi
Le problème de la transmission des clés entre interlocuteurs distant est alors résolu : il n’est pas
nécessaire de se voir au préalable pour partager une unique clé privée. La communication chiffrée
est alors possible sur des réseaux informatiques non-sécurisé. Cela permet développer le commerce
en ligne.

b) OSCAR peut cependant intercepter le texte chiffré par ALICE et envoyé à BOB
   sur le canal peu sûr et le remplacer par son propre texte chiffré (la fonction de chiffrement
   étant publique). OSCAR peut ainsi se faire passer pour ALICE et BOB n’en sera rien.
   L’authenticité comme l’intégrité du message n’est alors pas assurée.
   On peut contourner ce problème grâce au concept d’authentification par signature
   que nous étudierons dans ce chapitre et basé sur le chiffrement RSA.

c) Le système de chiffrement RSA parait résister encore à notre époque aux algorithmes de
   cryptanalyse les plus récents et à la puissance de calculs des supers ordinateurs moyennant
   certaines précautions . Les ordinateurs quantiques avec des « algorithmes quantiques » risquent
   peut-être de faire « tomber » ce chiffrement.

Le principe de Kerckhoffs
Auguste Kerckhoffs von Nieuwenhoff (1835-1903) est un cryptologue militaire
néerlandais.

Le principe de Kerckhoffs s’énonce ainsi :

 «La sécurité d’un système de chiffrement ne doit reposer que sur la clé.»
 Autrement dit :
 « L’ennemi peut avoir connaissance du système de chiffrement
   (fonction de chiffrement et de déchiffrement) mais pas de la clé.»

Ce principe est novateur dans la mesure où intuitivement il semble opportun de dissimuler le
maximum de choses possibles à l’ennemi : clé et système de chiffrement utilisés.
Ce principe se base sur deux constats de Kerckhoffs :
1) le système de chiffrement sera forcément connu un jour ou l’autre de l’ennemi
   (secret vendu par un traître).
2) un système de chiffrement connu de tous sera testé, attaqué, étudié, et finalement
   utilisé s’il s’avère intéressant et robuste.

Question 01

 Quels concepts mathématiques faut-il utiliser pour « construire » deux clés, une privée et une
 publique, dont il n’est pas possible en un temps « raisonnable » de déduire la clé privée à partir
 de la clé publique sachant que le système de chiffrement est connu de tous ?

________________________________________________________________________________
P.S. / 2021-2022                        5                   Cryptographie_p02 / AMOS
APPLICATIONS DES MATHEMATIQUES - Cryptographie Programmation en Python 3 AMOS / 2021-2022 - Collège Sismondi
2.3.3 Le chiffrement RSA
En 1977, trois mathématiciens, Ronald Rivest, Adi Shamir
et Leonard Adleman, inventent un système de chiffrement
asymétrique qui reste le meilleur et le plus utilisé à ce jour :
le système RSA (nommé à partir des initiales des trois auteurs).
Le système RSA contourne les problèmes des chiffrements
symétriques étudiés dans les chapitres précédents comme :
l’échange préalable de la clé privée, la faiblesse de la clé face
aux attaques par force brute, les problèmes d’authentifications, etc.

Introduction
Prenons deux nombres premiers distincts p = 11 et q = 13 .
• Connaissant p et q, il est beaucoup plus rapide de multiplier (développer) ces deux nombres
  et d’obtenir p ⋅ q = 11 ⋅ 13 = 143 = n que connaissant n = 143 de le factoriser et d’obtenir ses
  facteurs p = 11 et q = 13 . Vous pouvez faire l’essai à la main et comparer les temps de calculs.
• Connaître les facteurs p et q du nombre n apporte donc plus d’information utilisable que
  connaître uniquement le nombre n= p ⋅ q .
• L’asymétrie de temps de calcul augmente lorsque les nombres p et q sont de plus en plus grands.
• Le temps de calcul pour factoriser n= p ⋅ q va dépendre de l’algorithme utilisé et de l’ordinateur
  sur lequel on implémente l’algorithme.

En se basant sur cette asymétrie de temps de calculs et d’information, décrivons dans un premier
temps une idée simplifiée du chiffrement RSA :

1) BOB « choisit » deux nombres premiers distincts p et q , très grands qui vont constituer en
   partie sa clé privée qu’il conserve en secret.
  Dans les faits BOB utilise un programme sur un ordinateur afin de générer p et q.

2) BOB multiplie en un temps « raisonnable » avec un ordinateur ces deux nombres p et q et obtient
   un nombre n= p ⋅ q qui est très grand et n’est pas premier. Le nombre n= p ⋅ q est en partie la
   clé publique et il la transmet sans secret à ALICE.

En faisant ce choix, BOB empêche l’opposant OSCAR (et ALICE) de factoriser en un temps
« raisonnable » le nombre n= p ⋅ q (plusieurs centaines de chiffres et produits de deux grands
nombres premiers distincts) et ainsi de retrouver les facteurs p et q qui sont en partie la clé publique
même avec la puissance calculatoire des ordinateurs actuels.

Question 02 (reformulation de la question 01)

 Existe-t-il un système de chiffrement asymétrique qui possède une fonction C de chiffrement
 qui dépend du nombre n= p ⋅ q et une fonction D de déchiffrement qui dépend des nombres
 p et q et qui sont de fait bijectives et réciproques l’une de l’autre ?

________________________________________________________________________________
P.S. / 2021-2022                        6                   Cryptographie_p02 / AMOS
Théorème de RSA (Rivest, Shamir, Adleman)                                                                        (2.18)

 Soit • p et q sont deux nombres premiers distincts tel que n= p ⋅ q
         • d est l’inverse de e modulo ( p − 1) ⋅ ( q − 1)           c-à-d   e ⋅ d ≡ 1 mod ( p − 1) ⋅ ( q − 1)
         • 0 ≤ x < n et 0 ≤ y < n
 Si         C ( x ) = x e mod n et D ( y ) = y d mod n
 Alors      C ( x) = y ⇔ D ( y) =x          ∀ x, y ∈  n

Exemple
Appliquons ce théorème à la cryptographie : ALICE                     (l’expéditrice) veut transmettre un
message (un texte en français, une donnée numérique, etc.) à BOB      (le destinataire) sur un
canal non sécurisé (réseau internet, etc.). OSCAR   est l’opposant (le hacker ou le cryptanalyste).

Le chiffrement RSA se décompose ainsi :

1) BOB construit une clé privée qu’il conserve et une clé publique qu’il diffuse largement :
      1.1) Il « choisit » deux nombres premiers p = 11 et q = 13 .
      1.2) Avec les deux nombres premiers p et q, il calcule n = p ⋅ q = 143 (appelé modulo RSA)
          et le nombre ϕ ( p ⋅ q ) =   ( p − 1) ⋅ ( q − 1) =   120    (ϕ est l’indicatrice d’Euler)

      1.3) Il « choisit » un nombre e = 7 , en général le plus petit possible, tel que :
          1 < e < ϕ ( pq ) et PGCD ( e ;ϕ ( pq ) ) = 1 (appelé l’exposant de chiffrement RSA)
      1.4) Il calcule le nombre d = 103 qui est l’inverse de e modulo ϕ ( pq ) càd 7 ⋅ 103 ≡ 1 mod 120 .
           (appelé l’exposant de déchiffrement RSA)
      1.5) La clef privée est constituée du triplet ( d ; p;q ) = ( 103;11;13 ) et connue que de BOB.
           La clef publique est constituée du couple ( e;n ) = (7 ;143 ) et connue de tous.

2) Pour chiffrer son message clair x , ALICE utilise la fonction C de chiffrement dont les
   paramètres de cette fonction est la clé publique    connue de tous :
      C :n →n
                                                avec     0≤ x
Illustration du chiffrement RSA

                                                                               BOB
                                            Canal non
                                             sécurisé.
                                                                       Clé publique :

                                                                       Clé privée :
                                             OSCAR
                                                                              Canal sécurisé.

        ALICE                                                              BOB

                                              Canal
                                               non
                                             sécurisé.

Remarques

a) La fonction de chiffrement C( e,n ) ( x ) = x mod n et la fonction de déchiffrement
                                                e

  D( d ; p⋅q ) ( y ) = y d mod n sont des fonctions bijectives et réciproques l’une de l’autre.
  Autrement dit : D ( C ( x ) ) = x et    C ( D ( y )) = y   ∀x, y ∈  n

b) La sécurité du système RSA, autrement dit la confidentialité des échanges d’informations
   entre ALICE      et BOB   repose principalement sur deux points :

  1) BOB      doit faire le « choix » de deux nombres premiers distincts p et q très grands.
     La société R.S.A. Data Security recommande des nombres n= p ⋅ q de 1024 bits
     (309 chiffres en base 10) voir 2048 bits (617 chiffres en base 10).
     En faisant ce choix, il empêche OSCAR          (le cryptanalyste) de factoriser le nombre
     n= p ⋅ q et ainsi retrouver les facteurs p et q en un temps « raisonnable » même avec la
     puissance de calculs des ordinateurs actuels et tant que l’on ne découvre pas un algorithme
     rapide pour factoriser les entiers.

     Si OSCAR        arrive a factoriser n et obtenir p et q il peut alors calculer rapidement
     le dernier paramètre de la clé privé c’est-à-dire d tel que e ⋅ d ≡ 1 mod ( p − 1) ⋅ ( q − 1)
     et ainsi utiliser la fonction D de déchiffrement pour déchiffrer les messages d’ALICE           .

     Nous traiterons certaines situations de cryptanalyse du chiffrement RSA en exercice.

________________________________________________________________________________
P.S. / 2021-2022                        8                   Cryptographie_p02 / AMOS
2) BOB      doit absolument garder secret les nombres : p , q , ϕ ( pq ) et d .
    Si OSCAR        le hacker (ou tout autre personne) vole la clé privée
    à BOB      (sur son ordinateur par exemple) il sera aussi en mesure
    de déchiffrer les messages d’ALICE        .
                                                                                                                            Lien vers le
                                                                                                                            documentaire /vidéo :
c) L’authenticité et l’intégrité des messages est-il garanti                                                                «Vous avez été hacké ».
   par le chiffrement RSA ?

  OSCAR          , comme on l’a vu précédemment, peut intercepter le message chiffré
  par ALICE     et envoyé à BOB        sur le canal non sécurisé et le remplacer par
  son propre message chiffré (la fonction de chiffrement étant publique) ou bien le modifier.
 OSCAR           peut ainsi se faire passer pour ALICE                                          et BOB           n’en sera rien.
 L’authenticité et l’intégrité des messages n’est pas encore assurée.
 Cependant, on peut résoudre ce problème grâce au concept d’authentification par signature
 que nous étudierons plus loin dans le cours et basé lui aussi sur le chiffrement RSA.

Démonstration du théorème de RSA

• Par hypothèse nous avons que :
  i) n= p ⋅ q

  ii) e ⋅ d ≡ 1 mod ( p − 1)( q − 1) ⇔ e ⋅ d= k ( p − 1)( q − 1) + 1                                      k ∈
                                          1.5 )                                  ( Alg)
• Si p x alors x ≡ 0 mod p ⇒ x ed ≡ 0 ed mod p ⇒ x ed ≡ 0 mod p d’où                                                    p x e⋅ d
                                                                    1.5 )
  Comme x ≡ 0 mod p et x e⋅d ≡ 0 mod p ⇒ x e⋅d − x ≡ 0 mod p ⇒ p x e⋅d − x

• Si p x alors x p −1 ≡ 1 mod p (voir 2.16 ; le petit thm. de Fermat)
                                  1.5 )                                                          ( Alg)
  D’où : x p −1 ≡ 1 mod p ⇒                 (x )  p −1 k ( q −1)
                                                                   ≡ 1 k ( q −1) mod p ⇒ x k ( p −1)( q −1) ≡ 1 mod p
                                                                                      1.5 )
  Comme x ≡ x mod p et x k ( p −1)( q −1) ≡ 1 mod p ⇒ x ⋅ x k ( p −1)( q −1) ≡ x ⋅ 1 mod p
  ( Alg)                              ( Hyp ii )                                1.5 )
  ⇒ x k ( p −1)( q −1)+1 ≡ x mod p ⇒ x ed ≡ x mod p ⇒ x e⋅d − x ≡ 0 mod p ⇒ p x e⋅d − x

• On constate donc que : p x e⋅d − x et q x e⋅d − x (étapes similaire à p car q est aussi premier)

  De plus par hypothèse nous avons que p et q sont des nombres premiers distincts donc ils sont
  premiers entre eux . Autrement dit : PGCD ( p;q ) = 1

  Les hypothèses du corollaire du théorème de Gauss (voir 2.8) sont satisfaites ce qui implique
                      ( Hyp i )                                                               1.5 )
  que : p ⋅ q x e⋅d − x ⇒ n x e⋅d − x ⇒ x e⋅d − x ≡ 0 mod n ⇒ x e⋅d ≡ x mod n (I)

• Finalement :
                         1.5 )                                       ( Alg)
  Si y ≡ x e mod n ⇒ y d ≡ ( x e ) mod n ⇒ y d ≡ x e⋅d mod n
                                                    d

                                                                              1.5 )
  Ensuite y d ≡ x e⋅d mod n et x e⋅d ≡ x mod n ⇒ x ≡ y d mod n
                                     
                                                           (I )

________________________________________________________________________________
P.S. / 2021-2022                        9                   Cryptographie_p02 / AMOS
Exercice 1
Dans cet exercice, on n’utilisera pas de programme informatique pour résoudre les problèmes.
Considérons la situation suivante :

ALICE        est professeur d’application des mathématiques et BOB          est le gestionnaire
des notes du Collège. Ils communiquent par mail (canal peu sûr). La passion d’OSCAR
qui est un élève d’ALICE est de tester la sécurité des systèmes informatiques.

L’objectif de cet exercice est :
1) de se mettre à la place de BOB et de créé « à la main » un protocole de chiffrement RSA
   c’est-à-dire une clé publique qui permettra à ALICE ou à d’autres enseignants de l’école
   de chiffrer les notes des examens et de les transmettre de manière sécurisée au bureau de
   gestion et une clé privée conservée uniquement par BOB et qui lui permettra de déchiffrer
   les messages.
2) de se mettre à la place d’OSCAR et de tester la sécurité du système de chiffrement RSA
   mis en place par BOB.

Enoncé 1)

BOB       choisit deux nombres premiers distincts
                                             =    p 11
                                                     = et q 17 .
a) Calculer n= p ⋅ q

b) Calculer ϕ ( p ⋅ q ) = ( p − 1)( q − 1)

c) BOB choisit un nombre e = 7
  • Montrer que le PGCD ( e ;ϕ ( pq ) ) = 1 à l’aide de l’algorithme d’Euclide.
  • Expliquer pourquoi BOB n’a pas choisi le nombre e = 8 .
d) En utilisant l’algorithme précédant, en déduire d qui est un des coefficients
   de Bézout des nombres e et ϕ ( pq ) .
e) Donner la clé publique et écrire la fonction de chiffrement C.
   Chiffrer la note x = 5 (le message clair) en utilisant l’algorithme d’exponentiation rapide.
f) Donner la clé privée et écrire la fonction de déchiffrement D.
   Déchiffrer le message y précédemment chiffré en utilisant l’algorithme d’exponentiation rapide.
g) Vérifier que les fonctions C et D sont bijectives et réciproques l’une de l’autre.
   Autrement dit vérifier que : D ( C ( x ) ) = x et C ( D ( y ) ) = y ∀x, y ∈  n

Enoncé 2)

a) OSCAR         qui est en possession de la clé publique ( e;n ) diffusée sans secret veut obtenir
  la clé privée ( d ; p;q ) . Peut-il, en un temps « raisonnable », déchiffrer ou falsifier les messages
  d’ALICE destinés à BOB ?

b) Que doit faire BOB         pour améliorer la sécurité de son chiffrement RSA ?

________________________________________________________________________________
P.S. / 2021-2022                        10                  Cryptographie_p02 / AMOS
Exercice 2
Dans cet exercice, on n’utilisera pas de programme informatique pour résoudre les problèmes.

Considérons la même situation que celle proposée dans l’exercice précédent entre ALICE           ,
BOB       et OSCAR         .

BOB a mis en place un protocole de chiffrement RSA dont le clé publique ( e;n ) = ( 13;253 )
a été transmise sans secret à tous les enseignants du Collège dont ALICE.

Enoncé 1)                                                                Code ASCII
a) En utilisant le code ASCII qui permet de traduire chaque
   caractère d’un message en un équivalent numérique et
   la clé publique, décrire et effectuer toutes les étapes de
   calculs qu’ALICE       doit mettre en place pour chiffrer
   le message clair " 4.5" qui est la note d’OSCAR en
   application des mathématiques.
                                   Fonction       Exponentiation
                        ASCII      chiffrement        rapide
   Par exemple : " 4" → x= 52 → C ( 52 )               =           105

b) OSCAR          qui est en possession de la clé publique
   ( e;n ) diffusée sans secret a aussi intercepté sur le serveur
  de la messagerie de l’école non sécurisé, le message chiffré
  par ALICE contenant sa note.
  • Décrire et effectuer toutes les étapes de calculs
    qu’OSCAR          doit mettre en place pour déchiffrer le message.
    Indication : utiliser l’algorithme d’Euclide et de l’exponentiation rapide.
  • Quelle est la clé privée ?
  • Comment appelle-t-on le travail effectué par OSCAR ?
c) Déterminer la fonction C de chiffrement et la fonction D de déchiffrement.
  Vérifier que les fonctions C de chiffrement et D de déchiffrement sont bijectives
  et réciproques l’une de l’autre.

Enoncé 2)

OSCAR        se rend compte que le système cryptographique mis en place par l’école comporte
trois failles de sécurité et compte en parler à BOB                :
a) la première faille : on obtient très facilement la clé privée ce qui donne accès
   au déchiffrement du message. Pourquoi ? et comment contourner cette première faille ?
b) la deuxième faille : on peut se faire passer pour ALICE au près de BOB.
   Par exemple OSCAR peut falsifier sa note et envoyer la note " 6.0" au lieu de " 4.5"
   sans que BOB ne s’en aperçoive. Pourquoi ? et comment contourner cette deuxième faille ?
c) Quel est la troisième faille surtout exploitable si le message chiffré comporte beaucoup de
   symboles ? Comment contourner cette troisième faille ?

________________________________________________________________________________
P.S. / 2021-2022                        11                  Cryptographie_p02 / AMOS
Exercice 3
Dans cet exercice, on n’utilisera pas de programme informatique pour résoudre les problèmes.

ALICE       est professeur d’application des Mathématiques et discute souvent de cryptographie
avec BOB      qui est le gestionnaire des notes de l’école.
L’école décide d’utiliser un protocole de chiffrement RSA et BOB est responsable de générer :
1) une clé privée ( p;q;d ) avec n = pq qu’il conserve en secret.

2) une clé publique ( e;n ) qui est connue de tous les professeurs et même des élèves.

OSCAR        qui est un élève d’ALICE et passionné de sécurité informatique, intercepte un mail
non-chiffré entre ALICE et BOB dont le contenu est le suivant :

« Chère ALICE, si une personne est en possession de la clé publique ( e;n ) et de
 ϕ ( pq ) =( p − 1)( q − 1) peut-il obtenir rapidement la clé privée ( p;q;d ) ? »

Aidez OSCAR à répondre à la question précédente en effectuant un certain nombre de calculs.

Indication : Résoudre une équation du 2e degré dont l’inconnue est p.

________________________________________________________________________________
P.S. / 2021-2022                        12                  Cryptographie_p02 / AMOS
2.3.4 Authentification par signature RSA
  La cryptographie à clé publique permet également de résoudre le problème de l’authenticité
  et de l’intégrité des informations transmises. Imaginons par exemple qu’ALICE                         possède
  un compte dans une banque administrée par BOB        .
  Elle veut envoyer par mail l’ordre de payer la somme de 100’000 francs à l’un de ses créanciers.
  La banque a deux problèmes à résoudre :
  1) Comment convaincre BOB que c’est bien ALICE qui est l’expéditrice et non pas OSCAR
     (un escroc) qui aurait usurpé l’identité d’ALICE ? Ou encore, comment empêcher qu’ALICE
     nie après coup avoir donné un tel ordre ?
  2) Comment BOB peut-il être sûr que c’est bien 100’000 francs qu’il faut verser à un tel et non
     50’000 francs à tel autre ? Un intrus n’aurait-il pas pu modifier le message ?
  Montrons comment le système de chiffrement RSA permet de résoudre ces problèmes.

  L’idée va être de créer une signature numérique pour chaque message envoyé ; cela revient à
  confirmer que vous en êtes bien l'expéditeur.

  Exemple

  Phase 1 Création d’une double paire de clé privée et publique distinctes et échange des
          clés publiques
    ALICE                                                    BOB
   Clé privée : ( d A ; p A ;q A ) = ( 147;11;23 )         Clé privée : ( d B ; pB ;qB ) = ( 269;13;29 )
                                                             
     Fonction déchiffrement : DA ( x ) = x mod 253           Fonction déchiffrement : DB ( x ) = x mod 377
                                                147                                                     269

   Clé publique : ( eA ;nA ) = ( 3;253 )                   Clé publique : ( eB ;nB ) = ( 5;377 )
                                                             
     Fonction chiffrement : C A ( x ) = x mod 253            Fonction chiffrement : CB ( x ) = x mod 377
                                           3                                                        5

  Phase 2     ALICE crée une signature numérique s du message clair m à l’aide de sa clé privée
  • Le message clair d’ALICE est : m = 4 .
  • La signature du message m = 4 =est : DA ( 4 ) 4=
                                                   147
                                                       mod 253 49 = s (exponentiation rapide)
  • Le couple ( 4 ;49 ) est le message signé.

  Phase 3 ALICE chiffre le message clair m et la signature s à l’aide de la clé publique de BOB
• CB ( 4 ) 4=
=           5
              mod 377 270                        (exponentiation rapide)
• CB ( 49 ) 49
=            = 5
                 mod 377 82                      (exponentiation rapide)
  • Le couple ( 270;82 ) est le message signé et chiffré.

  Phase 4     ALICE envoie le message signé et chiffré sur un canal non sécurisé.
              OSCAR intercepte le message signé et chiffré et décide de le modifier.

• Le message modifié d’OSCAR est :m = 2 .
• OSCAR envoie à BOB le message signé et chiffré : ( 32;82 )
= CB ( 2 ) 2=
            5
              mod 377 32         (exponentiation rapide)

  ________________________________________________________________________________
  P.S. / 2021-2022                        13                  Cryptographie_p02 / AMOS
Phase 5 BOB déchiffre le message et la signature chiffrée à l’aide de sa clé privée
• Supposons qu’OSCAR n’a pas modifié le message d’ALICE et que BOB reçoit : ( 270;82 )
  BOB déchiffre le message signé et obtient : ( 4 ;49 )
  DB ( 270 )= 270 269 mod 377= 4= m            (exponentiation rapide)
  DB ( 82=
         ) 82 269 mod 377
                        = 49
                           = s                 (exponentiation rapide)

• Supposons qu’OSCAR a modifié le message et que BOB reçoit : ( 32;82 )
  BOB déchiffre le message signé et obtient : ( 2;49 )
  DB ( 32 )= 32 269 mod 377= 2= m             (exponentiation rapide)
  DB ( 82=
         ) 82269 mod 377= 49= s                (exponentiation rapide)

Phase 6    BOB effectue une authentification du message reçu à l’aide de la signature
           numérique et de la clé publique d’ALICE
BOB calcule : C A ( s ) =C A ( 49 ) =49 3 mod 253 =4 =m ≠ m =2        (exponentiation rapide)
et obtient le message m .
Le message m est bien celui d’ALICE et la signature s n’est pas celle du message m .

En résumé                                                                             (2.19)

 I) ALICE signe son message avec sa clé privée.
 II) ALICE chiffre son message et sa signature avec la clé publique de BOB.
 III) BOB déchiffre le message reçu avec sa clé privée.
 IV) BOB effectue une authentification du message reçu à l’aide de la signature
     numérique et de la clé publique d’ALICE.

Conclusion

 Soit m un message en clair et s sa signature obtenue avec DA ( m ) = s
 Le message provient d’ALICE si et seulement si C A ( s ) = m .

Remarques
a) La signature numérique s dépend du signataire (clé privée) et du document car DA ( m ) = s .
   Seul le signataire est capable de produire sa signature.
b) N’importe qui est capable de vérifier qu’une signature s est celle d’un signataire car C A ( s ) = m .
   Cette vérification dépend uniquement de la clé publique.
c) Chaque partenaire n'utilise que des clés publiques et sa propre clef privée (secrète),
   qui n'est jamais transmise.
d) Les systèmes de chiffrements modernes utilisés sur Internet comme le RSA, sont asymétriques
   et permettent de signer un message. L’authenticité du message (garantir l’identité de
   l’expéditeur) et l’intégrité du message (garantir qu’il n’a pas été modifié par une tierce
   personne) sont cette fois assuré.

________________________________________________________________________________
P.S. / 2021-2022                        14                  Cryptographie_p02 / AMOS
Exercice 4
Dans cet exercice, on n’utilisera pas de programme informatique pour résoudre les problèmes.
BOB est en possession de la clé publique d’ALICE qui est ( eA ;nA ) = ( 3;253 ) .

BOB reçoit deux messages signés qui sont censés provenir d’ALICE (qui sont déjà déchiffrés) :
1) ( m;s ) = ( 20;103 )                2) ( m;s ) = ( 12;47 )

Quel sont les messages valides ? Justifier chaque réponse.

Exercice 5
Dans cet exercice, on n’utilisera pas de programme informatique pour résoudre les problèmes.
La clé publique d’ALICE qui est ( eA ;nA ) = ( 17;437 ) .

Quel est la signature d’ALICE pour le message m = 100 ?

________________________________________________________________________________
P.S. / 2021-2022                        15                  Cryptographie_p02 / AMOS
2.3.5 Programmes en Python 3 pour le chiffrement RSA
Tous les programmes cités ci-dessous se trouvent dans le fichier : CHIFFREMENT_RSA.py

Rappel : ALICE        (l’expéditrice) veut transmettre un message (un texte en français, une donnée
numérique, etc.) à BOB (le destinataire) sur un canal non sécurisé (réseau internet, etc.).
OSCAR est l’opposant (le hacker ou le cryptanalyste).

Etape 1) BOB doit générer une clef privée et une clé publique.
Il effectue les opérations suivantes en secret sur son ordinateur :

                                                             Algorithme et/ou
 Description des étapes
                                                             Programmes Python 3

 1.1) Il détermine deux nombres premiers distincts           On peut écrire une fonction
                                                             qui génère un nombre premier :
       p et q très grands.
                                                             premier_sup(n)
     La société R.S.A. Data Security recommande des
     nombres n= p ⋅ q de 1024 bits (309 chiffres en          qui utilise le test de primalité :
     base 10) voir 2048 bits (617 chiffres en base 10).      primalité_02(n)
 1.2) Il calcule : n= p ⋅ q
      Il calcule : ϕ ( pq ) =( p − 1)( q − 1)
 1.3) Il détermine un nombre e , en général le plus          pgcd_euclide(a,b)
      petit possible tel que :                               On utilise l’algorithme d’Euclide
      1 < e < ϕ ( pq ) et PGCD ( e ;ϕ ( pq ) ) = 1           pour calculer rapidement le PGCD.

                                                             On peut écrire une fonction qui
                                                             calcule le nombre d :
 1.4) Il calcule l’unique nombre d qui est l’inverse
      de e modulo ϕ ( pq ) : d ⋅ e ≡ 1 mod ϕ ( pq )          inv_mod(a,n)
                                                             qui utilise : pgcd_euclide(a,b)
      On utilise les coefficients de Bézout pour                           coeff_bezout(a,b)
      calculer d .
                                                             L’algorithme d’Euclide est utilisé
                                                             pour calculer rapidement le PGCD
                                                             et les coefficients de Bézout.

                                                             On peut écrire une fonction qui
 1.5) La clef privée est constituée du triplet ( d ; p;q )   génère les deux clés
                                                             ( d ; p;q ) et ( e ;n ) :
     et connue que de BOB.
                                                             CLE_RSA(c)
     La clef publique est constituée du couple ( e ;n )
                                                             qui utilise : premier_sup(n)
     et connue de tous.
                                                                           pgcd_euclide(a,b)
                                                                           inv_mod(a,n)

________________________________________________________________________________
P.S. / 2021-2022                        16                  Cryptographie_p02 / AMOS
Etape 2)

ALICE est en possession de la clé publique ( e ;n ) et veut chiffer son message clair.
En secret sur son ordinateur, elle effectue dans cet ordre :

 2.1) Elle convertit chaque caractère de son message clair
      en une liste de nombres entiers xi par blocs de longueurs                 On peut écrire une fonction
        b ≥ 2 à l’aide du code ASCII. tel que : 0 ≤ xi < n .                    qui effectue se travail :

 Exemples                                                                       TXT_BLOC(texte,b)
 b=1 :                                                                          qui utilise :
                              Code
                             ASCII
 message clair =
               " ESSAI " → blocs clairs =
                                        69                                      ord( )
                                         83
                                            83
                                             ....
                                                  65 73
                                                 x1        x2              x5
                                                                                str( )
 b=2 :
                                Code
                               ASCII
                                                                                %
 message clair =
               " ESSAI *" → blocs clairs =6983
                                           8365
                                                73
                                                   42                          //
                                                      x1        x2        x3

 b=3 :                                                                          eval( )
                                Code
                               ASCII
 message clair =
               " ESSAI *" → blocs clairs =
                                          698383
                                             657342
                                                 
                                                           x1        x2

 2.2) Elle effectue le chiffrement du message clair à l’aide de
      la fonction de chiffrement C qui est bijective :                          On peut écrire une fonction
                                                                                qui effectue ce travail :
         x → C (=
                x ) x e mod=
                           n y
                                                                                exp_rapide(x,k,n)
 Remarques
                                                                                qui utilise :
 • Les nombres yi constituent le message chiffré.
                                                                                %
 • Les paramètres de la fonction de chiffrement sont les deux
   nombres de la clef publique ( e;n ) générée par BOB.                         //
 • On utilise l’algorithme d’exponentiation rapide pour
   calculer x e mod n .

 2.3)                                                                           On peut écrire une fonction
                                                                                qui effectue d’abord la
                                                                                conversion par bloc d’un
                                                                                texte puis le chiffrement
                                                                                RSA :
                                                                                TXT_RSA(texte,b,k,n)
                                                                                qui utilise :
                                                                                TXT_BLOC(texte,b)
                                                                                exp_rapide(x,k,n)

________________________________________________________________________________
P.S. / 2021-2022                        17                  Cryptographie_p02 / AMOS
Etape 3)

Le message y, chiffré par ALICE, transite via un canal non sécurisé et peut-être
intercepté par OSCAR. Il ne doit pas pouvoir déchiffrer le message y.
La sécurité du système de chiffrement RSA repose sur le fait que OSCAR n’arrivera
pas a factoriser n= p ⋅ q et obtenir p et q en un temps « raisonnable » même avec
la puissance de calculs des ordinateurs actuels et tant qu’il ne découvre pas un
algorithme rapide pour factoriser les entiers.

 3.1) Pour factoriser un nombre n= p ⋅ q qui est le produit       On peut écrire une fonction
      de deux nombres premiers distincts on peut utiliser         qui effectue ce travail :
      l’algorithme qui consiste à déterminer tous les diviseurs
      d’un entier n . On obtient donc D ( n ) = {1; p;q; pq}      ens_div_02(n)
     Pour obtenir ce résultat on a testé :                        qui utilise :
     ∀i ∈  ∗ tel que 1 ≤ i ≤ n on a que i n .                    math.sqrt(n)

 3.2) On peut améliorer l’algorithme précédant en constatant
      que les diviseurs d’un nombre n= p ⋅ q qui est le produit   On peut écrire une fonction
                                                                  qui effectue ce travail :
      de deux nombres premiers p et q distincts n’a que
      des diviseurs impairs. Il suffit de vérifier parmi
                                                                  ens_div_impair(n)
      les nombres impairs lesquels sont des diviseurs de n.
                                                                  qui utilise :
     Pour obtenir ce résultat on a testé :
     ∀ i ∈  ∗ et i impair tel que 1 ≤ i ≤ n on a que i n .       math.sqrt(n)

________________________________________________________________________________
P.S. / 2021-2022                        18                  Cryptographie_p02 / AMOS
Etape 4)

BOB en possession de sa clé privée ( p;q;d ) va déchiffrer le message chiffré
par ALICE. En secret sur son ordinateur, il effectue dans cet ordre :

 4.1) Il effectue le déchiffrement du message chiffé à l’aide
      de la fonction de déchiffrement D qui est bijective :
                                                                 On peut écrire une fonction
        D : y → D (=
                   y ) y mod=
                            n x      d
                                                                 qui effectue ce travail :

 Remarques                                                       exp_rapide(x,k,n)
 • Les nombres xi constituent le message clair.                  qui utilise :
 • Les paramètres de la fonction de déchiffrement sont les       %
   trois nombres de la clef privée ( p;q;d ) générée par BOB.
                                                                 //
 • On utilise l’algorithme d’exponentiation rapide pour
   calculer y d mod n .
 • D ( C ( x ) ) = x et C ( D ( y ) ) = y ∀x, y ∈  n

 4.2) Le message clair obtenu est écrit comme une liste de
      nombres entiers xi par blocs de longueurs b ≥ 2 .
      Il faut « casser » les blocs et à l’aide du code ASCII
      retrouver chaque caractère du message clair .

 Exemples                                                        On peut écrire une fonction
                                                                 qui effectue se travail :
 b=1 :
                                                         Code
                                                        ASCII    BLOC_TXT(L)
 blocs clairs
           = 69
               83
                 83    65 73
                            → message clair
                                          = " ESSAI"
                   ....
                x1         x2                      x5
                                                                 qui utilise :
 b=2 :
                                                         Code    str( )
                                                        ASCII
 blocs clairs
           = 69
               83 8365
                    7 342 → message clair
                                         = " ESSAI *"            //
                 x1             x2            x3

 b=3 :
                                                    Code
                                                   ASCII
 blocs clairs= 698383
               
                  657342
                       → message clair= " ESSAI * "
                      x1                 x2

                                                                 On peut écrire une fonction
 4.3)                                                            qui effectue d’abord le
                                                                 déchiffrement RSA puis
                                                                 la conversion des blocs en
                                                                 texte :

                                                                 RSA_TXT(L,k,n)
                                                                 qui utilise :
                                                                 exp_rapide(x,k,n)
                                                                 BLOC_TXT(L)

________________________________________________________________________________
P.S. / 2021-2022                        19                  Cryptographie_p02 / AMOS
Exercice 6

Résoudre cet exercice en vous aidant des programmes contenus dans le fichier :
CHIFFREMENT_RSA.py

a) Ci-dessous on donne 4 paires de clés publiques et privées du chiffrement RSA.
  1) Clé privée : ( d ; p;q ) = ( 1321;31;67 )           Clé publique : ( e;n ) = ( 661;2043 )

  2) Clé privée : ( d ; p;q ) = ( 29199;211;431)         Clé publique : ( e;n ) = ( 101;90941)

  3) Clé privée : ( d ; p;q ) = ( 472001;1203;2411)      Clé publique : ( e;n ) = ( 4001;2895611)

  4) Clé privée : ( d ; p;q ) = ( 4563217;1511;3023 ) Clé publique : ( e;n ) = ( 6;4567753 )

  Quels sont les paires de clés correctes ? Justifier.
  Dans le cas où la paire de clé n’est pas correcte modifiez-la afin qu’elle corresponde
  au protocole RSA. Il y a au plus une erreur.

b) Comprendre et expliquer brièvement chaque partie (ligne de code) du programme Python 3 :
  CLE_RSA(c)

c) Calculer le temps nécessaire à votre ordinateur pour obtenir CLE_RSA(c) avec :
   1) c = 1015                           2) c = 1016                     3) c = 1017
   4) c = 1018                           5) c = 1019                     6) c = 10 20

  Rappel         En Python 3 on peut calculer le temps d’exécution d’un programme
                 à l’aide des commandes suivantes :
                    import time as tm

                    t1= tm.perf_counter()
                    …….
                    ……. (programme)
                    …….
                    t2= tm.perf_counter()
                    print("Temps d'exécution=",t2-t1,"secondes")

________________________________________________________________________________
P.S. / 2021-2022                        20                  Cryptographie_p02 / AMOS
Exercice 7

Résoudre cet exercice en vous aidant des programmes contenus dans le fichier :
CHIFFREMENT_RSA.py

a) Comprendre et expliquer brièvement chaque               Code ASCII
   partie (ligne de code) du programme Python 3 :
  TXT_BLOC(texte,b)

b) Tester le programme ci-dessus avec :
  1) texte = « ELEVE » et         b=1
  2) texte = « ELEVE » et         b=2
  3) texte = « ELEVE » et         b=3
  4) texte = « ELEVE » et         b=4

c) Considérons un système de chiffrement RSA constitué des deux clés valides suivantes :
  Clé privée : ( d ; p;q ) = ( 10357;71;149 ) Clé publique : ( e;n ) = ( 3453;10579 )

 Chiffrer, à l’aide de la clé publique ci-dessus, les nombres des listes suivantes :

  1) L = [69, 76, 69, 86, 69]
  2) L = [6976, 6986, 6942]
  3) L = [697669, 866942]
  4) L = [69766986, 69424242]

d) Pour quelle(s) valeur(s) de b a-t-on effectué un chiffrement mono-alphabétique ?
  Quel est le risque de ce genre de chiffrement ?

e) Pour quelle(s) valeur(s) de b a-t-on effectué un chiffrement par bloc ?
   Est-il plus efficace qu’un chiffrement mono-alphabétique ?

________________________________________________________________________________
P.S. / 2021-2022                        21                  Cryptographie_p02 / AMOS
Exercice 8

Résoudre cet exercice en vous aidant des programmes contenus dans le fichier :
CHIFFREMENT_RSA.py

a) Comprendre et expliquer brièvement chaque partie (ligne de code) du programme Python 3 :
  ens_div_impair(n)

b) Calculer le temps nécessaire à votre ordinateur pour obtenir :
  1) le produit de p = 71 avec q=149 .
  2) l’ensemble des diviseurs de n = p ⋅ q = 71 ⋅ 149 = 10579 .
  3) Comparer les temps d’exécutions. Que constatez-vous ?

c) Calculer le temps nécessaire à votre ordinateur pour obtenir :
  1) le produit p = 10000000000000061 avec q=20000000000000129 .
  2) l’ensemble des diviseurs de n = p ⋅ q = 10000000000000061⋅ 20000000000000129 .
  3) Comparer les temps d’exécutions. Que constatez-vous ?

d) ALICE est professeur d’application des Mathématiques et discute souvent de cryptographie
   avec BOB qui est le gestionnaire des notes de l’école.
   L’école décide d’utiliser un protocole de chiffrement RSA et BOB est responsable de générer :
   • une clé privée ( d ; p;q ) qu’il conserve en secret.
   • une clé publique   ( e;n ) = ( 101;1427247692705959880439315947500961989719490561)
     qui est connue de tous les professeurs et même des élèves.
   OSCAR qui est un élève d’ALICE et passionné de sécurité informatique, entend
   dans les couloirs une discussion entre ALICE et BOB dont le sujet sont les nombres
   de Mersenne premiers (voir Wikipédia).

  1) Expliquer pourquoi, cette information va permettre à OSCAR de connaître la clé privée
    ( d ; p;q ) que BOB garde pourtant secrète et ainsi de rendre obsolète le protocole de
     chiffrement RSA mis en place par l’école.

  2) En écrivant un programme Python 3 ou en utilisant des programmes Python 3 déjà écrits,
     déterminer la clé privée ( d ; p;q ) utilisée.

Nom du fichier : ex_8__cryptanalyse_Mersenne

________________________________________________________________________________
P.S. / 2021-2022                        22                  Cryptographie_p02 / AMOS
Exercice 9

Résoudre cet exercice en vous aidant des programmes contenus dans le fichier :
CHIFFREMENT_RSA.py

a) Considérons le chiffrement RSA constitué des deux clés valides suivantes :
  Clé privée : ( d ; p;q ) = ( 10357;71;149 ) Clé publique : ( e;n ) = ( 3453;10579 )

 Déchiffrer, à l’aide de la clé privée ci-dessus, les nombres des listes suivantes :

  1) L = [7213, 4740, 7213, 2139, 7213]
  2) L = [8294, 340, 3500]
  3) L = [7139, 5426]
  4) L = [6476 , 121]
                                                           Code ASCII
b) Comprendre et expliquer brièvement chaque
   partie (ligne de code) du programme Python 3 :
   BLOC_TXT (L)

   Tester le programme ci-dessus avec :
   1) L = [69, 76, 69, 86, 69]
   2) L = [6976, 6986, 6942]
   3) L = [10034, 10043]
   4) L = [9060, 4844]

c) Expliquer pourquoi BLOC_TXT ([9060, 4844]) ne donne pas en sortie la chaîne
   de caractère "ELEVE" mais plutôt "Z
Exercice 10

Résoudre cet exercice en vous aidant des programmes contenus dans le fichier :
ex_CHIFFREMENT_RSA.py

ALICE (cliente d’une banque) veut transmettre le message clair m à BOB (banquier) sur un canal
non sécurisé. Ils décident d’utiliser le chiffrement RSA et créent chacun une paire de clé privée
et publique distinctes.
                               Clé privée : ( d A ; p A ;q A )     Clé publique : ( eA ;nA )
                                                                    
La paire de clé d’ALICE est :                                     
                                   Fonction déchiffrement : DA
                                                                    Fonction chiffrement : C A
                                                                    

La paire de clé de BOB est :      Clé privée : ( d B ; pB ;qB )
                                                                   Clé publique : ( eB ;nB )
                                                                    
                                                                   
                                   Fonction déchiffrement : DB
                                                                    Fonction chiffrement : CB
                                                                    

De plus, chaque message envoyé par ALICE sera signé numériquement selon le procédé suivant :

 Soit m un message en clair et s sa signature obtenue avec DA ( m ) = s
 Le message provient d’ALICE si et seulement si C A ( s ) = m .

a) Admettons qu’ALICE
              =         choisisse nA 200000850000893
                                      =              ; d A 120000492000497
   et que BOB
            = choisisse pB 100000007
                             =        ; qB 200000033
                                            =         ; eB 3 .

  1) Quelle est la clé publique et privée d’ALICE ?

  2) Quelle est la clé publique et privée de BOB ?

  ALICE veut verser sur le compte de CHARLES la somme de 1000 francs. ALICE doit donc
  envoyer le message en clair m = " MILLEFRANCS " à BOB pour qu’il valide la transaction.

 3) Convertir le message en clair m en 3 blocs de longueurs b = 4 à l’aide du code ASCII
    et signer chacun des blocs avec la clé privée d’ALICE.
    Autrement dit : ( mbloc1 ;sbloc1 ) , ( mbloc 2 ;sbloc 2 ) , ( mbloc3 ;sbloc3 )

 4) Chiffrer à l’aide de la clé publique de BOB chacun des blocs (message en clair)
    et la signature de chacun des blocs.
    Ces informations seront envoyées par ALICE à l’attention de BOB sur un canal non sécurisé.

 5) Déchiffrer à l’aide de la clé privée de BOB les blocs chiffrés et la signature chiffrée de chacun
    des blocs.

 6) Vérifiez l’authenticité du message reçu par BOB à l’aide de la clé publique d’ALICE.
    Indication : vous pouvez écrire un programme Python 3 pour vous aider dans cette tâche.

b) BOB reçoit un message m possédant une signature s : ( m;s ) = (78698570;147014127544948 )
   1) Quel est le texte en français correspondant au message m ?
   2) Ce message m a-t-il été envoyé par ALICE ? Justifier.

Nom du fichier : ex_10_signature_RSA.py

________________________________________________________________________________
P.S. / 2021-2022                        24                  Cryptographie_p02 / AMOS
2.3.6 Attaque de l’homme du milieu (Man-in-the Middle
      Attack)
On a étudié précédemment le système de chiffrement RSA qui garantit à la fois confidentialité,
authenticité et intégrité. Malheureusement il existe une attaque qui détruit ses trois propriétés de
sécurité de n'importe quelle communication ; c'est l'attaque qu'on appelle l'attaque de l'homme au
milieu ou man in the middle attack. Comme son nom l'indique le principe de cette attaque est de
se positionner entre les deux participants de la communication afin de pouvoir non seulement
écouter les communications mais aussi intercepter n'importe quelle communication c’est-à-dire
contrôler le canal pour décider ce qui passe et ce qui ne passe pas sur le canal.

Nous allons maintenant décrire les étapes de cette attaque :

• ALICE (l’expéditrice) possède une clé privée ( d A ; p A ;q A ) et une clé publique ( eA ;nA ) .
  BOB (le destinataire) possède aussi une clé privée ( d B ; pB ;qB ) et une clé publique ( eB ;nB ) .

• OSCAR (l’opposant ou l’homme au milieu) est située entre ALICE et BOB et toutes les
 communications passe par lui.

                                               OSCAR

         ALICE                                                                        BOB

                                                 Canal non
                                                  sécurisé.

• ALICE envoie un message à BOB pour lui demander sa clé publique c’est-à-dire : ( eB ;nB ) .

• OSCAR reçoit le message et décide de le laisser passer.
• BOB reçoit le message et envoie sa clé publique ( eB ;nB ) en réponse.

• OSCAR intercepte ce message et cette fois décide de le bloquer pour le modifier.
• OSCAR crée aussi une clé privée ( dO ; pO ;qO ) et une clé publique ( eO ;nO ) .

• L'étape cruciale est la suivante : OSCAR remplace la clé publique de BOB ( eB ;nB )
  par sa propre clé publique ( eO ;nO ) . Il envoie ensuite le message à ALICE.

• ALICE n’a aucune idée que le message a été modifié et crois que ( eO ;nO ) est la clé publique
  de BOB.

________________________________________________________________________________
P.S. / 2021-2022                        25                  Cryptographie_p02 / AMOS
Vous pouvez aussi lire