◆   Mathématiques  ·  Sécurité  ·  Information   ◆

Cryptographie L'art du secret

C = E(K, M)   ·   M = D(K, C)   ·   H(M) ∈ {0,1}256

La cryptographie est la science de la protection de l'information par des transformations mathématiques. Elle garantit la confidentialité, l'intégrité, l'authenticité et la non-répudiation des données dans tous les systèmes numériques modernes.

—
Longueur clé AES-256
—
RSA recommandé (ANSSI)
—
Histoire du chiffrement
—
Espace de clés AES-256
01

Histoire de la cryptographie

« Il n'y a pas de secret qui ne soit destiné à être découvert. »

— Claude Shannon, Communication Theory of Secrecy Systems, 1949
~1900 av. J.-C.

Hiéroglyphes non-standards (Égypte)

Premières substitutions délibérées de signes — non par secret mais pour intriguer le lecteur. Considérée comme la première forme attestée de chiffrement.

~50 av. J.-C.

Chiffre de César

Jules César décale les lettres de l'alphabet d'un nombre fixe (décalage de 3). Premier exemple documenté de chiffrement par substitution monoalphabétique utilisé à des fins militaires.

IXe siècle

Al-Kindi & la cryptanalyse

Le mathématicien arabe Al-Kindi (801–873) invente l'analyse fréquentielle dans son Manuscrit sur le déchiffrement des messages cryptographiques, permettant de casser les substitutions monoalphabétiques.

XVIe siècle

Chiffre de Vigenère

Blaise de Vigenère publie un chiffre polyalphabétique utilisant une clé de longueur variable. Considéré indéchiffrable pendant 300 ans (le chiffre indéchiffrable), cassé par Babbage et Kasiski en 1863.

1917–1943

Vernam & le masque jetable

Gilbert Vernam invente le chiffre de Vernam (one-time pad). Shannon démontre en 1949 qu'il est le seul système parfaitement sûr au sens de la théorie de l'information, à condition que la clé soit aléatoire, aussi longue que le message et utilisée une seule fois.

1939–1945

Enigma & Bletchley Park

Alan Turing et l'équipe de Bletchley Park cassent la machine Enigma nazie. Naissance de l'informatique moderne et de la cryptanalyse systématique. Premiers ordinateurs (Colossus) dédiés au déchiffrement.

1976

Diffie-Hellman & la révolution asymétrique

Whitfield Diffie et Martin Hellman publient « New Directions in Cryptography », introduisant le concept révolutionnaire de cryptographie à clé publique et l'échange de clés sécurisé sur un canal non sécurisé.

1977

RSA

Rivest, Shamir et Adleman publient l'algorithme RSA, première implémentation pratique de la cryptographie asymétrique, basée sur la difficulté de factoriser de grands entiers.

2001

AES — Advanced Encryption Standard

Le NIST adopte Rijndael (Joan Daemen & Vincent Rijmen) comme standard AES après 5 ans de compétition publique. Remplace DES et 3DES. Devenu l'algorithme symétrique le plus déployé au monde.

2024

NIST finalise les standards post-quantiques

Le NIST publie FIPS 203 (ML-KEM/Kyber), FIPS 204 (ML-DSA/Dilithium) et FIPS 205 (SLH-DSA) en réponse à la menace des ordinateurs quantiques sur RSA et les courbes elliptiques.

02

Fondements théoriques

La cryptographie moderne repose sur des bases mathématiques solides — théorie de l'information, théorie des nombres, algèbre et complexité algorithmique.

Sécurité parfaite de Shannon (1949)
Pr[M = m | C = c] = Pr[M = m]

Un système est parfaitement sûr si la connaissance du chiffrée ne révèle aucune information sur le message clair. Seul le masque jetable (one-time pad) satisfait cette propriété. Nécessite |K| ≥ |M|.

Indiscernabilité (IND-CPA / IND-CCA)
|Pr[A gagne] - 1/2| ≤ negl(λ)

Un chiffrement est sûr IND-CPA si aucun adversaire polynomial ne peut distinguer les chiffrés de deux messages de son choix avec un avantage non négligeable. IND-CCA2 étend la sécurité aux attaques à chiffré choisi adaptatives.

