Protocoles et infrastructureDans le dialogue d’impression, choisissez « Enregistrer au format PDF » comme destination.
Retour

Cryptographie · C5 Protocoles et pratique · Chapitre 2 · 4 h

Protocoles et infrastructure

Échange de clés authentifié, confidentialité persistante, TLS 1.3, PKI et certificats X.509, générateurs pseudo-aléatoires et leurs défaillances.

Les douze chapitres précédents ont forgé des primitives : chiffrements, MAC, signatures, échanges de clés. Un protocole réel les assemble — et c'est un art distinct, car un montage de briques parfaites peut fuir par ses jointures. Ce chapitre montre comment on établit une communication sûre entre deux inconnus, prend TLS 1.3 comme cas d'étude, et finit sur le maillon qu'aucune preuve ne protège : l'aléa.

Échange de clés authentifié

Le chapitre 10 l'a établi sans détour : Diffie-Hellman brut tombe devant l'homme du milieu. Mallory établit un secret avec chacun et relaie en clair. Le problème n'est pas le secret — il est bien calculé — mais l'identité : rien ne dit à Alice que gbg^b vient de Bob.

La réponse est l'échange de clés authentifié. On lie l'échange à une identité vérifiable en signant les messages du protocole avec une clé de long terme, elle-même attestée par un certificat. Alice ne se contente plus de recevoir gbg^b : elle reçoit gbg^b signé par une clé dont un certificat garantit qu'elle est celle de Bob. Mallory, incapable de produire cette signature, ne peut plus s'intercaler.

Une propriété qu'on exige en plus, et qui a un nom : la confidentialité persistante (forward secrecy). Les clés de session sont dérivées d'un Diffie-Hellman éphémère — un ga,gbg^a, g^b neuf à chaque session, jeté ensuite. Conséquence : si la clé privée de long terme de Bob est compromise demain, les sessions d'hier restent illisibles, car leur secret éphémère n'existe plus nulle part. C'est le « récolter maintenant, déchiffrer plus tard » du chapitre 1 rendu inopérant — du moins tant que Diffie-Hellman tient, ce que le chapitre 14 viendra nuancer.

Quiz · 1 question

Qu'apporte la confidentialité persistante (forward secrecy) ?

  • Elle empêche l'homme du milieu pendant l'échangehomme du milieu
  • Elle garantit que la compromission future de la clé de long terme ne déchiffre pas les sessions passées, grâce à un Diffie-Hellman éphémèresessions passées protégées
  • Elle accélère l'échange en réutilisant les clés de sessionperformance

Réponse : Les clés de session viennent d'un Diffie-Hellman éphémère, jeté après usage. Si la clé privée de long terme fuit plus tard, elle ne permet PAS de reconstituer les secrets éphémères des sessions passées, qui n'existent plus : le trafic enregistré reste illisible. C'est l'authentification, pas la forward secrecy, qui bloque l'homme du milieu ; les deux sont complémentaires.

TLS 1.3, l'assemblage de tout le cours

TLS protège l'essentiel du trafic web, et sa version 1.3 (2018) est une refonte disciplinée par vingt ans d'attaques. Elle est le point de convergence du cours entier.

Sa poignée de main (handshake) établit une session en un seul aller-retour : ECDH éphémère (chapitre 11) pour le secret, signature (chapitre 9 ou 11) attestée par certificat pour l'authentification, HKDF (chapitre 8) pour dériver les clés de session, et AEAD (chapitre 8) pour chiffrer et authentifier les données. Chaque brique de ce cours y a sa place exacte.

Ce que TLS 1.3 a retiré est aussi instructif que ce qu'il garde, car chaque suppression est une attaque refermée. Exit RSA pour le transport de clé — il n'offrait pas la forward secrecy et traînait l'attaque de Bleichenbacher (chapitre 1) depuis 1998. Exit CBC et ses oracles de padding (chapitre 4). Exit les suites cryptographiques négociables à l'ancienne, dont la négociation elle-même se faisait attaquer (dégradation forcée vers un chiffre faible). TLS 1.3 impose forward secrecy et AEAD, sans option de s'en passer. La leçon de conception : réduire la surface, ne laisser aucun choix dangereux ouvert. C'est l'exact pendant de Curve25519 (chapitre 11), sûre par défaut.

PKI et certificats X.509

