Titre d'identification du site
Format PDF
Menu principal :
Catégories :
À propos :

Plusieurs d'entre nous ont toujours ce désir d'apprendre de nouvelles choses afin d'enrichir leur savoir. Que ce soit pour parfaire une culture personnelle, pour des raisons professionnelles ou encore éducatives. On peut aussi avoir le désir de rafraîchir certaines notions qu'on a déjà apprises mais oubliées avec le temps. Par exemple, en faisant un retour plusieurs années plus tard sur des matières qu'on a aimées à l'école, et peut-être même sur celles qu'on a détestées!

Quoiqu'il en soit, ce site vous propose des contenus sur différents sujets de culture générale. Je me présente, Claude Mallette, retraité dans le domaine de l'informatique. Je suis toujours animé par cette soif d'étendre mon champ de connaissances et j'aimerais en partager le fruit avec vous. J'ai une préférence pour tout ce qui concerne la science mais j'ai aussi un intérêt pour d'autres domaines comme, par exemple, l'histoire.

Les sujets dans ce site sont présentés sous forme d'articles et de tableaux regroupés par catégories. Le tout est présenté dans un style condensé qui permet de prendre connaissance de plusieurs faits dans un même contenu. Pour emprunter une formule souvent entendue, ici on essaie de « faire plus avec moins »!

Bien que le site puisse être utilisé sur un appareil mobile comme un téléphone, il est toutefois recommandé de le consulter sur PC afin de bénéficier d'une meilleure expérience utilisateur en raison des tableaux qui peuvent s'étendre en largeur.

Fermer

Algorithme AES-256

Publication initiale : 4 juillet 2025

À savoir avant de commencer :

  • Notation hexadécimale;
  • Opérations sur des bits : OU exclusif, décalage, etc.;
  • Si possible, quelques notions sur les polynômes (ex.  x3 + x + 1);
  • Si possible, quelques notions sur les matrices en mathématiques.

1. Introduction

L'algorithme AES‑256 (AES pour Advanced Encryption Standard) est utilisé pour le chiffrement de données secrètes transmises d'un émetteur à un destinataire sous forme de texte chiffré basé sur l'utilisation d'une clé symétrique de chiffrement déjà connue à l'avance des deux parties. L'algorithme, développé au début des années 2000 par les cryptographes belges Joan Daemen et Vincent Rijmen, est aussi connu sous le nom de Rijndael, résultat de la contraction du nom de ses deux créateurs.

L'utilisation d'une clé de chiffrement par l'algorithme fait en sorte qu'il est impossible reconstituer le texte secret original en partant du texte chiffré si on ne connaît pas la clé.

L'algorithme AES‑256 fait partie de la famille AES qui comprend aussi les algorithmes AES‑128 et AES‑192. Le mode de fonctionnement de ceux-ci est le même que AES‑256, mais avec certaines valeurs différentes de paramètres, notamment la longueur de la clé. Les algorithmes AES‑128 et AES‑192 seront mentionnés plus loin à quelques reprises mais la majeure partie de l'article portera sur AES‑256.

Voyons un exemple de chiffrement avec l'algorithme AES‑256 à l'aide du texte « Bonjour tous les amis! ». Avant de l'aborder, prendre note que la notation hexadécimale y est très utilisée de manière à mieux représenter le traitement fait par l'algorithme, qui fonctionne par octets et par bits. À noter aussi que le texte chiffré est plus long que le texte original car l'algorithme produit des résultats dont la longueur est un multiple de 16 octets (ou 128 bits).

Clé de chiffrement (256 bits, notation hexadécimale) :

D2C3F2EE 570704B3 4C27EE02 2AF1C43B

Texte à chiffrer : Bonjour tous les amis!

Notation hexadécimale :

B o n j  o u r ·  t o u s  · l e s  · a m i  s !

426F6E6A 6F757220 746F7573 206C6573 20616D69 7321

Texte chiffré :

1C85547F A9A9AE7E E4DC9130 77C6299F D70BF7AD 2A4E4059 8CBFFC76 74BE0ADF

Comparaison pour lettre o :

B o n j  o u r ·  t o u s  · l e s  · a m i  s !

1C85547F A9A9AE7E E4DC9130 77C6299F D70BF7AD 2A4E4059 8CBFFC76 74BE0ADF

Comparaison pour espace (· ) :

B o n j  o u r ·  t o u s  · l e s  · a m i  s !

1C85547F A9A9AE7E E4DC9130 77C6299F D70BF7AD 2A4E4059 8CBFFC76 74BE0ADF

Comparaison pour lettre s :

B o n j  o u r ·  t o u s  · l e s  · a m i  s !

1C85547F A9A9AE7E E4DC9130 77C6299F D70BF7AD 2A4E4059 8CBFFC76 74BE0ADF

On peut remarquer dans l'exemple que les caractères qui se répètent (les lettres o et s, et l'espace [· ] ) donnent un résultat différent à chaque fois.

On ne peut pas ainsi deviner que le o, par exemple, a été remplacé par le même caractère à chaque fois. On ne peut pas déterminer non plus qu'il a été déplacé ailleurs dans le texte.

Il n'est même pas possible de reconstituer le texte original en utilisant le seul texte chiffré par lui-même. Pour pouvoir le déchiffrer il faut avoir la clé. Une personne malintentionnée qui ne connaît pas la valeur de la clé devra tenter d'en deviner la valeur par différents moyens (mots de passe faibles, attaque par dictionnaire, attaque par force brute, etc.). Le principe d'avoir une clé commune dont la valeur est connue à la fois de l'émetteur et du destinataire (et personne d'autre!) fait en sorte que la clé est « symétrique » comme mentionné en début d'article.

La clé de chiffrement pour l'algorithme a une longueur de de 256 bits, ce qui est reflété dans la partie numérique du nom de l'algorithme.

2. Principes généraux de fonctionnement

2.1 Génération des clés de transformation

Avant de commencer le chiffrement, l'algorithme procède à la génération de 16 clés de transformation, d'une longueur de 128 bits chacune. Cette opération se fait pas paires de clés. Les deux premières clés sont mises à jour avec les valeurs des deux moitiés de la clé initiale de chiffrement, appelée ici Kinit, qui est d'une longueur de 256 bits. Ensuite, chaque paire de clés propage des nouvelles valeurs à conserver dans la prochaine paire de clés.

Génération des clés de transformation
Fig. 1 : Génération des clés de transformation

Le traitement utilisé pour déterminer les nouvelles valeurs de clés d'une paire à l'autre est passablement complexe. Pour les lecteurs qui veulent en savoir davantage, les détails à ce sujet sont présentés à l'annexe A (Détails sur la génération des clés de transformation).

2.2 Traitement par blocs de 128 bits ou 16 caractères

L'algorithme AES‑256 dans sa forme la plus simple consiste sommairement à séparer le texte brut, qui peut avoir une longueur quelconque, en blocs de 128 bits (16 caractères ou octets) disposés conceptuellement en 4 rangées et 4 colonnes, et à appliquer le chiffrement sur ceux-ci en employant les clés de transformation (la clé K15 n'est pas utilisée).

