Le chiffrement par bloc â quâil sâagisse de DES, AES, Blowfish, Twofish, Serpent ou Camellia â est la pierre angulaire de la cryptographie symĂ©trique moderne et de la sĂ©curitĂ© des donnĂ©es. Ces algorithmes, souvent Ă©voquĂ©s mais rarement expliquĂ©s, transforment nos informations en blocs dâoctets mĂ©connaissables, garantissant confidentialitĂ© et intĂ©gritĂ© dans tout ce qui touche Ă la cybersĂ©curitĂ© : VPN, TLS, disques chiffrĂ©s, bases de donnĂ©es ou IoT.
Mais derriĂšre les acronymes, il y a une vraie histoire dâingĂ©nierie, de mathĂ©matiques et de guerres de standards. Entre DES, le vĂ©tĂ©ran Ă 56 bits, AES, lâĂ©lu du NIST, et leurs cousins oubliĂ©s, le monde du chiffrement par bloc ressemble plus Ă un bar de vieux hackers quâĂ un cours de maths. Alors sortons les Ă©quations, les S-box, et un brin dâironie pour revisiter les fondations de la crypto symĂ©trique moderne â sans perdre le sens du fun.
đČ I. DES â la vieille Ă©cole
Le Data Encryption Standard (DES), câest un peu le vinyle de la cryptographie : dĂ©passĂ©, mais culte.
NĂ© dans les labos dâIBM au dĂ©but des annĂ©es 1970 (nom de code Lucifer, tout un programme), puis adoptĂ© par le NIST en 1977 sous la rĂ©fĂ©rence FIPS PUB 46, DES a rĂ©gnĂ© sur les communications sĂ©curisĂ©es pendant plus de deux dĂ©cennies.
Jusquâau jour oĂč la puissance de calcul moderne lui a mis une claque Ă 56 bits prĂšs.
𧩠Notations utilisées
| Symbole | Signification |
|---|---|
| M | Message clair (plaintext) |
| C | Texte chiffré (ciphertext) |
| K | Clé secrÚte (56 bits utiles) |
| E_K(M) | Chiffrement du message M sous clé K |
| D_K(C) | Déchiffrement du texte C sous clé K |
| \oplus | XOR binaire |
| P(x) | Permutation |
| S_i | S-box numéro i |
| f_K(R_i) | Fonction de ronde dépendante de la clé |
𧟠Principe général
DES est un chiffrement par bloc symétrique travaillant sur 64 bits.
Chaque bloc passe par une sĂ©rie de transformations â permutations, substitutions, et XOR â articulĂ©es autour dâune structure de Feistel en 16 rondes.
LâidĂ©e de base :
Ă chaque ronde, on applique une fonction non linĂ©aire sur la moitiĂ© droite du bloc, puis on lâadditionne (XOR) Ă la moitiĂ© gauche.
Ensuite, on échange les deux moitiés.
Simple. ĂlĂ©gant. RĂ©versible.
LâopĂ©ration globale sâĂ©crit :
(L_0, R_0) = \text{IP}(M) L_i = R_{i-1} R_i = L_{i-1} \oplus f_{K_i}(R_{i-1}) \quad \text{pour } i = 1..16 C = \text{IP}^{-1}(R_{16}, L_{16})oĂč :
- \text{IP} est la Permutation Initiale,
- \text{IP}^{-1} est la Permutation Finale (Inverse),
- f_{K_i} applique une expansion, une substitution via 8 S-boxes, et une permutation.
đŹ Fonction de ronde f_{K_i}(R_{i-1})
Câest le cĆur de DES â lĂ oĂč la confusion et la diffusion sâentrechoquent façon Shannon.
- Expansion :
E: R_{i-1}(32 \text{ bits}) \rightarrow 48 \text{ bits} - Mélange avec la clé de ronde :
B = E(R_{i-1}) \oplus K_i - Substitution via 8 S-boxes :
S(B) = (S_1(B_1), S_2(B_2), ..., S_8(B_8))
Chaque S_i rĂ©duit 6 bits â 4 bits. - Permutation P :
f_{K_i}(R_{i-1}) = P(S(B))
đ§ DĂ©monstration mathĂ©matique
Le processus complet sur 16 rondes peut ĂȘtre reprĂ©sentĂ© comme une composition de fonctions Feistel :
E_K(M) = IP^{-1} \circ F_{K_{16}} \circ F_{K_{15}} \circ ... \circ F_{K_1} \circ IP(M)avec
F_{K_i}(L, R) = (R, L \oplus f_{K_i}(R))Et la propriété magique du réseau de Feistel garantit la réversibilité :
en remplaçant K_i par K_{17-i}, on obtient directement le déchiffrement.
𧚠Limites et héritage
DES a été cassé non pas par défaut mathématique, mais par force brute :
56 bits = 2â”â¶ â 7,2Ă10Âčâ¶ clĂ©s â accessible Ă un cluster dĂšs les annĂ©es 1990.
Câest ce qui a motivĂ© la crĂ©ation de 3DES puis dâun remplaçant plus moderne : AES.
Mais soyons honnĂȘtes, DES a posĂ© toutes les bases : la structure Feistel, la conception de S-boxes non linĂ©aires, et la notion de diffusion calculĂ©e.
đ RĂ©fĂ©rences documentaires
- FIPS PUB 46-3 â Data Encryption Standard (DES), NIST, 1999
- RFC 4772 â Security Implications of Using the Data Encryption Standard (DES)
- IBM Journal of Research and Development, Vol. 19, No. 5, 1975 â Lucifer Cipher Specification
- NIST Special Publication 800-67 Rev.2, 2017 â Recommendation for the Triple Data Encryption Algorithm (TDEA)
đ§ II. AES â la relĂšve (Rijndael, le monstre Ă©lĂ©gant)
Quand DES a commencĂ© Ă suer face aux clusters de brute force, le NIST a lancĂ© un appel dâair en 1997 : il fallait un successeur.
RĂ©sultat du concours : Rijndael, dĂ©veloppĂ© par Vincent Rijmen et Joan Daemen (Belgique, 1998), sacrĂ© en 2001 sous le doux nom de AES â Advanced Encryption Standard (FIPS-197).
Plus moderne, plus mathématique, et surtout taillé pour le hardware comme pour le software.
𧩠Caractéristiques générales
| ĂlĂ©ment | Valeur |
|---|---|
| Taille de bloc | 128 bits |
| Taille de clé | 128, 192 ou 256 bits |
| Structure | SubstitutionâPermutation (SPN) |
| Rounds | 10, 12 ou 14 selon la clé |
| OpĂ©rations | Galois Field GF(2âž) |
| Notations | S(x) : SubBytes, P(x) : ShiftRows, M(x) : MixColumns |
AES nâest pas un Feistel. Ici, tout le bloc est transformĂ© Ă chaque ronde.
La clé change, les bytes dansent, et la sécurité repose sur des mathématiques pures.
đŹ Le cĆur dâAES
Chaque ronde (sauf la derniÚre) applique quatre opérations successives :
- SubBytes â substitution non linĂ©aire via une S-box
- ShiftRows â dĂ©calage des lignes de lâĂ©tat
- MixColumns â transformation linĂ©aire sur chaque colonne
- AddRoundKey â XOR avec la clĂ© de ronde
La ronde sâĂ©crit mathĂ©matiquement ainsi :Round(State)=M(P(S(State)))âKiRound(State)=M(P(S(State)))âKiâ
et la ronde finale omet la transformation MixColumns.
đ§Ș S-box AES complĂšte (valeurs hexadĂ©cimales)
Elle est dĂ©rivĂ©e de lâinverse multiplicatif dans le corps de Galois GF(2âž) combinĂ© Ă une transformation affine.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 63 | 7C | 77 | 7B | F2 | 6B | 6F | C5 | 30 | 01 | 67 | 2B | FE | D7 | AB | 76 |
| 1 | CA | 82 | C9 | 7D | FA | 59 | 47 | F0 | AD | D4 | A2 | AF | 9C | A4 | 72 | C0 |
| 2 | B7 | FD | 93 | 26 | 36 | 3F | F7 | CC | 34 | A5 | E5 | F1 | 71 | D8 | 31 | 15 |
| 3 | 04 | C7 | 23 | C3 | 18 | 96 | 05 | 9A | 07 | 12 | 80 | E2 | EB | 27 | B2 | 75 |
| 4 | 09 | 83 | 2C | 1A | 1B | 6E | 5A | A0 | 52 | 3B | D6 | B3 | 29 | E3 | 2F | 84 |
| 5 | 53 | D1 | 00 | ED | 20 | FC | B1 | 5B | 6A | CB | BE | 39 | 4A | 4C | 58 | CF |
| 6 | D0 | EF | AA | FB | 43 | 4D | 33 | 85 | 45 | F9 | 02 | 7F | 50 | 3C | 9F | A8 |
| 7 | 51 | A3 | 40 | 8F | 92 | 9D | 38 | F5 | BC | B6 | DA | 21 | 10 | FF | F3 | D2 |
| 8 | CD | 0C | 13 | EC | 5F | 97 | 44 | 17 | C4 | A7 | 7E | 3D | 64 | 5D | 19 | 73 |
| 9 | 60 | 81 | 4F | DC | 22 | 2A | 90 | 88 | 46 | EE | B8 | 14 | DE | 5E | 0B | DB |
| A | E0 | 32 | 3A | 0A | 49 | 06 | 24 | 5C | C2 | D3 | AC | 62 | 91 | 95 | E4 | 79 |
| B | E7 | C8 | 37 | 6D | 8D | D5 | 4E | A9 | 6C | 56 | F4 | EA | 65 | 7A | AE | 08 |
| C | BA | 78 | 25 | 2E | 1C | A6 | B4 | C6 | E8 | DD | 74 | 1F | 4B | BD | 8B | 8A |
| D | 70 | 3E | B5 | 66 | 48 | 03 | F6 | 0E | 61 | 35 | 57 | B9 | 86 | C1 | 1D | 9E |
| E | E1 | F8 | 98 | 11 | 69 | D9 | 8E | 94 | 9B | 1E | 87 | E9 | CE | 55 | 28 | DF |
| F | 8C | A1 | 89 | 0D | BF | E6 | 42 | 68 | 41 | 99 | 2D | 0F | B0 | 54 | BB | 16 |
âïž Transformation MixColumns
Chaque colonne de lâĂ©tat (4 octets) est considĂ©rĂ©e comme un polynĂŽme sur GF(2âž), multipliĂ© par une matrice fixe :

