Aller au contenu

Sécurisation des communications

Nous avons vu le routage de paquets sur internet, mais comment sécuriser les données transmises sur le réseau ?

Vocabulaire

On sécurise les communications grâce à une science appelée cryptologie, étymologiquement la « science du secret ». La cryptologie englobe :

  • Cryptographie : étude du chiffrement des messages.
  • Cryptanalyse : techniques de déchiffrement des messages sans posséder la clé de chiffrement.

Cette science largement basée sur les mathématiques, notamment l’arithmétique, les statistiques et les probabilités.

Chiffrer :
transformer une suite de signes compréhensibles en une suite de signes incompréhensible grâce à une clé de chiffrement.

Déchiffrer :
retrouver le message d’origine à partir du message chiffré en utilisant une clé de déchiffrement.

Il existe deux types de chiffrement : le chiffrement symétrique et asymétrique. Dans le chiffrement symétrique, la même clé est utilisée pour chiffrer et déchiffrer les données. Dans le chiffrement asymétrique, une clé permet de chiffrer des messages et une clé différente de la clé utilisée pour chiffrer les données permet de déchiffrer les messages.

Nous allons commencer par étudier deux chiffrements symétriques avant d'étudier le principe du chiffrement asymétrique. Ces deux types de chiffrement seront alors utilisés pour présenter le fonctionnement du protocole HTTPS.

A noter que les algorithmes de chiffrement sont connus de tous, car selon le principe de Kerckhoffs la sécurité d'un cryptosystème ne doit reposer que sur le secret de la clef (et donc pas sur la méconnaissance de l'algorithme de chiffrement).

1) Chiffrement symétrique

1.1) Chiffre de César

Autour de 50 av. J.-C. Utilisée par Jules César pour chiffrer ses messages envoyés à ses généraux. C'est un chiffrement par décalage, avec un décalage de trois lettres à l’origine.

image

Ce chiffrement est rudimentaire et très rapidement « cassé » par analyse de fréquences (certaines lettres apparaissent plus fréquemment dans une langue).

On peut représenter ce chiffrement en utilisant la congruence sur les entiers.

Congruence modulo n

Soit n un entier naturel.

Deux entiers relatifs \(a\) et \(b\) sont dits congrus modulo n si leur différence est divisible par \(n\), c'est-à-dire si \(a\) est de la forme \(b + kn\), avec \(k\) entier.

Vous utilisez tous les jours la congruence, par exemple lorsque vous lisez l'heure sur une horloge :
22 et 10 sont congrus modulo 12
22 ≡ 10 [12]

22-10 = 12
22 = 10 + 1 \(\times\) 12

La congruence est une relation d’équivalence.

R : Réflexive
S : Symétrique
T : Transitive

Vous utilisez déjà des relations d'équivalences. Par exemple l'égalité dans R
R : \(\forall x \in \mathbb{R}\), x = x
S : \(\forall x \in \mathbb{R}, \forall y \in \mathbb{R}\), x = y ⇔ y = x
T : \(\forall x \in \mathbb{R}, \forall y \in \mathbb{R}, \forall z \in \mathbb{R}\), (x = y et y = z) \(\implies\) (x = z)

Opération modulo

L’opération a modulo b correspond au reste de la division euclidienne de a par b.
Exemple : 10 mod 2 = 0

On commence par représenter chaque lettre par un nombre : A = 0, B = 1, …, Z = 25

Pour encoder une lettre avec:
\(E_{n}(x) = (x + n) \, mod \, 26\)

Pour décoder une lettre avec:
\(D_{n}(x) = (x - n) \, mod \, 26\)

Que faire si résultat n’est pas dans l’intervalle [0, 25] ?

  • Si le résultat est supérieur alors retirer 26.
  • Si celui-ci est inférieur (négatif) alors ajouter 26.

Exemple: chiffrement

Reprenons l'exemple précédent : décalage de 3 lettres.
Donc Z = 25
Ici x = 25 et n = 3
\(E_{3}(25) = (25 + 3)[26]\)

Le reste de la division euclidienne de 28 par 26 est égal à 2.
Donc \(E_{3}(25) = 2\)
Ce qui correspond à C dans ce cas, donc la lettre Z est chiffrée par C.

Exemple : déchiffrement

Repartons de la lettre C.
\(D_{3}(25) = (2 - 3)[26]\)
le résultat est en dehors de l’intervalle [0, 25]
On ajoute donc 26 au résultat : - 1 + 26 = 25

Le reste de la division euclidienne de 25 par 26 est égal à 25.
Donc \(E_{3}(25) = 25\)
On retrouve bien Z.

Etudions maintenant un autre exemple de chiffrement symétrique utilisant l’opérateur OU exclusif (XOR).

1.2) Utilisation du XOR

XOR : OU exclusif (symbole ⨁)

Table de vérité du XOR :

A B A \(\oplus\) B
0 0 0
0 1 1
1 0 1
1 1 0

Pour le OU exclusif une seule des entrées doit être vraie (pas les deux).

Nous allons chiffrer le message : “NSI”
Pour cela nous allons effectuer la conversion de cette chaîne de caractère en binaire en utilisant le code ASCII de chaque caractère.

Lettre Correspondance ASCII en binaire
N 01001110
S 01010011
I 01001001

Ce qui donne : 01001110 01010011 01001001

On utlise la clé “C” pour chiffrer les données. C en ASCII correspond à 01000011

