Sécurisation des communications
Ce cours s'inspire largement de celui de G. Lassus (merci pour les illustrations)
Activités
Activité 1 : Chiffrement symétrique
-
Opération xor
En Python, on peut effectuer un ou exclusif bit à bit sur les représentations binaires de deux entiers à l'aide de l'opérateur^. Par exemple pour effectuer28 ^ 42:- Convertir 28 en binaire :
- Convertir 42 en binaire :
- Effectuer un xor bit à bit :
En effet, on rappelle que vaut 1 lorsque ou vaut 1 mais pas les deux à la fois (d'où le nom ou exclusif) -
Convertir le résultat en entier :
a. Vérifier en utilisant Python, qu'on obtient bien
28 ^ 42 = 54b. Comme dans l'exemple ci-dessus, calculer
65 ^ 42, vérifier votre résultat avec Python.c. Calculer
(65 ^ 42)^42, que remarquez-vous ?d. A l'aide d'un programme Python, vérifier que pour tout entier
ncompris entre 0 et 255, on a :(n ^ 42) ^ 42 = nNote
On admet, sans démonstration que l'opération xor est symétrique c'est à dire que pour tout entier
netm:(n ^ m) ^ m = n.
- Convertir 28 en binaire :
-
Chiffrement avec xor
On décide d'utiliser l'opération xor pour chiffrer un message, on choisit un entier compris entre 0 et 255 qui sert de clé de chiffrement. Pour chiffrer un message, on effectue un xor entre le code ascii de chaque caractère du message et la clé de chiffrement. Par exemple, pour coder le motNSIavec la clé 42 :- On récupère les codes ascii de chaque lettre :
N: 78,S: 83 etI: 73. - On effectuer un xor avec la clé de chiffrement 42 :
78^42 = 100,83^42 = 121,73 ^ 42 = 99 - On remplace avec le caractère ayant ce code ascii : 100 :
d, 121 :y, 99 :c -
Le chiffrement de
NSIest doncdyca. Ecrire une fonction python
chiffre_xorqui prend deux arguments (le texte à chiffrer et la clé de chiffrement) et renvoie le message chiffré. Par exemplechiffre_xor("NSI",42)doit renvoyerdyc.Aide
On rappelle qu'en python :
- la fonction
ordrenvoie le code ascii du caractère donné en paramètre. Par exemple,ord("N")renvoie 78. - la fonction
chrrenvoie le caractère dont le code ascii est donné en paramètre. Par exemple,chr(100)renvoied.
b. Expliquer et justifier comment peut s'effectuer le déchiffrage d'un message avec cette technique. Quelle est la clé de déchiffrement ?
c. Déchiffrer le message
qARE\E\F@REVIAÚF@@Zsachant que la clé de chiffrement était 51.d. Un chiffrage est dit symétrique lorsque les clés de chiffrement et de de déchiffrement doivent être secrètes (elles peuvent donc être identiques ou alors la connaissance de l'une permet aisément d'obtenir l'autre). Le chiffrement par xor défini ci-dessus est-il symétrique ?
e. Le chiffrement par le code de César est-il symétrique ?
f. Dans le cas d'un chiffrement symétrique, deux personnes peuvent-elles s'échanger des messages si elles n'ont pas encore convenu ensemble d'une clé de chiffrement ? En déduire un inconvénient de cette méthode de chiffrement.
- la fonction
Note
Pour prolonger cette activité on pourra faire l'exercice 3 de ce sujet de Bac 2021 dont la correction se trouve ici.
En effet, cet exercice traite du chiffrement par xor en utilisant une chaîne de caractère comme clé. - On récupère les codes ascii de chaque lettre :
Activité 2 : Chiffrement asymétrique
Dans un chiffrement asymétrique, la clé de chiffrement est publique et donc n'importe qui peut chiffrer un message. La clé de déchiffrement est par contre privée (et seul celui qui la possède peut déchiffrer). Le principe est donc qu'on ne peut pas (ou pas "facilement") déduire de la clé de chiffrement (publique), la clé de déchiffrement (secrète).
Le principe d'un chiffrement asymétrique est illustré ci-dessous (crédit : G. Lassus):
Dans cette activité, après quelques rappels mathématiques, nous allons détailler chacune de ses étapes sur un exemple très connu de chiffrement asymétrique : l'algorithme RSA des initiales de ses trois inventeurs (Ron Rivest, Adi Shamir et Leonard Adelman). Pour plus de détails historique, voir par exemple ce site
Attention
La compréhension de l'algorithme demande des notions d'arithmétique qui pourront sembler ardues aux élèves ne faisant pas l'enseignement de spécialités mathématiques. Ces prérequis, sont présentés en début d'activité. On pourra simplement retenir pour résumer et façon imparfaite que dans le chiffrement RSA :
- la clé publique est un très grand nombre
(plusieurs centaines de chiffres) choisi de façon à être le produit de deux nombres premiers, - la clé privée est le couple
de nombres premiers tels que , - étant donnée la taille de
, il est difficile (impossible avec la puissance de calcul actuelle des ordinateurs) de retrouver et à partir de . Et donc la connaissance de la clé publique ne permet pas d'en déduire celle de la clé privée.
-
Arithmétique modulaire
a. Il est 22h, quelle heure sera-t-il 8h plus tard ?b. 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:
on écrira que et on lira est égal à modulo (ce qui peut se traduire par leur différence est un multiple de 24, c'est donc la même heure sur des jours différents).c. Vérifier (en faisant la division euclidienne) que
d. Vérifier (en faisant la division euclidienne) que
e. Compléter :
f. Compléter :
-
Nombres premiers et nombres premiers entre eux.
a. Rappeler la définition d'un nombre premier. Les nombres suivants sont-ils premiers (justifier) : 12, 21, 29, 1 ?
b. On dit que deux nombres sont premiers entre eux lorsque leur pgcd vaut 1, par exemple 12 et 5 sont premiers entre eux mais pas 33 et 27 (leur pgcd vaut 3). Donner la liste des nombres premiers avec 12 et inférieurs à 12.
-
Algorithme RSA - étape 1 : création de la clé publique et de la clé privée
- Choisir deux nombres premiers
et très grands. Pour disposer d'un exemple simple nous prendrons et - Calculer le produit
. Dans notre exemple . - Choisir un nombre premier
premier avec . Dans notre exemple, on choisit qui est bien premier avec (comme et , ). - La clé publique d'Alice est le couple
et donc dans notre exemple le couple . Rappelons que dans la réalité est un nombre très grand. -
Pour déterminer la clé privé, il faut trouver un nombre
tel que . Dans notre exemple il s'agit donc de trouver tel que , le nombre 7 convient.Note
On dit que
est un inverse de modulo (leur produit vaut 1 modulo ). Dans la pratique un algorithme permet la détermination de . -
Le couple
est la clé privée qui permet le déchiffrage. Dans notre exemple c'est donc .
Soit le couple de nombre premiers
avec et :a. Calculer
et .b. Justifier que
ne peut pas être une clé publique.c. Vérifier que
est une clé publique.d. Vérifier que 35 est un inverse de 11 modulo 48.
e. En déduire la clé privée.
Important
En résumé, la clé publique est
et la clé publique est . Puisque et sont inverses l'un de l'autre modulo on peut penser qu'il est simple de retrouver l'un à partir de l'autre, dans la pratique cela est extrêmement difficile car on ne connaît pas . En effet, étant très grand, il est difficile de calculer et , car il n'existe pas d'algorithme efficace permettant de factoriser des nombres possédant plusieurs centaines de chiffres. - Choisir deux nombres premiers
-
Algorithme RSA - étape 2 : chiffrer un message
Pour envoyer un nombre secret en le chiffrant avec l'algorithme RSA de clé publique , il faut calculer . Rappelons que dans notre exemple la clé publique pour chiffrer est . Par exemple, pour envoyer le nombre secret 4, on calcule et on envoie 31.a. Chiffrer le nombre secret 10 avec la clé
b. Chiffrer le nombre secret 17 avec la clé
-
Algorithme RSA - étape 3 : déchiffrer un message
Pour déchiffrer un message de clé privée il suffit de l'élever à la puissance et de calculer le reste dans la division euclidienne par . Rappelons que dans notre exemple exemple et . Si on reçoit le le message on doit calculer : puis chercher le reste modulo 33 : , on retrouve bien le message de départ qui était 4.Note
Cela repose sur le résultat suivant : si
et sont inverses modulo alors . Pour une démonstration, on pourra consulter cette pagea. Déchiffrer le nombre secret 18 avec la clé
.b. Même question pour le nombre secret 90 avec la clé
. -
Vous pouvez utiliser cet outil en ligne afin de vérifier vos réponse à cette activité.
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.
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.
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 ? Car il 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.

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.

-
é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.
Cours
Vous pouvez télécharger une copie au format pdf du diaporama de synthèse de cours présenté en classe :
Attention
Ce diaporama ne vous donne que quelques points de repères lors de vos révisions. Il devrait être complété par la relecture attentive de vos propres notes de cours et par une révision approfondie des exercices.
Exercices
Exercice 1 : Vocabulaire
- Expliquer en quelques phrases la différence entre un chiffrement symétrique et un chiffrement asymétrique.
- Donner un exemple de chiffrement symétrique.
- Donner un exemple de chiffrement asymétrique.
Exercice 2 : Chiffre de César
- Rappeler le principe du chiffrement de César
-
Ecrire en Python, une fonction
chiffre_cesarqui prend en argument un texte et une clé de chiffrementcet renvoie le texte chiffré par la méthode de César avec un décalage decemplacements. Par souci de simplicité, on supposera que le texte n'est composé que des 26 lettres majuscules de l'alphabet et on ne chiffre ni les espaces ni les symboles de ponctuation.Aide
On rappelle qu'en python :
- la fonction
ordrenvoie le code ascii du caractère donné en paramètre. Par exemple,ord("N")renvoie 78. - la fonction
chrrenvoie le caractère dont le code ascii est donné en paramètre. Par exemple,chr(100)renvoied. n%26donne le reste dans la division euclidienne denpar 26.
- la fonction
-
Le chiffre de César peut-être cassé par analyse fréquentielle, comme expliqué ci-dessous :
En utilisant cette technique, écrire un programme Python permettant de déchiffrer le message suivant :PFOJC JCIG OJSN FSIGGW O RSQCRSF QS ASGGOUS Q SGH HFSG PWSB AOWG WZ FSGHS SBQCFS PSOIQCID O TOWFS -
Décoder de nouveau le message précédent en utilisant la bibliothèque sympy
Exercice 3 : Autorité de certification
Comme vu en cours, 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 :
- Lancer Firefox et ouvrir la console (menu outils supplémentaires > console du navigateur ou avec le raccourci clavier Ctrl+Shift+J) et sélectionner l'onglet Requêtes (à droite)
- Dans la barre d'adresse du navigateur taper
wikipedia.fr, les requêtes défilent dans la console, cliquer sur la requête :GET https://www.wikipedia.frpuis l'onglet sécurité à droite. Retrouver les informations suivantes :- La version du protocole TLS utilisé
- Le nom de l'autorité de certification
- La période de validité du cerfificat d'identité