Publication initiale : 4 juillet 2025
À savoir avant de commencer :
La théorie des corps finis a été développée au début du XIXe siècle par le jeune mathématicien Évariste Galois, mort à seulement 20 ans. Elle est notamment utilisée en cryptographie informatique où elle joue un rôle fondamental. Certains principes généraux de cette théorie seront décrits de manière plus ou moins formelle dans cet article. L'accent sera davantage mis, avec des exemples, sur leur application dans le domaine du chiffrement des données et en particulier l'algorithme AES-256.
Un corps fini est un ensemble contenant un nombre fini d’éléments (appelé son cardinal) dans lequel on peut effectuer les opérations d’addition, de soustraction, de multiplication et de division (sauf par zéro), avec les mêmes règles que dans les nombres usuels. On peut noter les propriétés suivantes d'un corps fini :
Un corps fini peut être noté comme suit :
Fq (où q = pn)
La notation suivante peut aussi être employée si q donne un nombre trop grand :
Fpn
Dans la documentation anglo-saxonne sur le sujet, on retrouve souvent la notation suivante :
GF(q) ou encore GF(pn) {GF pour Galois Field}
Les corps finis de caractéristique 2 se prêtent très bien au traitement en mode binaire par ordinateur en raison de l'utilisation de la base 2 et l'attention principale du présent article sera portée sur ceux-ci.
Les éléments d'un corps fini sont souvent représentés de manière formelle par des polynômes de degré inférieur au degré d'extension n du corps fini sous la forme suivante :
cn - 1 xn - 1 + cn - 2 xn - 2 + . . . + c1 x1 + c0 x0
Chaque coefficient ci doit être une valeur entière comprise entre 0 et p - 1.
Pour un corps de caractéristique p = 2, ce formalisme peut être ramené à une représentation binaire plus familière en dépit de l'utilisation du terme « polynôme ». Prenons par exemple un polynôme avec un degré d'extension n = 8. Celui-ci sera exprimé comme suit :
c7 x7 + c6 x6 + c5 x5 + c4 x4 + c3 x3 + c2 x2 + c1 x1 + c0 x0
Pour avoir une représentation binaire, on enlève tous les termes en x et les opérateurs + dans le polynôme :
c7 c6 c5 c4 c3 c2 c1 c0
Comme mentionné plus haut, les coefficients ci sont des entiers compris entre 0 et p - 1. Étant donné que p ici est égal à 2, les coefficients ne peuvent donc avoir que la valeur 0 ou 1, ce qui correspond à des bits d'une représentation binaire d'un nombre.
Voyons maintenant avec un exemple dans le corps fini F256 :
Avec cet exemple on peut faire les constatations suivantes :
En étendant le principe pour l'ensemble du corps fini F256 qui comporte 256 éléments, on obtient un domaine composé des valeurs binaires de 00000000 à 11111111.
L'addition et la soustraction selon la représentation polynômiale d'un corps fini de caractéristique p commencent de la même manière que celle employée pour les polynômes conventionnels. Voyons avec un exemple d'addition :
Pour débuter, on fait le regroupement des termes des polynômes selon les exposants :
On additionne ensuite les coefficients pour chaque groupe selon l'exposant :
À ce point-ci, l'addition et la soustraction de polynômes dans un corps fini diffèrent de celles pour les polynômes conventionnels. Lorsque les opérations sont effectuées dans un corps fini, il faut appliquer aux totaux des coefficients la réduction modulo selon la caractéristique p du corps. Si on prend la caractéristique 2 dans l'exemple, on utilise alors la réduction modulo 2 :
En récrivant le polynôme avec les nouveaux coefficients, on obtient le résultat de l'addition dans un corps fini :
Lorsqu qu'on fait l'addition ou la soustraction dans un corps fini de caractéristique 2 en utilisant la représentation binaire, ces opérations sont équivalentes. On utilise alors simplement l'opération de OU exclusif entre les opérandes. On peut voir ci-dessous l'addition en représentation binaire avec le même exemple utilisé jusqu'ici sous forme de polynômes :
Dans un corps fini Fpn, la multiplication et les autres opérations qui en sont dérivées (inverse multiplicatif et division) nécessitent l'emploi d'un « polynôme irréductible » prédéfini. Celui-ci consiste en un polynôme de degré n qu'il n'est pas possible d'exprimer comme un produit de deux autres polynômes dans le corps fini, c'est pour cette raison qu'on dit que le polynôme est irréductible.
Le polynôme irréductible joue le même rôle dans un corps fini qu'un nombre premier parmi les nombres entiers. Il sert pour la multiplication de polynômes au même titre que le nombre premier dans une mulun nombre composétiplication afin d'obtenir un nombre composé.
Pour un corps fini donné, incluant F256, il est possible d'avoir plusieurs polynômes irréductibles. Pour l'algorithme AES-256, par exemple, qui utilise F256, le polynôme irréductible choisi est le suivant :
x8 + x4 + x3 + x + 1 (équivalent en mode binaire : 100011011, ou 11B en mode hexadécimal).
Pour décrire la multiplication P ∙ Q entre deux polynômes dans un corps fini Fpn, nous allons examiner l'opération dans le contexte des corps finis de caractéristique 2 puisque l'article porte principalement l'attention sur ceux-ci.
La multiplication dans un corps fini se fait en deux grandes étapes :
Nous allons voir plus en détail chacune de celles-ci dans les prochaines sections avec un exemple dans le corps fini F256 (donc de caractéristique p = 2 et de degré d'extension n = 8), avec le polynôme irréductible utilisé pour l'algorithme AES-256 : x8 + x4 + x3 + x + 1 (binaire : 100011011, hexadécimal : 11B).
À noter que le polynôme irréductible n'est pas utilisé pour l'étape de multiplication brute et est réservé pour celle de réduction modulo.
Cette étape sera décrite en employant la représentation polynômiale, qui est plus compliquée mais qui se rapproche plus du concept général, et la représentation binaire, plus simple mais applicable seulement aux corps finis de caractéristique 2.
À titre d'exemple, prenons la multiplication à faire entre les polynômes P (multiplicande) et Q (multiplicateur) suivants :
La première chose à faire est de faire correspondre en paires chaque terme d'un des polynômes à chacun des termes de l'autre polynôme et à multiplier les termes de chaque paire :
Les résultats obtenus consistent en eux-mêmes des polynômes. On additionne ensuite chacun de ces polynômes selon la même méthode que celle exposée à la section 4. Pour cela, on fait le regroupement des termes selon les exposants :
On additionne les coefficients pour chaque groupe selon l'exposant :
Et on applique la réduction modulo 2 à chaque total de coefficients :
En récrivant le polynôme avec les nouveaux coefficients, on obtient le résultat de la multiplication brute :
La valeur binaire équivalant au résultat de la multiplication brute est 110110111011100.
Faisons la même démarche, en employant cette fois-ci la représentation binaire. Pour cela, employons la méthode suivante pour les polynômes P (multiplicande) et Q (multiplicateur) :
Le développement pour obtenir le résultat de la multiplication brute suivant cette méthode est montré ci-dessous.
On peut constater que le résultat de la multiplication brute obtenu ici avec la représentation binaire est le même que celui obtenu avec la représentation polynômiale.
Pour cette étape, nous allons strictement utiliser la représentation binaire. Comme on peut le constater, le résultat de la multiplication brute obtenu avec l'exemple, 110110111011100, est passablement long.
Plus particulièrement il excède la valeur maximale du corps fini F256 (11111111 en mode binaire) utilisé pour l'exemple et il doit donc être ramené à l'intérieur des limites du corps fini. C'est ici que la réduction modulo selon le polynôme irréductible entre en jeu.
Pour cela, nous allons nous inspirer de la division à crochet en appliquant la méthodologie suivante :
Suivant cette méthodologie, le développement de la réduction modulo selon le polynôme irréductible pour le résultat de la multiplication brute en exemple est présenté ci-dessous.
Le tableau ci-dessous, applicable à l'exemple de multiplication dans un corps fini que nous venons de voir, montre les différents résultats de multiplications pour dans F256 avec le polynôme irréductible 100011011 (binaire) qu'il est possible d'avoir en utilisant D4 (hexadécimal) comme multiplicande. Les rangées représentent les 4 bits les plus significatifs du multiplicateur alors que les colonnes désignent les 4 bits les moins significatifs. Suivant ce principe, on retrouve bel et bien la valeur A4 comme résultat pour le multiplicateur 8B de l'exemple.
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ | 00 | D4 | B3 | 67 | 7D | A9 | CE | 1A | FA | 2E | 49 | 9D | 87 | 53 | 34 | E0 |
1_ | EF | 3B | 5C | 88 | 92 | 46 | 21 | F5 | 15 | C1 | A6 | 72 | 68 | BC | DB | 0F |
2_ | C5 | 11 | 76 | A2 | B8 | 6C | 0B | DF | 3F | EB | 8C | 58 | 42 | 96 | F1 | 25 |
3_ | 2A | FE | 99 | 4D | 57 | 83 | E4 | 30 | D0 | 04 | 63 | B7 | AD | 79 | 1E | CA |
4_ | 91 | 45 | 22 | F6 | EC | 38 | 5F | 8B | 6B | BF | D8 | 0C | 16 | C2 | A5 | 71 |
5_ | 7E | AA | CD | 19 | 03 | D7 | B0 | 64 | 84 | 50 | 37 | E3 | F9 | 2D | 4A | 9E |
6_ | 54 | 80 | E7 | 33 | 29 | FD | 9A | 4E | AE | 7A | 1D | C9 | D3 | 07 | 60 | B4 |
7_ | BB | 6F | 08 | DC | C6 | 12 | 75 | A1 | 41 | 95 | F2 | 26 | 3C | E8 | 8F | 5B |
8_ | 39 | ED | 8A | 5E | 44 | 90 | F7 | 23 | C3 | 17 | 70 | A4 | BE | 6A | 0D | D9 |
9_ | D6 | 02 | 65 | B1 | AB | 7F | 18 | CC | 2C | F8 | 9F | 4B | 51 | 85 | E2 | 36 |
A_ | FC | 28 | 4F | 9B | 81 | 55 | 32 | E6 | 06 | D2 | B5 | 61 | 7B | AF | C8 | 1C |
B_ | 13 | C7 | A0 | 74 | 6E | BA | DD | 09 | E9 | 3D | 5A | 8E | 94 | 40 | 27 | F3 |
C_ | A8 | 7C | 1B | CF | D5 | 01 | 66 | B2 | 52 | 86 | E1 | 35 | 2F | FB | 9C | 48 |
D_ | 47 | 93 | F4 | 20 | 3A | EE | 89 | 5D | BD | 69 | 0E | DA | C0 | 14 | 73 | A7 |
E_ | 6D | B9 | DE | 0A | 10 | C4 | A3 | 77 | 97 | 43 | 24 | F0 | EA | 3E | 59 | 8D |
F_ | 82 | 56 | 31 | E5 | FF | 2B | 4C | 98 | 78 | AC | CB | 1F | 05 | D1 | B6 | 62 |
La présentation du tableau nous permet de faire les constatations suivantes :
En empruntant un terme issu de la théorie des ensembles, toutes ces propriétés font que la multiplication selon le tableau consiste en une bijection qui peut être illustrée par des correspondances comme suit.
Au-delà de l'exemple montré ici, la nature bijective de la multiplication dans un corps fini s'applique de façon générale à tous les corps finis, pour les valeurs non nulles (i.e. différentes de 0).
Une autre caractéristique de la multiplication dans un corps fini est que le résultat varie énormément sans qu'on puisse établir de lien avec la manière dont varie le multiplicateur, même si ce n'est que très légèrement. Cela fait en sorte que le résultat est « non linéaire » par rapport au multiplicateur et lui donne une apparence imprévisible en passant d'un multiplicateur à l'autre.
En reprenant la rangée pour les multiplicateurs commençant par 0 du tableau de multiplication dans F256 pour D4 montré précédemment, on peut constater le caractère quasi-aléatoire des résultats.
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _D | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ | 00 | D4 | B3 | 67 | 7D | A9 | CE | 1A | FA | 2E | 49 | 9D | 87 | 53 | 34 | E0 |
Toujours avec l'exemple de la multiplication dans F256 pour D4, le graphique de distribution montré ci-dessous permet de représenter visuellement la difficulté d'établir un lien entre le résultat et le multiplicateur.
Par sa capacité de produire des résultats presque imprévisibles, la multiplication dans un corps fini constitue la pierre angulaire dans le domaine du chiffrement des données, notamment avec l'algorithme AES-256. La non-linéarité des résultats permet de « brouiller les cartes » afin que des données secrètes puissent être échangées entre deux parties dans un format incompréhensible pour des observateurs indiscrets.
Outre le corps fini F256, l'algorithme AES-256 utilise aussi, lorsqu'il est employé avec le mode GCM (ce qui est la norme dans les échanges sur Internet), le corps F2128 afin d'augmenter exponentiellement l'apparence de caractère imprévisible de l'opération de multiplication dans un corps fini. L'utilisation de ce corps par AES-256 est accompagnée du polynôme irréductible suivant :
x128 + x7 + x2 + x + 1 (hexadécimal : 1 00000000 00000000 00000000 00000087)
Pour un élément donné a d'un corps fini Fpn, son inverse multiplicatif est l'élément pour lequel le résultat de la multiplication de a avec celui-ci donne 1 (en employant le polyôme irréductible approprié).
En utilisant comme exemple le corps fini F256, une manière de déterminer l'imverse multiplicatif consiste à élever a à la puissance 254 pour obtenir directement le résultat voulu. Cela se fait en un nombre réduit d'étapes par un jeu de multiplications (modulo un polynôme irréductible) en reprenant le résultat de l'étape précédente comme indiqué ci-dessous.
Celle-ci tire son origine d'une des propriétés de l'ensemble des éléments non nuls d'un corps fini de former un « groupe multiplicatif cyclique ». Sans entrer dans les détails qui nous mèneraient un peu loin du cadre de cet article, cela permet de faire l'énoncé suivant pour le corps fini F256 pour tout entier non nul a appartenant au corps fini.
a255 ≡ a0 (mod 256) {≡ : symbole de congruence qui signifie « est égal à, modulo une certaine valeur »}
Étant donné que tout nombre élevé à la puissance 0 donne comme résultat 1, on peut appliquer ce principe à l'énoncé, qui fait en sorte que a255 est lui aussi égal à 1 :
a255 ≡ a0 (mod 256) = 1
Mais a255 est aussi égal à a254 ∙ a. On a donc :
a255 = a254 ∙ a = 1
Cela donne exactement ce que l'on cherche : la valeur a254 à multiplier à a pour avoir 1 comme résultat. Donc, a254 est l'inverse multiplicatif de a dans F256, et ce, peu importe le polynôme irréductible employé.
Il existe plusieurs autres méthodes, non montrées dans la présente section, pour déterminer l'inverse multiplicatif mais celle utilisant les multiplications successives donnée plus haut demeure simple et est relativement peu coûteuse en temps d'exécution.
Le tableau ci-dessous utilisé par l'algorithme AES-256 montre en notation hexadécimale tous les inverses multiplicatifs dans F256 selon le polynôme irréductible 100011011 (binaire). Les rangées représentent les 4 bits les plus significatifs du nombre dont on veut déterminer l'inverse multiplicatif alors que les colonnes désignent les 4 bits les moins significatifs. Suivant ce principe, on retrouve, par exemple, la valeur EF comme inverse multiplicatif pour B3.
_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 |
Contrairement à la multiplication dans un corps fini, la division dans un corps fini est très peu utilisée dans les algorithmes de chiffrement.
Quoi qu'il en soit, la division d'un polynôme P par un polynôme diviseur Q dans un corps fini se fait en utilisant des concepts qui ont été montrés dans les sections précédentes, soit en multipliant P par l'inverse multiplicatif de Q.
Un corps fini ne s'applique qu'à un nombre premier positif, appelé la caractéristique du corps fini, ou à celui-ci élevé à une certaine puissance exprimée en un nombre entier plus grand que 0, appelée le degré d'extension du corps fini.
Les opérations usuelles d'addition, de soustraction, de multiplication et de division (sauf par 0) s'appliquent à un corps fini.
La multiplication dans un corps fini nécessite l'usage d'un polynôme irréductible. La règle est la même pour opérations de division et d'inverse multiplicatif dans un corps fini, qui sont basées sur la multiplication dans un corps fini.
La représentation polynômiale, qui est fréquemment utilisée pour les corps finis en général, est certes intimidante. Toutefois, lorsqu'il s'agit d'utiliser certains éléments de la théorie des corps finis pour le cas particulier des corps de caractéristique 2, qui sont utilisés pour le chiffrement des données, on peut utiliser à la place la notation binaire, qui est plus familière.
La multiplication et l'inverse multiplicatif dans un corps fini de caractéristique 2 sont les principales opérations utilisées pour le chiffrement des données. Étant par leur nature des bijections. Ces opérations ont le potentiel de produire le plus large éventail possible de résultats avec toutes les valeurs faisant partie du corps fini. Cette faculté et celle de produire des résultats quasi-imprévisibles (non-linéarité) constituent des atouts indispensables pour les algorithmes de chiffrement des données.
Finite field arithmetic