Comme la clé est plus courte que le message, il faut "reproduire" la clé vers la droite autant de fois que nécessaire (si la taille du message n'est pas un multiple de la taille de la clé, on peut reproduire seulement quelques bits de la clé pour la fin du message):

Chiffrement

    01001110 01010011 01001001 (MESSAGE D’ORIGINE)
XOR  01000011 01000011 01000011 (LA CLE "C")
    00001101 00010000 00001010 (MESSAGE CHIFFRÉ)

Pour retrouver le message d’origine :

    00001101 00010000 00001010 (MESSAGE CHIFFRÉ)
XOR  01000011 01000011 01000011 (LA CLE "C")
    01001110 01010011 01001001 (MESSAGE D’ORIGINE)

On retrouve bien le message d’origine.

Si on ne souhaite pas que la même clé soit utilisée pour le chiffrement et le déchiffrement, notamment pour ne pas avoir à partager la clé avec plusieurs utilisateurs, alors on peut utiliser le chiffrement asymétrique.

2) Chiffrement asymétrique

Dans le cas du chiffrement asymétrique si deux utilisateurs : toto1 et toto2 souhaitent échanger des messages de manière sécurisée, alors :

  • toto1 va utiliser une clé privée (secrète) que l’on appellera cle_privee_toto1 qu’il gardera pour lui et une clé publique cle_publique_toto1 qu’il partagera.

  • toto2 va utiliser une clé privée (secrète) que l’on appellera cle_privee_toto2 qu’il gardera pour lui et une clé publique cle_publique_toto2 qu’il partagera.

Si toto1 souhaite envoyer un message à toto2, alors il va utiliser la clé publique cle_publique_toto2 pour chiffrer le message m1 en m1’.

Ensuite toto2 va déchiffrer le message m1’ à l’aide de sa clé privée cle_privee_toto2 et lire le message d’origine m1.

Expliquez comment toto2 va envoyer un message à toto1.

Si toto2 souhaite envoyer un message à toto1, alors il va utiliser la clé publique cle_publique_toto1 pour chiffrer le message m2 en m2’.

Ensuite toto1 va déchiffrer le message m2’ à l’aide de sa clé privée cle_privee_toto1 et lire le message d’origine m2.

Un schéma

image

Le chiffrement asymétrique a pour fondement l’arithmétique, et plus précisément le fait que certains problèmes sont plus faciles à résoudre dans un sens que dans l’autre. Par exemple, si on prend deux nombres premiers P1 et P2 suffisamment grands, il est très facile de calculer le produit de P1 et de P2. Par exemple P1 = 27457 et P2 = 42043, alors P1 * P2 = 1154374651. Par contre il est très difficile à partir d’un nombre entier assez grand, ici 1154374651 de retrouver P1 et P2.

Les ordinateurs quantiques pourraient avoir un impact un jour sur les algorithmes de chiffrement utilisant le produit de nombres premiers. Si ce sujet vous intéresse vous pouvez vous renseigner sur l’algorithme de Shor : https://fr.wikipedia.org/wiki/Algorithme_de_Shor

Ce principe est à la base du chiffrement asymétrique RSA, très utilisé en pratique, notamment dans le cadre du protocole HTTPS. Nous allons conclure ce cours par l’étude de ce protocole qui utilise à la fois le chiffrement symétrique et le chiffrement asymétrique.

3) HTTPS

Le protocole HTTPS (S pour Sécurisé) repose sur le protocole HTTP.

image

3.1) HTTP

Dans le protocole HTTP (HyperText Transfer Protocol), un client effectue une requête HTTP vers un serveur qui en retour répond à cette requête.

Les données sont envoyées sur le réseau sans être chiffrées et une personne interceptant les messages entre le client et le serveur serait capable de les lire. Cela pose donc un très gros problème de sécurité, surtout quand il s’agit de données sensibles, comme des mots de passe, des numéros de carte de crédit etc.

Pour cela on chiffre les données en utilisant TLS (Transport Layer Security), anciennement SSL, en plus de HTTP.

3.2) HTTPS

Les données transmises seront chiffrées grâce à une clé symétrique. Pour échanger cette clé le chiffrement asymétrique est utilisé.

étapes qui permettent d’établir une connexion HTTPS

1. Au début, le client et le serveur établissent une connexion TCP (three-way handshake).

2. Le client envoie au serveur l’ensemble des algorithmes de chiffrement qu’il peut utiliser (les suites cryptographiques : AES, RSA, Diffie-Hellman etc). Le serveur choisit parmi cette liste une des suites et envoie au client un certificat qui permet au client de vérifier auprès d’une autorité de certification (tiers de confiance). Le certificat contient aussi la clé publique associée à la clé privée du serveur.

3. Le client génère une clé qui sera chiffrée ensuite en utilisant la clé publique du serveur et renvoyée au serveur qui pourra la déchiffrer avec sa clé privée.

4. Maintenant le client et le serveur peuvent communiquer de manière sécurisée en chiffrant les données grâce à la clé commune (chiffrement symétrique). Le chiffrement par clé symétrique possède notamment l’avantage d’être plus rapide.

Dans les faits, aujourd’hui les versions récentes de TLS utilisent des mécanismes supplémentaires pour garantir la sécurité des échanges, avec notamment l’échange de clés Diffie-Hellman pour permettre au client et au serveur de disposer d’une clé commune qui repose sur la notion de groupe en algèbre.

Qu’est ce qu’un groupe ?

Vous utilisez des groupes en permanence, par exemple \(\mathbb{Z}\) muni de l'addition est un groupe car :

  • L’addition est associative : \(\forall x, y, z \in G\), on a \(x + ( y + z) = (x + y) + z\)
  • Il existe un élément neutre \(e\) tel que \(\forall x \in G, x + e = e + x = x\)
  • Tout élément possède un symétrique tel que \(\forall x \in G, \exists y \in G\), tel que \(x + y = y + x = e\)