Reste la question qui fonde tout : comment Alice sait-elle que telle clé publique est vraiment celle de Bob ? Par un certificat — la clé publique de Bob, son identité, et une signature d'une autorité de certification (AC) qui atteste le lien. Alice fait confiance à l'AC (sa clé est préinstallée dans le navigateur), donc à ce qu'elle signe. C'est l'infrastructure à clé publique (PKI), et le format des certificats est X.509.

La confiance se délègue en chaîne : une AC racine signe des AC intermédiaires, qui signent les certificats des sites. Le navigateur remonte la chaîne jusqu'à une racine qu'il connaît. Ce système marche à l'échelle du web — mais sa sécurité est celle de son maillon le plus faible, et le maillon est humain autant que mathématique. Une AC compromise signe de faux certificats pour n'importe qui : c'est arrivé avec DigiNotar en 2011, dont les faux certificats Google ont servi à espionner des dizaines de milliers d'Iraniens. La réponse a été la transparence des certificats (Certificate Transparency) — des journaux publics et inaltérables où tout certificat émis est inscrit, rendant une émission frauduleuse détectable.

Le maillon qu'aucune preuve ne couvre : l'aléa

Toute la cryptographie de ce cours suppose de l'aléa de qualité : les nonces, les clés éphémères, les premiers de RSA, le kk de DSA. Un générateur défaillant anéantit des schémas parfaitement prouvés — c'est le rappel brutal du chapitre 12 sur ce que les preuves ne couvrent pas.

Les défaillances sont de deux ordres. Il y a les accidents : le bug OpenSSL de Debian (2006-2008) qui réduisait l'espace des clés à 32 768 valeurs, ou les objets connectés qui engendrent leurs clés à froid, sans entropie. Et il y a le sabotage : Dual_EC_DRBG, un générateur normalisé par le NIST dont les constantes, on l'a appris avec Snowden, portaient une porte dérobée permettant à qui connaissait le secret de prédire toute la sortie. C'est ce soupçon, bien réel cette fois, qui a nourri la défiance envers les courbes NIST du chapitre 11.

La conséquence la plus tangible tient en un pgcd. Quand un parc d'appareils produit des clés RSA à faible entropie, certaines partagent un facteur premier — et le pgcd de deux modules publics les factorise toutes les deux d'un coup, sans jamais résoudre la factorisation. Montez-le.

Exercice de code

Un parc d'objets à faible entropie a produit des clés RSA partageant des facteurs. Factorisez-les par un simple pgcd entre modules publics, sans attaquer la factorisation elle-même.

Point de départ

// On collecte des clés publiques RSA (juste les modules n). Sur un parc
// d'objets à faible entropie — routeurs, cartes à puce démarrant à froid — le
// générateur produit parfois le MÊME premier dans deux clés distinctes.

function pgcd(a, b) {
  while (b > 0n) { [a, b] = [b, a % b]; }
  return a;
}

// Six premiers. Volontairement, deux modules vont partager p3.
const p1 = 10007n, p2 = 10009n, p3 = 10037n, p4 = 10039n, p5 = 10061n;

// Trois modules publics, tels qu'un scanner d'Internet les récolterait.
const modules = [
  { nom: "clé A", n: p1 * p2 },
  { nom: "clé B", n: p3 * p4 },
  { nom: "clé C", n: p5 * p3 }, // partage p3 avec la clé B — la faille
];

// ── À COMPLÉTER ───────────────────────────────────────────────────────────
// Pour chaque PAIRE de modules, calculer pgcd(n_i, n_j). S'il vaut plus que 1,
// c'est un facteur premier COMMUN : les deux clés sont factorisées d'un coup,
// sans jamais résoudre le problème de la factorisation.

function casserLeParc(modules) {
  const casses = [];
  for (let i = 0; i < modules.length; i++) {
    for (let j = i + 1; j < modules.length; j++) {
      // à compléter : g = pgcd des deux modules ; si g > 1, on tient un facteur
    }
  }
  return casses;
}

const resultats = casserLeParc(modules);
console.log("clés factorisées :", resultats.length ? resultats : "aucune");

Solution

function casserLeParc(modules) {
  const casses = [];
  for (let i = 0; i < modules.length; i++) {
    for (let j = i + 1; j < modules.length; j++) {
      const g = pgcd(modules[i].n, modules[j].n);
      if (g > 1n) {
        // g est un facteur commun : chaque module se scinde en g et n/g.
        casses.push({
          paire: [modules[i].nom, modules[j].nom],
          facteurCommun: g.toString(),
          [modules[i].nom]: [g.toString(), (modules[i].n / g).toString()],
          [modules[j].nom]: [g.toString(), (modules[j].n / g).toString()],
        });
      }
    }
  }
  return casses;
}

