Cryptographie · C2 Cryptographie symétrique · Chapitre 4 · 5 h
Cryptanalyse symétrique
Cryptanalyses différentielle et linéaire, compromis temps-mémoire, attaque par le milieu.
Jusqu'ici, chaque attaque exploitait un usage : un nonce rejoué, un padding trahi. Ce chapitre s'en prend aux primitives elles-mêmes. On ne demande plus si le mode est correct, mais combien de tours d'AES ou de DES résistent, et pourquoi. C'est la cryptanalyse au sens strict, et son intérêt dépasse l'attaque : c'est elle qui dicte les choix de conception.
La force brute donne l'échelle
Toute clé de bits est vulnérable à la recherche exhaustive en chiffrements. Ce n'est pas une attaque, c'est l'étalon : une cryptanalyse n'a d'intérêt que si elle fait mieux. DES et ses 56 bits ont été épuisés par force brute — trois jours en 1998, quelques heures aujourd'hui. AES-128 y résiste par sa seule taille de clé.
Un mot sur la menace quantique, développée au chapitre 14 : l'algorithme de Grover accélère quadratiquement la recherche exhaustive, ramenant à . AES-128 tomberait à 64 bits de sécurité quantique, AES-256 à 128 — la raison pour laquelle on recommande AES-256 dans une perspective post-quantique. Le symétrique est affaibli, pas effondré ; c'est l'asymétrique que Shor met à terre.
Cryptanalyse différentielle
L'idée, publiée par Biham et Shamir à la fin des années 1980, tient en une question : quand deux clairs diffèrent d'une valeur fixée , la différence des chiffrés est-elle uniformément répartie, comme elle devrait l'être, ou certaines différences reviennent-elles trop souvent ?
Tout se joue dans la boîte S, seul étage non linéaire. Pour une boîte idéale, tout couple est également probable. Une vraie boîte s'en écarte, et l'on dresse sa table des différences. Si un couple domine avec probabilité , il se propage à travers les tours en une caractéristique différentielle dont la probabilité est le produit des probabilités par tour — d'où sa décroissance rapide, et d'où le nombre de tours choisi.
L'histoire réserve ici une anecdote qui n'en est pas une. Les boîtes S de DES, dont IBM n'avait jamais publié les critères de conception, se sont révélées quasi optimales contre l'attaque différentielle — que le public a découverte quinze ans après. IBM et la NSA la connaissaient et avaient durci DES en conséquence, tout en gardant le silence. AES a suivi la démarche inverse : ses boîtes sont justifiées publiquement par leur résistance différentielle et linéaire, et c'est ce qui fonde la confiance qu'on lui accorde.
Quiz · 1 question
Sur quelle propriété d'une boîte S repose la cryptanalyse différentielle ?
- La boîte S est linéaire et se reconstitue par interpolation — linéarité
- Certaines différences d'entrée produisent certaines différences de sortie plus souvent que le hasard ne le voudrait — biais différentiel
- La boîte S a des points fixes qui révèlent la clé — points fixes
Réponse : On soumet des paires de clairs de différence fixée et l'on observe la différence des sorties. Pour une boîte idéale, elle serait uniforme ; une vraie boîte présente des biais, résumés dans sa table des différences. Une caractéristique qui traverse plusieurs tours avec une probabilité non négligeable donne prise à l'attaque. C'est exactement ce que les boîtes S de DES minimisaient — et ce contre quoi l'AES est prouvé résistant.
Cryptanalyse linéaire
Découverte par Matsui en 1993 et appliquée à DES, elle cherche des approximations linéaires de la primitive : une relation du type
reliant certains bits du clair, du chiffré et de la clé, qui serait vraie avec probabilité exactement pour un chiffrement parfait. Si elle est vraie avec probabilité , le biais fuit de l'information : en accumulant assez de couples clair/chiffré, on décide le bit de clé du bon côté, et le nombre de couples nécessaires est de l'ordre de .
Les deux attaques sont duales. La différentielle est à clairs choisis — il faut pouvoir demander le chiffrement de paires précises — tandis que la linéaire se contente de couples connus, ce qui la rend souvent plus réaliste. Ensemble, elles forment le socle de l'évaluation de tout chiffrement symétrique moderne : un candidat qui n'est pas argumenté contre elles n'est pas pris au sérieux.
Le compromis temps-mémoire
Certaines attaques n'exploitent aucune faiblesse : elles réorganisent la force brute. Le principe général est d'échanger du temps de calcul contre de la mémoire, en précalculant une fois ce qu'on interrogera ensuite rapidement.
Les tables arc-en-ciel, appliquées au cassage de mots de passe hachés, en sont l'exemple courant : au lieu de essais à chaque attaque, on précalcule une structure de taille et l'on retrouve ensuite chaque préimage en opérations. Le précalcul est amorti sur toutes les attaques suivantes. C'est précisément pourquoi le chapitre 8 imposera de saler les mots de passe : un sel distinct par utilisateur rend toute table précalculée inutilisable, puisqu'elle devrait être refaite pour chaque sel.
La rencontre au milieu
Le compromis le plus élégant frappe le double chiffrement. On pourrait croire qu'appliquer un chiffre deux fois avec deux clés, , double la sécurité : bits de clé, donc efforts. C'est faux.
L'attaquant écrit l'égalité au point du milieu :
Il calcule pour les valeurs de et les range dans une table, puis essaie les valeurs de en cherchant dans cette table. Une collision livre un couple candidat. Le coût tombe à opérations et mémoire, au lieu de — la sécurité n'a gagné qu'un bit, pas .
C'est la réponse à la question laissée ouverte au chapitre 4. Le double DES n'offre pas 112 bits mais environ 57, et c'est pourquoi le standard est le triple DES : trois étages échappent à une rencontre au milieu directe, qui n'y grignote qu'un tiers de la sécurité au lieu de la moitié.
Vous allez le monter. Le chiffre ci-dessous a un bloc plus large que sa clé — exactement la proportion du vrai DES, et ce qui rend la clé nette.
Exercice de code
Cassez un double chiffrement à 32 bits de clé par la rencontre au milieu, en deux balayages de 2^16 au lieu d'un de 2^32. Voyez pourquoi on triple DES au lieu de le doubler.
Point de départ
// Chiffre jouet : Feistel 4 tours, bloc 32 bits, clé 16 bits.
// La fonction de tour F n'a pas besoin d'être inversible (propriété Feistel).
const M16 = 0xffff;
const F = (demi, k) => {
let x = (demi ^ k) & M16;
x = (x * 40503) & M16;
x = ((x << 7) | (x >>> 9)) & M16;
x = (x ^ (x >>> 5)) & M16;
return x;
};
function E(k, b) {
let L = (b >>> 16) & M16, R = b & M16;
for (let r = 0; r < 4; r++) {
const nR = (L ^ F(R, (k + r * 0x9e37) & M16)) & M16;
L = R; R = nR;
}
return (((L << 16) >>> 0) | R) >>> 0;
}
function D(k, b) {
let L = (b >>> 16) & M16, R = b & M16;
for (let r = 3; r >= 0; r--) {
const pL = (R ^ F(L, (k + r * 0x9e37) & M16)) & M16;
R = L; L = pL;
}
return (((L << 16) >>> 0) | R) >>> 0;
}
const dbl = (k1, k2, p) => E(k2, E(k1, p));
// DOUBLE chiffrement : C = E(k2, E(k1, P)), soit 32 bits de clé au total.
// On dispose de deux couples clair/chiffré connus (attaque à clair connu).
const P1 = 0x6789ab01 >>> 0, C1 = 0x96503ef0 >>> 0;
const P2 = 0x0f1e2d3c >>> 0, C2 = 0xab3240dd >>> 0;
// ── Force brute : les 2^32 couples (k1, k2) ───────────────────────────────
// C'est le coût qu'on veut BATTRE — 4 milliards d'essais.
// ── À COMPLÉTER : rencontre au milieu ─────────────────────────────────────
// E(k1, P1) = D(k2, C1) au point du milieu. On tabule le membre de gauche pour
// les 2^16 valeurs de k1, puis on parcourt les 2^16 valeurs de k2 en cherchant
// une valeur déjà vue, et on confirme sur le second couple.
function rencontreAuMilieu() {
const table = new Map(); // E(k1, P1) -> k1
for (let k1 = 0; k1 <= M16; k1++) {
// à compléter : remplir la table
}
for (let k2 = 0; k2 <= M16; k2++) {
// à compléter : chercher D(k2, C1) dans la table, confirmer sur (P2, C2)
}
return null;
}
const t0 = Date.now();
const sol = rencontreAuMilieu();
console.log("clés retrouvées :", sol ? { k1: sol.k1.toString(16), k2: sol.k2.toString(16) } : null,
"en", Date.now() - t0, "ms");
console.log("essais : ~2·2^16 =", 2 * 65536, "au lieu de 2^32 =", 2 ** 32);
Solution
function rencontreAuMilieu() {
const table = new Map();
for (let k1 = 0; k1 <= M16; k1++) {
table.set(E(k1, P1), k1);
}
for (let k2 = 0; k2 <= M16; k2++) {
const milieu = D(k2, C1);
if (!table.has(milieu)) continue;
const k1 = table.get(milieu);
// Confirmer sur le second couple élimine les rares collisions fortuites.
if (dbl(k1, k2, P2) === C2) return { k1, k2 };
}
return null;
}
// Renvoie k1 = 0x1a2b, k2 = 0xc4d5, en quelques millisecondes.
//
// Deux balayages de 2^16 ont remplacé un balayage de 2^32 : le TEMPS chute de
// 2^32 à 2^17, au prix d'une MÉMOIRE de 2^16 entrées. C'est le compromis
// temps-mémoire, et c'est ce qui fait s'effondrer le double chiffrement.
//
// Transposé au vrai DES : le double DES a 2·56 = 112 bits de clé, mais la
// rencontre au milieu le casse en environ 2^57 opérations — à peine plus que
// le DES simple. DOUBLER NE DOUBLE PAS LA SÉCURITÉ. Voilà pourquoi le standard
// est le TRIPLE DES : trois étages placent la barrière hors de portée de la
// rencontre au milieu directe (elle n'y gagne qu'un tiers, pas la moitié).
//
// Le bloc plus large que la clé (ici 32 > 16, dans DES 64 > 56) est ce qui
// rend la table creuse et la clé nette : un seul couple suffit presque, le
// second ne sert qu'à écarter les coïncidences.
Quiz · 1 question
Le double chiffrement à deux clés de b bits offre-t-il 2b bits de sécurité ?
- Oui : la clé effective fait 2b bits — clé effective
- Non : la rencontre au milieu le casse en ~2^(b+1) temps et 2^b mémoire, soit un seul bit de plus — un bit de gain
- Non, mais il faut 2^(2b) mémoire pour l'attaquer, ce qui le protège en pratique — coût mémoire
Réponse : En écrivant E(k1,P) = D(k2,C), l'attaquant tabule le premier membre (2^b entrées) puis balaie k2 en y cherchant une collision. Temps 2^(b+1), mémoire 2^b : la sécurité n'a gagné qu'un bit. C'est la raison du triple DES — trois étages résistent à la rencontre au milieu directe, qui ne leur retire qu'un tiers de la sécurité au lieu de la moitié.
Ce que la cryptanalyse enseigne à la conception
Aucune de ces attaques ne brise AES en pratique, et c'est le but. La meilleure attaque publiée sur AES-128 demande environ opérations — une cassure au sens du chapitre 1, sans la moindre portée réelle. Ce qui compte est la marge : AES-128 tourne sur 10 tours quand 6 ou 7 suffiraient à résister aux attaques connues. Cette réserve est délibérée, car les attaques ne reculent jamais. La cryptanalyse ne sert donc pas seulement à casser : elle dit combien de tours mettre, quelles boîtes S choisir, et quelle marge garder pour les vingt ans qui viennent.
Ce que la suite en fait
Ce chapitre clôt le symétrique. Deux idées le traversent et resurgiront : la linéarité est l'ennemi — les LFSR du chapitre 5, les approximations linéaires ici — et le compromis temps-mémoire revient au chapitre 8 sous la forme du salage, et au chapitre 10 avec le rho de Pollard pour le logarithme discret. Le chapitre 7 ouvre un autre monde, celui des fonctions de hachage, où le paradoxe des anniversaires jouera le rôle qu'a joué ici la force brute : l'étalon que toute attaque doit battre.
À retenir
Flashcards · 3 cartes
- Différentielle et linéaire : que cherche chacune, et laquelle est la plus réaliste ?
- La différentielle cherche des différences d'entrée qui biaisent les différences de sortie ; elle est à clairs CHOISIS. La linéaire cherche une relation linéaire entre bits de clair, de chiffré et de clé, vraie avec un biais ε, exploitable en ~ε^(−2) couples ; elle se contente de couples CONNUS, donc plus réaliste. Les deux forment le socle d'évaluation de tout chiffre symétrique.
- Pourquoi le double chiffrement n'ajoute-t-il presque rien, et quelle est la parade standard ?
- La rencontre au milieu résout E(k1,P) = D(k2,C) en tabulant les 2^b valeurs de k1 puis en balayant k2 : temps 2^(b+1), mémoire 2^b — un seul bit de sécurité gagné. La parade est le TRIPLE chiffrement (3DES) : trois étages ne cèdent qu'un tiers de leur sécurité à l'attaque, pas la moitié.
- Que révèle l'histoire des boîtes S de DES sur le lien cryptanalyse-conception ?
- Elles étaient quasi optimales contre la cryptanalyse différentielle, qu'IBM et la NSA connaissaient quinze ans avant sa (re)découverte publique — sans l'avoir divulguée. AES a fait l'inverse : ses boîtes sont justifiées publiquement par leur résistance différentielle et linéaire. La cryptanalyse dicte le nombre de tours, les boîtes, et la marge de sécurité.
QCM de synthèse — Bloc I — Cryptographie symétrique
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 · 6 questions
Bloc I — Cryptographie symétrique
1. L'équation c₁ ⊕ c₂ = m₁ ⊕ m₂ revient trois fois dans ce bloc. Quelle est la cause commune ?
- Une faiblesse de la primitive de chiffrement employée
- Un même masque appliqué deux fois : masque jetable rejoué, nonce ChaCha20 rejoué, nonce CTR rejoué
- Un padding mal formé
Réponse : Masque jetable réutilisé (leçon 3), nonce ChaCha20 rejoué (leçon 5), nonce CTR répété (leçon 4) : à chaque fois le même masque chiffre deux messages, il s'annule dans le XOR et ne reste que m₁ ⊕ m₂. La primitive n'est jamais en cause — c'est l'usage. La règle unique : un masque, une fois.
2. Pourquoi le mode ECB est-il à proscrire même avec AES-256, alors que CBC avec la même primitive est acceptable ?
- ECB est plus lent que CBC
- ECB est déterministe bloc par bloc : deux blocs de clair identiques donnent deux blocs chiffrés identiques, la structure fuit — un chiffrement sûr doit être probabiliste
- ECB ne peut pas chiffrer plus d'un bloc
Réponse : La faiblesse d'ECB est le mode, pas la primitive : chiffrer chaque bloc à l'identique laisse transparaître les répétitions du clair (le pingouin reste reconnaissable). C'est la même exigence qu'au bloc 0 — un chiffrement sûr contre les clairs choisis doit être probabiliste. CBC l'obtient par le chaînage et un IV imprévisible.
3. L'attaque par oracle de padding reconstitue un clair CBC sans la clé. Quel élément l'autorise, et quelle parade la referme ?
- Une faiblesse d'AES ; passer à AES-256
- Le serveur distingue « padding invalide » des autres cas — un bit par requête ; Encrypt-then-MAC, en vérifiant le MAC avant de déchiffrer, la referme
- Un IV prévisible ; un IV aléatoire suffit
Réponse : AES n'est jamais attaqué : l'attaque n'exploite que le bit « padding valide ou non », joint au contrôle de C(i−1) dans P = D(C) ⊕ C(i−1). Vérifier un MAC sur le chiffré AVANT de déchiffrer (Encrypt-then-MAC, bloc II) fait disparaître l'oracle : un chiffré altéré est rejeté sans qu'on regarde son padding.
4. Le double chiffrement E(k₂, E(k₁, P)) avec deux clés de b bits offre-t-il 2b bits de sécurité ?
- Oui : les clés se cumulent
- Non : la rencontre au milieu résout E(k₁,P) = D(k₂,C) en 2^(b+1) temps et 2^b mémoire — un seul bit gagné, d'où le triple DES
- Non, mais l'attaque exige 2^(2b) mémoire, ce qui protège en pratique
Réponse : En écrivant l'égalité au point du milieu, on tabule les 2^b valeurs de k₁ puis on balaie k₂ : temps 2^(b+1), mémoire 2^b. La sécurité ne gagne qu'un bit — un compromis temps-mémoire. C'est pourquoi le standard est le triple DES : trois étages ne cèdent qu'un tiers de leur sécurité à la rencontre au milieu, pas la moitié.
5. Un LFSR seul n'offre aucune sécurité. Quelle propriété le condamne, et quelle idée générale du bloc cela illustre-t-il ?
- Sa lenteur ; il faut du matériel dédié
- Sa linéarité : Berlekamp-Massey le reconstitue à partir de 2L bits de sortie — la linéarité est l'ennemi, comme les approximations linéaires en cryptanalyse
- Sa période trop courte ; il faut un registre plus long
Réponse : Tout dans un LFSR est linéaire, et Berlekamp-Massey en reconstitue la structure à partir de 2L bits seulement. C'est le fil conducteur du bloc : la linéarité se casse — d'où les approximations linéaires de Matsui contre DES, et d'où la couche non linéaire (boîte S) qui fait la force de l'AES.
6. Cryptanalyses différentielle et linéaire : laquelle exige des clairs CHOISIS, et qu'attaquent-elles toutes deux ?
- La linéaire exige des clairs choisis ; toutes deux visent la taille de clé
- La différentielle exige des clairs choisis (paires de différence fixée) ; toutes deux ciblent la boîte S, seul étage non linéaire
- Aucune n'a besoin de clairs ; toutes deux visent le mode d'opération
Réponse : La différentielle soumet des paires de clairs de différence fixée : elle est à clairs choisis. La linéaire se contente de couples clair/chiffré connus, donc plus réaliste. Toutes deux exploitent des biais de la boîte S, seul composant non linéaire — c'est pourquoi les boîtes S de l'AES sont justifiées publiquement par leur résistance à ces deux attaques.