Hypothèses de difficulté computationnelle
Factorisation · DLog · ECDLP · LWE · SIS

Factorisation : donné n = p·q, retrouver p et q. Base de RSA. Logarithme discret (DLog) : donné g, gx dans un groupe, retrouver x. Base de Diffie-Hellman. LWE (Learning With Errors) : distinguer des équations linéaires bruitées d'un vecteur aléatoire. Base post-quantique.

Arithmétique modulaire

Congruences & groupes

Fondement de RSA et Diffie-Hellman. a ≡ b (mod n) — l'entier a et b ont le même reste modulo n. Anneau ℤ/nℤ, groupe multiplicatif ℤn*, ordre d'un élément, théorème d'Euler φ(n).

Corps finis

GF(2⁸) & GF(p)

AES opère dans GF(2⁸) — corps de Galois à 256 éléments. Les opérations de SubBytes, MixColumns sont définies comme des opérations polynomiales dans ce corps.

Courbes elliptiques

y² = x³ + ax + b (mod p)

Groupe abélien sur l'ensemble des points. ECDLP beaucoup plus difficile que DLog classique à taille équivalente : 256 bits ECC ≈ 3072 bits RSA. Base d'ECDSA, ECDH, Ed25519.

Complexité

Classes P, NP, BPP

La sécurité conditionnelle suppose P ≠ NP (non prouvé). Les hypothèses de difficulté (factorisation, DLog) ne sont basées que sur l'absence d'algorithmes efficaces connus, pas sur une preuve d'impossibilité.

03

Chiffrement symétrique

Dans le chiffrement symétrique, la même clé secrète est utilisée pour chiffrer et déchiffrer. Très rapide, mais nécessite un canal sécurisé pour échanger la clé — le problème de distribution de clés.

CLAIR CRYPTOGRAPHIE EST LA SCIENCE DU SECRET
CLÉ décalage = 13 (ROT-13)
CHIFFRÉ PELCGBTENCUVR RFG YN FPVRAPR QH FRPERG
Texte
Décalage
Chiffré LQIRUPDWLTXH
1977 — Cassé

DES — Data Encryption Standard

56 bits de clé, blocs de 64 bits, 16 rounds de Feistel. Standardisé par le NIST en 1977. Cassé par force brute en 1999 (EFF Deep Crack, 22 h). Triple-DES (3DES) le remplace temporairement.

2001 — Standard actuel

AES — Advanced Encryption Standard

128/192/256 bits de clé, blocs de 128 bits. Réseau de substitution-permutation (SPN). 10/12/14 rounds selon la taille de clé. SubBytes, ShiftRows, MixColumns, AddRoundKey. Aucune attaque pratique connue. Standard mondial.

Chiffrement de flux

ChaCha20 & RC4

Chiffrement par XOR avec un flux pseudoaléatoire généré par la clé et un nonce. RC4 (déprécié, biaisé). ChaCha20 (Bernstein, 2008) — utilisé dans TLS 1.3, WireGuard. Plus rapide qu'AES sans accélération matérielle.

Modes d'opération

ECB · Electronic Codebook
Chaque bloc chiffré indépendamment. Déconseillé : deux blocs identiques donnent le même chiffré → fuite de motifs (problème du pingouin Linux).
CBC · Cipher Block Chaining
XOR du bloc clair avec le chiffré précédent avant chiffrement. Nécessite un IV aléatoire. Vulnérable aux attaques padding oracle (POODLE).
CTR · Counter Mode
Chiffrement d'un compteur incrémental, XOR avec le clair. Parallélisable, accès aléatoire. Pas de padding nécessaire. Base de GCM.
GCM · Galois/Counter Mode
CTR + authentification Galois MAC. AEAD (Authenticated Encryption with Associated Data). Standard TLS 1.3 : AES-128-GCM, AES-256-GCM. Chiffrement + intégrité en un seul pass.
04

Cryptographie asymétrique

Introduite par Diffie et Hellman en 1976, la cryptographie à clé publique résout le problème de la distribution de clés : chaque partie possède une paire (clé publique, clé privée).

RSA — Rivest Shamir Adleman (1977)
n = p·q    φ(n) = (p-1)(q-1)    e·d ≡ 1 (mod φ(n))

Clé publique : (n, e)  ·  Clé privée : d
Chiffrement : C = Mᵉ mod n  ·  Déchiffrement : M = Cᵈ mod n
Sécurité basée sur la difficulté de factoriser n. RSA-2048 : recommandé. RSA-4096 : haute sécurité.

Diffie-Hellman (ECDH)
Alice: A = g^a mod p   ·   Bob: B = g^b mod p   ·   Secret: K = g^(ab) mod p

Permet à deux parties de construire un secret partagé sur un canal public sans jamais le transmettre. ECDH utilise des courbes elliptiques : Curve25519 (X25519) est le standard moderne.

Signatures

DSA / ECDSA / EdDSA

Digital Signature Algorithm — basé sur DLog. ECDSA (courbes elliptiques) utilisé dans TLS et Bitcoin. Ed25519 (Edwards-curve DSA) : plus rapide, signatures déterministes, résistant aux failles de génération aléatoire.

Cryptosystème

El Gamal

Variante de Diffie-Hellman pour le chiffrement. Clé publique : (g, p, gˣ). Utilisé dans PGP/GPG. Sécurité basée sur DLog. Chiffrés deux fois plus longs que les messages.

Hybride

Chiffrement hybride

En pratique : RSA ou ECDH génère un secret de session → AES-GCM chiffre les données. Le meilleur des deux mondes : sécurité asymétrique + performance symétrique. Utilisé dans TLS, PGP, Signal.

Python · Cryptography — RSA & ECDH
from cryptography.hazmat.primitives.asymmetric import rsa, ec, padding
from cryptography.hazmat.primitives import hashes, serialization

# ── Génération d'une paire RSA-2048 ──
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
)
public_key = private_key.public_key()

# Chiffrement OAEP (RSA optimal asymmetric encryption padding)
ciphertext = public_key.encrypt(
    b"Message confidentiel",
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None,
    )
)

# ── ECDH avec Curve25519 ──
alice_priv = ec.generate_private_key(ec.SECP256R1())
bob_priv   = ec.generate_private_key(ec.SECP256R1())

shared_secret = alice_priv.exchange(
    ec.ECDH(), bob_priv.public_key()
)
print(f"Secret partagé : {shared_secret.hex()[:32]}...")
05

Fonctions de hachage cryptographiques

Une fonction de hachage H prend un message de taille arbitraire et produit un condensé de taille fixe. Elle doit être résistante aux préimages, aux secondes préimages et aux collisions.

Input 1 "cryptographie"
SHA-256 4c5f78c5e2d3b8a1f09e7c2d41b6e5f832d9a7c14e28b3f9a6d05c31e47b2a9
Input 2 "Cryptographie"
SHA-256 8b3e9f21c4d7a06e35b8f2c1d9a47e83f25c1b6d8e3a94f07c2b5d1e68f3a97
Résistance à la préimage
Étant donné h, il est computationnellement infaisable de trouver m tel que H(m) = h. Propriété de sens unique (one-way).
Résistance 2ème préimage
Étant donné m₁, infaisable de trouver m₂ ≠ m₁ tel que H(m₁) = H(m₂). Garantit l'intégrité.
Résistance aux collisions
Infaisable de trouver m₁ ≠ m₂ tels que H(m₁) = H(m₂). Paradoxe des anniversaires : probabilité ≈50% de collision après 2^(n/2) messages (n = longueur sortie).
Effet avalanche
Un seul bit modifié dans l'entrée change statistiquement ~50% des bits de la sortie. Garantit l'imprévisibilité.
Comparaison des algorithmes
Algorithme Sortie (bits) Construction Statut
MD5 128 Merkle–Damgård CASSÉ (collisions 1996)
SHA-1 160 Merkle–Damgård DÉPRÉCIÉ (SHAttered 2017)
SHA-256 256 Merkle–Damgård SÛRE — Standard NIST
SHA-3 (Keccak) 224/256/384/512 Sponge (éponge) RECOMMANDÉE — FIPS 202
BLAKE3 256 (extensible) Merkle tree TRÈS RAPIDE — Moderne
Argon2id variable Memory-hard MOTS DE PASSE — Prix PHC