// Les clés B et C tombent : leur pgcd révèle p3 = 10037, et chacun des deux
// modules se scinde aussitôt. On n'a JAMAIS factorisé un module isolé — la
// difficulté du chapitre 9 est intacte. On a exploité une CORRÉLATION entre
// clés, née d'un générateur d'aléa défaillant.
//
// Ce n'est pas un exercice d'école. En 2012, l'étude « Mining Your Ps and Qs »
// a passé au pgcd des millions de clés RSA récoltées sur Internet et en a
// factorisé des dizaines de milliers — des équipements générant leurs clés au
// tout premier démarrage, avant d'avoir accumulé la moindre entropie. Le pgcd
// de deux nombres de 2048 bits est instantané ; le coût total est celui du
// balayage des paires.
//
// La leçon rejoint le chapitre 12 : une clé RSA parfaitement conforme, avec
// OAEP et PSS impeccables, est anéantie par un générateur pseudo-aléatoire
// défaillant. Aucune preuve de sécurité ne couvre l'aléa d'où sort la clé —
// c'est le maillon du chapitre, et l'un des plus fragiles.

Quiz · 1 question

Deux clés RSA distinctes partagent un facteur premier. Pourquoi cela les rend-il triviales à casser ?

  • Parce qu'un facteur commun rend les modules plus petitstaille des modules
  • Parce que le pgcd des deux modules publics révèle le facteur commun, factorisant les deux clés — sans résoudre la factorisationpgcd des modules
  • Parce que deux clés identiques ont la même clé privéeclés identiques

Réponse : pgcd(n1, n2) rend le facteur premier partagé, instantané même sur 2048 bits ; chaque module se scinde alors en ce facteur et son cofacteur. La difficulté de factoriser un module ISOLÉ (chapitre 9) reste entière — on exploite une corrélation entre clés née d'un aléa défaillant. L'étude « Mining Your Ps and Qs » (2012) a ainsi cassé des dizaines de milliers de clés réelles.

Ce que la suite en fait

Ce chapitre a montré que la sécurité d'un système réel dépasse la solidité de ses primitives : elle tient à leur assemblage, à la gestion des identités, et à la qualité de l'aléa. Le chapitre 14, dernier du cours, change d'horizon temporel. Toute la clé publique déployée ici — RSA, ECDH, ECDSA, la PKI qui les atteste — repose sur des problèmes que l'algorithme de Shor résout en temps polynomial sur un ordinateur quantique. La forward secrecy elle-même n'y résiste pas contre un adversaire qui a enregistré le trafic. Il faut donc migrer, et l'agilité cryptographique que TLS 1.3 a commencé à outiller devient la compétence centrale.

À retenir

Flashcards · 3 cartes

Comment un échange de clés authentifié bloque-t-il l'homme du milieu ?
En liant l'échange Diffie-Hellman à une identité : les messages du protocole sont signés par une clé de long terme attestée par un certificat. Alice reçoit g^b SIGNÉ par la clé de Bob ; Mallory, incapable de produire cette signature, ne peut plus s'intercaler. Le secret DH n'était jamais le problème — l'identité l'était.
Où chaque brique du cours se place-t-elle dans le handshake TLS 1.3 ?
ECDH éphémère (ch. 11) pour le secret et la forward secrecy, signature attestée par certificat (ch. 9/11) pour l'authentification, HKDF (ch. 8) pour dériver les clés, AEAD (ch. 8) pour chiffrer-authentifier. TLS 1.3 a retiré RSA-transport, CBC et les négociations faibles — réduire la surface plutôt qu'offrir des options dangereuses.
Pourquoi l'aléa est-il le maillon qu'aucune preuve ne couvre ?
Nonces, clés éphémères, premiers RSA, k de DSA : tout suppose un aléa de qualité, hors du périmètre des preuves du chapitre 12. Un générateur défaillant (bug Debian, objets à froid) ou saboté (Dual_EC_DRBG) anéantit des schémas parfaits. Symptôme concret : des clés RSA partageant un facteur, factorisées par un simple pgcd (« Mining Your Ps and Qs », 2012).

QCM de synthèse — Bloc IV — Protocoles et pratique

