đŸ§© Chiffrement par bloc : comprendre AES, DES, Blowfish, Twofish, Serpent et Camellia pour sĂ©curiser ses donnĂ©es

Le chiffrement par bloc â€“ qu’il s’agisse de DESAESBlowfishTwofishSerpent 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

SymboleSignification
MMessage clair (plaintext)
CTexte chiffré (ciphertext)
KClé 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
\oplusXOR binaire
P(x)Permutation
S_iS-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.

  1. Expansion :
    E: R_{i-1}(32 \text{ bits}) \rightarrow 48 \text{ bits}
  2. Mélange avec la clé de ronde :
    B = E(R_{i-1}) \oplus K_i
  3. 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.
  4. 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Ă©mentValeur
Taille de bloc128 bits
Taille de clé128, 192 ou 256 bits
StructureSubstitution–Permutation (SPN)
Rounds10, 12 ou 14 selon la clé
OpérationsGalois Field GF(2⁞)
NotationsS(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 :

  1. SubBytes — substitution non linĂ©aire via une S-box
  2. ShiftRows — dĂ©calage des lignes de l’état
  3. MixColumns — transformation linĂ©aire sur chaque colonne
  4. 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.

0123456789ABCDEF
0637C777BF26B6FC53001672BFED7AB76
1CA82C97DFA5947F0ADD4A2AF9CA472C0
2B7FD9326363FF7CC34A5E5F171D83115
304C723C31896059A071280E2EB27B275
409832C1A1B6E5AA0523BD6B329E32F84
553D100ED20FCB15B6ACBBE394A4C58CF
6D0EFAAFB434D338545F9027F503C9FA8
751A3408F929D38F5BCB6DA2110FFF3D2
8CD0C13EC5F974417C4A77E3D645D1973
960814FDC222A908846EEB814DE5E0BDB
AE0323A0A4906245CC2D3AC629195E479
BE7C8376D8DD54EA96C56F4EA657AAE08
CBA78252E1CA6B4C6E8DD741F4BBD8B8A
D703EB5664803F60E613557B986C11D9E
EE1F8981169D98E949B1E87E9CE5528DF
F8CA1890DBFE6426841992D0FB054BB16

⚙ 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 :

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 OpenSSLGnuTLS, et le chiffrement TLS/SSH au mĂȘme titre qu’AES.


⚖ Comparatif rapide

AlgoBlocCléStructureVitesseStatut
Blowfish64 bits≀ 448 bitsFeistelRapideDĂ©prĂ©ciĂ©
Twofish128 bits≀ 256 bitsFeistelBonSĂ©curisĂ©
Serpent128 bits≀ 256 bitsSPNLentUltra-sĂ»r
Camellia128 bits≀ 256 bitsFeistelExcellentISO/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

  1. DES nous a appris la beauté du Feistel.
  2. AES nous a rappelé que les mathématiques finissent toujours par gagner.
  3. Twofish, Serpent et Camellia ont montrĂ© que la sĂ©curitĂ©, c’est aussi une question de philosophie : performance, prudence ou Ă©lĂ©gance.
  4. 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 :

C = E_K(M)

et

M = D_K(C)


 aussi intemporelles qu’une biĂšre tiĂšde en fin de conf crypto đŸș.


📚 RĂ©fĂ©rences complĂ©mentaires

đŸ§© Chiffrement par bloc : comprendre AES, DES, Blowfish, Twofish, Serpent et Camellia pour sĂ©curiser ses donnĂ©es
Partager cet article : Twitter LinkedIn WhatsApp

đŸ–‹ïž PubliĂ© sur SecuSlice.com

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut