Aller au contenu

SĂ©curisation des communications

DĂ©couverte⚓

Lors de l'envoi d'un paquet, via le protocole HTTP, les routeurs successifs peuvent aisément accéder aux contenus envoyés. DÚs lors il peuvent les lire, voire les modifier.

L'envoi d'informations sensibles, et le respect de la vie privée, ne sont donc pas compatibles avec ce protocole. La solution est de chiffrer les données, mais il n'est pas facile de le faire en respectant deux conditions :

Mon info

  • Le chiffrement doit ĂȘtre fiable, un tiers ne dois pas pouvoir dĂ©coder l'information.
  • le chiffrement doit ĂȘtre suffisamment rapide pour ne pas ralentir les flux de donnĂ©es.

Le chiffrement

Nous allons Ă©tudier les principes du

  • chiffrement symĂ©trique
  • chiffrement asymĂ©trique
Vocabulaire déchiffrer ? décrypter ?
  • Chiffrer : il s’agit de rendre un document illisible avec une clef de chiffrement
  • DĂ©chiffrer : il s’agit de rendre lisible un document chiffrĂ©, en ayant connaissance de la clef de chiffrement
  • Crypter : cela n’existe pas
  • DĂ©crypter : il s’agit de rendre lisible un document chiffrĂ©, sans avoir connaissance de la clef de chiffrement
  • Cryptologie : il s’agit de la science du secret

I. Exemples de chiffrements symĂ©triques⚓

1. Le chiffrement de CĂ©sar⚓

Le chiffrement de CĂ©sar

Nous pouvons appeler "clé" le décalage decalage de cet exercice.

Question

La connaissance de cette clé permet-elle de déchiffrer un message chiffré ?

Solution

Pour dĂ©chiffrer, il suffit d'utiliser le mĂȘme procĂ©dĂ© avec la clĂ© opposĂ©e, par exemple -4 si on a chiffrĂ© avec 4.

2. Le chiffrement avec xor⚓

xor

Une méthode, qui est encore utilisée de nos jours dans des algorithmes plus complexes, est d'utiliser une propriété de xor (ou exclusif).

a xor b est vrai Ă©quivaut Ă  seulement a est vrai ou seulement b est vrai, mais pas les deux (c'est pour cela que cela s'appelle le ou exclusif), et se note xor.

Voici la table de vérité de xor :

a b a xor b
T T F
T F T
F T T
F F F

retrouver a si on connait b et a xor b

Si on connait b et a xor b on peut retrouver a.
En effet, regardons les 3 derniĂšres colonnes du tableau ci-dessous.
La premiĂšre et la derniĂšre colonne du tableau sont identiques donc b xor (a xor b) est Ă©quivalent Ă  a .
Si on connait b et a xor b, nous pouvons donc trouver a en faisant b xor (a xor b).

a b a xor b b xor (a xor b)
T T F T
T F T T
F T T F
F F F F

Exemple

Nous allons chiffrer "a" : (code 97) par xor avec la clé "n" (code 110)

En binaire sur 8 bits : \(97_{10} = (01100001)_2\) et \(110_{10} = (01101110)_2\)

Effectuons \(97_{10}\) xor \(110_{10}\) bit Ă  bit avec les encodages binaires sur 8 bits.

\(97_{10}\) 0 1 1 0 0 0 0 1
XOR \(110_{10}\) 0 1 1 0 1 1 1 0
\(97_{10}\) xor \(110_{10}\) = 0 0 0 0 1 1 1 1

Remarquons que \(1111_2=15_{10}\)

Pour la transformation inverse :

\(97_{10}\) xor \(110_{10}\) 0 0 0 0 1 1 1 1
XOR \(110_{10}\) 0 1 1 0 1 1 1 0
\((97_{10}\) xor \(110_{10})\) xor \(110_{10}\) = 0 1 1 0 0 0 0 1

La derniĂšre ligne du deuxiĂšme tableau nous redonne bien l'encodage binaire de \(97_{10}\).
Nous allons donc utiliser ces propriétés pour réaliser des chiffrements et déchiffrements.

xor bit Ă  bit en Python

xor est effectué par ^ en Python.
⚠ il faut Ă©crire les nombres en dĂ©cimal ! (ce qui nous arrangera pour le chiffrement par
xor**)

Tester

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

3. Une fonction de chiffrement avec xor⚓

Activité de masque jetable

On considĂšre la variable suivante : masque = "CETTEPHRASEESTVRAIMENTTRESTRESLONGUEMAISCESTFAITEXPRES"

  • CrĂ©er une fonction chiffre(message, masque) qui chiffre message de type str en faisant un xor avec masque Ă©galement de type str. On garantit que la longueur de message est infĂ©rieure ou Ă©gale Ă  celle de masque (54)
  • Cette fonction doit pouvoir aussi servir Ă  dĂ©chiffrer le message chiffrĂ©.

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier
Évaluations restantes : 5/5