Le QCM ci-dessous porte sur l'ensemble du bloc : plusieurs questions relient les leçons entre elles. En cas d'erreur, le bilan indique le chapitre à revoir.

QCM de bloc · 5 questions

Bloc IV — Protocoles et pratique

1. Un énoncé de sécurité repose sur trois ingrédients dont aucun ne suffit seul. Lesquels ?

  • La clé, l'algorithme et le protocole
  • Un objectif (ce qu'on empêche), un modèle d'attaque (les moyens de l'adversaire), une hypothèse (le problème supposé dur)
  • La confidentialité, l'intégrité et l'authenticité

Réponse : Un schéma n'est jamais « sûr » tout court : il est sûr POUR tel objectif (distinguer, forger), DANS tel modèle (COA à CCA2), SOUS telle hypothèse (factorisation, log discret, DDH). Retirer l'un des trois vide l'énoncé de sens — une preuve sans modèle d'attaque précisé ne dit rien de ce que l'adversaire a le droit de faire.

2. Que démontre exactement une réduction de sécurité ?

  • Que le schéma est sûr dans l'absolu, sans hypothèse
  • Que si un adversaire cassait le schéma, on saurait résoudre le problème réputé difficile — donc, par contraposée, le schéma est sûr sous cette hypothèse
  • Que le problème difficile est en réalité facile

Réponse : Une réduction construit, à partir d'un hypothétique casseur du schéma, un solveur du problème difficile. Comme ce problème est supposé infaisable, le casseur ne peut exister : le schéma est sûr SOUS l'hypothèse. La preuve est conditionnelle — elle ne prouve rien dans l'absolu, ce qui exigerait de résoudre P vs NP. C'est le même mouvement que Merkle-Damgård au bloc II.

3. Pourquoi une preuve dans le modèle de l'oracle aléatoire (ROM) n'est-elle qu'une heuristique ?

  • Parce qu'elle ne s'applique qu'aux signatures
  • Parce qu'aucune fonction réelle n'est un oracle aléatoire : Canetti-Goldreich-Halevi (1998) ont exhibé des schémas prouvés ROM et cassés par toute fonction concrète
  • Parce que le ROM suppose l'adversaire non polynomial

Réponse : Le ROM idéalise la fonction de hachage en une fonction parfaitement aléatoire, ce qui rend les preuves possibles (OAEP, PSS). Mais SHA-256 est un algorithme public déterministe, pas un oracle : CGH (1998) ont construit des schémas prouvés ROM et cassés dès qu'on remplace l'oracle par une vraie fonction. Une preuve ROM est un bon filtre de conception, pas une garantie.

4. Contre quoi la confidentialité persistante (forward secrecy) protège-t-elle, et contre quoi PAS ?

  • Elle protège contre l'homme du milieu pendant l'échange
  • Elle protège les sessions passées d'une compromission FUTURE de la clé de long terme, mais pas d'un adversaire qui casse plus tard le Diffie-Hellman éphémère lui-même
  • Elle protège contre la réutilisation de nonce

Réponse : Les clés de session viennent d'un DH éphémère, jeté après usage : si la clé de long terme fuit demain, les secrets d'hier n'existent plus et le trafic enregistré reste illisible. Mais elle ne protège pas contre « récolter maintenant, déchiffrer plus tard » avec un ordinateur quantique, qui casse le DH éphémère lui-même — c'est le pont vers le bloc V. L'homme du milieu, lui, est bloqué par l'authentification, pas la forward secrecy.

5. Deux clés RSA distinctes partagent un facteur premier. Pourquoi est-ce trivial à casser, et que révèle ce symptôme ?

  • Parce qu'un facteur commun rend les modules plus petits
  • Parce que pgcd(n₁, n₂) révèle le facteur commun et factorise les deux clés — sans résoudre la factorisation ; symptôme d'un générateur d'aléa défaillant, le maillon qu'aucune preuve ne couvre
  • Parce que deux clés identiques ont la même clé privée

Réponse : pgcd(n₁, n₂) rend le facteur partagé, instantané même sur 2048 bits ; chaque module se scinde alors. La difficulté de factoriser un module ISOLÉ reste entière — on exploite une corrélation née d'un aléa défaillant (« Mining Your Ps and Qs », 2012, des dizaines de milliers de clés). Aucune preuve de sécurité ne couvre l'aléa d'où sort la clé : c'est le maillon le plus fragile.