Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 417 minIntermédiaire

Chiffrement asymétrique : RSA, Diffie-Hellman et courbes elliptiques

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • dire quelle clé chiffre, déchiffre, signe et vérifie ;
  • dérouler RSA avec de petits nombres : n, φ(n), e, d ;
  • calculer un secret partagé avec Diffie-Hellman ;
  • expliquer le chiffrement hybride et comparer RSA et courbes elliptiques ;
  • générer une paire de clés avec OpenSSL et ssh-keygen.

5 exercices corrigés2 schémas

Le chiffrement asymétrique, ou chiffrement à clé publique, utilise une paire de clés liées mathématiquement : une clé publique, que tout le monde peut connaître, et une clé privée, que son propriétaire est seul à détenir. Ce que l'une fait, seule l'autre peut le défaire. Ce chapitre explique les deux usages de la paire (chiffrer et signer), déroule RSA et Diffie-Hellman avec de petits nombres, présente les courbes elliptiques et montre comment, en pratique, asymétrique et symétrique travaillent ensemble.

Clé publique et clé privée

Imagine une boîte aux lettres : n'importe qui peut y glisser une lettre par la fente, seul le propriétaire a la clé pour l'ouvrir. La fente, c'est la clé publique ; la clé de la boîte, c'est la clé privée. Deux propriétés rendent le système possible :

  • connaître la clé publique ne permet pas, en pratique, de calculer la clé privée ;
  • ce qui est chiffré avec la clé publique ne se déchiffre qu'avec la clé privée correspondante, et inversement pour la signature.

La clé publique se publie : dans un annuaire, sur un site web, dans un certificat, dans le fichier authorized_keys d'un serveur SSH. La clé privée ne quitte jamais son propriétaire : elle reste dans un fichier protégé par une phrase de passe, une carte à puce, une clé de sécurité USB, le TPM d'un PC ou le module matériel (HSM) d'une autorité de certification.

Deux usages : chiffrer pour quelqu'un, signer pour prouver

La même paire de clés sert à deux opérations qui se font dans des sens opposés. Les confondre est l'erreur la plus fréquente des copies.

Chiffrer pour BobAlicemessage clairMessage chiffréillisible en routeBobmessage clairclé publiquede Bobclé privéede BobConfidentialité : n'importe qui chiffre pour Bob, seul Bob déchiffreBob signeBobdocumentDocument+ signatureN'importe quisignature valideclé privéede Bobclé publiquede BobIntégrité, authenticité, non-répudiation : seul Bob signe, tous vérifient
Chiffrer avec la clé publique du destinataire ; signer avec sa propre clé privée
OpérationQui l'effectueAvec quelle cléQui peut défaire ou vérifierService rendu
Chiffrer un message pour BobN'importe qui (Alice)La clé publique de BobSeulement Bob, avec sa clé privéeConfidentialité
Signer un documentBobSa clé privéeN'importe qui, avec la clé publique de BobIntégrité, authenticité, non-répudiation

RSA pas à pas avec de petits nombres

RSA, publié en 1977 par Ron Rivest, Adi Shamir et Leonard Adleman, repose sur un constat d'arithmétique : multiplier deux grands nombres premiers est instantané, retrouver ces deux nombres à partir de leur produit est extrêmement long. Voici l'algorithme avec des nombres minuscules, pour comprendre le mécanisme ; les vraies clés utilisent des nombres de plus de 300 chiffres.

1. Choisir deux nombres premiers p = 13 et q = 19 (ils restent secrets).

2. Calculer le module n = p × q = 247. Il fait partie des deux clés.

3. Calculer l'indicatrice d'Euler φ(n) = (p − 1)(q − 1) = 12 × 18 = 216. Seul celui qui connaît p et q sait la calculer.

4. Choisir l'exposant public e, premier avec φ(n). Ici e = 5, car PGCD(5, 216) = 1 (en pratique, on prend presque toujours e = 65 537).

