Sécurisation des communications
Introduction
La sécurisation des communications vise à protéger les informations échangées entre deux entités (personnes, machines, serveurs) contre :
- l’écoute (confidentialité),
- la modification (intégrité),
- l’usurpation d’identité (authentification).
La cryptographie est l’outil principal permettant d’atteindre ces objectifs.
Définitions :
- Chiffrer : consiste à transformer un message clair en un message illisible à l’aide d’un algorithme et d’une clé :
Message clair → message chiffré - Déchiffrer : consiste à retrouver le message clair en connaissant la clé utilisée pour le chiffrement :
Message chiffré + clé → message clair - Décrypter : Décrypter consiste à retrouver le message clair sans connaître la clé.
C’est le travail du cryptanalyste.
Dans le langage courant, crypter est souvent utilisé comme synonyme de chiffrer. Cependant, ce terme est impropre en cryptographie. On chiffre un message, on ne le “crypte” pas.
On distingue principalement deux grandes familles de chiffrement :
- le chiffrement symétrique
- le chiffrement asymétrique
1. Chiffrement symétrique
Le chiffrement symétrique repose sur une clé unique, utilisée à la fois pour chiffrer et pour déchiffrer le message.
1.1 Chiffrement de César
Le chiffrement de César est l’un des plus anciens algorithmes de chiffrement.
Principe :
- chaque lettre est décalée d’un nombre fixe de positions dans l’alphabet.
Exemple avec un décalage de 3 :
- A → D
- B → E
- Z → C
Message clair : BONJOUR
Message chiffré : ERQMRXU
Avantages :
- très simple à comprendre
Inconvénients :
- extrêmement faible
- facilement cassable par force brute
Exercices
Pour les exercices du chapitre, voici un fichier à compléter : fichier python
- Chiffrer le mot
SECURITEavec un décalage de 5. - Déchiffrer le message
CPGJID R THI BXTJM FJT DCT EXTRTavec un décalage de 15. - Réaliser deux fonctions python, une pour chiffrer, l'autre pour déchiffrer, utilisant le chiffrement de César.
- Réaliser une fonction permettant de déchiffrer un messange sans connaître la clé.
On pourra utiliser les fonctions
ord()etchr().
Rappel :
ord(c : chr) -> int, prend en paramètre un caractère et renvoie son code associé par la norme ISO.chr(n : int) -> chr, prend en paramètre un entier et renvoie le caractère associé par la norme ISO.- Dans la norme ISO, les lettres majuscules sont encodées de 65 à 90 inclus.
1.2 Chiffrement de Vigenère
Le chiffrement de Vigenère est une amélioration du chiffrement de César.
Principe :
- on utilise un mot-clé
- chaque lettre du message est chiffrée avec un décalage dépendant de la lettre du mot-clé
Exemple :
- Message : BONJOUR
- Clé : CLE ( c'est à dire les décalages successifs : 2, 11, 4)
Chaque lettre de la clé correspond à un décalage différent.
Avantages :
- plus résistant que César
- clé plus difficile à deviner
Inconvénients :
- vulnérable à certaines analyses statistiques si la clé est courte
Exercices
- Chiffrer
MESSAGEavec la cléCLE. - Dechiffrer
EE ZDAAES IAUIPIKE IZQLBCUROT WQ GEBNWQS EFSIANFBBBXIGFSavec la clèBATMAN. - Réaliser deux fonctions python, une pour chiffrer, l'autre pour déchiffrer, utilisant le chiffrement de Vigenère.
Si la clé est
A,B, les décalages seront1,2.
Pour retrouver les message originial il faudrait appliquer les décalages-1,-2.
1.3 Le chiffrement par XOR
Il repose sur une opération logique binaire du même nom.
Principe :
- chaque caractère du message est converti en code numérique
- ce code est combiné avec une clé à l’aide de l’opérateur XOR
- l’opération XOR possède une propriété fondamentale : chiffrer et déchiffrer utilisent la même opération
Exemple :
- message = "BONJOUR"
-
clé = "HI"
-
B -> 66 -> 1000010
- H -> 72 -> 1001000
| 1 | 0 | 0 | 0 | 0 | 1 | 0 | ||
|---|---|---|---|---|---|---|---|---|
| XOR | 1 | 0 | 0 | 1 | 0 | 0 | 0 | |
| Résultat | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
- 0001010 -> 10
| Caractère du message | Unicode | Caractère de la clé | Unicode | XOR |
|---|---|---|---|---|
| B | 66 | H | 72 | 10 |
| O | 79 | I | 73 | 6 |
| N | 78 | H | 72 | 6 |
| J | 74 | I | 73 | 3 |
| O | 79 | H | 72 | 7 |
| U | 85 | I | 73 | 28 |
| R | 82 | H | 72 | 26 |
message code :
10 6 6 3 7 28 26
Exercice
Coder en python une fonction pour chiffrer un message en utilisant cette méthode.
L'opération
XORen Python s'écrit avec le symbole^.
1.4 Pourquoi le chiffrement symétrique est problématique
Le chiffrement parfait : One-Time Pad
Un chiffrement symétrique est théoriquement inviolable uniquement si toutes les conditions suivantes sont réunies :
- la clé a exactement la même longueur que le message (résiste aux analyses statistiques)
- la clé est totalement aléatoire
- la clé n'est utilisée qu'une seule fois
- la clé reste strictement secrète
Ce type de chiffrement est appelé chiffrement de Vernam ou One-Time Pad.
Dans ce cas, il est impossible, même avec une puissance de calcul infinie, de distinguer le message chiffré d'un message aléatoire.
Cependant c'est très couteux de l'appliquer ainsi aujourd'hui, surtout avec des transmissions aussi grandes.
Pourquoi les chiffrements symétriques classiques restent utilisés
Dans la pratique, ces conditions idéales ne sont jamais réunies :
- la clé est beaucoup plus courte que le message
- la clé est réutilisée
- le chiffrement produit des motifs exploitables statistiquement
Cela signifie que ces chiffrements ne sont pas parfaitement sûrs en théorie, mais qu'ils restent très efficaces en pratique.
Des algorithmes modernes comme AES utilisent des clés courtes (128, 192 ou 256 bits) mais sont considérés comme sûrs car leur attaque nécessiterait un temps de calcul irréaliste.
Le problème de l'échange de clé
Le chiffrement symétrique repose sur une clé unique, utilisée à la fois pour chiffrer et déchiffrer le message. Les deux personnes doivent donc posséder la même clé.
Le paradoxe de l'échange de clé :
Pour communiquer de façon sécurisée, il faut d'abord partager une clé.
Mais partager cette clé nécessite déjà un canal sécurisé... qu'on n'a pas encore.
Si un attaquant intercepte la clé, tous les messages passés et futurs sont compromis.
La solution : combiner les deux chiffrements
Le problème de l'échange de clé est précisément ce que résout le chiffrement asymétrique.
L'idée : utiliser RSA uniquement pour transmettre la clé symétrique, puis basculer sur AES pour la communication.
- Bob génère une paire de clés (publique / privée)
- Bob envoie sa clé publique à Alice — sans risque, elle peut être interceptée
- Alice génère une clé symétrique (ex : clé AES)
- Alice chiffre cette clé AES avec la clé publique de Bob
- Bob déchiffre avec sa clé privée → il obtient la clé AES
- Alice et Bob communiquent ensuite en chiffrement symétrique
Alice Bob
| |
| ←——— clé publique ——————— | (étape 2, non secrète)
| |
| ——— clé AES chiffrée ———→ | (étape 4, illisible sans clé privée)
| |
| ←———— AES ————————————→ | (étape 6, communication rapide)
Eve peut intercepter la clé publique et la clé AES chiffrée,
mais sans la clé privée de Bob, elle ne peut pas retrouver la clé AES.
Cette combinaison donne le meilleur des deux mondes :
| Symétrique (AES) | Asymétrique (RSA) | |
|---|---|---|
| Vitesse | ✅ Rapide | ❌ Lent |
| Échange de clé | ❌ Problématique | ✅ Sécurisé |
| Rôle | Chiffrer les données | Transmettre la clé AES |
C'est exactement le fonctionnement de HTTPS, le protocole qui sécurise le Web.
2. Chiffrement asymétrique
2.1 Définition et principe
Le chiffrement asymétrique repose sur une paire de clés mathématiquement liées :
- une clé publique : diffusée librement, utilisée pour chiffrer
- une clé privée : gardée secrète, utilisée pour déchiffrer
Ce qui est chiffré avec la clé publique ne peut être déchiffré qu'avec la clé privée correspondante.
Contrairement au chiffrement symétrique, il n'est plus nécessaire de partager une clé secrète au préalable. Cela résout le problème fondamental de l'échange de clés sur un canal non sécurisé.
2.2 Chiffrement RSA
RSA (du nom de ses inventeurs Rivest, Shamir et Adleman en 1977) est l'algorithme asymétrique le plus célèbre. Sa sécurité repose sur un problème mathématique simple à poser mais extrêmement difficile à résoudre : la factorisation de grands nombres entiers.
Multiplier deux grands nombres premiers est facile. Retrouver ces deux facteurs à partir du produit est, en pratique, impossible en un temps raisonnable.
Fonctionnement
1ère étape : Choisir deux nombres premiers
On choisit deux nombres premiers p et q, distincts et gardés secrets, puis on calcule leur produit :
\(n = p \times q\)
n est rendu publique (il fera partie de la clé), alors que p et q sont secrets.
En pratique, on préférera que n soit très très grand.
2ème étape : calculer l'indicatrice d'Euler
On calcule : \(φ(n) = (p - 1) \times (q - 1)\)
Cette valeur est secrète et sert à construire les clés.
3ème étape : choisir l'exposant public e
On choisit un entier e tel que :
- \(1 < e < φ(n)\)
eetφ(n)sont premiers entre eux (leur PGCD vaut 1)
e fait partie de la clé publique.
4ème étape : Calculer l'exposant privé d
On calcule d, l'inverse modulaire de e modulo φ(n) :
\(d \times e ≡ 1 \mod φ(n)\)
d c'est la clé privée !
Le calculer sans connaître φ(n) (et donc sans connaître p et q) est un problème très difficile (quasi impossible dans un temps raisonnable).
Résumé de clés
- publique : ( e , n )
- privée : ( d , n )
Pour chiffrer un message M (représenté par un entier, avec M < n) :
- \(C = M^e \mod n\)
Pour déchiffrer le message C :
- \(M = C^d \mod n\)
Exemple
Objectif : Alice veut envoyer le message M = 7 à Bob de façon sécurisée.
Étape 1 – Bob choisit p et q
- \(p = 3\)
- \(q = 11\)
- \(n = p \times q = 33\)
Étape 2 – Bob calcule φ(n)
\(φ(n) = (p − 1) \times (q − 1) = 20\)
Étape 3 – Bob choisit e
On cherche e tel que PGCD(e, 20) = 1 :
par exemple : \(e = 3\)
\(PGCD(3, 20) = 1\) donc c'est bon !
Clé publique de Bob :
(e=3, n=33)
Étape 4 – Bob calcule d
On cherche d tel que \(3\times d ≡ 1 \mod 20\) :
par exemple : \(d = 7\)
\(3 \times 7 = 21 ≡ 1 \mod 20\)
Clé privée de Bob :
(d=7, n=33)
Étape 5 – Alice chiffre le message
Alice utilise la clé publique de Bob (e=3, n=33) pour chiffrer M=7 :
\(C = M^e \mod n\)
\(= 7^3 \mod 33\)
\(= 343 \mod 33\)
\(= 13\)
Alice envoie C = 13 à Bob.
Étape 6 – Bob déchiffre
Bob utilise sa clé privée (d=7, n=33) :
\(M = C^d \mod n\)
\(= 13^7 \mod 33\)
\(= 62 748 517 \mod 33\)
\(= 7\)
Bob retrouve bien le message original.
Activité – Chiffrement RSA en binôme
Vous allez jouer le rôle d'Alice et Bob (et éventuellement Eve) pour échanger un vrai message chiffré en RSA.
Étape 1 – Bob génère ses clés
Choisir deux nombres premiers p et q, puis compléter :
| Valeur | |
|---|---|
p = |
|
q = |
|
n = p × q = |
|
φ(n) = (p-1) × (q-1) = |
Choisir e tel que 1 < e < φ(n) et PGCD(e, φ(n)) = 1.
Calculer le PGCD à la main :
PGCD( ___ , ___ ) :
Calculer d avec : https://www.dcode.fr/inverse-modulaire
\(d \times e ≡ 1 \mod φ(n)\)
| Clé publique | Clé privée |
|---|---|
(e = __ , n = __) |
(d = __ , n = __) |
Étape 2 – Alice chiffre un message
Choisir M un entier tel que M < n, puis chiffrer avec la clé publique de Bob :
\(C = M^e \mod n\)
Étape 3 – Bob déchiffre
\(M = C^d \mod n\)
2.3 Pourquoi RSA est sûr
La sécurité de RSA repose sur l'asymétrie entre deux opérations :
| Opération | Difficulté |
|---|---|
Calculer n = p × q |
Facile (quelques microsecondes) |
Retrouver p et q à partir de n |
Extrêmement difficile (années de calcul pour 2048 bits) |
Sans p et q, il est impossible de calculer φ(n), donc impossible de trouver d à partir de e et n seuls.
Avantages :
- Pas besoin de partager une clé secrète à l'avance
- Permet l'authentification (signature numérique)
Inconvénients :
- Beaucoup plus lent que le chiffrement symétrique
- Utilisé uniquement pour chiffrer de petites données (ex : une clé AES)
3. HTTPS – Sécuriser le Web
3.1 Le problème de l'authentification
Jusqu'ici, nous avons supposé qu'Alice connaît avec certitude la clé publique de Bob.
Mais comment s'en assurer sur Internet ?
Attaque de l'homme du milieu (Man-in-the-Middle) :
Eve intercepte la clé publique de Bob avant qu'elle n'arrive à Alice, et la remplace par sa propre clé publique. Alice chiffre alors son message avec la clé d'Eve sans le savoir. Eve déchiffre le message, peut le lire ou le modifier, puis le rechiffre avec la vraie clé de Bob et le transmet. Bob reçoit le message normalement — ni Alice ni Bob ne détectent l'intrusion.
Alice Eve Bob
| | |
| ←— clé publique Eve | ←— clé publique Bob |
| | |
| —— message chiffré → | —— re-chiffré ——————→|
| (pour Eve) | |
Alice croit parler à Bob, mais Eve lit tout.
Pour résoudre ce problème, il faut un tiers de confiance capable de certifier que la clé publique appartient bien à son propriétaire.
3.2 Les certificats numériques
Un certificat numérique est un document électronique qui associe :
- une clé publique
- à une identité (nom de domaine, organisation…)
- signé par une autorité de certification (CA) de confiance
Analogie : C'est comme une carte d'identité délivrée par l'État.
Vous faites confiance à la carte non pas parce que vous connaissez la personne,
mais parce que vous faites confiance à l'État qui l'a délivrée.
Les autorités de certification (DigiCert, Let's Encrypt, GlobalSign…) sont des organismes dont les clés publiques sont pré-installées dans votre navigateur.
Quand vous visitez wikipedia.org, le serveur envoie son certificat.
Votre navigateur vérifie que ce certificat a bien été signé par une CA de confiance.
Si oui, la clé publique est authentique. Eve ne peut pas falsifier ce certificat sans accès à la clé privée de la CA.
3.3 Déroulé d'une connexion HTTPS
HTTPS = HTTP + TLS (Transport Layer Security), le protocole qui sécurise la communication.
Voici les étapes d'une connexion HTTPS simplifiée :
1. Le client demande une connexion sécurisée
Votre navigateur contacte le serveur et indique qu'il veut communiquer en HTTPS.
2. Le serveur envoie son certificat
Le serveur transmet son certificat, qui contient sa clé publique et est signé par une CA.
3. Le navigateur vérifie le certificat
- La signature de la CA est-elle valide ?
- Le nom de domaine correspond-il ?
- Le certificat est-il encore valide (non expiré) ?
Si tout est bon, le cadenas s'affiche.
4. Échange de clé symétrique
Le navigateur génère une clé de session (clé AES aléatoire) et la chiffre avec la clé publique du serveur, et l'envoie.
5. Le serveur déchiffre la clé de session
Le serveur utilise sa clé privée pour obtenir la clé AES.
Les deux parties possèdent maintenant la même clé symétrique.
6. Communication chiffrée en AES
Toute la suite de la communication est chiffrée en AES, rapide et sûr.
Navigateur Serveur
| |
| ——— "Je veux du HTTPS" ————————→ |
| |
| ←——— certificat (clé publique) —— |
| |
| [vérification du certificat] |
| |
| ——— clé AES chiffrée (RSA) ——————→|
| |
| ←————— AES ————————————————————→ |
| (toute la communication) |
3.4 Ce que garantit HTTPS
- Confidentialité : Chiffrement AES de toute la communication
- Intégrité : Détection de toute modification des données
- Authentification : Certificat signé par une autorité de confiance
HTTPS ne garantit pas que le site est honnête ou légitime. Il garantit uniquement que vous communiquez bien avec ce site et que personne n'intercepte l'échange. Un site de phishing peut très bien avoir un certificat HTTPS valide.