mathématiques autour de la cryptographie. - emse.frdutertre/documents/math_crypto.pdf ·...

23
Mathématiques autour de la cryptographie www.emse.fr/~dutertre/enseignement.html - 2008 1 Mathématiques autour de la cryptographie. Index Codage par division Codage série Code cyclique Code dual Code linéaire Corps de Galois Elément primitif m – séquence Matrice génératrice Matrice de contrôle Ordre multiplicatif Polynôme générateur Polynôme minimal Polynôme primitif Représentation polynomiale

Upload: trankhuong

Post on 12-Sep-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 1

Mathématiques autour de la cryptographie.

Index

Codage par division

Codage série

Code cyclique

Code dual

Code linéaire

Corps de Galois

Elément primitif

m – séquence

Matrice génératrice

Matrice de contrôle

Ordre multiplicatif

Polynôme générateur

Polynôme minimal

Polynôme primitif

Représentation polynomiale

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 2

Introduction aux codes correcteurs – Pierre Csillag .

Codes linéaires.

Définitions.

� Les codes linéaires sont des codes où les bits du mot de code dépendent linéairement

(selon xor et and) des bits d’information.

mot d’information i = (i1, i2, … , ik) ij ∈ B = {0, 1}

mot de code c = (c1, c2, … , cn) cj ∈ B

On notera le code C (n, k)

n = longueur du mot de code (en bits)

k = nombre de bits d’information

r = nombre de bits de contrôle

on a n = k + r

� Sous espace vectoriel.

Avec k bits, on peut former 2k mots différents, lesquels constituent un espace vectoriel

de dimension k, soit Bk.

Dans un code linéaire C (n, k), les bits de contrôle sont liés aux bits d’information, il y

a donc une bijection entre les mots d’information et les mots du code.

Les relations de liaison sont linéaires, il y a donc isomorphisme entre l’espace

vectoriel Bk et les mots du code C (n, k).

Les mots du code appartiennent à la fois à Bn (comme mot de longueur n) et à un

espace vectoriel de dimension k (par isomorphisme entre C (n, k) et Bk).

Les mots d’un code linéaire forment un sous espace vectoriel

de dimension k de Bn .

� Théorème fondamental des codes linéaires.

La distance minimale d’un code est la plus petite distance que l’on peut trouver entre

des mots de code différents pris deux à deux.

c’, c’’ ∈ C (n, k) La distance entre c’ et c’’ est le poids de c’ ⊕ c’’. Or tous les

éléments de C forment un sous espace vectoriel donc c’’’ = c’ ⊕ c’’ ∈ C

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 3

La distance minimale d’un code linéaire est égale

au poids minimal du code.

Matrice génératrice.

� Définition.

k mots linéairement indépendants forment une base pour le sous espace (de dim. k).

On appelle matrice génératrice G du code une matrice k, n dont les k lignes sont les k

mots de la base.

N’importe quel mot du code sera une combinaison linéaire des mots de base, donc on

pourra obtenir un mot de code correspondant à un mot d’information par le produit

matriciel

c = i.G

=n k n

n

k

*=n k n

n

k

*

� Forme canonique réduite : G’

(opérations élémentaires sur les lignes)

1

1

1

A(0)

(0)

k r

kG’ = = 1k Ak, r

1

1

1

A(0)

(0)

k r

kG’ = = 1k Ak, r

(forme réduite à gauche)

Les lignes de la nouvelle matrice génératrice G’ forment la base canonique du sous

espace vectoriel des mots du code. Elle engendre un code systématique, car dans le

produit c = i.G’ la sous matrice unitaire reproduira les bits d’information.

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 4

Contrôle de parité.

Idée : on peut caractériser l’appartenance d’un vecteur libre A à un plan P, par le fait

qu’il est orthogonal à un vecteur B porté par une droite D. Ici, les vecteurs de P et ceux

de D constituent deux sous espaces orthogonaux de notre espace habituel à trois

dimensions. (puis généralisation à des espaces abstraits , sous espaces vectoriels de

Bn).

� Sous espace orthogonal.

Soit En un espace vectoriel à n dimensions sur {0, 1}

a = (a1, a2, … , an ) et b = (b1, b2, … , bn ) ∈ En

produit scalaire :

c = a.b = a1.b1 ⊕ a2.b2 ⊕ … ⊕ an.bn

Définition de l’orthogonalité :

a ⊥ b ⇔ a.b = 0

!! La notion d’orthogonalité a ces propriétés légèrement différentes de celles auxquelles nous

sommes habituées ; étant donné que En est défini sur un corps fini, un vecteur non nul peut

être orthogonal à lui-même.

Soient Ek et Er deux sous espaces de En. On dit que Er est le sous espace orthogonal de

Ek, si

- k + r = n

- tous les vecteurs de Ek sont orthogonaux à tous les vecteurs de Er

� Matrice de contrôle.

Soit un code C (n, k) défini par une matrice génératrice G.