oĂč la multiplication sâeffectue dans le corps GF(2âž) avec le polynĂŽme irrĂ©ductible x^8 + x^4 + x^3 + x + 1.
đ§ź Ăquation gĂ©nĂ©rale du chiffrement AES
C=AddRoundKeyNr(SubBytes(ShiftRows(State))) aprĂšs Nr rondes C=AddRoundKeyNrâ(SubBytes(ShiftRows(State))) aprĂšs Nr rondes
avec
State = M \oplus K_0 initialement, et Nr \in {10, 12, 14}.
đ§© Exemple minimaliste (AES-128, 1Ăšre ronde)
Si le bloc dâentrĂ©e est :
M = \text{[32 43 F6 A8 88 5A 30 8D 31 31 98 A2 E0 37 07 34]}
et la clé K_0 = \text{[2B 7E 15 16 28 AE D2 A6 AB F7 97 75 46 09 2E EA]},
alors aprĂšs la premiĂšre AddRoundKey :
State_1 = M \oplus K_0 = [19 A0 9A E9 3D F4 C6 F8 E3 E2 8D 48 BE 2B 2A 08]đ RĂ©fĂ©rences documentaires
- FIPS PUB 197 â Advanced Encryption Standard (AES), NIST, 2001
- RFC 3602 â AES-CBC Cipher Algorithm and Block Sizes
- NIST SP 800-38A â Recommendation for Block Cipher Modes of Operation
- Daemen & Rijmen, The Design of Rijndael, Springer, 2002
đ III â Les cousins oubliĂ©s : Blowfish, Twofish, Serpent, Camellia
Quand AES a remportĂ© le concours du NIST, une gĂ©nĂ©ration entiĂšre dâalgos sâest retrouvĂ©e sur le carreau. Pourtant, ces « perdants magnifiques » ont chacun marquĂ© lâhistoire de la crypto symĂ©trique.
đĄ Blowfish (1993, Bruce Schneier)
Le « premier couteau suisse open source » du chiffrement par bloc.
- Bloc :Â 64 bits
- ClĂ© : jusquâĂ 448 bits
- Structure :Â Feistel Ă 16 rondes
- S-boxes : fixĂ©es dynamiquement depuis la clĂ© (original Ă lâĂ©poque)
Formule de ronde : Ri=Liâ1âF(Riâ1,Ki),Li=Riâ1Riâ=Liâ1ââF(Riâ1â,Kiâ),Liâ=Riâ1â
Sa fonction F est un bijou de compacitĂ© : F(x)=((S1[a]+S2[b])âS3[c])+S4[d]F(x)=((S1â[a]+S2â[b])âS3â[c])+S4â[d]
MalgrĂ© sa robustesse, son bloc trop court (64 bits) lâa rendu vulnĂ©rable au birthday bound.
Il a rĂ©gnĂ© dans les annĂ©es 2000 (PGP, SSH 1.3, OpenBSD) avant dâĂȘtre relĂ©guĂ© par AES et son petit frĂšre Twofish.
RĂ©fĂ©rence : Bruce Schneier â Applied Cryptography, 1996
đ Twofish (1998, Bruce Schneier et al.)
Finaliste du concours AES, Twofish est un Feistel hybride Ă 16 rondes avec blocs de 128 bits.
Il innove avec :
- des S-boxes paramétrées par la clé,
- un mélange linéaire appelé MDS matrix,
- et un pré-blanchiment/post-blanchiment du bloc.
Transformation principale : y=MDSĂS(Q(xâKi))y=MDSĂS(Q(xâKiâ))
Le tout sur GF(2âž).
Il est élégant, flexible, et reste utilisé dans TrueCrypt/VeraCrypt pour ceux qui aiment chiffrer leurs disques comme en 1999.
Références : Schneier et al., « Twofish : A 128-Bit Block Cipher » (1998)
đ Serpent (1998, Anderson, Biham, Knudsen)
Lâalgorithme des puristes.
Structure SPN (Substitution-Permutation Network) de 32 rondes â paranoĂŻa volontaire.
- Bloc : 128 bits
- ClĂ© : jusquâĂ 256 bits
- 8 S-boxes non linéaires inspirées de DES
- Chaque ronde = Substitution â Permutation â XOR avec clĂ©
Ăquation : Statei+1=P(S(Statei))âKiStatei+1â=P(S(Stateiâ))âKiâ
Serpent Ă©tait considĂ©rĂ© le plus conservateur du concours AES : extrĂȘmement sĂ»r, mais plus lent que Rijndael.
Résultat : la sécurité a perdu face à la performance.
Référence : Anderson, Biham & Knudsen, « Serpent: A New Block Cipher Proposal » (1998)
đž Camellia (2000, Mitsubishi & NTT, Japon)
Le plus discret mais le plus adopté en Asie.
Structure Feistel Ă 18 rondes, bloc 128 bits, clĂ©s 128â256 bits.
Particularités :
- opĂ©rations xor/add/sub sur GF(2âž) et GF(2ÂłÂČ),
- diffusion rapide via une Matrice FL/FLâ»Âč,
- performances proches dâAES,
- validé par ISO/IEC 18033-3 et RFC 3713.
Sa fonction principale : F(X,K)=P(S(XâK))F(X,K)=P(S(XâK))
Camellia est aujourdâhui intĂ©grĂ© dans OpenSSL, GnuTLS, et le chiffrement TLS/SSH au mĂȘme titre quâAES.
âïž Comparatif rapide
| Algo | Bloc | Clé | Structure | Vitesse | Statut |
|---|---|---|---|---|---|
| Blowfish | 64 bits | †448 bits | Feistel | Rapide | Déprécié |
| Twofish | 128 bits | †256 bits | Feistel | Bon | Sécurisé |
| Serpent | 128 bits | †256 bits | SPN | Lent | Ultra-sûr |
| Camellia | 128 bits | †256 bits | Feistel | Excellent | ISO/NIST |
đ» Ce quâon en retient
Ces algos, souvent Ă©clipsĂ©s par AES, continuent dâexister dans les stacks modernes :
- Blowfish â OpenSSH Legacy
- Twofish â VeraCrypt, GnuPG
- Serpent â VeraCrypt, OpenSSL (optionnelle)
- Camellia â TLS 1.2 / 1.3 (OpenSSL, Botan, mbedTLS)
Leur Ă©tude reste prĂ©cieuse : ils incarnent les diffĂ©rentes philosophies de conception avant lâĂšre AES â le pragmatisme (Blowfish), la flexibilitĂ© (Twofish), la rigueur absolue (Serpent), et lâĂ©quilibre industriel (Camellia).
âïž IV â Conclusion : la vie quotidienne des blocs (OpenSSL, Botan, mbedTLS, & co)
Ce quâil faut retenir ?
Le chiffrement par bloc nâest pas quâun sujet de thĂšse : il tourne partout, tout le temps â dans ton navigateur, ton VPN, ton disque chiffrĂ©, ton smartphone et mĂȘme ton badge dâaccĂšs.
Et sous le capot, ce sont les bibliothĂšques open source qui tiennent la baraque.
đ§° Les briques logicielles
- OpenSSL : la rĂ©fĂ©rence historique, implĂ©mente AES, 3DES, Camellia, Blowfish, Twofish, et mĂȘme IDEA pour les nostalgiques.
Optimisé en assembleur, il exploite les instructions AES-NI des CPU modernes.
Exemple :openssl enc -aes-256-cbc -in secret.txt -out secret.enc -k mykey - mbedTLS : la version allégée pour embarqués (routeurs, IoT).
EntiÚrement en C, conçue pour compiler sans OS et sans malloc() :
AES, Camellia et DES restent prĂ©sents, mais lâempreinte mĂ©moire est minimale. - Botan : Ă©lĂ©gance C++ moderne, haut niveau dâabstraction, et support dâĂ peu prĂšs tout ce que les chercheurs ont pondu depuis 1995.
IntĂšgre AES, Serpent, Twofish, Camellia, et mĂȘme ARIA.
Parfait pour Ă©crire des outils crypto clean et documentĂ©s. - libsodium : lâenfant rebelle de la bande â pas de AES par dĂ©faut (trop complexe Ă utiliser correctement), mais des primitives sĂ»res comme XChaCha20 et Poly1305.
Le mot dâordre : âsecure by designâ.
đ Les modes dâopĂ©ration : CBC, CTR, GCM
Les bibliothĂšques nâimplĂ©mentent pas seulement les algos bruts : elles gĂšrent aussi le mode dâenchaĂźnement des blocs.
Chaque mode change profondément le comportement du chiffrement.
- CBC (Cipher Block Chaining) : classique, nécessite un IV aléatoire.
C_i = E_K(M_i \oplus C_{i-1}) - CTR (Counter Mode) : transforme un bloc en flux pseudo-aléatoire.
C_i = M_i \oplus E_K(\text{nonce} | \text{compteur}) - GCM (Galois Counter Mode)Â : combine CTR + authentification (MAC).
C_i = M_i \oplus E_K(\text{nonce} | i), \quad \text{Tag} = H(C, A)
Aujourdâhui, AES-GCM est devenu le standard de facto pour HTTPS, SSH et IPsec : rapide, sĂ»r et matĂ©riellement accĂ©lĂ©rĂ©.
đ§ Ce que la crypto moderne a retenu
- DES nous a appris la beauté du Feistel.
- AES nous a rappelé que les mathématiques finissent toujours par gagner.
- Twofish, Serpent et Camellia ont montrĂ© que la sĂ©curitĂ©, câest aussi une question de philosophie : performance, prudence ou Ă©lĂ©gance.
- Et les implémentations open source ont prouvé que la transparence est une forme de sécurité.
đź Et maintenant ?
La prochaine frontiĂšre ?
Les chiffrements post-quantiques et les modes authentifiés universels.
Mais les bonnes vieilles Ă©quations restent les mĂȘmes :
et
M = D_K(C)⊠aussi intemporelles quâune biĂšre tiĂšde en fin de conf crypto đș.
đ RĂ©fĂ©rences complĂ©mentaires
- NIST FIPS-197 â Advanced Encryption Standard (AES)
- RFC 3602, RFC 5647, RFC 3713 â AES et Camellia pour TLS/SSH
- Botan Documentation officielle : https://botan.randombit.net
- mbedTLSÂ Developer Guide :Â https://github.com/Mbed-TLS/mbedtls
- OpenSSLÂ Official Docs :Â https://www.openssl.org/docs/