Traitement par bloc de 128 bits
Fig. 2 : Traitement par bloc de 128 bits

2.3 Chiffrement d'un bloc de 128 bits

L'opération de chiffrement individuel sur un bloc de 128 bits commence par un OU exclusif entre ce bloc et la clé de transformation K0 (dont la longueur est également de 128 bits). Par la suite, une application successive de 14 rondes de transformation est effectuée sur le bloc. Les rondes sont numérotées de 1 à 14 et chaque ronde utilise la clé de transformation avec le même numéro.

Chiffrement d'un bloc de 128 bits
Fig. 3 : Chiffrement d'un bloc de 128 bits

2.4 Ronde de transformation

Dans une ronde de transformation, les opérations suivantes sont appliquées successivement au bloc de 128 bits :

  • Substitution de caractères : la valeur chaque caractère du bloc est substituée par une valeur selon un tableau de correspondance prévu à cette fin;
  • Décalage gauche rangée par rangée : les octets sont déplacés en restant toutefois dans leur rangée respective;
  • Mélange des valeurs par colonne : la valeur de chaque octet est recalculée en fonction des valeurs des autres octets à l'intérieur de la même colonne. À noter que cette opération n'est pas effectuée lors de la dernière ronde de transformation, la ronde 14;
  • OU exclusif : opération faite entre le bloc de 128 bits et la clé de transformation.
Ronde de transformation
Fig. 4 : Ronde de transformation

Pour les lecteurs qui veulent en savoir plus, une description plus approfondie des opérations effectuées lors d'une ronde de transformation est donnée à la section 4 (Détail des opérations d'une ronde de transformation d'un bloc).

2.5 Déchiffrement

Le déchiffrement fait par le destinataire d'un texte chiffré par un émetteur consiste à appliquer, sauf pour le OU exclusif, les mêmes opérations que celles employées pour le chiffrement, mais en utilisant un procédé inverse.

Ronde de transformation (déchiffrement)
Fig. 5 : Ronde de transformation (déchiffrement)

Pour que le déchiffrement puisse être mené à bien, le destinataire doit disposer de la même clé de chiffrement que l'émetteur afin de pouvoir générer les mêmes clés de transformation.

3. Modes d'utilisation de l'algorithme

L'algorithme AES-256 peut être utilisé selon plusieurs modes dont quelques-uns sont présentés dans cette section.

3.1 Mode ECB (Electronic Code Book)

Le mode ECB est essentiellement celui présenté en début de section précédente. Avec celui-ci, les blocs de 128 bits sont chiffrés indépendamment les uns les autres. Il s'agit du mode le plus simple mais aussi le plus vulnérable. En particulier, si deux blocs du texte brut ont le même contenu avant chiffrement, ceux-ci auront aussi le même contenu après chiffrement, une situation à éviter. En raison de ces désavantages, le mode ECB est très peu utilisé dans la pratique courante.

3.2 Mode CBC (Cipher Block Chaining)

Dans ce mode, le résultat du chiffrement du bloc 1 est utilisé en entrée au chiffrement du bloc 2 en le combinant au préalable par un OU exclusif au contenu du texte brut pour le bloc 2. Le même principe est appliqué pour passer du bloc 2 au bloc 3 et ainsi de suite. Un OU exclusif est également employé au départ pour chiffrer le bloc 1, en utilisant un « vecteur d'initialisation » (IV, de l'anglais Initialization Vector) qui est en fait un nombre aléatoire.

Le vecteur IV est de la même longueur qu'un bloc (128 bits) et est connu à la fois de l'émetteur et du destinataire. Le vecteur IV n'a pas besoin d'être secret. Le mode CBC offre plus de robustesse que le mode ECB mais est en revanche plus lent car il faut traiter séquentiellement les blocs, un désavantage que n'a pas le mode ECB, qui permet un traitement en parallèle des blocs.

3.3 Mode CTR (CounTeR)

Dans ce mode, le chiffrement ne se fait pas sur le texte brut lui-même mais sur la combinaison d'un nombre aléatoire avec un compteur; par la suite un OU exclusif du résultat du chiffrement est effectué avec le texte brut, bloc par bloc. Le compteur est incrémenté en passant d'un bloc à l'autre.

Le nombre aléatoire n'est pas secret mais doit être différent à chaque nouvelle transmission de message au cours d'une même session. Le nombre aléatoire et le compteur peuvent avoir une longueur quelconque mais le total des deux données jointes bout à bout ensemble (i.e. concaténation) devrait être de 128 bits.

Le mode CTR offre l'avantage de la robustesse tout en permettant le parallélisme. Même si le chiffrement porte sur une donnée qui varie peu d'un bloc à l'autre (i.e. incrémentation d'un compteur), cela n'a pas d'impact car le chiffrement avec l'algorithme AES-256 est conçu de manière à donner des résultats très différents, même entre deux données presque semblables.

3.4 Mode GCM (Galois Counter Mode)

Le mode GCM est une extension du mode CTR décrit à la section précédente, à laquelle est ajouté un traitement pour produire un code d'authentification de message MAC (de l'anglais Message Authentication Code) permettant de s'assurer de la bonne identité de l'émetteur et aussi de vérifier l'intégrité des données dans le cas où elles auraient été corrompues suite à une défaillance technique quelconque dans la communication. Le mode GCM fait partie de la classe avancée AE (pour Authenticated Encryption) pour l'algorithme AES-256.

Le mode GCM est plus complexe que les autres modes et fait appel à la théorie des corps finis développée par le mathématicien éponyme Évariste Galois au début du XIXe siècle.

Le déroulement décrit de façon très sommaire pour le mode GCM est présenté dans les étapes qui suivent.

3.4 1 Chiffrement préparatoire en mode CTR

L'émetteur procède au chiffrement par blocs du texte secret en utilisant le mode CTR de la même manière que celle indiquée à la section précédente, avec un vecteur d'initialisation (IV) comme nombre aléatoire et un compteur. Dans la pratique courante, le vecteur IV est différent à chaque transmission de données, même à l'intérieur d'une même session entre l'émetteur et le récepteur, de manière à éviter de possibles répétitions de données qui pourraient donner des indices à des observateurs externes inopportuns.

La longueur de la combinaison du vecteur IV et du compteur doit être de 128 bits.

L'émetteur définit également des données additionnelles d'authentification (AAD, de l'anglais Additional Authenticated Data) de son choix (ex. : adresse IP) en préparation de la production du code MAC.

Chiffrement préparatoire en mode CTR
Fig. 6 : Chiffrement préparatoire en mode CTR

3.4 2 Production du code d'authentification de message (MAC)

L'opération se déroule en trois parties. L'émetteur effectue d'abord un chiffrement dans un simple bloc de 128 bits du vecteur IV en appliquant les 15 rondes de transformation comme indiqué précédemment à la section 2.3.

L'émetteur procède ensuite à une opération particulière de multiplication entre les valeurs dans les blocs de 128 bits et celles contenues dans les données AAD. Sans trop entrer dans des détails qui peuvent être complexes, cette multiplication, basée sur la théorie des corps finis, permet d'avoir un résultat de 128 bits unique et quasi-aléatoire d'une fois à l'autre. Il est possible d'en savoir un peu plus concernant l'utilisation des corps finis pour l'algorithme AES‑256 en se référant à l'annexe B (Utilisation des corps finis avec l'algorithme).

Une fois la multiplication complétée, un OU exclusif est effectué avec le résultat de celle-ci et le vecteur IV chiffré dans un bloc de 128 bits. Le résultat de l'opération constitue le code MAC.

Production du code MAC
Fig. 7 : Production du code MAC

3.4 3 Envoi par l'émetteur/réception par le destinataire

Lorsque l'émetteur a terminé sa tâche, l'émetteur envoie au destinataire les données qu'il a préparées : texte chiffré en blocs, le code MAC, le vecteur IV et les données AAD.

Envoi par l'émetteur/réception par le destinataire
Fig. 8 : Envoi par l'émetteur/réception par le destinataire

3.4 4 Déchiffrement du texte par le destinataire

Le destinataire procède au déchiffrement du texte en utilisant le mode CTR, tel qu'expliqué plus tôt à la section 3.3, en employant le vecteur IV comme nombre aléatoire et un compteur comme l'a fait l'émetteur. Le déchiffrement est fait selon le procédé inverse du chiffrement tel que décrit à la section 2.5, pour chaque ronde de transformation et pour chaque bloc de 128 bits.

Déchiffrement du texte par le destinataire
Fig. 9 : Déchiffrement du texte par le destinataire

3.4 5 Production du code MAC par le destinataire

Après avoir déchiffré le texte, le destinataire produit le code MAC exactement de la même manière que l'émetteur : en chiffrant le vecteur IV reçu, en applicant la multiplication dans un corps fini des données AAD et du texte chiffré reçus, puis en faisant un OU exclusif entre le vecteur IV chiffré de 128 bits et le résultat sur 128 bits de la multiplication dans un corps fini.

Production du code MAC par le destinataire
Fig. 10 : Production du code MAC par le destinataire

3.4 6 Comparaison des codes MAC par le destinataire

Le destinataire compare le code MAC de vérification qu'il vient de produire avec celui qu'il a reçu de l'émetteur. Si les deux codes sont identiques, l'identité de l'émetteur est confirmée.

Une différence entre les codes MAC indique que l'une ou l'autre des données reçues a été altérée soit par une défectuosité dans le lien entre l'émetteur et le destinataire, soit par une intervention malveillante. Dans tous les cas, le destinataire devrait mettre fin à la session.

Comparaison des codes MAC par le destinataire
Fig. 11 : Comparaison des codes MAC par le destinataire

4. Détail des opérations d'une ronde de transformation d'un bloc

La présente section donne une description détaillée des opérations effectuées lors d'une ronde de transformation d'un bloc de 128 bits présentées précédemment en aperçu de haut niveau à la section 2.4. Quelques connaissances concernant les matrices en mathématiques peuvent être utiles pour la compréhension de certaines parties de cette section.

À titre de rappel, une ronde de transformation de bloc est constituée des opérations suivantes :

  • Substitution de caractères;
  • Décalage gauche rangée par rangée;
  • Mélange des valeurs par colonne;
  • OU exclusif.

4.1 Substitution de caractères

Cette opération consiste à substituer chaque caractère du bloc par un caractère correspondant en utilisant à cette fin un tableau prédéfini, qu'on retrouve souvent sous le nom « S-box » (de l'anglais Substitution box) dans la documentation spécialisée au sujet d'AES-256.

Substitution de caractère dans un bloc (exemple)
Fig. 12 : Substitution de caractère dans un bloc (exemple)

Le tableau S-box est montré ci-dessous; les valeurs indiquées sont en notation hexadécimale. Les rangées correspondent aux 4 bits les plus significatifs du caractère à substituer et les colonnes correspondent aux 4 bits les moins significatifs du caractère. En suivant ce principe, on obtient bel et bien le caractère 6D comme caractère de substitution pour B3 dans le cas de l'exemple.

Tableau 1 - Tableau S-box
_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

Il existe également un « tableau S-box inversé » contenant des valeurs différentes, non montré ici, pour faire la substitution en sens inverse lors du déchiffrement.

Dans certaines installations, le tableau S-box n'est pas implanté pour des raisons de sécurité. Dans un tel cas un traitement plus complexe, qui utilise la théorie ses corps finis, est effectué dynamiquement à chaque fois pour produire l'équivalent du tableau S-box pour un caractère donné. Plus de détails à ce sujet peuvent être obtenus à l'annexe C (Substitution de caractères sans tableau).

4.2 Décalage vers la gauche rangée par rangée

Pour cette opération, le décalage vers la gauche se fait de façon circulaire sur les rangées du bloc de 128 bits. Il n'y a pas de décalage pour la rangée 1 mais les autres rangées sont soumises à un décalage augmentant en nombre d'octets en passant d'une rangée à l'autre. Ainsi la rangée 2 est décalée de 1 octet, pour la rangée 3 le décalage est de 2 octets et pour la rangée 4, 3 octets.

Décalage vers la gauche (exemple)
Fig. 13 : Décalage vers la gauche (exemple)

Pour le déchiffrement, l'opération se fait en sens inverse, vers la droite.

4.3 Mélange des valeurs par colonne

Cette opération, la plus complexe dans une ronde de transformation, consiste à appliquer pour chaque colonne du bloc de 128 bits un produit matriciel entre une matrice M de dimension 4 X 4, contenant les coefficients 02, 03, 01 et 01 déjà établis à l'avance par les concepteurs de l'algorithme, et la colonne (qui est de dimension 4 X 1).

Mélange des valeurs par colonne (exemple)
Fig. 14 : Mélange des valeurs par colonne (exemple)

Les coefficients dans la matrice M se répètent d'une rangée à l'autre sauf que ceux-ci sont décalés d'une position vers la droite en changeant de rangée. Une matrice arrangée de cette sorte est dite « circulaire ».

Le développement terme à terme du produit matriciel, identifié par la partie S dans l'exemple ci-dessus, est décrit plus en détail à la prochaine section.

La multiplication à la base du produit matriciel employé pour le mélange des valeurs consiste en une multiplication dans un corps fini dont plus de détails sont donnés plus loin à la section 4.3.2.

4.3 1 Développement terme à terme du produit matriciel

Comme nous venons de voir dans l'exemple montré plus haut, le contenu de la partie S représentant le développement terme à terme du produit matriciel est passablement complexe.

Plutôt que de se référer au formalisme de l'algèbre matricielle avec laquelle il pourrait être facile de s'y perdre pour voir comment on arrive à la partie S, utilisons une astuce visuelle. Celle-ci consiste à déterminer le contenu de la partie S, qu'on peut conceptualiser comme une « surface de travail », à partir de la matrice M de dimension 4 X 4 et de la colonne C de dimension 4 X 1. Les étapes de la « recette » sont présentées ci-dessous.

Produit matriciel à développer

1. Faire pivoter de 90° dans le sens anti-horaire la colonne C de manière à avoir un en-tête pour la surface de travail. Déplacer vers la droite le crochet droit de C de manière à délimiter la surface de travail :

Faire pivoter la colonne

2. Reproduire le contenu complet de M dans S :

Reproduire M dans S

3. Dupliquer dans les colonnes correspondantes de S les valeurs provenant initialement de C mises en en-tête :

Dupliquer dans les colonnes

4. Insérer les opérateurs dans S!

Insérer les opérateurs

À ce point-ci le développement terme à terme est complété et prêt au calcul des résultats. Reprenons le procédé avec l'exemple de la figure 16 montré plus haut.

Produit matriciel à développer

1. Faire pivoter la colonne C.

Faire pivoter la colonne

2. Reproduire le contenu complet de M dans S.

Reproduire M dans S

3. Dupliquer dans les colonnes correspondantes les valeurs provenant initialement de C mises en en-tête.

Dupliquer dans les colonnes

4. Insérer les opérateurs.

Insérer les opérateurs

En appliquant ensuite la multiplication pour chaque paire des termes, puis en additionnant (par un OU exclusif) ces résultats intermédiaires rangée par rangée, on obtient le résultat final de la multiplication pour une colonne.

Calculs avec les termes

4.3 2 Multiplication dans un corps fini

La multiplication dans un corps fini pour le mélange des valeurs dans une colonne doit être appliquée entre chaque cellule de la matrice de coefficients et chaque octet de la colonne. Il s'agit d'une opération fort complexe qui peut toutefois être contournée en utilisant des tableaux de multiplication déjà existants prévus à cette fin. Certains détails concernant l'utilisation des corps finis pour l'algorithme AES‑256 sont donnés dans l'annexe B (Utilisation des corps finis avec l'algorithme).

