Aller au contenu

Chapitre 9 - Partie 3 : Sécurisation des communications


Lorsqu'un message transite sur un réseau (Internet notamment), il peut être :

  • Intercepté : un tiers lit le contenu du message (écoute passive) ;
  • Modifié : un tiers altère le contenu sans que l'expéditeur ou le destinataire le sache ;
  • Usurpé : un tiers se fait passer pour l'expéditeur ou le destinataire.

La cryptographie (du grec kruptos, « caché », et graphein, « écrire ») est la science de la protection des messages. Elle repose sur le chiffrement : transformer un message lisible (texte clair) en un message incompréhensible (texte chiffré) à l'aide d'une clé.

TermeDéfinition
Texte clairMessage lisible original
Texte chiffréMessage rendu illisible par le chiffrement
CléInformation secrète nécessaire pour chiffrer ou déchiffrer
ChiffrementTransformation du clair en chiffré
DéchiffrementTransformation du chiffré en clair (avec la clé)

Dans le chiffrement symétrique, la même clé sert à chiffrer et à déchiffrer le message. Cette clé doit être partagée entre l'expéditeur et le destinataire, et connue d'eux seuls.

Clé secrète K Clé secrète K
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Chiffrement │ │Déchiffrement│
└──────┬──────┘ └──────┬──────┘
│ │
Texte ───┘ ──── Texte chiffré ──── └─── Texte
clair (canal non sûr) clair

Le plus ancien exemple : chaque lettre est décalée d'un nombre fixe de positions dans l'alphabet.

Avec un décalage de 3 : A → D, B → E, C → F, ..., X → A, Y → B, Z → C.

Texte clairBONJOUR
Texte chiffré (décalage 3)ERQMRXU

Faiblesse : seulement 25 clés possibles → cassable par force brute (essayer toutes les clés) et par analyse fréquentielle (la lettre la plus fréquente en français est « e »).

def chiffrement_cesar(texte, decalage):
alphabet = "abcdefghijklmnopqrstuvwxyz"
resultat = ""
for lettre in texte.lower():
if lettre in alphabet:
indice = (alphabet.index(lettre) + decalage) % 26
resultat += alphabet[indice]
else:
resultat += lettre
return resultat
def dechiffrement_cesar(texte, decalage):
return chiffrement_cesar(texte, -decalage)
>>> chiffrement_cesar("bonjour", 3)
'erqmrxu'
>>> dechiffrement_cesar("erqmrxu", 3)
'bonjour'

Le chiffrement de Vernam utilise une clé aussi longue que le message, composée de caractères aléatoires. Chaque caractère du message est combiné avec le caractère correspondant de la clé par un XOR (ou exclusif).

C'est le seul chiffrement prouvé mathématiquement incassable (à condition que la clé soit vraiment aléatoire et utilisée une seule fois).

def chiffrement_vernam(texte, cle):
return bytes([t ^ c for t, c in zip(texte.encode(), cle.encode())])
AlgorithmeTaille de cléUsage
DES56 bitsObsolète (cassable)
AES128, 192 ou 256 bitsStandard actuel (Wi-Fi, disques chiffrés, HTTPS)

AES (Advanced Encryption Standard) est utilisé partout aujourd'hui. Avec une clé de 256 bits, il faudrait des milliards d'années pour casser le chiffrement par force brute.

Le chiffrement symétrique pose un problème fondamental : comment transmettre la clé secrète au destinataire de façon sûre ? Si on l'envoie sur le réseau en clair, un attaquant peut l'intercepter.

C'est ce problème que résout le chiffrement asymétrique.


Dans le chiffrement asymétrique, chaque personne possède une paire de clés :

  • une clé publique : connue de tous, utilisée pour chiffrer ;
  • une clé privée : connue uniquement du propriétaire, 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.