HMAC (Hash-based Message Authentication Code) : HMAC(K, M) = H((K ⊕ opad) || H((K ⊕ ipad) || M)). Combine hachage et secret partagé pour authentifier l'intégrité d'un message. Utilisé dans JWT, TLS, APIs. HMAC-SHA256 est le standard actuel.

06

Protocoles cryptographiques

Signature

Signature numérique

σ = Sign(SK, H(M)). Vérification : Verify(PK, H(M), σ). Garantit authenticité + non-répudiation. Standard : PKCS#7, CAdES, PAdES (PDF), XAdES. Valeur légale en France (eIDAS).

Engagement

Zero-Knowledge Proofs

Prouver la connaissance d'un secret sans le révéler. Propriétés : complétude, solidité, zero-knowledge. zk-SNARKs (Groth16), zk-STARKs, Bulletproofs. Applications : blockchain (Zcash), identité anonyme.

Multi-parties

MPC — Secure Multi-Party Computation

n parties calculent f(x₁,…,xₙ) sans révéler leurs entrées individuelles. Secret sharing de Shamir (k-of-n), circuits cryptographiques, protocole BGW. Applications : enchères, vote électronique.

Chiffrement homomorphe

FHE — Fully Homomorphic Encryption

E(a) ⊕ E(b) = E(a+b). Calcul sur données chiffrées sans déchiffrement. Breakthrough : Craig Gentry (2009). Schémas : BGV, BFV, CKKS (flottants), TFHE. Applications : cloud privacy-preserving.

Blockchain

Preuve de travail & Merkle Trees

Bitcoin combine SHA-256 (PoW), ECDSA (signatures), arbres de Merkle (intégrité). Ethereum : Keccak-256, Ed25519 dans Ethereum 2.0. Les NFT/smart contracts reposent sur l'immuabilité cryptographique.

Messagerie

Signal Protocol — Double Ratchet

Combinaison de X3DH (Extended Triple Diffie-Hellman) et Double Ratchet Algorithm. Forward secrecy + Break-in recovery. Chaque message a une clé éphémère. Utilisé dans Signal, WhatsApp, Messages (Apple).

Python · Signature ECDSA & HMAC
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import hashes
import hmac, hashlib

# ── Signature ECDSA P-256 ──
private_key = ec.generate_private_key(ec.SECP256R1())
message = b"Document a signer : rapport_q4_2024.pdf"

signature = private_key.sign(message, ec.ECDSA(hashes.SHA256()))

# Vérification (côté destinataire)
try:
    private_key.public_key().verify(signature, message, ec.ECDSA(hashes.SHA256()))
    print("✓ Signature valide")
except Exception:
    print("✗ Signature invalide !")

# ── HMAC-SHA256 ──
secret_key = b"cle_secrete_partagee"
mac = hmac.new(secret_key, message, hashlib.sha256).hexdigest()
print(f"HMAC-SHA256 : {mac}")
07

PKI & Protocole TLS

L'Infrastructure à Clé Publique (PKI) organise la confiance dans les clés publiques via une hiérarchie de certificats. TLS (Transport Layer Security) en est l'application la plus répandue.

Certificat X.509
Structure standardisée (RFC 5280) liant une identité à une clé publique. Contient : sujet, émetteur (CA), période de validité, clé publique, extensions (SAN, KeyUsage), signature de la CA.
Autorité de certification (CA)
Entité de confiance qui signe les certificats. Hiérarchie : Root CA (auto-signé, offline) → CA intermédiaires → certificats feuilles. Let's Encrypt : CA gratuite automatisée (ACME protocol).
Révocation : CRL & OCSP
Certificate Revocation List (CRL) : liste téléchargeable. OCSP (Online Certificate Status Protocol) : requête en temps réel. OCSP Stapling : le serveur joint la réponse OCSP au handshake.
TLS 1.3 (RFC 8446, 2018)
Handshake réduit à 1-RTT (0-RTT en reprise). Suppression des algorithmes faibles (RSA-key-exchange, RC4, SHA-1, CBC). Forward secrecy obligatoire (ECDHE). Cipher suites : TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256.
Certificate Transparency (CT)
Journaux publics append-only de tous les certificats émis. Permet la détection de certificats frauduleux. Obligatoire pour Chrome depuis 2018. Structure Merkle tree pour garantir l'immuabilité.
08