5. Calculer l'exposant privé d, inverse de e modulo φ(n) : e × d ≡ 1 [216]. L'algorithme d'Euclide donne 216 = 5 × 43 + 1, donc 1 = 216 − 5 × 43, et d ≡ −43 ≡ 173 [216]. Vérification : 5 × 173 = 865 = 4 × 216 + 1. C'est l'inverse modulaire du cours d'arithmétique.

  • Clé publique : (n, e) = (247, 5).
  • Clé privée : (n, d) = (247, 173).

Chiffrer un message m (un nombre plus petit que n) : c = mᵉ mod n. Pour m = 42, on calcule 42⁵ mod 247 par élévations au carré successives :

text
42² = 1 764      1 764 mod 247 = 35      (247 × 7 = 1 729)
42⁴ = 35² = 1 225   1 225 mod 247 = 237  (247 × 4 = 988)
42⁵ = 42⁴ × 42 ≡ 237 × 42 = 9 954   9 954 mod 247 = 74   (247 × 40 = 9 880)

Le chiffré est c = 74.

Déchiffrer : m = cᵈ mod n = 74¹⁷³ mod 247 = 42. Le calcul est long à la main, immédiat pour un ordinateur ; la propriété mathématique (le théorème d'Euler) garantit qu'on retombe toujours sur m.

Pour casser cette clé, un attaquant doit retrouver d à partir de (247, 5). Il lui suffit de factoriser 247 = 13 × 19, puis de refaire les étapes 3 à 5. Avec 247, c'est immédiat. Avec un module de 2 048 bits (617 chiffres décimaux), aucune méthode connue n'y parvient : le record public de factorisation d'un module RSA est de 829 bits (RSA-250, en 2020), au prix de milliers d'années de calcul cumulé.

Quelle taille de clé RSA en 2026 ? Le guide de l'ANSSI fixe la règle : un module d'au moins 2 048 bits, pour un usage qui ne dépasse pas la fin de l'année 2030, et recommande 3 072 bits même avant cette date. Une clé de 1 024 bits n'est plus acceptable.

Diffie-Hellman : se mettre d'accord sur un secret en public

En 1976, Whitfield Diffie et Martin Hellman publient une idée qui semblait impossible : deux personnes qui ne se sont jamais rencontrées peuvent convenir d'une clé secrète commune en n'échangeant que des messages publics. C'est l'échange de clés Diffie-Hellman (DH).

On fixe publiquement un grand nombre premier p et un générateur g. Avec de petits nombres, p = 23 et g = 5 :

  1. Alice choisit un secret a = 4 et envoie A = gᵃ mod p = 5⁴ mod 23 = 625 mod 23 = 4.
  2. Bob choisit un secret b = 3 et envoie B = gᵇ mod p = 5³ mod 23 = 125 mod 23 = 10.
  3. Alice calcule Bᵃ mod p = 10⁴ mod 23 = 10 000 mod 23 = 18.
  4. Bob calcule Aᵇ mod p = 4³ mod 23 = 64 mod 23 = 18.

Les deux obtiennent le même secret, 18, car (gᵇ)ᵃ = (gᵃ)ᵇ = gᵃᵇ. L'espion a vu passer p, g, A et B, mais pour calculer le secret il lui faudrait retrouver a à partir de A = gᵃ mod p : c'est le problème du logarithme discret, impossible à résoudre en pratique avec des nombres de 2 048 bits ou sur une courbe elliptique bien choisie.

AliceRéseau publicBobsecret a = 4p = 23, g = 5connus de toussecret b = 3A = 5⁴ mod 23 = 4B = 5³ mod 23 = 10A = 4B = 10L'espion voit p, g, A et Breçoit Breçoit A10⁴ mod 23 = 184³ mod 23 = 18Même secret partagé, 18, jamais transmis
Diffie-Hellman : deux calculs différents, le même secret, sans jamais l'envoyer

Diffie-Hellman a une faiblesse : il ne dit pas avec qui on échange. Un attaquant placé au milieu (man in the middle) peut mener un échange avec Alice en se faisant passer pour Bob, et un autre avec Bob en se faisant passer pour Alice, puis relayer et lire tout le trafic. La parade consiste à authentifier l'échange : en TLS, le serveur signe sa part de l'échange avec la clé privée de son certificat (chapitre 9).

Quand les secrets a et b sont tirés au hasard pour chaque connexion puis effacés, on parle de Diffie-Hellman éphémère (DHE, ou ECDHE sur courbe elliptique). Même si la clé privée du serveur est volée un jour, les anciennes conversations enregistrées restent indéchiffrables : c'est la confidentialité persistante (forward secrecy), obligatoire en TLS 1.3.

Les courbes elliptiques : mêmes services, clés plus courtes

La cryptographie sur courbes elliptiques (ECC) remplace les calculs modulo un grand nombre premier par des opérations sur les points d'une courbe. Elle offre la même sécurité avec des clés beaucoup plus courtes, donc des calculs plus rapides et des certificats plus légers. Les équivalences admises (NIST, publication SP 800-57) :

Niveau de sécuritéSymétriqueRSA ou DH classiqueCourbe elliptique
112 bits3DES (obsolète)2 048 bits224 bits
128 bitsAES-1283 072 bits256 bits (P-256, Curve25519)
192 bitsAES-1927 680 bits384 bits (P-384)
256 bitsAES-25615 360 bits512 bits et plus (P-521)

Les courbes que tu croiseras :

  • P-256 et P-384, normalisées par le NIST, très répandues dans les certificats web ;
  • Curve25519, conçue par Daniel J. Bernstein : X25519 pour l'échange de clés (le plus utilisé en TLS 1.3), Ed25519 pour les signatures (le type de clé SSH recommandé aujourd'hui).