Pour les paires avec le multiplicande 01, aucun tableau n'est nécessaire car le résultat est le même que le multiplicateur. Par exemple pour la paire (01· B3), le résultat est B3.

Exemple pour multiplication de 01

Si on veut faire le calcul pour la paire (02· 8E) de l'exemple, on utilise le tableau montré un peu plus bas pour la valeur 02.

Exemple pour multiplication de 02

Dans le tableau, les rangées correspondent aux 4 bits les plus significatifs du multiplicateur 8E et les colonnes correspondent à ses 4 bits les moins significatifs, ce qui permet d'obtenir le résultat 07 pour (02· 8E).

Tableau 2 - Tableau de multiplication dans un corps fini pour 02
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F
0_ 00 02 04 06 08 0A 0C 0E 10 12 14 16 18 1A 1C 1E
1_ 20 22 24 26 28 2A 2C 2E 30 32 34 36 38 3A 3C 3E
2_ 40 42 44 46 48 4A 4C 4E 50 52 54 56 58 5A 5C 5E
3_ 60 62 64 66 68 6A 6C 6E 70 72 74 76 78 7A 7C 7E
4_ 80 82 84 86 88 8A 8C 8E 90 92 94 96 98 9A 9C 9E
5_ A0 A2 A4 A6 A8 AA AC AE B0 B2 B4 B6 B8 BA BC BE
6_ C0 C2 C4 C6 C8 CA CC CE D0 D2 D4 D6 D8 DA DC DE
7_ E0 E2 E4 E6 E8 EA EC EE F0 F2 F4 F6 F8 FA FC FE
8_ 1B 19 1F 1D 13 11 17 15 0B 09 0F 0D 03 01 07 05
9_ 3B 39 3F 3D 33 31 37 35 2B 29 2F 2D 23 21 27 25
A_ 5B 59 5F 5D 53 51 57 55 4B 49 4F 4D 43 41 47 45
B_ 7B 79 7F 7D 73 71 77 75 6B 69 6F 6D 63 61 67 65
C_ 9B 99 9F 9D 93 91 97 95 8B 89 8F 8D 83 81 87 85
D_ BB B9 BF BD B3 B1 B7 B5 AB A9 AF AD A3 A1 A7 A5
E_ DB D9 DF DD D3 D1 D7 D5 CB C9 CF CD C3 C1 C7 C5
F_ FB F9 FF FD F3 F1 F7 F5 EB E9 EF ED E3 E1 E7 E5