.128013Eg[ r;)/(loUF4,6Ib=a+5utMP7Ve-h0TmnCkXi^:SNqy1cd328_wvLpfHORA]Gs050W0D0y0u0N0k0:0e0V0k0u0:0:0t010y0N0(010406050:0x0I0I0u0f0T040Q0l0k0x140l0J050i1b1d1f1h190(04051x1q1A0i1x190W0N0$0|0~10120~0J0c0x0u0c0D0E0(0T0y0F1o0e0F0N0c0F0k1$0F0y17050@0s0k0D1J0 11011#1%1)1%0y1/1;1-0y0f1y1X0|1k0:0(0u0J120Y011?1L010)0_0D0J0u0I0D1-282a2f1^2i1;2l2n170a0e0A0f0l0(0l0:0N1n0J0e0=260f0f0D0V2I1q2q0J1y0i1X2V2224231.0W2s1M0N0J2k2F1-1G1I0}1@2)2+0J0l2/1-0(2O1y2T2V2 1a292J2;2g2^0f1e0k1-0u1!2O0)12030!0!0V2_0D1)2@0l0E0G0E0U170U1q0u303318322r351^37393b3d0D3f013h3j3l3n2,3q0E2d040Y3w3y2a3A2T2(013F0u3a1y3c0F3e3g3i3k0=3P2^3R0X170X3W2S3z193!3D123%3)053+3-3L3/3O2*3Q3r0o170o3{1r3}3B341K3E0l383(3H3,3J3.3N3;4a3?3r0w170w4g2 3~333#424q463M3:3m4w3p3r0q170q4C4i3 4l414n3G3*3I3K4K493o3R0B170B4T3Y4E3C4W3$4Y4p4!4r4$484v4)3r0Z170Z4.2U1B2}1q2/2Y0W242%40014L2.1H1y2|0D2~3z3|3Y054L5l2r0N0W123i2T3R3t4!5t5v4u4M4~3s2e2w0D5C4L3=4O5G2V3x4j4G171e0:0S0x0D5n2U0e5R5d0l170t5Z045#4V2=010:3T025W0l0y0g0K0b0H0H0b0A0*0,0-0Q0b0b0Q0H0C620r0z0b0R5}0,660H6g0Q0%0+0R0/0m0b0z0-0r0Q5{670n6s5~0M0A6j5?0x5^0g5+194h5o3!5B015w333R3T440e6M4|5E4b3S5H2m5J6N5D5M6Q1-0i3x6I316L5u6$5x3r3^5A6:6V6(6?6Z2n5K4(6X6@3{5.2g0L170=0)5+5-4F5d0J0)170V1#0)0)2O5+5$4=16040j7m743E5T0D101R5Y6J547t127p0p7a7n5/0J5T0 5W7z6.7c7o170h0P6H7s4F6U0!6=0E4d6^6 4}6X4d0e5I7%6W4x7!6*3x0e7?7b4;7I7v7x1S3j7i7k7N3z7^4k5/5(045*7A5,7H2g5;176D6F8f5_7U895R7X7Z4z7$6$5L4N3R4z7+6!7-6{0E8o3W7@833#76040)4n7G7C3$170N8J7P850#8M1p898D7d0s170f2a1S7V7_2g7p7r8k8K0J8X042v8$848(178*7O8%7u042n7|816K8P8?040h7S8j8_2J8m6P4P3H7X8r5F4Q8v6~8q707/4Q5P5,8C7@8b8{1;1~2O7~0N7j2O8 5!9r1286882 8V4=8-7g3,8;3#8)9M8W174n0W9P7Q7q9U7`8|7w0:7y9X920d9%8{8N8+911^7p0.0h8O8`9D170O9?8=3E8.9S9*7D8@a08L8|7L5Xa37p9)9-9@a49,979N179;9=896-5m6/5C7Z4+8p6`8s3r4+9h6#as5Faq8B9p7?9Ca48}9#7}7h9x809{3#9EaM7d7{aH0D9w9y9A8a8K860vaP9I179t22aTaJaVaWal905s6_7Y9a0E50ar6%ata@6}axa`5Fa^aBaD8K8F2O0y0x0f8T9GaE7J9Z8~aUaLak7m0i5q555k575h1q0y5abq2#2W0u1:bn0i586I0=0@0_0:04.
Astuce

La fonction ord permet de renvoyer le code ASCII d'un caractÚre. La fonction chr fait l'opération inverse.

Python
>>> ord('A')
65
>>> chr(65)
'A'

II. Le chiffrement symĂ©trique⚓

La mĂȘme clĂ©

Dans un chiffrement symĂ©trique, c'est la mĂȘme clĂ© qui va servir au chiffrement et au dĂ©chiffrement.

image

1. Qu'appelle-t-on une clĂ© ?⚓

Qu'est-ce qu'une clé ?

La clĂ© est un renseignement permettant de chiffrer ou dĂ©chiffrer un message. Cela peut ĂȘtre :

  • un nombre (dans un simple dĂ©calage des lettres de l'alphabet, comme le chiffre de CĂ©sar)
  • une phrase (dans la mĂ©thode du masque jetable)
  • une image (imaginez un chiffrement oĂč on effectue un XOR par les pixels d'une image)

Chiffrement symétrique

Un chiffrement est dit symétrique lorsque la connaissance de la clé ayant servi au chiffrement permet de déchiffrer le message. Par exemple, Alice chiffre son message en décalant les lettres de 3 rangs vers la droite dans l'alphabet, Bob saura qu'il doit les décaler de 3 rangs vers la gauche pour retrouver le message initial.

2. Quel est l'avantage d'un chiffrement symĂ©trique ?⚓

Avantages

Les chiffrements symétriques sont souvent rapides, consommant peu de ressources et donc adaptés au chiffrement de flux important d'informations.

Comme nous le verrons, la sécurisation des données transitant par le protocole https est basée sur un chiffrement symétrique.

3. Quel est l'inconvĂ©nient d'un chiffrement symĂ©trique ?⚓

Inconvénients

La clé ! Si Alice et Bob ont besoin d'utiliser un chiffrement pour se parler, comment peuvent-ils échanger leurs clés puisque leur canal de transmission n'est pas sûr ?

Le chiffrement symétrique impose qu'Alice et Bob aient pu se rencontrer physiquement au préalable pour convenir d'une clé secrÚte, ou bien qu'ils aient réussi à établir une connexion sécurisée pour s'échanger cette clé.

4. Un chiffrement symĂ©trique est-il un chiffrement de mauvaise qualitĂ© ?⚓

Pas du tout ! S'il est associĂ© naturellement Ă  des chiffrements simples et faibles (comme le dĂ©calage de CĂ©sar), un chiffrement symĂ©trique peut ĂȘtre trĂšs robuste... voire inviolable.

C'est le cas du masque jetable. Si le masque avec lequel on effectue le XOR sur le message est aussi long que le message, alors il est impossible de retrouver le message initial. Pourquoi ?

Imaginons qu'Alice veuille transmettre le message clair "LUNDI". Elle le chiffre avec un masque jetable (que connait aussi Bob), et Bob reçoit donc "KHZOK". Si Marc a interceptĂ© le message "KHZOK", mĂȘme s'il sait que la mĂ©thode de chiffrement utilisĂ©e est celle du masque jetable (principe de Kerckhoffs), il n'a pas d'autre choix que de tester tous les masques de 5 lettres possibles. Ce qui lui donne \(26^5\) possibilitĂ©s (plus de 11 millions) pour le masque, et par consĂ©quent (propriĂ©tĂ© de bijectivitĂ© du XOR) \(26^5\) possibilitĂ©s pour le message «dĂ©chiffré»...

Cela signifie que Marc verra apparaĂźtre, dans sa tentative de dĂ©chiffrage, les mots "MARDI", "JEUDI", "JOUDI", "STYLO", "FSDJK", "LUNDI, "LUNDA"... Il n'a aucune possibilitĂ© de savoir oĂč est le bon message original parmi toutes les propositions (on parle de sĂ©curitĂ© sĂ©mantique).

Principe de Kerckhoffs

la sĂ©curitĂ© d'un systĂšme de chiffrement ne doit reposer que sur la sĂ©curitĂ© de la clĂ©, et non pas sur la connaissance de l'algorithme de chiffrement. Cet algorithme peut mĂȘme ĂȘtre public (ce qui est pratiquement toujours le cas).

5. Quels sont les chiffrements symĂ©triques modernes ?⚓

L'algorithme de chiffrement symétrique le plus utilisé actuellement est le chiffrement AES, pour Advanced Encryption Standard.

  • chiffrement par bloc de 128 bits, rĂ©partis dans une matrice de 16 octets (matrice carrĂ©e de taille 4).
  • ces 128 bits sont transformĂ©s par des rotations, multiplications, transpositions, [...] de la matrice initiale, en faisant intervenir dans ces transformations une clĂ© de 128, 192 ou 256 bits.
  • pour l'AES-256 (avec une clĂ© de 256 bits), l'attaque par force brute nĂ©cessiterait \(2^{256}\) opĂ©rations, soit un nombre Ă  78 chiffres...
  • il n'existe pas d'attaque connue efficace Ă  ce jour. Les seules attaques sont des attaques sur des faiblesses d'implĂ©mentation, ou par canal auxiliaire.

III. Chiffrement asymĂ©trique⚓

Présentation

Inventé par Whitfield Diffie et Martin Hellman en 1976, le chiffrement asymétrique vient résoudre l'inconvénient essentiel du chiffrement symétrique : le nécessaire partage d'un secret (la clé) avant l'établissement de la communication sécurisée.

supposons qu'Alice envoie un message crypté à Bob. Sans la clef, Bob ne peut le lire. Et si on lui envoie la clef, un tiers malveillant risque de l'intercepter, rendant nos efforts de cryptage inefficaces !

1. Principe du chiffrement asymĂ©trique⚓

Alice veut envoyer un message chiffrĂ© Ă  Bob. Bob crĂ©e deux clĂ©s, une clĂ© de chiffrement qu’il rend publique et une clĂ© de dĂ©chiffrement qui reste privĂ©e (uniquement en possession de Bob). Alice rĂ©cupĂšre la clĂ© publique de Bob et peut chiffrer ses messages pour Bob. Seul Bob, qui possĂšde la clĂ© privĂ©e, peut les dĂ©chiffrer.

đŸ‘© ➡🧑 Donc si Alice veut envoyer un message Ă  Bob, elle chiffre son message avec la clĂ© publique de Bob.

đŸ‘©â†”đŸ§‘ Si les Ă©changes se font dans les deux sens par chiffrement asymĂ©trique, Alice crĂ©e elle aussi deux clĂ©s, une clĂ© de chiffrement publique, que Bob utilise pour chiffrer les messages et une clĂ© de dĂ©chiffrement privĂ©e qui reste en sa possession.

Dans le schéma suivant réalisé par Gilles LASSUS, Bob veut envoyer un message à Alice

asymétrique

2. PrĂ©requis d'arithmĂ©tique modulaire⚓

a. Les congruences⚓

Exemple

Il est 22h, quelle heure sera-t-il 8h plus tard ?

Si vous avez répondu 6h (et pas 30h à la question précédente), vous venez de faire de l'arithmétique modulaire, en effet vous n'avez conservé que le reste dans la division euclidienne par 24:
\(30 = 1 \times 24 + 6\) on Ă©crira que \(30 \equiv 6 [24]\) et on lira \(30\) est Ă©gal Ă  \(6\) modulo \(24\) ou \(30\) est congru Ă  \(6\) modulo \(24\)

VĂ©rifions que \(53 \equiv 5 [24]\). En effet \(53 = 2 \times 24 + 5\)

Question

a. Compléter \(103 \equiv \dots [24]\)

b. Compléter : \(13 \equiv \dots [5]\)

c. Compléter : \(42 \equiv \dots [7]\)

Solution

a. \(103 \equiv 7 [24]\) car \(103 = 4 \times 24 + 7\)

b. \(13 \equiv 3 [5]\) car \(13 = 2 \times 5 + 3\)

c. \(42 \equiv 0 [7]\) car \(42 = 6 \times 7 + 0\)

b. Nombres premiers et nombres premiers entre eux.⚓

Nombres premiers

Rappeler la définition d'un nombre premier. Les nombres suivants sont-ils premiers (justifier) : 12, 21, 29, 1 ?

Solution

Un nombre premier est un nombre qui a exactement deux diviseurs : 1 et lui mĂȘme

  • 12 n'est pas premier car en plus de 1 et 12, il a aussi comme diviseur par exemple 2
  • 21 n'est pas premier car en plus de 1 et 21, il a aussi comme diviseur par exemple 3
  • 29 est premier, il n'a que 1 et 29 comme diviseurs
  • 1 n'est pas premier : il n'a qu'un seul diviseur : 1

Nombres premiers entre eux

On dit que deux nombres sont premiers entre eux lorsque leur PGCD vaut 1.

Exemple

  • Par exemple 12 et 5 sont premiers entre eux
  • \(33\) et \(27\) ne sont pas premiers entre eux : \(33=3 \times 11\) et \(27=3 ^3\). Leur PGCD est Ă©gal Ă  3.
Nombres premiers

Donner la liste des nombres premiers avec 12 qui sont inférieurs à 12.

Solution

5, 7 et 11

3. Le chiffrement RSA⚓

Histoire

Lorsqu'en 1976 Diffie et Hellman (chercheurs à Stanford) présentent le concept de chiffrement asymétrique (souvent appelé cryptographie à clés publiques), ils en proposent uniquement un modÚle théorique, n'ayant pas trouvé une réelle implémentation de leur protocole.

Trois chercheurs du MIT (Boston), Ron Rivest, Adi Shamir et Len Adleman se penchent alors sur ce protocole, convaincus qu'il est en effet impossible d'en trouver une implémentation pratique. En 1977, au cours de leurs recherches, ils démontrent en fait l'inverse de ce qu'ils cherchaient : ils créent le premier protocole concret de chiffrement asymétrique : le chiffrement RSA.

Au mĂȘme moment Ă  Londres, Clifford Cocks, (chercheur au trĂšs secret GCHQ) apprend que Rivest Shamir et Adleman viennent de dĂ©couvrir ce que lui-mĂȘme a dĂ©couvert 3 ans auparavant mais qui est restĂ© classĂ© Secret DĂ©fense.

Il est le véritable inventeur du RSA... mais le reste du monde ne l'apprendra qu'en 1997 au moment de la déclassification de cette information.

2.3.1 Description⚓

Prérequis pour le RSA

Le chiffrement RSA est basé sur l'arithmétique modulaire. Faire des calculs modulo un entier \(n\), c'est ne garder que le reste de la division euclidienne par \(n\).

Le fait que 15 soit Ă©gal Ă  1 modulo 7 (car \(15=2 \times 7+1\)) s'Ă©crira \(15 \equiv 1 [7]\).

De mĂȘme, \(10 \equiv 3 [7]\), \(25 \equiv 4 [7]\), \(32 \equiv 2 [10]\), etc.

Étape 1⚓

Alice choisit 2 grands nombres premiers \(p\) et \(q\). Dans la réalité ces nombres seront vraiment trÚs grands (plus de 100 chiffres).
Dans notre exemple, nous prendrons \(p = 3\) et \(q = 11\).

Étape 2⚓

Alice multiplie ces deux nombres \(p\) et \(q\) et obtient ainsi un nombre \(n\) appelé module de déchiffrement..

  • 😊 Il est trĂšs facile pour Alice de calculer \(n\) en connaissant \(p\) et \(q\).
  • 😱 Il est extrĂȘmement difficile pour Marc de faire le travail inverse : trouver \(p\) et \(q\) en connaissant \(n\) prend un temps exponentiel avec la taille de \(n\).

C'est sur cette difficulté (appelée difficulté de factorisation) que repose la robustesse du systÚme RSA.

Étape 3 : Alice crĂ©e sa clĂ© publique⚓

On note \(\phi(n)\) le nombre \((p-1)(q-1)\). C'est l'indicatrice d'Euler.

Alice choisit un nombre \(e\) appelĂ© exposant de chiffrement, qui doit ĂȘtre premier avec \((p-1)(q-1)\).

Dans notre exemple, \((p-1)(q-1) = 20\), Alice choisit donc \(e = 3\). (mais elle aurait pu aussi choisir 7, 9, 13...).

Le couple \((e, n)\) sera la clé publique d'Alice. Elle la diffuse à qui veut lui écrire.

Dans notre exemple, la clé publique d'Alice est \((3, 33)\).

Étape 4 : Alice calcule sa clĂ© privĂ©e⚓

Alice calcule maintenant sa clé privée : elle doit trouver un nombre \(d\) qui vérifie l'égalité \(e \times d \equiv 1 [\phi(n)]\).

Dans notre exemple, comme \(7 \times 3 \equiv 1 [20]\), ce nombre \(d\) est Ă©gal Ă  7.

En pratique, il existe un algorithme simple (algorithme d'Euclide étendu) pour trouver cette valeur \(d\), appelée inverse de e.

Le couple \((d, n)\) sera la clé privée d'Alice. Elle ne la diffuse à personne.

Dans notre exemple, la clé privée d'Alice est \((7, 33)\).

Étape 5 : Bob envoie un message chiffrĂ© Ă  Alice avec la clĂ© publique d'Alice⚓

Supposons que Bob veuille écrire à Alice pour lui envoyer le nombre 4. Il possÚde la clé publique d'Alice, qui est \((3, 33)\).

Il calcule donc \(4^3\) modulo 33, qui vaut 31. C'est cette valeur 31 qu'il transmet Ă  Alice.

\(4^3 \equiv 31 [33]\)

Si Marc intercepte cette valeur 31, mĂȘme en connaissant la clĂ© publique d'Alice (3,33), il ne peut pas rĂ©soudre l'Ă©quation \(x^3 \equiv 31 [33]\) de maniĂšre efficace.

Étape 6⚓

Alice reçoit la valeur 31.
Il lui suffit alors d'élever 31 à la puissance 7 (sa clé privée), et de calculer le reste modulo 33 :

\(31^7 = 27512614111\)

\(27512614111 \equiv 4 [33]\)

Elle récupÚre la valeur 4, qui est bien le message original de Bob.

alice et bob

Comment ça marche ? Grùce au Petit ThéorÚme de Fermat, on démontre (voir ici) assez facilement que \(M^{ed} \equiv M [n]\). Il faut remarquer que \(M^{ed} = M^{de}\). On voit que les rÎles de la clé publique et de la clé privée sont symétriques : un message chiffré avec la clé publique se déchiffrera en le chiffrant avec la clé privée, tout comme un message chiffré avec la clé privée se déchiffrera en le chiffrant avec la clé publique.

Animation interactive voir https://animations.interstices.info/interstices-rsa/rsa.html

4. Exercice : chiffrement RSA⚓

Exercice 1

Alice veut Ă©crire Ă  Bob.

Soit le couple de nombre premiers \((p, q)\) avec \(p=5\) et \(q=13\).

a. Calculer \(n\) et \(\phi(n)\).

Solution
  • \(n=5 \times 13 = 65\)
  • \(\phi(n)= 4 \times 12 = 48\)

b. Justifier que \((9, 65)\) ne peut pas ĂȘtre une clĂ© publique.

Solution

Pour que \((e, n)\) soit une clé publique, il faut que \(e\) et \(\phi(n)\) soient premiers entre eux. Or le PGCD de 9 et 48 est 3.
9 et 48 ne sont donc pas premiers entre eux.

c. Vérifier que \((11, 65)\) est une clé publique. C'est la clé publique de Bob.

Solution

Pour que \((e, n)\) soit une clé publique, il faut que \(e\) et \(\phi(n)\) soient premiers entre eux. Or le PGCD de 11 et 48 est 1.
11 et 48 sont donc premiers entre eux. On peut donc choisir \((11, 65)\) comme clé publique.

d. VĂ©rifier que 35 est un inverse de 11 modulo 48.

Solution

\(35 \times 11 =385\). Or \(385=8 \times 48 + 1\)
Donc \(35 \times 11 = 1[48]\)
On dit que 35 est un inverse de 11 modulo 48

Remarque :

Python Console Session
>>> 385 % 48
1

e. En déduire la clé privée de Bob.

Solution

La clé privée de Bob est donc \((35, 65)\)

f. Chiffrer le nombre secret d'Alice 17 avec la clé publique de Bob. C'est ce nombre qu'Alice envoie à Bob.

Solution

Python Console Session
>>> (17**11) % 65
23
17 sera chiffré par 23.
Alice envoie donc 23 Ă  Bob.

g. Déchiffrer le nombre reçu par Bob

Solution

Bob doit déchiffrer 23. Pour cela il utilise sa clé privée qui est \((35, 65)\) :

Python Console Session
>>> (23**35) % 65
17
Bob a bien déchiffré le nombre 17, qui était celui qu'Alice voulait lui envoyer.

RSA, un systĂšme inviolable ?

Le chiffrement RSA a des défauts (notamment une grande consommation des ressources, due à la manipulation de trÚs grands nombres). Mais le choix d'une clé publique de grande taille (actuellement 1024 ou 2048 bits) le rend pour l'instant inviolable.

Actuellement, il n'existe pas d'algorithme efficace pour factoriser un nombre ayant plusieurs centaines de chiffres.

Deux évÚnements pourraient faire s'écrouler la sécurité du RSA :

  • la dĂ©couverte d'un algorithme efficace de factorisation, capable de tourner sur les ordinateurs actuels. Cette annonce est rĂ©guliĂšrement faite, et tout aussi rĂ©guliĂšrement contredite par la communautĂ© scientifique. (voir, le 05/03/2021, https://www.schneier.com/blog/archives/2021/03/no-rsa-is-not-broken.html)
  • l'avĂšnement d'ordinateurs quantiques, dont la vitesse d'exĂ©cution permettrait une factorisation rapide. Il est Ă  noter que l'algorithme de factorisation destinĂ© Ă  tourner sur un ordinateur quantique existe dĂ©jĂ  : l'algorithme de Schor.

IV. Attaque par l'homme du milieu⚓

1. Exemple de scĂ©nario d'attaque par l'homme du milieu⚓

homme milieu

homme milieu

homme milieu

homme milieu

homme milieu

Question

Ecrire la fonction RSA qui prend en paramÚtre une clé cle, et un entier nbre. Cette fonction renvoie le nombre chiffré ou déchiffré par RSA de nbre avec la clé cle.

Vous pourrez vérifier toutes les valeurs indiquées dans le scénario ci-dessus.

Exemple

Python Console Session
>>> RSA((11, 65), 17)
23

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier
Évaluations restantes : 5/5

.128013kg: r;)SĂ©/q(N.Ăšloy,6b=ac1ud3t2_P7evp-fh*%mnRAiCs050B0I0D0x0U0q0W0e0y0q0x0W0W0w010D0U0K010406050W0A0Q0Q0x0f0s040i0r0q0A0;0r0R0e020x0Q0K0g0e0S0I0~0f0l0A0I0W050k0{0}0 110_0K04051w1p1z0k1w0_0B0U0J0)0+0-0/0+0R0c0A0x0c0I0L0K0s0D0N180e0N0U0c0N0q1#0N0D0@050!0v0q0I1I0,0.011!1$1(1$0D1.1:1,0D0f1x1W0)140W0K0x0R0/0E011=1K010M0$0I0R1c0I1,27292e1@2h1:2k0Q2m040a0e0G0f0r0K0r0W0U17190Y250f0f0I0y2H1p2o0R1x0k1W2T2123221-0B2q1L0U0R2j2E1,1F1H0*1?2%2)0R0r2-1,0K2M1x2R2T2}0`28192/2f2?0f0~0q1,0x1Z2M0M0/030F0F0y2@0I1(2=0r0L0u0L0z0@0z1p0x2~310^302p331@3537393b0I3d013f3h3j3l2*3o0L2c040E3u3w293y2R2$013D0x381x3a0N3c3e3g3i0Y3N2?3P0C0@0C3U2Q3x1A2{1p2-2W0B232#3B0/3.2w0X1G1x2`0I2|3{1q3{464d2p0U0B0/3g2R3P3r3(0e4k4m3L3/2(3O3p3r0e2u0I4u463:3n4z1,0k3v3z321J1@0b0@0Y0M3`3W0e4M3Z0R0M0@0S0i0T4U2S4X44010?040m4)4i4N2:3!0@0*0I4;4+4O0/4.0t4;4W3Y4,0R0@0R0v2M4|544~4-0@0h0d4;0_4f3W4X4t014n313P3R053a5n3-3M4x3;3p2c4B2l4E5x3m5r4J3v0e5K53314Y0@0U5b5N4,50524}4@56040R5V5c4@0r0@0w5#5S5d5Y4`5i5R4j4l5o0F4o3p3?4r5v4v3k5y4H0L3?5C2v5E4w5G5`5I045L5M3A5d4Q042M0D0A0f5!5k2S6d4?2f4.4:6n4=5O5Z594{6u5W2f5(040O0O5;6q3C5P6H3Z4.0h6L4,6D0P6P5-575:6A0k4h3|4c3~491p0D416(2Z2U0x1/6#0k3 1v6v4,2M0Q0F0M0x0b0I0F0N5{1h1j1l1n0e5h6X1D482.5d0x0B0Q182G0U1Y2(0M6D1v3Z7e7g0R7i180L0;0D1 040A0R280y0b2(0c1A3y1w0n0r0A0(0x0J180(160$0U0W0j4s0y0U0e0B0A0e017A7C7E1N2d0d4W1C3y2-3Z1M1O1Q1S1U1W1Y1_1%1)1+6@5d2s2j2l0@0G1V1X6m2 4b4=3V4*6Z3Y5}4o0H3q3F5}4F600L8l4A4C665 5G8s2d3*3H3,5~4G8r8m2T4L5$346K6A8J1@5U6u6p6w8b3x8R6Q5)5+6e5X4_1:6W2 6Y3j2T8d6$0J7I040V001n0D0e210p0(2`0x0;750o7H5j6=3~0Z0#0%04.

Résumé

Alice et Bob sont chacun persuadés d'utiliser la clé de l'autre, alors qu'ils utilisent en réalité tous les deux la clé de Jimmy.

Man in the middle

Ce type d'attaque est appelĂ© "Man in the middle". Elle peut ĂȘtre tentĂ©e contre RSA.

2. Certification⚓

Pour se prĂ©munir de ces attaques, une autoritĂ© de certification assure de l'identitĂ© d'un site afin d'Ă©viter des attaques du type homme du milieu, sans laquelle on pourrait se connecter Ă  un site tiers en pensant qu'il s'agit par exemple de sa banque en ligne. Les requĂȘtes https peuvent ĂȘtre observĂ©es Ă  partir de la console de firefox. Pour cela :

Exemple

Ecrire l'adresse : https://www.elysee.fr/ dans votre barre de navigation. Cliquer sur le cadenas, puis chercher le certificat.

V. Le protocole HTTPS⚓

HTTPS

HTTPS : exemple d'utilisation conjointe d'un chiffrement asymétrique et d'un chiffrement symétrique.

3.1 Principe gĂ©nĂ©ral⚓

Aujourd'hui, plus de 90 % du trafic sur internet est chiffrĂ© : les donnĂ©es ne transitent plus en clair (protocole http) mais de maniĂšre chiffrĂ©e (protocole https), ce qui empĂȘche la lecture de paquets Ă©ventuellements interceptĂ©s.

HTTPS

Le protocole https est la réunion de deux protocoles :

  • le protocole TLS (Transport Layer Security, qui a succĂ©dĂ© au SSL) : ce protocole, basĂ© sur du chiffrement asymĂ©trique, va conduire Ă  la gĂ©nĂ©ration d'une clĂ© identique chez le client et chez le serveur.
  • le (bon vieux) protocole http, mais qui convoiera maintenant des donnĂ©es chiffrĂ©es avec la clĂ© gĂ©nĂ©rĂ©e Ă  l'Ă©tape prĂ©cĂ©dente. Les donnĂ©es peuvent toujours ĂȘtre interceptĂ©es, mais sont illisibles. Le chiffrement symĂ©trique utilisĂ© est actuellement le chiffrement AES.
Pourquoi ne pas utiliser que le chiffrement asymétrique, RSA par exemple ?

Le chiffrement RSA est trĂšs gourmand en ressources ! Le chiffrement/dĂ©chiffrement doit ĂȘtre rapide pour ne pas ralentir les communications ou l'exploitation des donnĂ©es.

  • Le chiffrement asymĂ©trique est donc rĂ©servĂ© Ă  l'Ă©change de clĂ©s (au dĂ©but de la communication).
  • Le chiffrement symĂ©trique, bien plus rapide, prend ensuite le relais pour l'ensemble de la communication.

https

3.2 (HP) Fonctionnement du TLS : explication du handshake⚓

Observons en détail le fonctionnement du protocole TLS, dont le rÎle est de générer de maniÚre sécurisée une clé dont disposeront à la fois le client et le serveur, leur permettant ainsi d'appliquer un chiffrement symétrique à leurs échanges.

tls

  • Ă©tape 1 : le «client Hello». Le client envoie sa version de TLS utilisĂ©e.

  • Ă©tape 2 : le «server Hello». Le serveur rĂ©pond en renvoyant son certificat prouvant son identitĂ©, ainsi que sa clĂ© publique.

  • Ă©tape 3 : le client interroge l'autoritĂ© de certification pour valider le fait que le certificat est bien valide et que le serveur est bien celui qu'il prĂ©tend ĂȘtre. Cette vĂ©rification est faite grĂące Ă  un mĂ©canisme de chiffrement asymĂ©trique.

La prĂ©sentation du certificat Ă  l'autoritĂ© de certification peut se reprĂ©senter comme le scan d'une piĂšce d'identitĂ© dans un aĂ©roport. L'autoritĂ© de certification est alors l'État (dont la base de donnĂ©es est interrogĂ©e par un logiciel) qui valide que la piĂšce d'identitĂ© est bien un document officiel.

  • Ă©tape 4 : une fois vĂ©rifiĂ©e l'authenticitĂ© du serveur et que son certificat est valide, le client calcule ce qui sera la future clĂ© de chiffrement symĂ©trique (appelĂ©e «clĂ© AES» dans l'infographie). Cette clĂ© est chiffrĂ©e avec la clĂ© publique du server (transmise Ă  l'Ă©tape 1), ce qui assure la sĂ©curitĂ© de son transfert. Le serveur dĂ©chiffre cette clĂ© grĂące Ă  sa clĂ© privĂ©e, et dispose ainsi lui aussi de la clĂ©.

Le transmission par protocole http de données chiffrées au préalable avec la clé AES peut commencer.

Remarque : en réalité, ce n'est pas la clé AES qui est transmise à l'étape 4, mais un nombre choisi par le client, qui permettra, avec deux autres nombres choisis par le client (étape 1) et le serveur (étape 2) de reconstituer la clé AES, qui sera donc identique cÎté client et cÎté serveur.

VI. QCM⚓

Question 1
  • Dans un chiffrement symĂ©trique, une seule clĂ© est partagĂ©e
  • Dans un chiffrement asymĂ©trique, deux clĂ©s sont partagĂ©es
  • Une clĂ© de chiffrement doit toujours rester secrĂšte
  • Le chiffrement RSA est symĂ©trique
  • ✅ Dans un chiffrement symĂ©trique, une seule clĂ© est partagĂ©e
  • ❌ Seule la clĂ© publique est partagĂ©e
  • ❌ Dans un chiffrement asymĂ©trique, la clĂ© de chiffrement est publique
  • ❌ Le chiffrement RSA est symĂ©trique
Question 2

Bob veut envoyer un message chiffré à Alice

  • Alice a besoin de la clĂ© privĂ©e de Bob
  • Alice a besoin de la clĂ© publique de Bob
  • Bob a besoin de la clĂ© privĂ©e d'Alice
  • Bob a besoin de la clĂ© publique d'Alice
  • ❌ Alice a besoin de la clĂ© privĂ©e de Bob
  • ❌ Alice a besoin de la clĂ© publique de Bob
  • ❌ Bob a besoin de la clĂ© privĂ©e d'Alice
  • ✅ Bob a besoin de la clĂ© publique d'Alice
Question 3

La protocole HTTPS

  • permet au client d'authentifier l'identitĂ© d'un site web auquel il souhaite accĂ©der
  • garantit la confidentialitĂ© des donnĂ©es
  • garantit l'intĂ©gritĂ© des donnĂ©es
  • utilise un chiffrement asymĂ©trique pour la communication.
  • ✅ Il fournit un certificat d'authentification
  • ✅ garantit la confidentialitĂ© des donnĂ©es
  • ✅ Les donnĂ©es ne peuvent pas ĂȘtre modifiĂ©es entre le client et le serveur
  • ❌ Le chiffrement asymĂ©trique n'est utilisĂ© que pour Ă©changer une clĂ© privĂ©e, qui sera ensuite utilisĂ©e pour chiffrer le message par chiffrement symĂ©trique, bien plus rapide.

Pour approfondir :⚓

Concours Alkindi

interstices

CrĂ©dits⚓

Sources : Gilles LASSUS et Fabrice NATIVEL.