Cryptographie post-quantique

« Un ordinateur quantique suffisamment puissant casserait RSA, ECDSA et Diffie-Hellman en temps polynomial grâce à l'algorithme de Shor. »

— Peter Shor, Polynomial-Time Algorithms for Prime Factorization, 1994

L'algorithme de Shor (1994) résout en O(log³n) la factorisation et le logarithme discret sur un ordinateur quantique — rendant obsolètes RSA, DSA, ECDSA et DH. AES et SHA-3 résistent mieux (Grover réduit la sécurité effective de moitié).

FIPS 203 — Chiffrement

ML-KEM (Kyber)

Mécanisme d'encapsulation de clé basé sur Module-LWE. Très efficace, petites clés. Variantes : Kyber-512, Kyber-768, Kyber-1024. Standard NIST post-quantique pour le KEM.

FIPS 204 — Signature

ML-DSA (Dilithium)

Schéma de signature basé sur Module-LWE + Module-SIS. Signatures compactes, vérification rapide. Dilithium2 (sécurité NIST niveau 1), Dilithium3 (niveau 3), Dilithium5 (niveau 5).

FIPS 205 — Signature

SLH-DSA (SPHINCS+)

Signature à base de hachage uniquement (stateless). Sécurité très conservatrice, pas d'hypothèse algébrique. Signatures plus grandes mais robustesse maximale. Seule alternative si LWE s'avérait faible.

En cours — Signature

FALCON (FN-DSA)

Basé sur des réseaux NTRU (lattice-based). Petites signatures (666 B niveau 1). Génération de clés complexe (FFT sur réseaux gaussiens). Candidat NIST round 4.

Transition

Hybridation classique + PQ

Pendant la transition, combiner un algorithme classique (ECDH) avec un algorithme PQ (Kyber). X25519+Kyber768 dans Chrome/Firefox (2023). Un adversaire doit casser les deux pour réussir.

Stratégie

Harvest now, decrypt later

Des adversaires stockent aujourd'hui des communications chiffrées pour les déchiffrer quand un ordinateur quantique sera disponible. Urgence de migrer dès maintenant, surtout pour données sensibles à long terme.

09

Bibliothèques & Outils

Bibliothèques cryptographiques

OpenSSL / LibreSSL Bouncy Castle (Java) libsodium (NaCl) Python · cryptography PyCryptodome WebCrypto API (JS) Tink (Google) liboqs (Open Quantum Safe)

Outils pratiques

GPG / GnuPG OpenSSH Wireshark (TLS inspect) CyberChef Hashcat John the Ripper HashTool / MD5sum Sage Math
OpenSSL CLI — Commandes essentielles
# Générer une paire RSA-4096
openssl genrsa -out private.pem 4096
openssl rsa -in private.pem -pubout -out public.pem

# Générer une clé EC (P-256)
openssl ecparam -name prime256v1 -genkey -noout -out ec-key.pem

# Créer un CSR (Certificate Signing Request)
openssl req -new -key private.pem -out request.csr \
  -subj "/C=FR/ST=IDF/L=Paris/O=Universite/CN=crypto.univ.fr"

# Hacher un fichier
openssl dgst -sha256 -sign private.pem -out sig.bin document.pdf
openssl dgst -sha256 -verify public.pem -signature sig.bin document.pdf

# Chiffrer un fichier AES-256-GCM
openssl enc -aes-256-cbc -pbkdf2 -in secret.txt -out secret.enc
openssl enc -d -aes-256-cbc -pbkdf2 -in secret.enc -out decrypted.txt

# Inspecter un certificat TLS distant
echo | openssl s_client -connect example.com:443 2>/dev/null \
  | openssl x509 -text -noout | grep -E "Subject:|Not After"