Et si on veut faire le calcul pour la paire (03· D4) de l'exemple, on utilise le tableau pour la valeur 03, montrée un peu plus bas.

Exemple pour multiplication de 03

En accédant à la rangée correspondant aux 4 bits les plus significatifs du multiplicateur D4 et la colonne correspondant à ses 4 bits les moins significatifs, on obtient le résultat 67 pour (03· D4).

Tableau 3 - Tableau de multiplication dans un corps fini pour 03
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F
0_ 00 03 06 05 0C 0F 0A 09 18 1B 1E 1D 14 17 12 11
1_ 30 33 36 35 3C 3F 3A 39 28 2B 2E 2D 24 27 22 21
2_ 60 63 66 65 6C 6F 6A 69 78 7B 7E 7D 74 77 72 71
3_ 50 53 56 55 5C 5F 5A 59 48 4B 4E 4D 44 47 42 41
4_ C0 C3 C6 C5 CC CF CA C9 D8 DB DE DD D4 D7 D2 D1
5_ F0 F3 F6 F5 FC FF FA F9 E8 EB EE ED E4 E7 E2 E1
6_ A0 A3 A6 A5 AC AF AA A9 B8 BB BE BD B4 B7 B2 B1
7_ 90 93 96 95 9C 9F 9A 99 88 8B 8E 8D 84 87 82 81
8_ 9B 98 9D 9E 97 94 91 92 83 80 85 86 8F 8C 89 8A
9_ AB A8 AD AE A7 A4 A1 A2 B3 B0 B5 B6 BF BC B9 BA
A_ FB F8 FD FE F7 F4 F1 F2 E3 E0 E5 E6 EF EC E9 EA
B_ CB C8 CD CE C7 C4 C1 C2 D3 D0 D5 D6 DF DC D9 DA
C_ 5B 58 5D 5E 57 54 51 52 43 40 45 46 4F 4C 49 4A
D_ 6B 68 6D 6E 67 64 61 62 73 70 75 76 7F 7C 79 7A
E_ 3B 38 3D 3E 37 34 31 32 23 20 25 26 2F 2C 29 2A
F_ 0B 08 0D 0E 07 04 01 02 13 10 15 16 1F 1C 19 1A

4.3 3 Déchiffrement

Le déchiffrement s'effectue de la même manière qu'avec le chiffrement mais en utilisant un matrice M contenant des coefficients différents : 14, 11, 13 et 09. Le contenu de la matrice est présenté ci-dessous et il existe aussi des tableaux de multiplication pour ces coefficients.

Matrice à utiliser pour mélange des valeurs par colonne lors du déchiffrement
Fig. 15 : Matrice à utiliser pour mélange des valeurs par colonne lors du déchiffrement

4.4 OU exclusif

Contrairement à l'opération de mélange des valeurs par colonne vue dans la section précédente, l'opération du OU exclusif est beaucoup moins complexe.

Celle-ci consiste à effectuer un OU exclusif entre le bloc de 128 bits et la clé de transformation Ki, également d'une longueur de 128 bits, pour la ronde de transformation en cours. Le résultat est remis dans le bloc de 128 bits.

Cette opération s'applique aussi avec la clé K0 du début du chiffrement d'un bloc de 1024 bits avant d'effectuer les rondes de transformation comme déjà mentionné à la section 2.3.

OU exclusif
Fig. 16 : OU exclusif

5. Volet sécurité

5.1 Famille d'algorithmes AES