Le guide de l'ANSSI exige un sous-groupe dont l'ordre est un nombre premier d'au moins 250 bits : P-256, P-384, Curve25519 et Brainpool P256r1 conviennent.

Le chiffrement hybride : le meilleur des deux mondes

Le chiffrement asymétrique est lent, des centaines à des milliers de fois plus que l'AES, et RSA ne chiffre directement qu'un message plus court que sa clé. On ne s'en sert donc jamais pour chiffrer un fichier ou un flux. Les protocoles combinent les deux familles :

  1. on tire au hasard une clé de session symétrique (256 bits) ;
  2. on chiffre les données avec cette clé, en AES-GCM ou ChaCha20-Poly1305 ;
  3. on transmet la clé de session protégée par l'asymétrique : chiffrée avec la clé publique du destinataire (PGP, S/MIME), ou convenue par un échange Diffie-Hellman authentifié (TLS 1.3, SSH, WireGuard).
SymétriqueAsymétrique
ClésUne clé secrète partagéeUne paire : publique et privée
VitesseTrès rapideLent
UsageChiffrer les donnéesÉchanger les clés, signer
Nombre de clés pour n personnesn(n − 1)/2n paires
ExemplesAES, ChaCha20RSA, ECDH (X25519), ECDSA, Ed25519

Générer et protéger une paire de clés

Avec OpenSSL, la commande genpkey génère une clé privée, et pkey -pubout en extrait la clé publique :

bash
# Paire RSA de 3 072 bits
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out cle-privee.pem
openssl pkey -in cle-privee.pem -pubout -out cle-publique.pem

# Paire sur courbe elliptique P-256, ou Ed25519
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out cle-ec.pem
openssl genpkey -algorithm ed25519 -out cle-ed25519.pem

Les fichiers commencent par -----BEGIN PRIVATE KEY----- et -----BEGIN PUBLIC KEY----- : c'est le format PEM, du Base64 entre deux lignes d'en-tête.

Pour SSH (administration des serveurs Debian, git push vers GitHub), on génère une paire Ed25519 protégée par une phrase de passe :

bash
ssh-keygen -t ed25519 -C "technicien@helianthe.lan"
# Crée ~/.ssh/id_ed25519 (privée, à protéger) et ~/.ssh/id_ed25519.pub (publique, à déposer)
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@srv-portail.helianthe.lan