D code dual de C défini sur le sous espace orthogonal à l’ensemble des mots du code C.

Soit H la matrice génératrice de ce code dual (r, n)

G.Ht = 0

Ht transposée de la matrice H

H est une matrice de contrôle (de parité) pour le code C

G = 1k Ak, rG = 1k Ak, r

Ak, rtH = 1rAk, rtH = 1r

alors

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 5

En effet

G.Ht = 1k Ak, r

Ak, r

1r

G.Ht = 1k Ak, r

Ak, r

1r

Codes cycliques.

Définitions.

� Un code cyclique est un code linéaire C (n, k) tel que toute permutation circulaire sur

les symboles d’un mot de code donne encore un mot du code :

[cn-1, cn-2, … , c0] ∈ C ⇒ [cn-2, … , c0, cn-1] ∈ C

� Représentation polynomiale.

On peut considérer les symboles d’un mot comme les coefficients d’un polynôme

c = [cn-1, cn-2, … , c0] ⇔ c(x) = cn-1xn-1 + … + c1x + c0

c = [110101] ⇔ c(x) = x5 + x4 + x2 + 1

addition modulo 2 i.e. xor

La correspondance entre le mot et sa représentation polynomiale est une bijection.

� Permutation circulaire.

• Une position vers la gauche :

[cn-1, cn-2, … , c0] ⇔ cn-1xn-1 + … + c1x + c0

⇓ ⇓

[cn-2, … , c0, cn-1] ⇔ cn-2xn-1 + … + c0x + cn-1

Equivalent à prendre le produit x.c(x) modulo xn – 1 (ou bien modulo xn + 1)

• i positions vers la gauche :

cad effectuer i fois le décalage précédent vers la gauche

a = [10101] n = 5

G.Ht = Ak, r + Ak, r = 0G.Ht = Ak, r + Ak, r = 0

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 6

pour i = 3 permutations circulaires

a’’’ = [01101]

a’’’= x 3(x4 + x2 + 1) mod(x5 + 1)

x7 + x5 + x3 x5 + 1

x7 + x2

x5 + x3 + x2

x5 + 1

a’’’(x) = x3 + x2 + 1

x7 + x5 + x3 x5 + 1

x7 + x2

x5 + x3 + x2

x5 + 1

a’’’(x) = x3 + x2 + 1

Une autre méthode consiste à exploiter le fait que x5 = 1

a’’’= x5(x2 + 1) + x3 = x3 + x2 + 1 a’’’ = [01101]

Polynôme générateur.

Tout code linéaire C contient un mot non nul, dont le polynôme est de degré inférieur aux

degrés des polynômes associés à tous les autres mots non nuls du code.

Cet élément est unique, car s’il y en avait deux, leur somme serait de degré inférieur.

Examinons :

1

1

1

A(0)

(0)

k r

kG =1

1

1

A(0)

(0)

k r

kG =

Les lignes de G forment la base canonique de sous espace vectoriel des mots de code.

Le polynôme de degré le plus faible de cette base correspond à la ligne inférieure de la

matrice. Ce polynôme de degré r est le polynôme de plus faible degré de tous mots du code.

Dans le cas d’un code cyclique, on appelle ce polynôme g(x) le polynôme générateur du code.

g(x) = grxr + gr-1x

r-1 + … + g1x + g0

avec gr = 1 et g0 = 1 (sinon en factorisant par x on obtiendrait un poly. de d° inf.)

soit g(x) = xr + gr-1xr-1 + … + g1x + 1

� Matrice génératrice.

Le code étant cyclique, les permutations circulaires sur les bits du mot g,

correspondant au polynôme générateur g(x), sont aussi des mots du code. Ainsi, les

polynômes g(x), x.g(x), x2g(x), … , xk-1g(x) correspondent à k mots linéairement

indépendants de C, donc forment une base pour le sous espace des mots de C. Par suite,

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 7

tout mot de code est une combinaison linéaire de g(x), x.g(x), x2g(x), …, xk-1g(x) ,

donc est le produit d’un polynôme quelconque et de g(x).

Autrement dit : tout mot d’un code cyclique est multiple de g(x).

g(x)

xk-1g(x)

xk-2g(x)

x.g(x)

(0)

(0)G =

1 gr-1 … g1 1

1 gr-1 … g1 1

(0)

(0)= …

g(x)

xk-1g(x)

xk-2g(x)

x.g(x)

(0)

(0)G =

1 gr-1 … g1 1

1 gr-1 … g1 1

1 gr-1 … g1 1

1 gr-1 … g1 1

(0)

(0)= …

� Le code cyclique est un idéal.

D’après la nature de la matrice génératrice précédemment trouvée, un mot de code est

une combinaison linéaire des polynômes : g(x), x.g(x), x2g(x), … , xk-1g(x)

Donc un mot de code est le produit de g(x) par un polynôme quelconque modulo

xn + 1 ; autrement dit c’est un multiple de g(x).

Rappel : un anneau est un ensemble A muni de deux lois internes :

• dont la première (loi dite additive) structure A en un groupe abélien

(commutatif),

• et la seconde (loi dite multiplicative) est associative, et distributive par

rapport à la première.

(On peut dire qu’un anneau est un ensemble où les opérations de type addition,

soustraction et multiplication fonctionnent correctement).

Un idéal d’un anneau A est un sous ensemble I de A tel que

∀a ∈ I et ∀x ∈ A ⇒ a.x ∈ I

Soit K[x] l’ensemble des polynômes défini sur un corps K (poly. dont les coeffs. sont les elts.

d'un corps K). Nous savons que K[x] est structuré en anneau par les lois d’addition et de

multiplication des polynômes. On peut facilement vérifier que l’ensemble K[x] / (xn + 1) des

restes de la division des polynômes par xn + 1 est aussi un anneau, où la multiplication des

polynômes se sous-entend modulo xn + 1.

Dans un code cyclique, un mot de code est un multiple du polynôme g(x), donc le code

cyclique est un idéal de K[x] / (xn + 1). Et réciproquement, tout idéal de K[x] / (xn + 1) est un

code cyclique.

Lorsque tous les éléments d’un idéal sont des multiples d’un même élément, ont dit que

l’idéal est principal. Dans notre cas, tous les idéaux de l’anneau K[x] / (xn + 1) sont

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 8

principaux (on dit que c’est un anneau principal), donc tous les codes cycliques sont des

idéaux principaux.

Contrôle de parité.

� Propriété caractéristique de g(x).

Exprimons la division euclidienne de xn + 1 par le polynôme générateur g(x) :

xn + 1 = g(x).h(x) + R(x) d°R(x) < r d° de g(x)

g(x).h(x) + R(x) = 0 mod(xn + 1)

R(x) = g(x).h(x) mod(xn + 1)

le membre de droite est un multiple de g(x), donc c’est un mot du code.

Le membre de gauche ne peut être un mot non nul du code, car d°R(x) < r ; or, le mot

de code non nul du plus faible d° est précisément g(x) dont le degré est r.

Donc R(x) est fatalement nul.

soit xn + 1 = g(x).h(x)

g(x) divise xn + 1 …..

Une condition nécessaire et suffisante pour qu’un polynôme g(x) soit générateur (de d°

minimal) d’un code cyclique est qu’il divise xn + 1.

� Code dual.

La relation xn + 1 = g(x).h(x) peut aussi s’écrire

g(x).h(x) = 0 mod(xn + 1)

ce qui rappel G.Ht = 0

Q ? Y a-t-il une correspondance simple entre le polynôme h(x) et une matrice de

contrôle H ?

Soit le code cyclique C (n, k) engendré par le polynôme g(x), et un mot c de ce code.

Le polynôme c(x) est un multiple de g(x) :

c(x) = f(x).g(x)

comme g(x) divise xn + 1 on a :

g(x).h(x) = 0 mod(xn + 1)

c(x).h(x) = f(x).g(x).h(x) = 0 mod(xn + 1)

Donc le polynôme h(x) continue à jouer un rôle analogue à H

h(x).c(x) = 0 ⇔ H.ct = 0

…………..

… on obtient la matrice de contrôle H :

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 9

H =

h0 h1 … hk-1 hk

(0)

(0)…

h0 h1 … hk-1 hk

H =

h0 h1 … hk-1 hk

(0)

(0)…

h0 h1 … hk-1 hk

En résumé, on obtient une matrice génératrice du code dual d’un code cyclique, à

partir du polynôme h(x) pris comme polynôme générateur, mais dans lequel on a

inversé le sens des coefficients.

Exemple :

A partir de la décomposition en facteurs irréductibles de x7 + 1 (n = 7, k = 4) :

x7 + 1 = (x3 + x2 + 1)(x3 + x + 1)(x + 1)

en prenant g(x) = x3 + x2 + 1

alors

h(x) = (x3 + x + 1)(x + 1) = x4 + x3 + x2 + 1

d’où G et H :

1 1 0 1 0 0 0

0 1 1 0 1 0 0

0 0 1 1 0 1 0

0 0 0 1 1 0 1

1 0 1 1 1 0 0

0 1 0 1 1 1 0

0 0 1 0 1 1 1

g(x) = x3+x2+1

h(x) = 1+x2+x3+x4

H =G =

1 1 0 1 0 0 0

0 1 1 0 1 0 0

0 0 1 1 0 1 0

0 0 0 1 1 0 1

1 0 1 1 1 0 0

0 1 0 1 1 1 0

0 0 1 0 1 1 1

g(x) = x3+x2+1

h(x) = 1+x2+x3+x4

H =G =

Codage Série.

� Codage par multiplication.

Tout mot d’un code cyclique est multiple du polynôme générateur :

∀ c(x)∈ C (n, k) c(x) = f(x).g(x) mod(xn + 1)

avec f(x) polynôme qcq ; en prenant le poly. correspondant au mot d’information i(x) :

c(x) = i(x).g(x) mod(xn + 1)

Méthode simple de réalisation matérielle du codage : circuit multiplieur de polynômes

(l’un fixe le multiplieur, l’autre variable le multiplicande).

Les coefficients du produit de 2 polynômes forment le produit de convolution discret

des coefficients des 2 polynômes.

Exemple avec (x3 + x2 + x).(x3 + x + 1) :

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 10

x3 + x2 + x + 01 + x + 0 + x3

0

x3 + x2 + x + 01 + x + 0 + x3

x + 0 = x

x3 + x2 + x + 01 + x + 0 + x3

x2 + x2 + 0 = 0

x3 + x2 + x + 01 + x + 0 + x3

x3 + x3 + 0 + 0 = 0

x3 + x2 + x + 01 + x + 0 + x3

x4 + 0 + x4 = 0

x3 + x2 + x + 01 + x + 0 + x3

0 + x5 = x5

x3 + x2 + x + 01 + x + 0 + x3

x6

1 1 1 01 1 0 1

0

x3 + x2 + x + 0 1 1 1 01 1 0 1

0

1 0 1

1 1 1 01 1 0 1

1 1 0 0

1 1 1 01 1 0 1

1 1 0 0 0

1 1 1 01 1 0 1

1 0 1 0

1 1 1 01 1 0 1

0 1 1

1 1 1 01 1 0 1

1 1

x6 + x5 + x ou encore 1100010

x3 + x2 + x + 01 + x + 0 + x3

0

x3 + x2 + x + 01 + x + 0 + x3

x + 0 = x

x3 + x2 + x + 01 + x + 0 + x3

x2 + x2 + 0 = 0

x3 + x2 + x + 01 + x + 0 + x3

x3 + x3 + 0 + 0 = 0

x3 + x2 + x + 01 + x + 0 + x3

x4 + 0 + x4 = 0

x3 + x2 + x + 01 + x + 0 + x3

0 + x5 = x5

x3 + x2 + x + 01 + x + 0 + x3

x6

1 1 1 01 1 0 1

0

x3 + x2 + x + 0 1 1 1 01 1 0 1

0

1 0 1

1 1 1 01 1 0 1

1 1 0 0

1 1 1 01 1 0 1

1 1 0 0 0

1 1 1 01 1 0 1

1 0 1 0

1 1 1 01 1 0 1

0 1 1

1 1 1 01 1 0 1

1 1

x6 + x5 + x ou encore 1100010

D’où la réalisation matérielle suivante :

1 1 0 0 0 1 0(x6 + x5 + x)

(x3 + x2 + x)1 1 1 0

(1 + x + x3)

Le multiplicande est entré dans un registre à décalage bit de poids faible en tête ; le

multiplieur est câblé physiquement (le 1 est l’élément neutre de la multiplication, AND

logique) ; les bits sont additionnées modulo 2 (xor). Les bits du produit sortent (en série) avec

les bits de poids faible en tête. Le code obtenu n’est pas systématique.

� Codage par division.

Permet d’obtenir un code systématique.

i(x) = ik-1xk-1 + … + i1x

1 + i0x0

le mot peut s’écrire

0 … 0 ik-1 … i0

r k

0 … 0 ik-1 … i0

r k

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 11

Multiplions i(x) par xr :

xr.i(x) = ik-1xn-1 + … + i1x

r+1 + i0xr

ik-1 … i0 0 … 0

rk

ik-1 … i0 0 … 0

rk

Divisons maintenant xr.i(x) par g(x) (dont le d° est r)

xr.i(x) = g(x).Q(x) + R(x) avec d°R(x) < r

R(x) peut s’écrire

0 … 0 Rr-1 … R0

rk

0 … 0 Rr-1 … R0

rk

ou encore, le mot

xr.i(x) + R(x) = g(x).Q(x)

étant un multiple de g(x), est un mot du code.

Le mot correspondant se compose de 2 sous mots disjoints :

ik-1 … i0 Rr-1 … R0

rk

ik-1 … i0 Rr-1 … R0

rk

En résumé, on peut coder (code cyclique, sous forme systématique) un mot

d’information ,

1. en le multipliant par xr, puis

2. en divisant le résultat par g(x). Le reste de la division fournit les bits de

contrôle.

� Circuit diviseur (de polynômes).

Construction du circuit réalisant la division de x7 + x5 + x + 1 par x3 + x + 1 :

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 12

x7 + x5 + x + 1 x3 + x + 1x7 + x5 + x4

x4 + x + 1x4 + x2 + x

x2 + 1

1 0 1 0 0 0 1 1 1 0 1 11 0 1 11 0 1 1

0 0 1 01 0 1 1

0 1 0 01 0 1 11 0 1 1

1 0 0 11 0 1 11 0 1 1

0 1 0 11 0 1 1

1 0 1

1 0 0 1 0 Q(x)

R(x)

Q(x)

x4 + 0 + 0 + x + 0

x7 + x5 + x + 1 x3 + x + 1x7 + x5 + x4

x4 + x + 1x4 + x2 + x

x2 + 1

1 0 1 0 0 0 1 1 1 0 1 11 0 1 11 0 1 1

0 0 1 01 0 1 1

0 1 0 01 0 1 11 0 1 1

1 0 0 11 0 1 11 0 1 1

0 1 0 11 0 1 1

1 0 1

1 0 0 1 0 Q(x)

R(x)

Q(x)

x4 + 0 + 0 + x + 0

On voit les 4 bits du diviseur défiler de la gauche vers la droite. La soustraction

(= addition) modulo 2 n’est effectuée que si le bit au dessus du bit de gauche du

diviseur (bit encadré) est à 1.

Par ailleurs, le MSB du diviseur vaut toujours 1 ; donc le résultat de l’addition des bits

le plus à gauche vaut toujours 0. On peut donc "sous entendre" le MSB du diviseur et

"anticiper" les opérations : lorsque le bit encadré vaut 1, l’addition se fera comme si

les 3 bits du diviseur étaient décalés d’un cran vers la gauche ; et si le bit encadré vaut

0, on se contentera de recopier les bits du résultat précédent, sans additionner les bits

du diviseur :

1 0 1 0 0 0 1 1 1 0 1 10 1 1

0 0 1 00 1 1

0 1 0 00 1 1

1 0 0 10 1 1

0 1 0 10 1 1

1 0 1

1 0 0 1 0

1 0 1 0 0 0 1 1 1 0 1 10 1 1

0 0 1 00 1 1

0 1 0 00 1 1

1 0 0 10 1 1

0 1 0 10 1 1

1 0 1

1 0 0 1 0

Ici, le dividende était fixe, et c’est le diviseur que l’on faisait défiler. Il est plus

pratique de fixer le diviseur et de faire défiler le dividende, lequel sera variable :

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 13

(1) 0 1 1 diviseur0 0 0 1 0 1 0 0 0 1 1 dividende

0 0 1 0 1 0 0 0 1 1

0 1 0 1 0 0 0 1 1

1 0 1 0 0 0 1 1

0 0 1 0 0 1 1

0 1 0 0 1 11 0 0 1 1

0 1 0 1

1 0 1 restequotient

(1) 0 1 1 diviseur0 0 0 1 0 1 0 0 0 1 1 dividende

0 0 1 0 1 0 0 0 1 1

0 1 0 1 0 0 0 1 1

1 0 1 0 0 0 1 1

0 0 1 0 0 1 1

0 1 0 0 1 11 0 0 1 1

0 1 0 1

1 0 1 restequotient

Dans ce cas de figure, lorsqu’un 1 arrive "en butée" à gauche, l’addition des bits du

diviseur se fera de nouveau d’une manière anticipée ; et lorsqu’un 0 se trouve à

gauche, le mot ne subira qu’un simple décalage.

On pourra donc matérialiser cette opération par un registre à décalage, dans lequel,

chaque fois qu’il y a un 1 dans le quotient (cad en sortie du registre), le dividende sera

complémenté (a xor 1 = not(a)) sur les bits correspondant aux bits non nuls du

diviseur :

(x3) + x + 1

xx2 1

(1) 0 1 1

x x21

(x3) + x + 1

xx2 1xx2 1

(1) 0 1 1

x x21 x x21

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 14

Corps de Galois.

Corps finis.

� Rappels / Définitions.

• Un anneau est un ensemble A muni de 2 lois internes,

- la loi additive structure A en un groupe abélien (commutatif),

- la loi multiplicative est associative et distributive par rapport à la

première.

• Un corps (field) est un anneau K où tout élément, sauf l’élément neutre de la

loi additive, possède un inverse par rapport à la loi multiplicative. (Un corps est

un ensemble où les 4 opérations : addition, soustraction, multiplication et

division fonctionnent correctement).

• Un corps de Galois (un corps fini) est un corps dont le cardinal est fini.

Théorèmes sur les corps finis ;

- tout corps fini est commutatif.

- le cardinal de tout corps fini est un nombre primaire pm (puissance

entière d’un nombre premier).

- Tous les corps finis de même cardinal sont isomorphes.

� Corps de Galois à p éléments (p premier).

Un corps de Galois à p éléments est un corps isomorphe à Z/pZ, ensemble des classes

résiduelles modulo p (p étant un nombre premier).

Notation CG(p), GF(p), Fp

Etude de CG(3) sur l’exemple de Z/3Z

0+ 1 2

0

12

0 1 2

1 2 02 0 1

0× 1 2

0

12

0 0 0

0 1 20 2 1

0+ 1 2

0

12

0 1 2

1 2 02 0 1

0× 1 2

0

12

0 0 0

0 1 20 2 1

Chaque élément non nul à un inverse pour la multiplication : les éléments non nuls

forment un sous-groupe multiplicatif.

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 15

Mise en évidence de la nécessité d’avoir un nombre p premier avec Z/4Z

0+ 1 2

0

1

2

0 1 2

1 2 3

2 3 0

3 3 0 1

3

3

0

1

2

0× 1 2

0

1

2

0 0 0

0 1 2

0 2 0

3 0 3 2

3

0

3

2

1

2 n’a pas d’inverse pour la multiplication (c’est un diviseur de zéro) : Z/4Z n’est pas

un corps c’est seulement un anneau.

Retour à CG(3) représenté par Z/3Z :

Toutes les puissances de 1 valent 1. 11 = 1 etc.

21 = 2 22 = 1 23 = 2 24 = 1 …

Les puissances successives de 2 décrivent tous les éléments du sous-groupe

multiplicatif.

Le sous-groupe est cyclique et 2 en est un générateur.

On appelle ordre multiplicatif µ d’un élément a de CG(p) le plus petit entier positif

tel que aµ = 1

ici µ(1) = 1

µ(2) = 2

On appel élément primitif un élément de CG(p) dont l’ordre multiplicatif est p – 1.

Donc un élément primitif est un générateur du sous-groupe cyclique.

Le sous- groupe multiplicatif d’un corps de Galois est toujours cyclique.

Exemple sur Z/7Z :

0× 1 2

0

1

2

0 0 0

0 1 2

3

3

0

4 5 6

4

5

6

0 0 0

3 4 5 6

50 2 4 6 1 31 40 3 6 2 4

2 6 30 4 1 5

1 6 4 20 5 3

4 3 2 10 6 5

0× 1 2

0

1

2

0 0 0

0 1 2

3

3

0

4 5 6

4

5

6

0 0 0

3 4 5 6

50 2 4 6 1 31 40 3 6 2 4

2 6 30 4 1 5

1 6 4 20 5 3

4 3 2 10 6 5

0× 1 2

0

1

2

0 0 0

0 1 2

3

3

0

4 5 6

4

5

6

0 0 0

3 4 5 6

50 2 4 6 1 31 40 3 6 2 4

2 6 30 4 1 5

1 6 4 20 5 3

4 3 2 10 6 5

Calculons les puissances successives de chacun des éléments :

1 est l’élément neutre de la multiplication 11 = 1 12 = 1 … µ(1) = 1

21 = 2 22 = 4 23 = 1 µ(2) = 3

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 16

31 = 3 32 = 2 33 = 6 34 = 4 35 = 5 36 = 1 µ(3) = 6

41 = 4 42 = 2 43 = 1 µ(4) = 3

51 = 5 52 = 4 53 = 6 54 = 2 55 = 4 56 = 1 µ(5) = 6

61 = 6 62 = 1 µ(6) = 2

Les puissances successives décrivent des cycles : le sous groupe est bien cyclique. Les

ordres multiplicatifs sont 1, 2, 3 et 6 donc des diviseurs de 6 (d’une manière générale,

l’ordre multiplicatif de tout élément du groupe cyclique divise p – 1).

Deux éléments, 3 et 5, sont primitifs : leur ordre est 6.

En figurant les éléments sur un cercle, disposés dans l’ordre des puissances

successives d’un élément primitif (par exemple 3), on met en évidence un

isomorphisme de groupe bien éloquent :

1

32

6

4 5

En effet, la multiplication par 3 correspond exactement à la rotation de 60°, celle par 2

à la rotation de 120° etc. et les puissances successives des éléments deviennent :

32

6

4 5

1

2

4

16

1

2

4

1

32

6

4 5

1

32

6

4 5

1

2

4

16

1

2

4

1

32

6

4 5

1

Un théorème de Fermat (le petit théorème de Fermat) devient visible grâce à cette

représentation :

∀ a ∈ CG(p) ap-1 = 1

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 17

� Corps de Galois à pm éléments.

Un corps fini à pm éléments CG(pm) est isomorphe au corps des polynômes (à

coefficients dans CG(p)) modulo un polynôme (irréductible dans CG(p)) de degré m.

CG(p) est le corps de base (ou sous corps premier, ground field) pour CG(pm).

Exemple : construire CG(8) (=CG(23))

D’après la définition il faut trouver un polynôme de troisième degré, irréductible sur

CG(2).

CG(2) n’étant autre que l’ensemble {0, 1} muni de l’addition et de la multiplication

modulo 2

0+ 1

0

1

0 1

1 0

0× 1

0

1

0 0

0 1

Le polynôme x3 + x + 1 est irréductible dans CG(2), car s’il avait des facteurs il en

aurait obligatoirement un du 1er degré. Or les deux polynômes du 1er degré étant x + 1

et x, au moins l’une des deux racines, 0 ou 1, devrait être racine de x3 + x + 1.

Puisqu’il n’en est rien, x3 + x + 1 est irréductible dans CG(2).

Donc, CG(23) peut être considéré comme l’ensemble des classes résiduelles des

polynômes sur CG(2) modulo x3 + x + 1.

Autrement dit, l’ensemble des éléments de CG(23) est l’ensemble des polynômes sur

CG(2) dont le degré est inférieur à 3.

représentation polynomiale vectorielle

0 0 0 0

1 0 0 1

x 0 1 0

x + 1 0 1 1

x2 1 0 0

x2 + 1 1 0 1

x2 + x 1 1 0

x2 + x + 1 1 1 1

Nous retrouvons les éléments de B3, ensemble des mots de 3 bits, dont nous

connaissons déjà la structure d’espace vectoriel, donc la structure de groupe additif.

Mais pour l’étude du sous-groupe multiplicatif, il est commode d’introduire la notion

de corps d’extension.

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 18

Soit un polynôme irréductible dans un corps K. En adjoignant à K une racine du

polynôme (et ses puissances successives), on obtient un nouveau corps (sur-corps de

K) appelé corps d’extension de K. Dans ce nouveau corps, le polynôme n’est plus

irréductible.

Exemple : nous avons déjà vu que le polynôme x3 + x + 1 était irréductible dans

CG(2).

Soit α une racine de x3 + x + 1. Alors on a

α3 + α + 1 = 0 ou encore α3 = α + 1

Munis de cette relation, cherchons les puissances successives de α, exprimées dans les

deux représentations :

1 = 1 0 0 1

α = α 0 1 0

α2 = α2 1 0 0

α3 = α + 1 0 1 1

α4 = α2 + α 1 1 0

α5 = α2 + α + 1 1 1 1

α6 = α2 + 1 1 0 1

α7 = 1 0 0 1

α est un élément primitif d’ordre pm – 1 = 7 ; il est un générateur pour le sous-groupe

cyclique commutatif (7 étant un nombre premier, tous les éléments non nuls de CG(8)

sont primitifs).

α est racine de x3 + x + 1. Les autres racines de ce polynôme sont elles éléments de

CG(8) ?

0 0 + 0 + 1 = 1

1 1 + 1 + 1 =1

α α3 + α + 1 = 0 α est racine

α2 α6 + α2 + 1 = … = 0 α2 est racine

α3 α9 + α3 + 1 = … = α4

α4 α12 + α4 + 1 = … = 0 α4 est racine

α5 … = α2

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 19

α6 … = α

D’où la décomposition de x3 + x + 1 en facteurs irréductibles sur CG(8) :

x3 + x + 1 = (x + α)(x + α2)(x + α4)

� Polynôme minimal d’un élément.

• L’ordre multiplicatif µ d’un élément a de CG(pm) est le plus petit µ, tel que

ai + µ = ai ou encore aµ = 1

• α est un élément primitif de CG(pm), si µ(α) = pm – 1

Le polynôme minimal m(x) d’un élément β de CG(pm) est le polynôme (non nul)

m(x) de plus faible degré dont β est racine : m(β) = 0

m(x) est forcement irréductible, sinon il ne serait pas de degré minimal.

Dans notre exemple de CG(23), le polynôme minimal de chaque élément est :

élément polynôme minimal

0 x

1 x + 1

α x3 + x + 1

α2 x3 + x + 1

α3 x3 + x2 + 1

α4 x3 + x + 1

α5 x3 + x2 + 1

α6 x3 + x2 + 1

Récapitulons maintenant les éléments de CG(23) définis par x3 + x + 1, dans les 3

représentations (nous appellerons la 1ère la représentation polaire) :

polaire représentation polynomiale vectorielle

0 0 0 0 0

1 1 0 0 1

α α 0 1 0

α2 α2 1 0 0

α3 α + 1 0 1 1

α4 α2 + α 1 1 0

α5 α2 + α + 1 1 1 1

α6 α2 + 1 1 0 1

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 20

Nous voyons que les éléments de CG(2), 0 et 1 sont éléments de CG(23), plus

généralement, CG(p) est toujours sous-groupe de CG(pm).

Dans notre exemple on a α7 = 1, donc on peut considérer α comme racine septième de

l’unité dans CG(p3). Plus généralement, on peut considérer tout élément primitif de

CG(pm) comme racine (pm – 1)ième de l’unité dans CG(pm).

Un théorème important affirme, que pour tout éléments a et b de CG(pm), on a

(a + b)p = ap + bp

Cela se vérifie aisément dans le cas binaire ; dans tout corps fini CG(2m), on a

notamment (x + 1)2 = x2 + 1 à cause du double produit qui est nul.

La conséquence de ce fait est, que si β est racine d’un polynôme minimal, β2 l’est

aussi, ainsi que β4, β8, β16, … , et le nombre de racines ainsi obtenues ne risque pas de

dépasser le degré du polynôme, car les exposants de β doivent se comprendre modulo

2m. Par suite, le polynôme minimal de l’élément β est aussi celui des éléments β2, β4,

β8, β16, …

Les éléments qui admettent le même polynôme minimal sont dits conjugués.

Dans notre exemple, le polynôme

minimal de l’élément 1 est m0(x) = x + 1

celui de α, α2 et de α4 est m1(x) = m2(x) = m4(x) = x3 + x + 1

celui de α3, α6 et de α12 est

(cad α3, α6 et de α5) m3(x) = m6(x) = m5(x) = x3 + x2 + 1

Donc α, α2 et α4 sont conjugués ; ainsi que α3, α6 et α5.

On peut vérifier que le produit de tous les polynômes minimum distincts, de m0(x) à

m2m-1-1(x) redonne 112 +−m

x . Par exemple, pour m = 3 :

x7 + 1 = m0(x)m1(x)m3(x) = (x +1)(x3 + x + 1)(x3 + x2 + 1)

∏=

−=6

0

)(i

ix α

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 21

� Polynômes primitifs.

Un polynôme primitif est un polynôme minimal, dont au moins une racine est

primitive (c'est-à-dire élément primitif d’un corps de Galois).

Dans notre exemple, x3 + x + 1 et x3 + x2 + 1 sont primitifs, x ne l’est pas.

On démontre que pour tous les degrés, il existe au moins un polynôme primitif.

m – séquence.

Une application de la théorie des corps de Galois et des circuits diviseurs par un

polynôme : les générateurs de m - séquence (séquence à longueur maximal,

maximum length sequence, pseudorandom number genrators).

Reprenons la structure du circuit diviseur par le polynôme h(x) = x3 + x + 1 :

x1 x2

Initialisons les bascules à l’état 1 0 0 (de la gauche vers la droite), et étudions les états

successifs à chaque impulsion de l’horloge :

1 0 0

0 1 0

0 0 1

1 1 0

0 1 1

1 1 1

1 0 1

1 0 0

Nous voyons qu’après sept coups d’horloge le système revient à son état initial : le

dispositif décrit un cycle de 7 états. De plus les sept mots obtenus sont, dans leur

représentation vectorielle, les 7 puissances successives de a, racine du polynôme

primitif h(x) = x3 + x + 1 engendrant ainsi le groupe multiplicatif de CG(23).

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 22

La bascule de gauche produit la séquence [1001011], idem pour les 2 autres avec un

décalage.

La période de cette séquence (7 bits) est liée au fait que le polynôme

h(x) = x3 + x + 1 est primitif, donc il engendre les 23 – 1 = 7 éléments de CG(23). De la

même manière, un circuit diviseur, construit à partir de n’importe quelpolynôme

primitif de degré m à coefficients binaires engendrera une séquence de longueur 2m -1.

Tout polynôme non primitif, du même degré, conduirait à une séquence plus courte,

d’où le nom de séquence à longueur maximal.

Les séquences ainsi générées ont des propriétés statistiques très intéressantes. Elles

sont parfaitement déterministes ; mais beaucoup des propriétés statistiques des signaux

aléatoires y sont vérifiées � signal pseudo - aléatoire.

Pour caractériser un signal aléatoire : moyenne, fonction d’autocorrélation. Ces deux

grandeurs s’étudient plus facilement sur un signal centré, donc nous allons sous

entendre les valeurs -1 et +1 pour les valeurs logiques binaires 0 et 1.

Une m-séquence comporte 2m-1 – 1 zéros et 2m-1 uns, puisque le mot [0 … 00] ne fait

pas partis du groupe cyclique. Pour des m importants, la différence entre le nombre

des uns et celui des zéros devient négligeable. La moyenne tend donc vers zéro

lorsque m augmente (avec la représentation -1 et +1).

La fonction d’auto corrélation pour un signal discret x(k) est :

∑−

=∞→ +=

1

0

)()(1

lim)(n

jnxx jixjx

niK

ce qui devient dans le cas d’un signal binaire a(k) :

( )∑−

=

+∞→

+−=1

0

11

lim)(n

j

aanaa

jij

niK

Si l’on désigne par a(k) le kième terme de la m-séquence, alors la fonction

d’autocorrélation Kaa(x) vaut 1 lorsque k est égal à un multiple de 2m – 1 (c’est la

période du signal), et on peut montrer que toute les autres valeurs de k

Kaa(i) = 12

1

−−m

Dans l’exemple précédent :

Mathématiques autour de la cryptographie

www.emse.fr/~dutertre/enseignement.html - 2008 23

Kaa(i)

i

1

-1 / 70 7 14

Lorsque m augmente, la fonction d’autocorrélation des m-séquences tend vers celle

d’un bruit blanc (~dirac).

Variante du circuit : registre à décalage, dont les sorties sont, ou ne sont pas, reliées

aux entrées d’un xor selon, les coefficients du polynôme réciproque de h(x). La sortie

du xor est rebouclée à l’entrée du registre à décalage.

Pour l’exemple précédent le polynôme réciproque est xmh(1/x) = x3 + x2 + 1 :

x2 x3(x)1