La famille d'algorithmes AES dont AES-256 fait partie inclut les algorithmes AES-128 et AES-192, qui utilisent des clés de 128 bits et 192 bits respectivement. En comparaison avec ceux-ci, AES-256 offre un meilleure sécurité en raison de la longueur de sa clé qui permet d'avoir 2256 valeurs possibles (de l'ordre de 1077).

En contrepartie, AES-256 est moins rapide que les autres variantes de la famille AES parce que ces derniers effectuent moins de rondes de transformation par bloc de 128 bits : 10 pour AES-128, 12 pour AES-192, comparativement à 14 pour AES-256.

Dans la pratique courante, les algorithmes AES-128 et AES-256 sont les plus utilisés sur Internet, et ce, à peu près à parts égales. Pour les contextes où la rapidité est privilégiée (ex. : applications mobiles), AES-128 est le choix qui s'impose. Les secteurs pour lesquels des données sensibles peuvent être utilisées (ex. : gouvernement, armée, finance) vont adopter de leur côté AES-256. L'utilisation de AES-192, de son côté, est relativement marginale.

Le tableau ci-dessous donne la liste des algorithmes de la famille AES et les différences entre eux.

Tableau 4 - Famille d'algorithmes AES
Algorithme

Long. clé

(bits)

Valeurs possibles

(base 2)

Approx.

(base 10)

Rondes

transf.

AES-128 128 2128 1038 10
AES-192 192 2192 1057 12
AES-256 256 2256 1077 14

5.2 Clé symétrique

La clé symétrique à utiliser pour les algorithmes de la famille AES doit être connue à la fois de l'émetteur et du destinataire. Pour que les deux parties aient au départ la même valeur de cette clé, cela ne se fait pas par une décision de l'une de celles-ci qui transmet ensuite la valeur de la clé à l'autre, ce qui créerait un risque d'interception de la clé.

Heureusement, la plupart des protocoles modernes de communication (TLS, Signal, Wireguard, etc.) comportent un mécanisme permettant à chacune des deux parties de calculer séparément la valeur de la clé et d'arriver au même résultat sans jamais à faire transiter celui-ci.

5.3 Perspectives d'avenir

Bien que les ordinateurs augmentent continuellement en puissance, ils seront toujours trop lents pour effectuer une attaque par force brute visant à déterminer la valeur d'une clé utilisée par les algorithmes de la famille AES. Ces algorithmes de chiffrement offrent actuellement un haut niveau de confiance pour la sécurisation des données.

L'émergence des ordinateurs quantiques actuellement en progression peut toutefois changer la donne. L'algorithme de Grover conçu pour ce type d'appareils permettrait de réduire de la racine carrée l'effort requis pour une attaque par force brute.

Pour l'algorithme AES-256, cela ramenerait à un nombre de l'ordre de 1038 possibilités à tester pour une attaque, un effort qui n'est toujours pas envisageable pour que l'attaque puisse être effectuée dans un délai réalisable, même pour un ordinateur quantique. Les perspectives d'avenir pour l'algorithme AES-256 restent bonnes car l'ordre de complexité requis par l'algorithme de Grover pour tenter de le fragiliser demeure exponentiel.

AES-128 est plus vulnérable face aux ordinateurs quantiques en raison de sa clé plus courte qui ferait en sorte qu'une attaque par force brute avec l'algorithme de Grover nécessiterait un effort de 264 (environ 1019) opérations, un chiffre qui devient plausible. Un passage à AES-256 permettrait à coût réduit d'écarter les risques d'une attaque par force brute.

La menace posée par les ordinateurs quantiques vise davantage les algorithmes à clé publique, comme RSA et Diffie-Hellman, qui viennent en support à ceux de la famille AES. Pour ce type d'algorithmes, l'effort requis avec un ordinateur quantique pour les déjouer serait réduit à un ordre non exponentiel en utilisant un algorithme dédié à cette tâche, l'algorithme de Shor. Cette possibilité constitue une menace plus sérieuse. L'algorithme de Shor est conçu spéfiquement pour les algorithmes à clé publique et ne peut pas s'appliquer aux algorithmes de la famille AES.

C'est surtout pour contrer l'algorithme de Shor que des efforts sont actuellement consacrés à une transition vers des algorithmes dits « post-quantiques », comme Kyber et Dilithium, en remplacement des algorithmes à clé publique existants. Le tableau ci-dessous montre un récapitulatif concernant le passage à l'éventuelle ère quantique des algorithmes actuels.

Tableau 5 - Perspectives d'avenir des algorithmes face aux ordinateurs quantiques
Type d'algorithme

Menace

quantique

Effort

quantique

Solution

post-quantique

À clé publique

(RSA, Diffie-Hellman, etc.)

Shor Non exponentiel

Algorithmes post-quantiques

(Kyber, Dilithium, etc.)

AES-128 Grover Exponentiel Passer à AES-256
AES-256 Grover Exponentiel Algorithme déjà prémuni

Bien que pour le futur l'algorithme AES-256 paraît mieux blindé contre les ordinateurs quantiques que les autres algorithmes, des algorithmes plus performants que Grover pourraient voir le jour et compromettre sa sécurité. Dans cette optique, la recherche d'alternatives post-quantiques pour en prendre éventuellement la relève est de mise.

6. Conclusion

Par l'utilisation d'une clé de chiffrement initiale qui fait propager des valeurs différentes à un ensemble de clés de transformation, l'algorithme AES-256, tout comme les autres algorithmes de la famille AES, permet le chiffrement d'un texte secret et la transmission de celui-ci à un destinataire sans qu'un observateur indiscret durant la communication puisse déterminer le contenu du texte brut initial.

Le destinataire, qui connaît la valeur de la clé de chiffrement au même titre que l'émetteur, peut déchiffrer le texte secret en utilisant cette clé.

Le chiffrement et le déchiffrement du texte se font par blocs de 128 bits. Pour chaque bloc, une série de 10, 12 ou 14 rondes de transformation, selon l'algorithme AES utilisé, est effectuée en utilisant les clés de transformation générées à partir de la clé initiale de chiffrement.

Chaque ronde de transformation de bloc est constituée des opérations suivantes :

  • Substitution de caractères;
  • Décalage gauche rangée par rangée;
  • Mélange des valeurs par colonne;
  • OU exclusif.

Tous les algorithmes de la famille AES peuvent être appliqués selon plusieurs modes comme ECB, CBC, CTR et GCM. Le mode GCM est actuellement la norme dans les échanges sur Internet car celui-ci permet d'authentifier l'identité de l'émetteur, ce qui n'est pas possible avec les autres modes.

Références

Dupont De La Rivière, E. (2024, 4 mars). Cryptage AES-256 : comprendre son importance en protection des données. Secret Défense.
https://www.secret-defense.org/cybersecurite/cryptage-aes-256-comprendre-son-importance-en-protection-des-donnees/

Dworkin, M. (2001). Recommendation for Block Cipher Modes of Operation - Methods and Techniques. NIST - National Institute of Standards and Technology.

Wagner, L. (2020, 30 avril). Is AES-256 Quantum Resistant? The Quantum Insider.

Pages Wikipédia

Utilitaire de test

AnyCript. AES Encryption / Decryption Tool.
https://anycript.com/crypto

Annexe A - Détails sur la génération des clés de transformation

Comme il a été mentionné précédemment à la section 2.1, la génération des clés de transformation K0 à K15, d'une longueur de 128 bits chacune, se fait par paires de clés et les deux premières clés K0 et K1 sont mises à jour avec les valeurs des deux moitiés de la clé initiale de chiffrement de 256 bits.

Chaque paire de clés propage ensuite des nouvelles valeurs à conserver dans la prochaine paire de clés par un procédé complexe dont les détails sont donnés dans cette annexe. Conceptuellement, chaque paire de clés commence par une clé de rang pair (ex. : K8) et finit forcément par une clé de rang impair (ex. : K9).

Pour la propagation des valeurs de clés, chaque clé (de 128 bits) dans une paire de clés est conceptuellement divisée en 4 « mots » de 32 bits. Le premier mot d'une clé de rang pair, et par le fait même d'une paire de clés, fait l'objet d'un traitement particulier alors que les autres mots dans la paire de clés sont soumis à un traitement plus régulier.

Prendre note que les détails présentés dans cette annexe ne s'appliquent qu'à l'algorithme AES-256. Le traitement pour les autres algorithmes AES-128 et AES-192 de la famille AES est similaire mais comporte tout de même certaines différences en raison des longueurs de clés et des nombres de rondes qui ne sont pas les mêmes.

A.1 Premier mot de 32 bits d'une clé rang pair

Traitement du premier mot d'une clé de transformation de rang pair
Fig. 17 : Traitement du premier mot d'une clé de transformation de rang pair

Pour le cas particulier du premier mot de 32 bits d'une clé rang pair, les opérations suivantes sont effectuées à partir des deux clés Ki - 2 et Ki - 1 qui précèdent celle de rang pair Ki dont on veut mettre à jour le premier mot :

  1. Décalage circulaire d'un octet vers la gauche appliqué sur une copie du dernier mot de 32 bits de la clé de rang impair Ki - 1 qui précède;
  2. Substitution de chacun des 4 caractères (de 8 bits) selon la méthode montrée précédemment à la section 4.1;
  3. OU exclusif du résultat précédent avec la constante d'expansion rcj appropriée correspondant à la ronde i. Les différentes valeurs de cette constante sont montrées dans la liste ci-dessous (à titre d'exemple dans la figure plus haut, rc4 = 08000000 est utilisée, ce qui fait que i correspond à 8) :
    • rc1, associée à K2; valeur : 01000000;
    • rc2, associée à K4; valeur : 02000000;
    • rc3, associée à K6; valeur : 04000000;
    • rc4, associée à K8; valeur : 08000000;
    • rc5, associée à K10; valeur : 10000000;
    • rc6, associée à K12; valeur : 20000000;
    • rc7, associée à K14; valeur : 40000000.
  4. Encore un OU exclusif entre le résultat précédent et le premier mot de 32 bits de la clé de rang pair Ki - 2 qui précède.
Le résultat de la dernière étape est alors mis dans le premier mot de la clé de rang pair Ki qu'on est en train de traiter.

A.2 Traitement des autres mots de 32 bits d'une paire de clés

Les opérations ci-dessous sont effectuées pour chacun des mots après le premier mot pour la paire de clés Ki et Ki + 1, en utilisant la paire de clés Ki - 2 et Ki - 1 qui précèdent :

Traitement des autres mots de 32 bits d'une paire de clés
Fig. 18 : Traitement des autres mots de 32 bits d'une paire de clés
  1. OU exclusif entre le mot de 32 bits qui précède immédiatement et le mot à la même position dans la paire de clés qui précède;
  2. S'il s'agit du premier mot de la clé de rang impair Ki + 1, OU exclusif entre la substitution de chacun des 4 caractères appliquée (selon la méthode de la section 4.1) au dernier mot de la clé de rang pair Ki qui précède et le premier mot de la clé de rang impair Ki - 1 qui précède.

Annexe B - Utilisation des corps finis avec l'algorithme

L'utilisation des corps finis constitue un élément fondamental dans le principe de fonctionnement de l'algorithme AES-256. En particulier, l'opération de « multiplication dans un corps fini », mentionné à certaines reprises dans l'article, s'avère très utile en raison de son potentiel pour produire des résultats de façon quasi-aléatoire.

B.1 Quelques notions de base

Sans entrer dans le détail de la théorie des corps finis pour ne pas déborder du cadre de l'article, nous allons nous référer aux corps finis qui concernent directement l'algorithme AES-256 selon la notation employée dans la théorie : F256 et F2128. Bien qu'un corps fini soit souvent représenté par des polynômes, il peut aussi l'être par des nombres binaires lorsque celui-ci s'applique à une puissance de 2, ce qui est le cas pour AES-256.

Pour effectuer une opération dans un corps fini (multiplication, inverse multiplicatif), un polynôme dit « irréductible » doit être utilisé à cette fin. Celui-ci permet de s'assurer que le résultat de l'opération reste dans le corps fini.

B.2 Corps fini F256

Pour l'algorithme AES-256, le corps fini F256 est utilisé pour les opérations suivantes :

Comme il a été vu dans les sections correspondant à ces opérations, des tableaux peuvent être utilisés directement sans utiliser les corps finis mais le recours à ceux-ci demeure facultatif. Certaines organisations peuvent décider de plutôt effectuer dynamiquement à chaque fois les opérations s'appliquant au corps fini F256 permettant d'avoir l'équivalent de ce qui peut être obtenu à partir des tableaux.

Le polynôme irréductible utilisé pour les opérations dans le corps fini F256 pour l'algorithme AES-256 est le suivant (en binaire, les positions de bits à 1 correspondent aux puissances de x présentes dans le polynôme) :

x8 + x4 + x3 + x + 1 (binaire : 100011011; hexadécimal : 11B)

Un exemple détaillé de multiplication dans le corps fini F256 peut être consulté dans l'article Corps finis et chiffrement des données.

B.3 Corps fini F2128

Pour l'algorithme AES-256, le corps fini F2128 est utilisé pour l'opération suivante :

Le polynôme irréductible utilisé pour une opération dans le corps fini F2128 pour l'algorithme AES-256 est le suivant :

x128 + x7 + x2 + x + 1 (hexadécimal : 1 00000000 00000000 00000000 00000087)

Le corps fini donne accès à 2128 valeurs possibles (de l'ordre de 1038 valeurs). Un tel chiffre exclut l'emploi de tableaux déjà définis à l'avance comme c'est le cas pour le corps F256 et impose de lui-même l'utilisation dynamique des opérations dans le corps fini F2128.

Annexe C - Substitution de caractères sans tableau

C.1 Utilisation de l'inverse multiplicatif

La construction du tableau S-box utilisé pour la substitution de caractères repose, du moins en partie, sur l'opération d'inverse multiplicatif dans le corps fini F256 de la valeur du caractère à substituer, comme mentionné à l'annexe précédente.

Le calcul de l'inverse multiplicatif dans un corps fini peut être fait de plusieurs manières pour un nombre donné du corps fini, notamment en l'élevant à la puissance 254 pour le corps fini F256. Cela peut être fait en seulement quelques étapes de multiplication du nombre par lui-même dans le corps fini en utilisant un polynôme irréductible. La méthode employée est décrite plus en détail dans l'article Corps finis et chiffrement des données

Pour la substitution de caractères, l'inverse multiplicatif doit être utilisé avec le même polynôme irréductible que celui mentionné à l'annexe précédente (x8 + x4 + x3 + x + 1 ou 100011011 [binaire] ou 11B [hexadécimal]). Plusieurs autres étapes, dites de « transformation affine », qui différent selon la partie où l'on applique l'algorithme AES-256 (chiffrement ou déchiffrement), sont aussi utilisées pour la substitution de caractères.

C.2 Substitution lors du chiffrement

La liste complète des étapes lors du chiffrement est donnée ci-dessous (C : caractère à substituer; S : caractère de substitution; I : inverse multiplicatif).

  • Déterminer l'inverse multiplicatif I de C;
  • S = I;
  • S = OU exclusif de S avec valeur de I décalée de façon circulaire de 1 bit à gauche;
  • S = OU exclusif de S avec valeur de I décalée de façon circulaire de 2 bits à gauche;
  • S = OU exclusif de S avec valeur de I décalée de façon circulaire de 3 bits à gauche;
  • S = OU exclusif de S avec valeur de I décalée de façon circulaire de 4 bits à gauche;
  • S = OU exclusif de S avec valeur constante binaire 01100011 (63 en hexadécimal).

Si on prend l'exemple de C = D4 (hexadécimal), on peut déterminer que son inverse multiplicatif est C5 (voir le tableau des inverses multiplicatifs à la fin de l'article). Sans détailler toutes les étapes ci-dessus, on obtiendra 48 comme résultat.

C.3 Substitution inversée lors du déchiffrement

Pour avoir la valeur initiale C du caractère substitué à partir de celle du caractère de substitution S, les étapes ci-dessous, qui constituent l'inverse de la transformation montrée précédemment, doivent être effectuée lors du déchiffrement (T : variable de travail).

  • T = 0000 0000;
  • T = OU exclusif de T avec valeur de S décalée de façon circulaire de 1 bit à gauche;
  • T = OU exclusif de T avec valeur de S décalée de façon circulaire de 3 bits à gauche;
  • T = OU exclusif de T avec valeur de S décalée de façon circulaire de 6 bits à gauche;
  • T = OU exclusif de T avec valeur constante binaire 0000 0101 (05 en hexadécimal);
  • Déterminer l'inverse multiplicatif de T, ce qui donne directement la valeur voulue du caractère C.

Si on reprend le résultat du chiffrement précédent avec S = 48 (hexadécimal), on a la valeur C5 comme dernier résultat intermédiaire en appliquant les étapes ci-dessus, sans les détailler, avant de déterminer l'inverse multiplicatif de T . Et l'inverse multiplicatif de C5 est bel et bien D4, le caractère initial avant chiffrement.

C.4 Tableau des inverses multiplicatifs

Le tableau ci-dessous montre les inverses multiplicatifs dans F256 avec le polynôme irréductible x8 + x4 + x3 + x + 1 (ou 100011011 [binaire] ou 11B [hexadécimal]) utilisé pour AES-256.

Ce tableau n'est utilisé ici que pour les fins de la présente démonstration et n'est pas implanté dans la pratique courante. Pour les installations qui utiliseraient l'inverse multiplicatif pour éviter d'utiliser le tableau S-box pour des raisons de sécurité, il n'y aurait aucun intérêt à employer un tableau des inverses multiplicatifs car celui-ci serait exposé aux mêmes risques que le tableau S-box. Pour de telles configurations, le calcul de l'inverse multiplicatif se fait dynamiquement.

Dans le tableau, les rangées correspondent aux 4 bits les plus significatifs du nombre dont on veut déterminer l'inverse multiplicatif et les colonnes correspondent à ses 4 bits les moins significatifs.

Tableau 6 - Inverses multiplicatifs dans F256
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F
0_ -- 01 8D F6 CB 52 7B D1 E8 4F 29 C0 B0 E1 E5 C7
1_ 74 B4 AA 4B 99 2B 60 5F 58 3F FD CC FF 40 EE B2
2_ 3A 6E 5A F1 55 4D A8 C9 C1 0A 98 15 30 44 A2 C2
3_ 2C 45 92 6C F3 39 66 42 F2 35 20 6F 77 BB 59 19
4_ 1D FE 37 67 2D 31 F5 69 A7 64 AB 13 54 25 E9 09
5_ ED 5C 05 CA 4C 24 87 BF 18 3E 22 F0 51 EC 61 17
6_ 16 5E AF D3 49 A6 36 43 F4 47 91 DF 33 93 21 3B
7_ 79 B7 97 85 10 B5 BA 3C B6 70 D0 06 A1 FA 81 82
8_ 83 7E 7F 80 96 73 BE 56 9B 9E 95 D9 F7 02 B9 A4
9_ DE 6A 32 6D D8 8A 84 72 2A 14 9F 88 F9 DC 89 9A
A_ FB 7C 2E C3 8F B8 65 48 26 C8 12 4A CE E7 D2 62
B_ 0C E0 1F EF 11 75 78 71 A5 8E 76 3D BD BC 86 57
C_ 0B 28 2F A3 DA D4 E4 0F A9 27 53 04 1B FC AC E6
D_ 7A 07 AE 63 C5 DB E2 EA 94 8B C4 D5 9D F8 90 6B
E_ B1 0D D6 EB C6 0E CF AD 08 4E D7 E3 5D 50 1E B3
F_ 5B 23 38 34 68 46 03 8C DD 9C 7D A0 CD 1A 41 1C
© Claude Mallette 2025 – Tous droits réservés.
Algorithme AES-256 :