La clé publique est ajoutée au fichier ~/.ssh/authorized_keys du serveur. À la connexion, le serveur envoie un défi que le client signe avec sa clé privée : le serveur vérifie la signature avec la clé publique, sans qu'aucun secret ne circule. Une fois les clés en place, on désactive l'authentification par mot de passe (PasswordAuthentication no dans /etc/ssh/sshd_config). Le cours Git et GitHub montre la même démarche pour GitHub.

Protéger la clé privée, c'est :

  • la chiffrer avec une phrase de passe (proposée par ssh-keygen, option -aes256 de openssl genpkey) ;
  • restreindre ses droits (chmod 600 sous Linux) ;
  • pour les clés les plus précieuses (autorité de certification, signature de code), la garder dans un matériel dont elle ne sort pas : carte à puce, clé FIDO2, TPM, HSM ;
  • la révoquer et la remplacer dès qu'elle est soupçonnée compromise (un portable volé, un départ).

À l'E7 : comment la notion est demandée

  • Justifier HTTPS. Un sujet SLAM de la session 2025 (cas Kirassur) fait justifier le choix de HTTPS pour une API dont la clé d'accès circule dans les adresses : expliquer l'événement redouté en HTTP (l'interception de la clé), puis comment HTTPS protège. La réponse attendue mobilise ce chapitre et le chapitre 9 : échange de clés authentifié par le certificat, puis chiffrement symétrique des échanges.
  • Transférer un fichier volumineux en toute confidentialité. Le sujet SLAM 2025 (cas Casterman) demande une solution pour transmettre un PDF de 2 Go à un imprimeur. SFTP avec authentification par clés SSH est une réponse solide (transférer un fichier sensible).
  • Dire quelle clé utiliser dans un schéma d'échange, et pourquoi la clé privée ne circule pas.

En SISR, l'asymétrique se retrouve dans l'administration à distance par clés SSH, l'authentification des VPN par certificats et l'autorité de certification interne. En SLAM, dans les jetons signés en RS256 ou ES256 (chapitre 7) et dans le déploiement par clé SSH.

Exercices

Exercice 1 sur 5 Quelle clé ? Réussi À revoir

Alice et Bob ont chacun une paire de clés. Pour chaque opération, dis quelle clé est utilisée.

  1. Alice envoie à Bob un fichier que lui seul doit pouvoir lire.
  2. Bob déchiffre ce fichier.
  3. Alice signe un contrat qu'elle envoie à Bob.
  4. Bob vérifie la signature d'Alice.
  5. Un attaquant qui a volé la clé publique de Bob peut-il lire les messages destinés à Bob ?
Voir la réponseMasquer la réponse de l'exercice 1
  1. La clé publique de Bob.
  2. La clé privée de Bob.
  3. La clé privée d'Alice.
  4. La clé publique d'Alice.
  5. Non : une clé publique ne se « vole » pas, elle est faite pour être connue. Elle permet seulement de chiffrer pour Bob et de vérifier ses signatures. Seule la clé privée de Bob permet de lire.

Tu avais trouvé ?

Exercice 2 sur 5 RSA à la main Réussi À revoir

On choisit p = 7, q = 17 et e = 5.

  1. Calcule n et φ(n).
  2. Vérifie que e convient, puis calcule d.
  3. Donne la clé publique et la clé privée.
  4. Chiffre le message m = 10.
  5. Un camarade propose e = 6. Pourquoi est-ce impossible ?
Voir la réponseMasquer la réponse de l'exercice 2
  1. n = 7 × 17 = 119 ; φ(n) = 6 × 16 = 96.
  2. PGCD(5, 96) = 1, donc e = 5 convient. On cherche d tel que 5d ≡ 1 [96] : 96 = 5 × 19 + 1, donc 1 = 96 − 5 × 19, et d ≡ −19 ≡ 77 [96]. Vérification : 5 × 77 = 385 = 4 × 96 + 1.
  3. Clé publique (119, 5) ; clé privée (119, 77).
  4. 10² = 100 ; 10⁴ = 100² = 10 000 ≡ 4 [119] (119 × 84 = 9 996) ; 10⁵ = 10⁴ × 10 ≡ 4 × 10 = 40. Le chiffré est c = 40, et 40⁷⁷ mod 119 redonne bien 10.
  5. PGCD(6, 96) = 6 ≠ 1 : 6 n'a pas d'inverse modulo 96, on ne peut pas calculer d, donc pas de clé privée.

Tu avais trouvé ?

Exercice 3 sur 5 Diffie-Hellman à la main Réussi À revoir

Alice et Bob conviennent publiquement de p = 17 et g = 3. Alice choisit a = 5, Bob choisit b = 7.

  1. Calcule les valeurs A et B échangées.
  2. Calcule le secret partagé de chaque côté.
  3. Que voit un espion, et pourquoi ne peut-il pas en déduire le secret ?
Voir la réponseMasquer la réponse de l'exercice 3
  1. A = 3⁵ mod 17 = 243 mod 17 = 5 (17 × 14 = 238) ; B = 3⁷ mod 17 = 2 187 mod 17 = 11 (17 × 128 = 2 176).
  2. Alice : 11⁵ mod 17. 11² = 121 ≡ 2 ; 11⁴ ≡ 4 ; 11⁵ ≡ 4 × 11 = 44 ≡ 10. Bob : 5⁷ mod 17. 5² = 25 ≡ 8 ; 5⁴ ≡ 64 ≡ 13 ; 5⁶ ≡ 13 × 8 = 104 ≡ 2 ; 5⁷ ≡ 10. Le secret partagé est 10.
  3. L'espion voit p = 17, g = 3, A = 5 et B = 11. Pour trouver le secret, il devrait retrouver a ou b, c'est-à-dire résoudre un logarithme discret. Avec ces petits nombres, il essaie les 16 exposants ; avec un nombre premier de 2 048 bits, c'est impossible en pratique.

Tu avais trouvé ?

Exercice 4 sur 5 Symétrique, asymétrique ou les deux ? Réussi À revoir

Pour chaque besoin, indique la famille utilisée et justifie.

  1. Chiffrer le disque d'un portable.
  2. Permettre à un nouveau partenaire, jamais rencontré, d'envoyer des fichiers confidentiels au laboratoire.
  3. Chiffrer un flux vidéo de visioconférence de 2 heures.
  4. Prouver qu'un compte rendu a été validé par un biologiste précis.
Voir la réponseMasquer la réponse de l'exercice 4
  1. Symétrique (AES-XTS avec BitLocker ou LUKS) : gros volume, une seule entité, pas d'échange de clé.
  2. Asymétrique, puis symétrique : le partenaire utilise la clé publique du laboratoire (ou un échange Diffie-Hellman authentifié, en HTTPS ou SFTP) pour protéger une clé de session, qui chiffre les fichiers. C'est le chiffrement hybride.
  3. Symétrique (AES-GCM ou ChaCha20) pour le flux, la clé de session ayant été convenue par un échange asymétrique au début de l'appel.
  4. Asymétrique : une signature avec la clé privée personnelle du biologiste, vérifiable par tous avec sa clé publique. Le symétrique ne peut pas prouver qui a agi, puisque la clé est partagée.

Tu avais trouvé ?

Exercice 5 sur 5 Choisir une taille de clé Réussi À revoir

Le service informatique doit générer une nouvelle paire de clés pour signer des documents qui seront vérifiés jusqu'en 2032. Il hésite entre RSA 2 048 bits, RSA 3 072 bits et une courbe P-256. Que conseilles-tu, selon le guide de l'ANSSI ?

Voir la réponseMasquer la réponse de l'exercice 5

RSA 2 048 bits est conforme seulement pour un usage qui ne dépasse pas la fin de 2030 : il ne convient pas jusqu'en 2032. RSA 3 072 bits (recommandé par l'ANSSI) ou P-256 (128 bits de sécurité, ordre premier de 256 bits, au-dessus des 250 bits exigés) conviennent, P-256 avec des clés et des signatures plus courtes. Pour une protection à très long terme, il faudrait en plus envisager une signature hybride post-quantique (chapitre 11).

Tu avais trouvé ?

Chapitre terminé !

Fais les 5 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Fonction de hachage : SHA-256, empreinte et intégritéRevoir le sommaire du cours