Cryptosystèmes avancés
Ce chapitre approfondit l'étude des cryptosystèmes fondamentaux en se concentrant sur leurs fondements mathématiques, leurs implémentations pratiques et les aspects avancés de leur sécurité. Après un rappel des bases de la cryptographie, nous explorerons en détail les mécanismes de RSA, Diffie-Hellman et la cryptographie sur courbes elliptiques.
1.1. Rappels et approfondissement de RSA
Principes fondamentaux de RSA
Le système RSA (Rivest-Shamir-Adleman) est un cryptosystème à clé publique dont la sécurité repose sur la difficulté de factoriser le produit de deux grands nombres premiers. Revoyons ses principes fondamentaux avant d'explorer les aspects avancés.
- Choisir deux grands nombres premiers distincts
p
etq
- Calculer
n = p × q
- Calculer l'indicatrice d'Euler
φ(n) = (p-1) × (q-1)
- Choisir un entier
e
tel que1 < e < φ(n)
etpgcd(e, φ(n)) = 1
- Déterminer
d
tel qued × e ≡ 1 (mod φ(n))
La clé publique est (n, e)
et la clé privée est (n, d)
.
Pour un message m
(avec 0 ≤ m < n
) :
$$c = m^e \mod n$$
Où c
est le message chiffré.
Pour un message chiffré c
:
$$m = c^d \mod n$$
Où m
est le message original.
Aspects avancés de RSA
Choix des paramètres
La sécurité de RSA dépend crucialement du choix des paramètres :
- Taille des clés : En 2025, une clé RSA de 2048 bits est considérée comme un minimum pour des applications sécurisées, tandis que 4096 bits est recommandé pour une sécurité à long terme.
- Génération des nombres premiers : Les nombres
p
etq
doivent être générés aléatoirement à l'aide de méthodes cryptographiquement sûres, puis testés pour leur primalité avec des tests comme Miller-Rabin. - Choix de l'exposant public
e
: Les valeurs courantes sont 65537 (2^16 + 1), qui offre un bon compromis entre sécurité et efficacité.
Exemple: Génération d'une clé RSA de 2048 bits avec OpenSSL
openssl genrsa -out private_key.pem 2048
openssl rsa -in private_key.pem -pubout -out public_key.pem
Cette commande génère une clé privée RSA de 2048 bits et extrait la clé publique correspondante.
Schémas de rembourrage (Padding)
L'utilisation de RSA "brut" comme décrit ci-dessus est vulnérable à plusieurs attaques. Des schémas de rembourrage sont donc utilisés pour renforcer la sécurité :
Schéma | Description | Utilisation recommandée |
---|---|---|
PKCS#1 v1.5 | Méthode traditionnelle qui ajoute une structure au message avant le chiffrement | Déconseillé pour les nouvelles applications (vulnérable aux attaques de Bleichenbacher) |
OAEP (Optimal Asymmetric Encryption Padding) | Méthode avancée qui utilise des fonctions de hachage et intègre de l'aléa | Recommandé pour le chiffrement RSA |
PSS (Probabilistic Signature Scheme) | Schéma probabiliste spécifique pour les signatures | Recommandé pour les signatures RSA |
Le chiffrement RSA-OAEP utilise la fonction suivante :
$$c = (m' \oplus G(r) || r \oplus H(m' \oplus G(r)))^e \mod n$$
Où G
et H
sont des fonctions de dérivation, r
est une chaîne aléatoire, et m'
est le message à chiffrer avec un rembourrage spécifique.
Attaques contre RSA
Comprendre les attaques potentielles est essentiel pour une implémentation sécurisée :
- Attaque par factorisation : Vise à retrouver
p
etq
à partir den
. Les algorithmes comme le crible général des corps de nombres (GNFS) sont les plus efficaces. - Attaque par oracle de déchiffrement : Exploite des fuites d'information lors du déchiffrement (comme le timing ou les messages d'erreur).
- Attaque par exposant faible : Si
e
est petit et que le même message est chiffré pour plusieurs destinataires, l'attaque par théorème des restes chinois devient possible. - Attaque par modules communs : Si deux utilisateurs partagent le même module
n
mais des exposants différents, leurs clés privées peuvent être compromises.
1.2. Diffie-Hellman et ses variantes
Protocole Diffie-Hellman classique
Le protocole Diffie-Hellman (DH) permet à deux parties d'établir une clé partagée sur un canal non sécurisé, sans nécessiter d'échange préalable de secrets.
- Alice et Bob s'accordent sur un grand nombre premier
p
et un générateurg
du groupe multiplicatif modulop
(où1 < g < p
) - Alice choisit un nombre secret
a
et calculeA = g^a mod p
- Bob choisit un nombre secret
b
et calculeB = g^b mod p
- Alice envoie
A
à Bob, et Bob envoieB
à Alice - Alice calcule la clé partagée
K = B^a mod p
- Bob calcule la clé partagée
K = A^b mod p
Les deux calculs donnent le même résultat car B^a = (g^b)^a = g^(a*b) = (g^a)^b = A^b mod p
.
Sécurité de Diffie-Hellman
La sécurité du protocole DH repose sur le problème du logarithme discret : même en connaissant g
, p
, A
et B
, il est calculatoirement difficile de déterminer a
ou b
, et donc la clé partagée.
Pour une sécurité adéquate, plusieurs conditions doivent être respectées :
- Taille des paramètres : En 2025,
p
devrait avoir au moins 2048 bits pour une sécurité à court terme, et 3072 bits pour une sécurité à long terme. - Choix de
p
:p
doit être un nombre premier tel que(p-1)/2
soit également premier (on parle alors de nombre premier sûr). - Choix de
g
:g
doit être un générateur du groupe multiplicatif modulop
, ou au moins d'un sous-groupe d'ordre premier suffisamment grand.
Pour une sécurité équivalente à une clé symétrique de n
bits, on estime que la taille de p
en bits doit être approximativement :
$$\text{Taille de } p \approx 2^{n/2} \cdot \sqrt{\ln(2^{n/2})}$$
Variantes et extensions de Diffie-Hellman
Diffie-Hellman authentifié
Le protocole DH standard ne fournit pas d'authentification des parties, le rendant vulnérable aux attaques de l'homme du milieu. Pour remédier à cela, on utilise des variantes authentifiées :
- Station-to-Station (STS) : Intègre des signatures numériques pour authentifier les échanges
- MQV (Menezes-Qu-Vanstone) : Protocole d'authentification mutuelle plus efficace que STS
Diffie-Hellman éphémère (DHE)
Dans cette variante, les clés privées a
et b
sont générées de façon éphémère pour chaque session, offrant la propriété de confidentialité persistante (forward secrecy) : si une clé privée à long terme est compromise, les communications passées restent sécurisées.
Diffie-Hellman sur courbe elliptique (ECDH)
Cette variante implémente le même principe que DH mais dans le groupe des points d'une courbe elliptique plutôt que dans un groupe multiplicatif de nombres entiers. L'avantage principal est l'utilisation de clés plus courtes pour un niveau de sécurité équivalent.
Type | Taille de clé DH | Taille de clé ECDH | Niveau de sécurité |
---|---|---|---|
Minimum actuel | 2048 bits | 256 bits | ~128 bits |
Sécurité élevée | 3072 bits | 384 bits | ~192 bits |
Sécurité à long terme | 7680 bits | 512 bits | ~256 bits |
1.3. Cryptographie sur courbes elliptiques (ECC)
Principes mathématiques des courbes elliptiques
Une courbe elliptique sur un corps fini est définie par une équation de la forme :
$$y^2 = x^3 + ax + b \mod p$$
où a
et b
sont des constantes telles que 4a^3 + 27b^2 ≠ 0 \mod p
pour éviter les singularités.
Les points de la courbe, ainsi que le point à l'infini noté \(O\), forment un groupe sous l'opération d'addition de points, qui a des propriétés géométriques intéressantes :
Pour additionner deux points distincts P et Q, on trace une ligne à travers eux, qui coupe la courbe en un troisième point R. P + Q est alors le symétrique de R par rapport à l'axe des x.
Pour doubler un point P, on trace la tangente à la courbe en P, qui coupe la courbe en un autre point R. 2P est alors le symétrique de R par rapport à l'axe des x.
Multiplication scalaire
L'opération fondamentale en cryptographie à courbe elliptique est la multiplication scalaire : étant donné un point P
sur la courbe et un entier k
, calculer Q = k·P
(c'est-à-dire P
additionné à lui-même k
fois).
La sécurité de l'ECC repose sur le problème du logarithme discret sur courbe elliptique (ECDLP) : étant donné les points P
et Q = k·P
, il est calculatoirement difficile de déterminer k
.
Courbes elliptiques standards
Le choix de la courbe elliptique est crucial pour la sécurité. Plusieurs courbes standardisées sont largement utilisées :
Courbe | Taille | Description | Recommandation |
---|---|---|---|
NIST P-256 (secp256r1) | 256 bits | Courbe sur un corps premier, standardisée par le NIST | Largement utilisée, considérée comme sûre |
Curve25519 | 255 bits | Courbe de Montgomery conçue pour l'efficacité et la résistance aux attaques par canaux auxiliaires | Recommandée pour les nouvelles implémentations |
NIST P-384 (secp384r1) | 384 bits | Version plus grande de P-256 pour une sécurité accrue | Utilisée pour les applications nécessitant un haut niveau de sécurité |
Curve448 | 448 bits | Version plus grande de Curve25519 | Sécurité à long terme |
brainpoolP256r1 | 256 bits | Courbe "transparente" dont les paramètres sont dérivés de façon vérifiable | Alternative à P-256, utilisée notamment en Europe |
Applications de l'ECC
La cryptographie à courbe elliptique est utilisée dans de nombreux protocoles et systèmes :
Variante de Diffie-Hellman sur courbes elliptiques pour l'échange de clés :
- Alice et Bob s'accordent sur une courbe et un point générateur
G
- Alice choisit un secret
a
et calculeA = a·G
- Bob choisit un secret
b
et calculeB = b·G
- Ils échangent
A
etB
- Alice calcule
K = a·B = a·(b·G) = (a·b)·G
- Bob calcule
K = b·A = b·(a·G) = (b·a)·G
Le point K
est ensuite transformé en clé symétrique.
Algorithme de signature numérique basé sur les courbes elliptiques :
Génération de clés :
- Clé privée : entier aléatoire
d
- Clé publique : point
Q = d·G
Signature (simplifié) :
- Choisir un nombre aléatoire
k
- Calculer
R = k·G
etr = Rx mod n
- Calculer
s = k-1(H(m) + d·r) mod n
La signature est la paire (r, s)
.
Considérations de sécurité pour l'ECC
Pour une implémentation sécurisée de l'ECC, plusieurs points requièrent une attention particulière :
- Génération de nombres aléatoires : Des nombres aléatoires faibles ou prédictibles, notamment pour le paramètre
k
dans ECDSA, peuvent compromettre complètement la sécurité (comme ce fut le cas pour la PlayStation 3). - Validation des points : Il est essentiel de vérifier que les points reçus se trouvent bien sur la courbe et n'appartiennent pas à un sous-groupe d'ordre faible.
- Protection contre les attaques par canaux auxiliaires : Les implémentations doivent résister aux analyses de temps, de consommation électrique et aux attaques par injection de fautes.
- Courbes potentiellement compromises : Certaines courbes standardisées, notamment celles du NIST, ont été scrutées en raison de préoccupations sur la possibilité de backdoors introduites par des agences gouvernementales.
Exemple: Implémentation d'ECDH avec OpenSSL
# Génération d'une clé privée ECDH pour Alice
openssl ecparam -name prime256v1 -genkey -noout -out alice_key.pem
# Extraction de la clé publique d'Alice
openssl ec -in alice_key.pem -pubout -out alice_pub.pem
# Génération d'une clé privée ECDH pour Bob
openssl ecparam -name prime256v1 -genkey -noout -out bob_key.pem
# Extraction de la clé publique de Bob
openssl ec -in bob_key.pem -pubout -out bob_pub.pem
# Alice dérive la clé partagée à partir de la clé publique de Bob
openssl pkeyutl -derive -inkey alice_key.pem -peerkey bob_pub.pem -out shared_key_alice.bin
# Bob dérive la clé partagée à partir de la clé publique d'Alice
openssl pkeyutl -derive -inkey bob_key.pem -peerkey alice_pub.pem -out shared_key_bob.bin
# Vérification que les clés dérivées sont identiques
cmp shared_key_alice.bin shared_key_bob.bin
Exercices associés
Mettez en pratique les concepts de ce chapitre avec les exercices dédiés.
Accéder aux exercicesRessources complémentaires
- "Handbook of Applied Cryptography" - A. Menezes, P. van Oorschot, S. Vanstone
- RFC 8017: PKCS #1 v2.2: RSA Cryptography Specifications
- SafeCurves: choosing safe curves for elliptic-curve cryptography
- Documentation OpenSSL pour les commandes cryptographiques