Bob veut envoyer un message à Alice
Bob connaît la clé Alice possède la
publique d'Alice clé privée d'Alice
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ Chiffrement │ │Déchiffrement│
│ (clé pub. │ │ (clé privée │
│ d'Alice) │ │ d'Alice) │
└──────┬──────┘ └──────┬──────┘
│ │
Texte ───┘ ── Texte chiffré ── └─── Texte
clair (canal non sûr) clair

RSA (du nom de ses inventeurs Rivest, Shamir et Adleman, 1977) est l'algorithme de chiffrement asymétrique le plus connu. Il repose sur la difficulté de factoriser de très grands nombres.

OpérationFacileDifficile
Multiplier deux grands nombres premiersOui (quelques ms)-
Trouver les facteurs premiers d'un grand nombre-Oui (des milliards d'années)
AvantagesLimites
Pas besoin d'échanger de clé secrèteBeaucoup plus lent que le symétrique
La clé publique peut être diffusée librementClés plus longues (2048 ou 4096 bits)
Permet la signature numériqueNon adapté au chiffrement de gros volumes

En pratique, on combine les deux approches :

  1. Le chiffrement asymétrique pour échanger une clé secrète en toute sécurité ;
  2. Le chiffrement symétrique (avec cette clé) pour chiffrer les données échangées rapidement.

HTTPS (HTTP Secure) sécurise les communications entre un navigateur et un serveur Web. Voici les étapes simplifiées de l'établissement d'une connexion HTTPS :

Navigateur (client) Serveur Web
│ │
│──── 1. Demande de connexion ────────►│
│ │
│◄─── 2. Certificat + clé publique ───│
│ │
│ 3. Vérification du certificat │
│ │
│──── 4. Clé symétrique chiffrée │
│ (avec la clé publique) ─────────►│
│ │
│ 5. Le serveur déchiffre avec │
│ sa clé privée │
│ │
│◄═══ 6. Communication chiffrée ══════►│
│ (avec la clé symétrique) │

Détail des étapes :

  1. Le navigateur contacte le serveur en HTTPS ;
  2. Le serveur envoie son certificat (contenant sa clé publique, vérifié par une autorité de certification) ;
  3. Le navigateur vérifie que le certificat est valide et authentique ;
  4. Le navigateur génère une clé de session (symétrique) et l'envoie chiffrée avec la clé publique du serveur ;
  5. Le serveur déchiffre la clé de session avec sa clé privée ;
  6. Toutes les données sont ensuite chiffrées avec la clé de session (chiffrement symétrique, rapide).

Un certificat garantit que la clé publique appartient bien au serveur annoncé. Il est délivré par une autorité de certification (AC) reconnue.

Le cadenas dans la barre d'adresse du navigateur indique qu'une connexion HTTPS est établie et que le certificat est valide.

PhaseChiffrementRaison
Échange de cléAsymétrique (RSA)Sécurise la transmission de la clé sans secret partagé préalable
Échange de donnéesSymétrique (AES)Rapide, adapté à de gros volumes de données

5. Activité débranchée : échange de messages chiffrés

Section intitulée « 5. Activité débranchée : échange de messages chiffrés »

Alice et Bob se mettent d'accord sur un décalage de 7.

  • Alice chiffre « BONJOUR » → ?
  • Bob reçoit le texte chiffré et le déchiffre.

Comment Alice et Bob se sont-ils mis d'accord sur la clé 7 ? Si un espion écoute cette conversation, il connaît aussi la clé.

  • Bob génère une paire de clés (publique : 5, privée : 21 - simplifié) ;
  • Bob envoie sa clé publique 5 à Alice (en clair, pas grave) ;
  • Alice chiffre la clé symétrique 7 avec la clé publique de Bob ;
  • Bob déchiffre avec sa clé privée 21 et obtient 7 ;
  • Désormais, Alice et Bob communiquent avec le chiffrement de César, clé 7.

ConceptDescription
Chiffrement symétriqueMême clé pour chiffrer et déchiffrer (AES, César)
Chiffrement asymétriquePaire clé publique / clé privée (RSA)
Clé publiqueConnue de tous, sert à chiffrer
Clé privéeSecrète, sert à déchiffrer
HTTPSHTTP sécurisé : asymétrique pour échanger la clé, puis symétrique pour les données
CertificatDocument prouvant l'identité du serveur et sa clé publique
Protocole hybrideCombinaison asymétrique (échange de clé) + symétrique (données)