Coco

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 32

Codes correcteurs

Delphine Boucher

Master 1 de mathématiques fondamentales · Université de Rennes 1


Notes prises par Téofil Adamski (version du 9 avril 2021)

1 Généralités sur les codes correcteurs 1 3.4 Polynômes minimaux et factorisation de


1.1 Généralités . . . . . . . . . . . . . . . . . . . . . 1 X n − 1 sur Fq . . . . . . . . . . . . . . . . . . . . . . 17
1.2 Codes linéaires . . . . . . . . . . . . . . . . . . 2 4 Codes BCH 19
1.3 Décodage par tableau standard et syndrome 4 4.1 Une famille de codes 2-correcteurs d’erreurs 19
1.4 Codes de Hamming . . . . . . . . . . . . . . . 5 4.2 Définition et propriétés . . . . . . . . . . . . . 20
1.5 Code de Goley binaire étendu . . . . . . . . . 6 4.3 Algorithme de décodage des codes BCH . . . 21
2 Codes de Reeed-Solomon généralisés et codes 5 Codes de Goppa 24
de Reed-Muller 10 5.1 Définition et matrice de contrôle . . . . . . . 24
2.1 Code GRS . . . . . . . . . . . . . . . . . . . . . 10 5.2 Distance minimale et dimension . . . . . . . 25
2.2 Codes de Reed-Muller . . . . . . . . . . . . . . 12 5.3 Algorithme de décodage . . . . . . . . . . . . 27
3 Codes cycliques 14 6 Cryptosystème de McEliece 29
3.1 Codes cycliques, générateurs . . . . . . . . . . 14 6.1 Cryptosystème à clef publique . . . . . . . . . 29
3.2 Matrice génératrice . . . . . . . . . . . . . . . 15 6.2 Cryptosystème de McEliece . . . . . . . . . . 29
3.3 Matrice de contrôle . . . . . . . . . . . . . . . 16 6.3 Exemple . . . . . . . . . . . . . . . . . . . . . . 29
Chapitre 1
Généralités sur les codes correcteurs
1.1 Généralités . . . . . . . . . . . . . . . . . . . . . . 1 1.4 Codes de Hamming . . . . . . . . . . . . . . . . . 5
1.2 Codes linéaires . . . . . . . . . . . . . . . . . . . . 2 1.4.1 Définition . . . . . . . . . . . . . . . . . . . . . 5
1.3 Décodage par tableau standard et syndrome . . 4 1.4.2 Décodage/correction . . . . . . . . . . . . . . 5
1.3.1 Tableau standard . . . . . . . . . . . . . . . . 4 1.5 Code de Goley binaire étendu . . . . . . . . . . . 6
1.3.2 Tableau standard simplifié . . . . . . . . . . 4 1.5.1 Distance minimale et auto-dualité . . . . . . 6
1.5.2 Algorithme de décodage . . . . . . . . . . . . 8

1.1 Généralités
L’objectif initial des codes correcteurs est de parer les interférences dans un canal de transmission.
On considère un expéditeur et un destinataire communiquant par un canal. L’expéditeur envoie
un mot m ∈ Ak sur un alphabet A. Cependant, il se peut se le destinataire reçoive un message
différent m0 . On va donc associer au mot m, de manière injective, un code c ∈ An avec n > k. Le
destinataire lui recevra une code c0 et le surplus des n − k informations va permettre de retrouver
le message initial m.

. Exemple. On considère un canal de transmission d’informations binaires qui fait au plus une
erreur sur un chiffre. Par exemple, l’expéditeur envoie le nombre 1101, mais le destinataire reçoit le
nombre 1001. Un bon code correcteur associé au nombre envoyé est donc ce nombre répété trois
fois. Avec ce code, on peut savoir si le nombre à l’arrivé est bon.

Définition 1.1. Soit A un ensemble de cardinal q ∈ N∗ . Un code sur A de longueur n ∈ N est un


sous-ensemble de An . Le log-cardinal d’un code C sur A est la quantité k := logq |C| et son taux
d’information est la quantité k/n.

Dans toute la suite, on fixe un ensemble fini A, appelée un alphabet. Soit n ∈ N∗ un entier non
nul.
Définition 1.2. Le poids de Hamming d’un élément x := (x1 , . . . , xn ) ∈ An est l’entier
wH (x) := ]{i ∈ J1, nK | xi 6= 0}.
La distance de Hamming d’un élément x ∈ An à un élément y ∈ An est l’entier
dH (x, y) := wH (x − y).

Proposition 1.3. L’application dH : An × An −→ N est bien une distance sur An .

Définition 1.4. La distance minimale d’un code C ⊂ An de longueur n est l’entier


d := min dH (x, y).
x,y∈C
x6=y

Proposition 1.5. Soit C ⊂ An un code de longueur n et de distance minimale d ∈ N. Soit y ∈ An .


Alors l’ensemble
d−1
õ û
{c ∈ C | dH (y, c) 6 t} avec t :=
2
est soit vide soit un singleton.

Preuve On distingue deux cas. Si tout mot c ∈ C est à distance supérieure strict à t, alors cet
ensemble est vide. On suppose maintenant qu’il existe un mot c ∈ C tel que dH (y, c) 6 t. Soit c0 ∈ C
un autre tel mot. Alors l’inégalité triangulaire assure dH (c, c0 ) 6 2t < d ce qui force c = c0 . 

Proposition 1.6. Soient c ∈ C et y ∈ An tels que dH (y, c) 6 d − 1. Alors y = c ou y ∈


/ C.

Généralités sur les codes correcteurs – Chapitre 1 1


1.2. CODES LINÉAIRES

L’objectif est de construire des codes de longueur n, de log-cardinal k ∈ R+ et de distance


minimale d ∈ N tel que les quantités k/n et d/n soient grandes. De plus, on souhaite avoir un
algorithme de correction/décodage qui est efficace, i. e. se fait en temps polynomial.

Théorème 1.7 (borne de Singleton). Soit C ⊂ An un code de longueur n, de cardinal M ∈ N et


de distance minimale d ∈ N. Soit k := logq M . Alors
d 6 n − k + 1.

Preuve On considère l’application f : C −→ Adke−1 de projection sur les dke − 1 premières


coordonnées. Si elle était injective, alors ] C = ] f (C) 6 q dke−1 , donc k 6 dke − 1 ce qui est
impossible. On peut donc trouver deux mots distincts c, c0 ∈ C tels que f (c) = f (c0 ). On obtient
wH (c − c0 ) 6 n − (dke − 1) 6 n − k + 1
ce qui assure la conclusion. 

. Exemples. • Code de répétition. On considère l’application


F2 −→ Fn2 ,
ϕ:
m 7−→ (m, . . . , m)
et le code C := ϕ(F2 ). Il est de longueur n, de cardinal 2 et de log-cardinal 1.
• Code de parité. On considère le code C défini comme l’image de Fn−1 2 par l’application
Fn−1
2 −→ Fn2 ,
ϕ: .
(m1 , . . . , mn−1 ) 7−→ (m1 , . . . , mn−1 , m1 + · · · + mn−1 )
Il est de longueur n et de cardinal 2n−1 . Trouvons sa distance minimale. Soient c, c0 ∈ C. Alors un
simple calcul donne dH (c, c0 ) = wH (c − c0 ) ∈ 2N, donc sa distance minimale d ∈ N vérifie d > 2.

1.2 Codes linéaires


À un code, on va associer une matrice génératrice et une matrice de contrôle. Cette dernière
va nous servir à calculer la distance minimale, à détecter et corriger les erreurs via différents
algorithmes. Dans la suite, on considère une puissance q ∈ N d’un nombre premier et on se place
dans le corps Fq .

Définition 1.8. Soient k, n ∈ N des entiers tels que k 6 n 6= 0. Un code linéaire de longueur n et
de dimension k est un sous-espace vectoriel de Fnq de dimension k.

 Remarque. Soit C ⊂ Fnq un code linéaire de longueur n ∈ N∗ et de dimension k 6 n. Alors il


existe une application linéaire injective ϕ : Fkq −→ Fnq telle que C = ϕ(Fkq ). Soit M ∈ Mn,k (Fq )
la matrice de ϕ dans les bases canoniques. Sa transposée G := tM ∈ Mk,n (Fq ) est la matrice
génératrice de C. Le code C est ainsi caractérisé par l’égalité
C = {nG | n ∈ Fkq }.

Définition 1.9. La matrice génératrice G de C est sous forme systématique lorsqu’elle est de la
forme
avec A ∈ Mk,n−k (Fq ).

C = Ik A

Proposition 1.10. La distance minimale d’un code linéaire C est


d = min wH (c).
06=c∈C

Notation. On note [n, k, d]q l’ensemble des codes de longueur n ∈ N∗ , de dimension k 6 n et de


distance minimale d ∈ N sur Fq .

2 Généralités sur les codes correcteurs – Chapitre 1


1.2. CODES LINÉAIRES

Définition 1.11. Le dual d’un code C de [n, k, d]q de matrice génératrice G est l’orthogonal
C ⊥ := {x ∈ Fnq | ∀c ∈ C, hx, ci = 0}
pour le produit scalaire canonique h , i sur Fnq . Une matrice de contrôle de C est une matrice
génératrice de C ⊥ . On dit que le code C est auto-dual si C ⊥ = C.

Proposition 1.12. Soit C un code [n, k, d]q de matrice de contrôle H. Alors


C := {x ∈ Fnq | H tx = 0}.

Preuve Soit G sa matrice génératrice. À partir des définitions, on obtient


C ⊥ = {x ∈ Fnq | G tx = 0},
donc dim C ⊥ = n − k puisque k = rg G. Comme la matrice H génère C ⊥ , on a rg H = n − k. Il
suffit alors de montrer qu’une inclusion. Soit c ∈ C. Alors pour tout y ∈ C ⊥ , on a hc, yi = 0 ce qui
implique H tc = 0 et conclut. 

 Remarque. On obtient alors G tH = H tG = 0.

. Exemples. • Codes de répétition et de parité. On reprend l’exemple de code de répétition, i. e.


l’image par l’application
F2 −→ Fn2 ,
ϕ:
m 7−→ (m, . . . , m).

Sa matrice génératrice est G := (1 · · · 1) et sa matrice de contrôle est H := (1n−1 In−1 ). Pour


le code de parité, sa matrice génératrice est G0 := (In−1 1n−1 ) et sa matrice de contrôle est G.
Ces deux problèmes sont duaux l’un de l’autre.
• Code de Hamming de longueur 7. On considère l’image C ⊂ F72 par l’application
F42 −→ F72 ,
(m1 , m2 , m3 , m4 ) 7−→ (m1 , m2 , m3 , m4 , m2 + m3 + m4 , m1 + m3 + m4 , m1 + m2 + m4 ).
Ses matrices génératrice et de contrôle valent
Ü ê
1 0 0 0 0 1 1 Ñ é
0 1 1 1 1 0 0
0 1 0 0 1 0 1
G := et H := 1 0 1 1 0 1 0 .
0 0 1 0 1 1 0
1 1 0 1 0 0 1
0 0 0 1 1 1 1
Il est de longueur 7 et de dimension 4. Pour connaître sa distance minimale, on peut faire la liste
des mots ou utiliser la matrice H puisque C = {x ∈ F72 | H tx = 0}. Un mot de poids 1 implique
une colonne de H nulle ce qui est impossible. Un mot de poids 2 implique deux mêmes colonnes
dans H ce qui est aussi impossible. On note Hi ∈ F32 les colonnes de H. Comme H1 + H2 + H3 = 0,
on obtient (1, 1, 1, 0, . . . , 0) ∈ C, donc la distance minimale vaut d := 3.

Théorème 1.13. Soient C un code [n, k, d]q et H une matrice de contrôle de C. Soit
D = {j ∈ J1, nK | tout ensemble de j − 1 colonnes de H est linéairement indépendant}.
Alors la distance minimale de C vaut D := max D.

Preuve On suppose qu’il existe c ∈ C\{0} tel que wH (c) < D. Alors H tc = 0 et w := wH (c) 6 D−1.
On peut écrire c = (0, . . . , 0, λ1 , . . . , λw , 0, . . . , 0) pour des éléments λj ∈ Fq non tous nuls. En
considérant les λj -ièmes colonnes, il existe D − 1 colonnes de H linéairement dépendantes ce qui
est impossible. Donc wH (c) > D pour tout c ∈ C.
Comme D + 1 ∈ / D, il existe D colonnes Hi1 , . . ., HiD de H linéairement dépendantes. De plus,
tout ensemble de D − 1 colonnes est libre. Par conséquent, il existe λ1 , . . . , λD ∈ F∗q tels que
λ1 Hi1 + · · · + λD HiD = 0.
Le mot c := (0, . . . , 0, λ1 , . . . , λD , 0, . . . , 0) où chaque élément λj est en position ij vérifie wH (c) = D.
Ceci termine la preuve. 

Généralités sur les codes correcteurs – Chapitre 1 3


1.3. DÉCODAGE PAR TABLEAU STANDARD ET SYNDROME

1.3 Décodage par tableau standard et syndrome


On considère un code C du type [n, k, d]q . Étant donné un mot y ∈ Fnq , on souhaite trouver un
mot c ∈ C qui réalise l’infimum minx∈C dH (y, x). Cela revient à trouver un mot e ∈ Fnq de poids
minimum tel que y − e ∈ C.

1.3.1 Tableau standard


On définit une relation d’équivalence R sur Fnq en décrétant x R y si et seulement si x − y ∈ C
pour tous mots x, y ∈ Fnq . La classe d’équivalence d’un mot x ∈ Fnq est noté x + C et est appelée
un coset. Un coset leader est un mot de plus petit poids dans le coset. On peut remarquer qu’il
existe q n−k cosets de taille q k = |C|.
On peut construire le tableau contenant tous les cosets leader c en ligne, les colonnes correspon-
dant aux autres mots de la classe, i. e. les mots c + ci où les mots ci avec i ∈ J1, |C| − 1K forment
une base de C. La tout première case contient donc le mot 0 et les autres cases de la première ligne
contiennent les mots ci . Ce tableau est le tableau standard. Soit y ∈ Fnq un mot. On cherche la ligne
du tableau où ce mot y apparaît. On lit un coser leader e ∈ Fnq sur la première colonne et il est de
poids minimal et vérifie y − e ∈ C.

. Exemple. On considère le code sur F2 de matrice génératrice


Å ã
1 0 1 1 0
G := .
0 1 0 1 1
Pour construire son tableau standard, on énumère tous les mots de poids 1, on recommence avec les
mots de poids 2, . . . jusqu’à retomber sur un mot déjà obtenu. Son tableau standard est

00000 10110 01011 11101


10000 00110 11011 01101
01000 11110 00011 10101
00100 10010 01111 11001
00010 10100 01001 11111
00001 10111 01010 11100
11000 01110 10011 00101
10001 00111 11010 01100

Si on considère le emot y := 01101 qui est présent sur la deuxième ligne du tableau, alors il suffit
de prendre e := 10000 et c := 11101.

1.3.2 Tableau standard simplifié


Soit H une matrice de contrôle de C. Alors pour tous mots x, y ∈ Fnq , on a

xRy ⇐⇒ H tx = H ty
où la quantité H tx est appelée le syndrome de x. Le tableau standard simplifié est le tableau des
syndromes. Soit y ∈ Fnq un mot. Pour répondre au problème posé, on cherche dans le tableau un
mot e ∈ Fnq tel que H te = S := H ty. On en déduit que le poids de e est minimal et on a y − e ∈ C.

. Exemple. Reprenons l’exemple précédent. Une matrice de contrôle est


Ñ é
1 0 1 0 0
H := 1 1 0 1 0 .
0 1 0 0 1
Alors le tableau standard simplifié est

4 Généralités sur les codes correcteurs – Chapitre 1


1.4. CODES DE HAMMING

00000 000
10000 110
01000 011
00100 100
00010 010
00001 001
11000 101
10001 111

Si on considère le mot y := 01101, alors son syndrome vaut S := (1, 1, 0) et ce dernier se situe dans
la deuxième ligne, donc on prend e := 10000 qui répond au problème.

1.4 Codes de Hamming


Le but est de construire une famille infinie de codes binaires qui corrigent une erreur et de
trouver deux algorithmes de décodage.

1.4.1 Définition
Définition 1.14. Soit r > 2 un entier. On pose n := 2r − 1. On considère la matrice H ∈ Mr,n (F2 )
dont les colonnes sont les vecteurs non nuls de Fr2 rangés dans l’ordre suivant : à un entier j ∈ J1, nK,
on associée le r-uplet (ε0j , . . . , εr−1
j ) ∈ Fr2 tel que
r−1
X
= εij 2i
i=0

et la j-ième colonne de H sera


ε0j
Ö è
..
Hj = . .
εr−1
j

Le code de Hamming de longueur n est le code Hr de matrice de contrôle H. La dimension de ce


code vaut 2r − 1 − r.

Calculons la distance minimale du code C. Il n’y a pas de mot de poids 1 car les colonnes de la
matrice H sont non nulles. De même, il n’y a pas de mots de poids 2 car les colonnes sont deux à
deux distinctes. Cependant, on a J1 + H2 + H3 = 0, donc le mot (1, 1, 1, 0, . . . , 0) est un mot de
poids 3 du code Hr . Sa distance minimale vaut donc 3.

1.4.2 Décodage/correction
Soit y = c + e un mot avec c ∈ Hr et e ∈ Fn2 tels que wH (e) 6 1. On souhaite trouver un tel
mot c à partir d’un mot donné y. Pour se faire, on utilisera le syndrome. Ce dernier vaut
S := H ty = H tc + H te = H te
qui est nul si e = 0 et qui vaut Hj si e = (δj,i )i∈J1,nK .

Premier algorithme
On possède un produit algorithme qui est le suivant.

Entrée : un mot y tel que y = c + e avec c ∈ Hr et wH (e) 6 1


Sortie : le mot c
S ←− H ty
Si S = 0, alors
Retourner y
Pour j = 1 à n, faire

Généralités sur les codes correcteurs – Chapitre 1 5


1.5. CODE DE GOLEY BINAIRE ÉTENDU

Si Hj = S, alors
e ←− (δj,i )i∈J1,nK
Retourner y − e.
Ici, on a corrigé le mot y en le mot c. Si on dispose de la matrice génératrice G, on peut trouver le
mot m tel que c = mG en résolvant le système linéaire xG = c d’inconnue x ∈ Fn2 .

. Exemple. On pose r := 3 et on souhaite corriger le mot y := (1, 1, 0, 1, 0, 1, 0). On rappel la


matrice de contrôle Ñ é
1 0 1 0 1 0 1
H= 0 1 1 0 0 1 1 .
0 0 0 1 1 1 1
Son syndrome est S := H ty = (1, 0, 0). L’entier correspondant est j := 1. On peut donc en déduire
que le mot corrigé est c := (0, 1, 0, 1, 0, 1, 0).

Au passage, comment peut-on trouver la matrice génératrice G de Hr ? On cherche une base du


noyau de la matrice H et on peut la rechercher sous forme réduite.

1.5 Code de Goley binaire étendu


On considère le code G24 de matrice génératrice G := (I12 A) où la matrice A := (ai,j )06i,j611
est définie par
a0,0 = 0,
∀i ∈ J0, 11K, a0,1 = ai,0 = 1,
∀i, j ∈ J1, 11K, ai,j = bi−1,j−1
et la matrice B := (bi,j )06i,j610 vérifie, pour tous i, j ∈ J1, 10K, le coefficient bi,j vaut 1 si et
seulement si l’entier i + j est un carré modulo 11, i. e. i + j ∈ {0, 1, 3, 4, 5, 9}. En fait, la matrice G
s’écrit
1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
 
0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 1 0
 
0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 1 0 1
 
0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 1 0 1 1
 
0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 0 1 1 0
 
0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 1 0 1 1 0 1
G= 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0
.
 1 1
0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 0 1 1 1
 
0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 1 1 0
 
0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 1 1 0 0
 
0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 1 1 0 0 0 1

1.5.1 Distance minimale et auto-dualité


Lemme 1.15. Soient x := (x1 , . . . , xn ) ∈ Fn2 et y := (y1 , . . . , yn ) ∈ Fn2 . On note
x ∗ y := ]{i ∈ J1, nK | xi = yi = 1}.
Alors
1. hx, yi = x ∗ y mod 2 ;
2. hx, xi = wH (x) mod 2 ;
3. wH (x + y) = wH (x) + wH (x) − 2x ∗ y.

Preuve 1. Comme on est dans F2 , on a immédiatement


Xn X
hx, yi = xi yi = 1=x∗y mod 2.
i=1 xi =yi =1

6 Généralités sur les codes correcteurs – Chapitre 1


1.5. CODE DE GOLEY BINAIRE ÉTENDU

2. L’égalité est évidente puisque x ∗ x = wH (x) et on utilise l’égalité précédente.


3. On a
wH (x + y) = ]{i ∈ J1, nK | xi + yi = 1}
= ]{i ∈ J1, nK | xi = 1, yi = 0} + ]{i ∈ J1, nK | xi = 0, yi = 1}
= wH (x) − ]{i ∈ J1, nK | xi = yi = 1} + wH (y) − ]{i ∈ J1, nK | xi = yi = 1}
= wH (x) + wH (y). 

Théorème 1.16. Soient C un code [n, k, d]2 et G une matrice génératrice de C. Pour i ∈ J0, k − 1K,
on note gi ∈ Fn2 la i-ième ligne de G. On suppose que
– pour tous i, j ∈ J0, k − 1K tels que i 6= j, on a hgi , gj i = 0 ;
– pour tout i ∈ J0, k − 1K, on a wH (gi ) ≡ 0 mod 4.
Alors C ⊂ C ⊥ et la distance minimale d ∈ N du code C vérifie d ≡ 0 mod 4.

Preuve Soit c ∈ C. D’après les hypothèses, pour tous i, j ∈ J0, k − 1K, on a hgi , gj i = 0 dans F2 .
Comme les lignes de G engendrent le code C, on obtient hc, c0 i = 0 pour tout mot c0 ∈ C. Ceci
assure alors C ⊂ C ⊥ .
Pour tout entier r ∈ N∗ , on considère la propriété P(r)
pour toute partie I ⊂ J0, k − 1K de cardinal r, on a wH ( i∈I ) ≡ 0 mod 4.
Q

Par hypothèse, la propriété P(1) est vraie. Soit r ∈ N∗ . On suppose P(r). Soit I ⊂ J0, k − 1K une
partie de cardinal r + 1. Soit i0 ∈ I. On pose
X
x := gi0 et y := gi .
i∈I\{i0 }

Alors le lemme précédent et l’hypothèse P(r) donnent


X 
wH gi = wG (x + y) = wH (x) + wH (y) − 2x ∗ y ≡ 0 mod 4.
i∈I

Cela conclut la récurrence. Ainsi on obtient d ≡ 0 mod 4. 


Théorème 1.17. Le code G24 est un code [24, 12, 8]2 auto-dual.

Preuve Pour i ∈ J0, 11K, on note gi ∈ F24 2 la i-ième ligne de la matrice G. On a bien wH (g0 ) = 12 ≡ 0
mod 4 et wH (gi ) = 8 ≡ 0 mod 4 pour tous i ∈ J1, 11K. Pour tout i ∈ J1, 11K, on a hg0 , gi i = 6 = 0
et, pour tout i ∈ J2, 11K, on a hg1 , gi i = 4 = 0. Par des permutations, on obtient hgi , gj i = 0 pour
tous i, j ∈ J2, 11K. D’après le théorème précédent, en notant d ∈ N la distance minimale de G12 , on
trouve
G24 ⊂ G24 ⊥
et d ≡ 0 mod 4.

Comme dim G24 = 12 = 24 − 12 = dim G12 ⊥


, on obtient l’égalité G24 = G24

ce qui montre l’auto-
dualité.
Vérifions que d = 8. En regardant la matrice génératrice, on voit d 6 4, donc d ∈ {4, 8}.
Raisonnons par l’absurde et supposons d = 4. Alors il existe un mot c ∈ G24 de poids 4. Comme
la matrice G est génératrice, il existe un vecteur x ∈ F122 tel que c = xG. Comme la matrice de
contrôle H est aussi génératrice puisque le code G24 est auto-dual, il existe un vecteur y ∈ F12
2 tel
que c = yH. En exploitant la structure de G et H, on obtient
c = (x, xA) = (yA, y), donc c = (x, y).
On peut alors écrire wH (c) = wH (x) + wH (y) = 4. Distinguons cinq cas.
– Si wH (x) = 0, alors c = 0 ce qui est impossible.
– De même, le cas wH (x) = 4 est impossible puisqu’alors wH (y) = 0.
– Si wH (x) = 1, alors c est une ligne de G ce qui est impossible.
– Si wH (y) = 1, alors c est une ligne de H ce qui est impossible.

Généralités sur les codes correcteurs – Chapitre 1 7


1.5. CODE DE GOLEY BINAIRE ÉTENDU

– On suppose wH (x) = 2. Alors c est une somme de deux lignes de G. Or pour tout i ∈ J1, 11K, on a
wH (g0 + gi ) = wH (g0 ) + wH (gi ) − 2g0 ∗ gi = 12 + 8 − 2 × 6 = 8 6= 4
et, pour tout i ∈ J2, 11K, on a
wG (g1 + gi ) = 8 + 8 − 2 × 4 = 8 6= 4.
Ce cas est aussi impossible.
Finalement, on obtient d = 8. 

1.5.2 Algorithme de décodage


L’idée est d’exploiter que les matrices G et H sont toutes les deux des matrices de contrôle du
code G24 . On va utiliser deux syndromes. Pour i ∈ J0, 11K, on note Ai ∈ F12
2 la i-ième colonne de la
matrice A.
Théorème 1.18. Soit c ∈ G24 et e := (x, y) ∈ F12 12
2 × F2 tel que wH (e) 6 b(8 − 1)/2c = 3. On pose

r := c + e, S := H tr et T := G tr.
Alors l’une des quatre situations suivantes est vérifiée :
(i) si wH (S) 6 3, alors
x = 0 et y = tS ;
(ii) si wH (S) > 3 et il existe i ∈ J0, 11K tel que wH (S + Ai ) ∈ {1, 2}, alors
x = εi := (δi,j )j∈J0,11K et y = tS + tAi ;
(iii) si wH (T ) 6 3, alors
x = tT et y=0;
(iv) si wH (T ) > 3 et il existe i ∈ J0, 11K tel que wH (T + Ai ) ∈ {1, 2}, alors
y = εi et x = tT + tAi .

Preuve Une matrice de contrôle est H = (A I12 ) de telle sorte que


t t
S =A x+ y et T = tx + A ty.
(i) On a
wH (S) > wH (xA) − wH (y)
> wH (xA) + wH (x) − wH (x) − wH (y)
> wH (x, xA) − wH (e).
Si x 6= 0, alors wH (S) > 8 − 3 > 3.
(ii) On a
wH (S + Ai ) = wH (xA + y + tAi )
= wH ((x + εi )A + y)
> wH ((x + εi A)A) − wH (y)
> wH ((x + εi )A) + wH (x + εi ) − wH (x + εi ) − wH (y)
> wH ((x + εi )G) − wH (x) − wH (y) − 1.
Si x + εi 6= 0, alors wH (S + Ai ) > 8 − 4, donc wH (S + Ai ) ∈
/ {1, 2}. De plus, si wH (s + Ai ) = 0,
t
alors x + εi = 0 et (S + Ai ) = y.
On procède identiquement pour les cas (iii) et (iv).
Il reste à montrer qu’un autre cas n’est possible. Raisonnons par l’absurde et supposons qu’aucune
des quatre cas n’est satisfait. Alors
wH (S), wH (T ) > 3 et wH (S + Ai ), wH (T + Ai ) ∈
/ {1, 2} , i ∈ J0, 11K.
Comme wH (e) = wH (x) + wH (y) 6 3. Distinguons quatre cas.
– On suppose wH (x) = 0. Alors wH (y) 6 3, donc wH (S) 6 3 ce qui est impossible.

8 Généralités sur les codes correcteurs – Chapitre 1


1.5. CODE DE GOLEY BINAIRE ÉTENDU

– De même, le cas wH (y) = 0 est impossible.


– On suppose wH (x) = 1. Alors wH (y) 6 2 et il existe i ∈ J0, 11K tel que x = εi . On peut écrire
wH (S + Ai ) = wH (A tx + ty + A tεi ) = wH (ty) ∈ {1, 2}
ce qui est impossible.
– De même, le cas wH (y) = 2 est impossible.
Ceci conclut la preuve. 

Algorithme de décodage
On peut alors exhiber l’algorithme suivant qui repose sur ce théorème.

Entrée : un mot y := (y0 , . . . , y23 ) tel que y = c + e avec c ∈ G24 et wH (e) 6 3


Sortie : le mot m
T ←− G ty
Si wH (T ) 6 3, alors
x ←− tT
Sinon
Si wH (T + Ai ) 6 2 pour un entier i ∈ J1, 11K, alors
t
x ←− (T + Ai )
Sinon
S ←− tAT
Si wH (S) 6 3, alors
x ←− 0
Sinon
Si wH (S + Ai ) 6 2 pour un entier i ∈ J1, 11K, alors
x ←− εi
Sinon
Retourner « faux »
m ←− (y0 , . . . , y11 ) + x
Retourner m

Généralités sur les codes correcteurs – Chapitre 1 9


Chapitre 2
Codes de Reeed-Solomon généralisés et codes
de Reed-Muller
2.1 Code GRS . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.3 Algorithme de décodage de Welch-
2.1.1 Matrice de contrôle et distance minimale . 10 Berklkamp . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2 Matrice génératrice et code d’évaluation . . 11 2.2 Codes de Reed-Muller . . . . . . . . . . . . . . . 12

2.1 Code GRS


2.1.1 Matrice de contrôle et distance minimale
Définition 2.1. Soit q ∈ N une puissance d’un nombre premier. Soient k, n ∈ N des entiers
tels que k 6 n. Soient α1 , . . . , αn ∈ F∗q des éléments deux à deux distincts. Soient v1 , . . . , vn ∈ F∗q
d’autres éléments. Le code de Reed-Solomon généralisé du type [n, k]q q, de localisateurs α1 , . . ., αn
et de multiplicateurs v1 , . . ., vn est le code de matrice de contrôle H := V D où
á ë
1 ··· 1
α1 ··· αn
V := .. .. et D := diag(v1 , . . . , vn ).
. .
α1n−k−1 ... αnn−k−1
Ce code est noté GRSn,k (α, v).

Vocabulaire. Le vecteur α est le support de ce code. On dit que ce code est


– normalisé si v1 = · · · = vn = 1 ;
– primitif sur n = q − 1.

 Remarque. – Nécessairement, on a n 6 q − 1.
– La matrice formée des n − k premières colonnes de H est inversible. En particulier, le code est de
dimension k.

. Exemples. On considère le code GRS primitif du type [6, 2]7 , de localisateurs 1, . . . , 6 et de


multiplicateurs 1, . . . , 6. La matrice de contrôle est donc
 
Ü ê 1
1 1 1 1 1 1   2 

1 2 3 4 5 6  3 
H=  .
1 4 2 2 4 1   4 

1 1 6 1 6 6  5 
6
• Codes de Reed-Solomon. On suppose n | q − 1. Soit α ∈ Fq une racine n-ième de l’unité. On
considère le code de localisateurs 1, α, . . . , αn−1 et de multiplicateurs 1, αbk , . . . , (αb )n−1 pour un
entier b ∈ N.
Proposition 2.2. Un code GRS est MDS.

Preuve Soit C := GRSn,k (α, v) un code GRS. On note d ∈ N∗ sa distance minimale. D’après la
borne de singleton, on a d 6 n − k + 1. Montrons qu’on a en fait l’égalité. On note H = V × D
sa matrice de contrôle associée. Il suffit de montrer que tout ensemble de n − k colonnes de H est
libre. Soient j1 , . . . , jn−k ∈ J1, nK une suite strictement croissante. On note ∆ la matrice formée des
colonnes j1 , . . ., jn−k de H. Alors ∆ = Ṽ d˜ avec Ṽi,` = αji−1 `
et D̃`,` = vj` . La matrice Ṽ est une
matrice de Vandermonde de la famille (αj1 , . . . , αjk ) où les éléments de cette famille sont deux à
deux distincts, donc la matrice ∆ est inversible. Cela montre que tout ensemble de n − k colonnes
de H est libre. D’où d > n − k + 1. Le code est donc MDS. 

10 Codes de Reeed-Solomon généralisés et codes de Reed-Muller – Chapitre 2


2.1. CODE GRS

2.1.2 Matrice génératrice et code d’évaluation


Proposition 2.3. Le dual d’un code GRS est un code GRS de mêmes localisateurs.

Preuve Soit C := GRSn,k (α, v) un code GRS. On note H = V D sa matrice de contrôle. On veut
montrer qu’il existe un élément v 0 ∈ (F∗q )n tel que le code C ait pour matrice génératrice la matrice
de contrôle du code GRSn,n−k (α, v 0 ), c’est-à-dire tel que G tH = 0 avec G := (αji−1 vj0 )16i6k,16j6n .
Raisonnons par analyse-synthèse. Soit v 0 := (v10 , . . . , v`0 ) ∈ (F∗q )n un tel vecteur. Pour tout i ∈ J1, kK
et j ∈ J1, n − kK, on a
Xn Xn
α`i−1 v`0 × α`j−1 v` = 0, i. e. (α`i+j−1−1 v` )v`0 = 0.
`=1 `=1
Autrement dit, pour tout s ∈ J1, n − 1K, on a
X n
(α`s−1 v` )v`0 = 0.
`=1

Cela se réécrit encore H̃v = 0 avec H̃ := (αji−1 vj )16i6n−1,16j6k . La matrice H̃ est une matrice de
0

contrôle du code GRSn,1 (α, v). Alors v 0 ∈ GRSn,1 (α, v). Comme le vecteur a ses composantes tous
non nuls, on a aussi wH (v 0 ) = n. Réciproquement, comme le code GRSn,1 (α, v) est MDS, on peut
trouver un vecteur v 0 ∈ Fnq tel que v 0 ∈ GRSn,1 (α, v) et wH (v 0 it = n. On peut alors remonter les
équivalence et le vecteur v 0 trouvé satisfait notre souhait initial. 
Corollaire 2.4. Tout code GRS possède une matrice génératrice sous la forme V D pour une
matrice V de van der Monde et une matrice G diagonale.

 Remarque. On note 1n := (1, . . . , 1) ∈ Fnq . En écrivant le produit mG pour m ∈ Fnq , on montre


que le code C := GRSn,k (α, 1n ) s’écrit
C = {(f (α1 ), . . . , f (αn )) | f ∈ Fq [X]<k }.

2.1.3 Algorithme de décodage de Welch-Berklkamp


Soit C := {(f (α1 ), . . . , f (αn )) | f ∈ Fq [X]<k } un code GRS. Soit f ∈ Fq [X]<k . On pose
c := (f (α1 ), . . . , f (αn )).
Fnq
Soit e := (e1 , . . . , en ) ∈ tel que wH (e) 6 t := b(n − k)/2c. On pose r := c + e = (r1 , . . . , rn ).
Comme toujours, l’objectif est de trouver le polynôme f connaissant le mot r. Pour réaliser cela, on
peut adopter une stratégie d’interpolation du polynôme ou utiliser l’algorithme de Welch-Berklkamp.

Donnons l’idée de ce dernier algorithme. On pose I := {i ∈ J1, nK | ei 6= 0} et σ := i∈I (x − αi ).


Q
Soit i ∈ J1, nK. Alors σ(αi ) = 0 ou ri = f (αi ), donc σ(αi )(ri − f (αi )) = 0, donc
q(αi , ri ) = 0 avec q(x, y) := σ(x)y − σ(x)f (y).
L’idée est donc de construire un polynôme Q(x, y) = Q0 (x) + Q1 (x)y ∈ Fq [x, y] \ {0} tel que
∀i ∈ J1, nK, Q(αi , ri ) = 0
et on en déduit
f (x) = −Q0 (x)/Q1 (x).
Soit Q(x, y) ∈ Fq [x, y] \ {0} un tel polynôme. On veut qu’il vérifie le système

∀i ∈ J1, nK, Q(αi , ri ) = 0,

deg Q0 6 n − 1 − t, (S)

deg Q1 6 n − 1 − t − (k − 1).

Un tel polynôme Q(x, y) existe bien. En effet, il est caractérisé par n équations en N inconnues avec
N := (n − t) + (n − t − k + 1) = 2n − 2t − k + 1.
Or t 6 (n − k)/2, donc N > 2n − (n − k) − k + 1 = n + 1 > n. Le système (S) est alors sur-déterminé
et possède une solution non nulle.

Codes de Reeed-Solomon généralisés et codes de Reed-Muller – Chapitre 2 11


2.2. CODES DE REED-MULLER

Montrons que ϕ(x) := Q0 (x) + Q1 (x)f (x) = 0. On a


deg ϕ 6 max(deg Q0 , deg Q1 + deg f )
6 max(n − 1 − t, n − 1 − t − (k − 1) + (k − 1)) = n − 1 − t.
De plus, soit i ∈ J1, nK \ I. Alors f (αi ) = ri , donc ϕ(αi ) = Q0 (αi ) + Q1 (αi )ri = Q(αi , ri ) = 0.
Finalement, le polynôme ϕ admet au moins n − |I| racines. Or n − |I| > n − t > deg ϕ, donc le
polynôme ϕ est nul.

. Exemple. On prend (q, n, k) = (7, 6, 2). La capacité de correction vaut t = 2. On considère le


code
C := {(f (1), . . . , f (6)) | f ∈ F7 [X]<2 } .
On pose f := 2 − x. Alors le mot du code C associé est cf := (1, 0, 6, 5, 4, 3) et on va y ajouter
l’erreur e := (0, 2, 0, 3, 0, 0) de sorte à obtenir le mot r := (1, 2, 6, 1, 4, 3). Effectuons l’algorithme :
on cherche un polynôme Q(x, y) sous la forme
Q(x, y) = Q0 (x) + Q1 (x)y avec deg Q0 6 3 et deg Q1 6 2
et vérifiant
∀i ∈ J1, 6K, Q(i, ri ) = 0.
2
On note Q0 (x) = a0 + a1 x + a2 x + a3 x et Q1 (x) = b0 + b1 x + b2 x2 . On obtient le système
2
 
 a
1 1 1 1 1 1  0

1
1 2 3 1 2 4 1 a1 
  a2 
1 3 9 6 6 4 5  
  a3  = 0.
1 4 2 1 1 4 2  
   b1 
1 5 4 6 4 6 2  
 b2 
1 6 1 6 3 4 3
b3
On vérifie que le vecteur (5, 6, 6, 1, 1, 1, 1) est solution. On en déduit
5 + 6x + 6x2 + x3
f (x) = − = −(x + 5) = 2 − x.
1 + x + x2

2.2 Codes de Reed-Muller


Dans toute la suite, on se place dans le corps F2 .

Définition 2.5. Soient m ∈ N∗ et r ∈ J0, 2m K. On pose n := 2m . Le code de Reed-Muller de


paramètre (r, m) est
RM(r, m) := {(f (z0 ), . . . , f (zn−1 )) | f ∈ F2 [X0 , . . . , Xm−1 ], deg f 6 r}
où les vecteurs zi avec i ∈ J0, n − 1K sont définie par zi := (ε0i , . . . , εm−1
i ) où
m−1
X
i= εji 2j .
j=0

Proposition 2.6. La dimension du code RM(r, m) est


Ç å Ç å
m m
1+ + ··· + .
1 r

Preuve On considère l’application


F2 [X0 , . . . , Xm−1 ]6r −→ Fn2 ,
ϕ: .
f 7−→ (f (z0 ), . . . , f (zn−1 ))
Elle induit une application
F2 [X0 , . . . , Xm−1 ]6m
Θ : Em := −→ Fn2
hXi2 − Xi | i ∈ J0, m − 1Ki

12 Codes de Reeed-Solomon généralisés et codes de Reed-Muller – Chapitre 2


2.2. CODES DE REED-MULLER

qui est injective dont l’image vaut RM(m, n). De plus, son ensemble de départ E admet pour bases
les vecteurs
6 j),
1, Xi , Xi Xj (i = ..., X0 · · · Xn−1
ce qui en fait un espace vectoriel de dimension
Ç å Ç å
m m
dimF2 Em = 1 + + ··· + = (1 + 1)n = dimF2 Fn2 .
1 m
Il suffit alors de montrer que l’application Θ est surjective pour montrer le résultat. Soit e := ei ∈ Fn2
le i-ième vecteur de la base canonique de Fn2 . Soit I := {j ∈ J0, m − 1K | εji = 1} où
m−1
X
i= εji 2j .
j=0

On pose Y Y
f := (1 + Xj ) Xj
j ∈I
/ j∈I

de sorte que f (zi ) = 1 et f (α) = 0 pour tout α ∈ Fn2 \ {zi }. Finalement, l’application Θ est bijective,
donc l’application induite
F2 [X0 , . . . , Xm−1 ]6r
Ψ : Er := −→ Fn2
hXi2 − Xi | i ∈ J0, m − 1Ki
est injective car Er ⊂ Em . On en déduit
Ç å Ç å
F2 [X0 , . . . , Xm−1 ]6r m m
dimF2 RM(r, m) = dimF2 =1+ + ··· + . 
hXi2 − Xi | i ∈ J0, m − 1Ki 1 r

Codes de Reeed-Solomon généralisés et codes de Reed-Muller – Chapitre 2 13


Chapitre 3
Codes cycliques
3.1 Codes cycliques, générateurs . . . . . . . . . . . 14 3.4 Polynômes minimaux et factorisation de X n −
3.2 Matrice génératrice . . . . . . . . . . . . . . . . . 15 1 sur Fq . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 Matrice de contrôle . . . . . . . . . . . . . . . . . 16

3.1 Codes cycliques, générateurs


Définition 3.1. Un code linéaire C de longueur n sur Fq est cyclique si
c := (c0 , . . . , cn−1 ) ∈ C =⇒ cπ := (cn−1 , c0 , . . . , cn−2 ) ∈ C.

. Exemples. Les codes


C1 := {(0, . . . , 0), (1, . . . , 1)} et C2 := {(0, 0, 0), (1, 0, 1), (1, 1, 0), (0, 1, 1)}
sont cycliques. Plus généralement, le code
C3 := {(c1 , . . . , cn−1 ) ∈ Fn2 | c0 + · · · + cn−1 = 0}
est cyclique.

Soit C un code linéaire cyclique de longueur n sur Fq . À un mot c := (c0 , . . . , cn−1 ) ∈ C, on


associe le polynôme
c(X) := c0 + · · · + cn−1 X n−1 ∈ Fq [X]<n
qu’on peut projeter dans l’anneau quotient
Rn [X] := Fq [X]/hX n − 1i.
Ainsi pour tout c ∈ C, on a cπ (X) = Xc(X). On notera
C(X) := {c(X) | c ∈ C} ∈ Fq [X]<n et C(X) := {c(X) | c ∈ C} ⊂ Rn [X].

Lemme 3.2. Le code C est cyclique si et seulement si l’ensemble C(X) est un idéal de Rn [X].

Preuve ⇐ On suppose que l’ensemble C(X) est un idéal de Rn [X]. Alors pour tous u ∈ C(X)
et a ∈ Rn [X], on a au ∈ C(X) et, en prenant a = X, on obtient Xu ∈ C(X). Il suffit ensuite de
prendre u = c ∈ C ce qui montre que le code C est cyclique.
⇒ On suppose que le code C est cyclique. Pour tout u ∈ C(X), la cyclicité assure Xu ∈ C(X),
puis X 2 u ∈ C(X) et, en répétant cela, on obtient X i u ∈ C(X) pour tout i ∈ N. Comme le code
est linéaire, tout polynôme multiplié par le polynôme u est donc dans C(X). Ce dernier ensemble
est ainsi un idéal de Rn [X]. 

Théorème 3.3. Soit C un code linéaire cyclique de longueur n sur Fq . Soit g(X) un polynôme
unitaire de plus petit degré dans C(X). Soit r := deg g(X). Alors
1. pour tout c ∈ C, on a g(X) | c(X) dans Fq [X] ;
2. le polynôme g(X) est l’unique polynôme unitaire de degré r dans C(X) ;
3. on a g(X) | X n − 1 dans Fq [X].
On dit que le polynôme g(X) génère le code C et on note C = hgin .

Preuve 1. Soit c ∈ C. Comme Fq est un corps, on peut effectuer la division euclidienne de c(X)
par g(X) : il existe deux polynômes Q(X) et R(X) tels que
c(X) = g(X)Q(x) + R(x) avec deg R < r.
Comme g(X) ∈ C(X), on a c(X) − Q(X) · g(X) = R(X) ∈ C(X). Comme deg R < r < n, on a
nécessairement R(X) ∈ C(X), donc R(X) = 0 ou deg R > r, donc R(X) = 0. D’où g(X) | c(X).

14 Codes cycliques – Chapitre 3


3.2. MATRICE GÉNÉRATRICE

2. Soit g 0 (X) ∈ C(X) un polynôme unitaire de degré r. Alors g(X) − g 0 (X) ∈ C(X), donc g−g 0 = 0
ou deg(g − g 0 ) > r. Comme les polynômes g et g 0 sont unitaires et de degré r, on a deg(g − g 0 ) < r,
donc g = g 0 .
3. Effectuons la division euclidienne de X n − 1 par g(X) : on écrit
X n − 1 = g(X)Q(X) + R(X) avec deg R < r.
En passant au quotient, on obtient R(X) = −g(X) · Q(X) ∈ C(X), donc R(X) ∈ C(X), donc
R = 0 ou deg R > r, donc R = 0. D’où g(X) | Xn−1 . 

Avec le théorème, si un code C est cyclique de longueur n et de polynôme générateur g, on peut


donc écrire
C(X) = {c(X) ∈ Rn [X] | g(X) | c(X)} .

. Exemples. – On reprend les exemples précédents. Comme les mots de C2 correspondent respec-
tivement aux polynômes
1 + X 2 = (X + 1)2 , X +1 et X + X 2 = X(X + 1),
on a C2 = hX + 1i3 . De même, on trouve C3 = hX + 1in .
– • Codes de Reed-Solomon. Soit n ∈ N∗ un entier tel que n | q − 1. Soit α ∈ Fq une racine n-ième
de l’unité. On considère le code C de Reed-Solomon de localisateurs et de multiplicateurs
α := (1, α, . . . , αn−1 ) et v := (1, . . . , αb , . . . , αb(n−1) ).
Sa matrice de contrôle vaut
αb α2b αb(n−1)
á ë
1 ···
1 αb+1 α2(b+1) ··· α(n−1)(b+1)
H= .. .. .. .. .. .
. . . . .
1 αb+d−1 α2(b+d−1) ··· α(n−1)(b+d−2)
Alors pour tout mot c ∈ Fnq , on a
c∈C ⇐⇒ H tc = 0
⇐⇒ c(αb ) = c(αb+1 ) = · · · = c(αb+d−1 ) = 0
⇐⇒ ∀i ∈ J0, d − 2K, X − ab+i | c(X)
d−1
Y
⇐⇒ (X − αb+1 ) | c(X).
i=0

Le code C est donc un code cyclique de longueur n et de polynôme générateur


d−1
Y
g(X) := (X − αb+1 ).
i=0

– Quels sont les codes cycliques binaires de longueur 7 ? Pour répondre à cette question, on factorise
le polynôme X 7 + 1 en produit d’irréductibles dans F2 [X] : on trouve
X 7 + 1 = (X + 1)(X 3 + X + 1)(X 3 + X 2 + 1).
Ces facteurs génèrent tous les codes cycliques de longueur 7. On obtient huit codes.

3.2 Matrice génératrice


Soit C := hgin un code cyclique. Trouvons sa matrice génératrice. On a
C(X) = {c(X) ∈ Fq [X]<n | g(X) | c(X)}
= {m(X)g(X) | m(X) ∈ Fq [X], deg m(X) < k} avec k := n − r
nk−1
X o
= mi X i g(X) m0 , . . . , mk−1 ∈ Fkq .
i=0

Codes cycliques – Chapitre 3 15


3.3. MATRICE DE CONTRÔLE

Ainsi une matrice génératrice est


à í
g0 g1 ··· gr 0 ··· 0
.. ..
0 g0 g1 ... gr . .
G := .. .. .. .. ..
. . . . . 0
0 ··· 0 g0 g1 ··· gr
où gr = 1. Cette matrice est bien de rang k.

3.3 Matrice de contrôle


Définition 3.4. Le polynôme de contrôle d’un code cyclique C := hgin est le polynôme
Xn − 1
h(X) := .
g(X)

Pour un mot c ∈ C, on peut écrire c(X) = m(X)g(X) avec m ∈ Fq [X] et on obtient


c(X)h(X) = m(X)g(X)h(X) ≡ 0 mod X n − 1.

Proposition 3.5. Soit C un code cyclique [n, k]q de polynôme générateur g et de polynôme de
contrôle h := X k + k−1 i
P
i=0 hi X . Alors une matrice de contrôle du code C est
à í
1 hk−1 ··· h0 0 ··· 0
.. .
0 1 hk−1 . . . h0 . ..
H := .. ∈ Mn−k,n (Fq ).
.. .. .. ..
. . . . . 0
0 ··· 0 1 hk−1 · · · h0

 Remarque. En particulier, son dual C ⊥ est cyclique et engendré par le polynôme h∗ := X k h(1/X).

Preuve Comme le rang de la matrice H vaut n − k, il suffit de montrer


∀c ∈ C, H tc = 0.
Soit c ∈ C. Alors c(X)h(X) ≡ 0 mod X n − 1, donc
n−1+k
X X
u` X ` ≡ 0 mod X n − 1 avec u` := hj c`−j .
`=0 06j6k
06`−j<n

Réécrivons cette congruence. Modulo X n − 1, on obtient


n−1+k
X n−1
X n+k−1
X
u` X ` ≡ u` X ` + u` X `
`=0 `=0 `=n
n−1
X k−1
X
≡ u` X ` + u`+n X `+n
`=0 `=0
n−1
X k−1
X
≡ u` X ` + (u` + u`+n )X ` .
`=k `=0
Comme ce dernier polynôme est de degré strictement inférieur à n, c’est même une égalité, i. e.
n−1
X k−1
X
u` X ` + (u` + u`+n )X ` = 0.
`=k `=0
On exploite alors la nullité de ses coefficients et on en déduit que, pour tout ` ∈ Jk, n − 1K, on a
k
X
u` = 0, i. e. hj c`−j = 0.
j=0

Ceci montre exactement H tc = 0. 

16 Codes cycliques – Chapitre 3


3.4. POLYNÔMES MINIMAUX ET FACTORISATION DE X N − 1 SUR FQ

. Exemple. Considérons le code C := hX 3 + X + 1i7 sur F2 . Comme le polynôme X 7 + 1 se


factorise en
X 7 + 1 = (X + 1)(X 3 + X + 1)(X 3 + X 2 + 1).
Le polynôme de contrôle est donc
X7 + 1
h(X) := = X 4 + X 2 + X + 1.
X3 + X + 1
On obtient alors une matrice génératrice et une matrice de contrôle
Ü ê
1 1 0 1 0 0 0 Ñ é
1 0 1 1 1 0 0
0 1 1 0 1 0 0
G := et H := 0 0 1 0 1 1 1 .
0 0 1 1 0 1 0
0 0 1 0 1 1 1
0 0 0 1 1 0 1

3.4 Polynômes minimaux et factorisation de X n − 1 sur Fq


On va exploiter le fait qu’on ait une bijection entre l’ensemble des codes cycliques [n, k]q et
l’ensemble des diviseurs de X n − 1 de degré n − k sur Fq . Dans la suite, on suppose pgcd(n, q) = 1.
Ceci assure que les polynômes X n − 1 et nX n−1 sont premiers entre eux, i. e. le polynôme X n − 1
est sans facteur carré.
Soit α une racine primitive n-ième de l’unité dans F× ∗
q m où l’entier m ∈ N est le plus petit
m
entier tel que n | q − 1. Alors on peut écrire
n−1
Y
Xn − 1 = (X − αi ) ∈ Fqm [X].
i=0

Définition 3.6. La q-classe cyclotomique modulo n d’un entier s ∈ J0, n − 1K est l’ensemble
Cs := {s mod n, sq mod n, sq 2 mod n, . . . , sq ms −1 mod n} ⊂ N
ms
où l’entier ms est le plus petit entier tel que sq ≡ s mod n.

Les classes Cs forment une partition de l’ensemble J0, n − 1K et on a


Y Y
Xn − 1 = Mas (X) avec Mαs (X) := (X − αi )
s i∈Cs

où l’entier s ∈ J0, n − 1K parcourt l’ensemble des représentants des classes cyclotomiques.

Proposition 3.7. Les polynômes Mαs (X) sont irréductibles sur Fq .

Preuve Soit s ∈ J0, n − 1K. Montrons d’abord que Mαs (X) ∈ Fq [X]. On note
ms
X
Mαs (X) = ai X i avec ai ∈ Fqm [X].
i=0

On cherche à montrer que, pour tout i ∈ J0, ms K, on a ai ∈ Fq , c’est-à-dire aqi = ai . Il suffit en fait
de montrer Mαs (X)q = Mαs (X q ) puisque
Xms q X ms ms
X ms
X
Mαs (X)q = ai X i = aqi X qi et Mαs (X q ) = ai (X q )i = ai X qi .
i=0 i=0 i=0 i=0

Alors on trouve
Y
Mαs (X)q = (X − αi )q
i∈Cs
Y
= (X q − αiq )
i∈Cs
Y
= (X q − αiq mod n
) (car αn = 1)
i∈Cs

Codes cycliques – Chapitre 3 17


3.4. POLYNÔMES MINIMAUX ET FACTORISATION DE X N − 1 SUR FQ

Y
= (X q − αj ) = Mαs (X q ).
j∈Cs

Ceci conclut que Mαs (X) ∈ Fq [X].


Montrons maintenant que le polynôme Mαs (X) est irréductible sur Fq . Soit f ∈ Fq [X] un
polynôme irréductible unitaire divisant Mαs (X) tel que f (αs ) = 0. Alors on trouve f (αs )q = 0,
donc f (αsq ) = 0. En itérant ce calcul, on obtient
ms −1
f (αs ) = f (αsq ) = · · · = f (αsq ),
donc Mαs (X) | f (X). D’où f (X) = Mαs (X). Ceci montre que le polynôme Mαs (X) est irréductible
sur Fq . 

Corollaire 3.8. Le polynôme X n − 1 se factorise sur Fq sous la forme


Y
Xn − 1 = Mαs (X).
s

. Exemple. Factorisons le polynôme X 7 + 1 sur F2 . Le plus petit entier m ∈ N tel que 7 | 2m − 1


est m = 3. On se place alors sur le corps
F23 ' F2 [X]/hX 3 + X + 1i.
Soit α ∈ F23 un élément tel que α3 + α + 1 = 0. Comme α7 = 1 et l’entier 7 est premier, l’élément
α est une racine primitive septième de l’unité. De plus, on a trois classes cyclotomiques modulo 7
C0 = {0}, C1 = {1, 2, 4} et C3 := {3, 6, 5}.
On obtient alors la factorisation
X 7 + 1 = (X − α0 ) × (X − α)(X − α2 )(X − α4 )) × [(X − α3 )(X − α5 )(X − α6 )
= (X + 1) × (X 3 + X + 1) × (X 3 + X 2 + 1).

18 Codes cycliques – Chapitre 3


Chapitre 4
Codes BCH
4.1 Une famille de codes 2-correcteurs d’erreurs . . 19 4.2 Définition et propriétés . . . . . . . . . . . . . . . 20
4.1.1 Un premier code . . . . . . . . . . . . . . . . 19 4.3 Algorithme de décodage des codes BCH . . . . 21
4.1.2 Un second code . . . . . . . . . . . . . . . . . 19

4.1 Une famille de codes 2-correcteurs d’erreurs


4.1.1 Un premier code
Soient r ∈ N∗ et n := 2r − 1. Soit α ∈ F2r une racine primitive n-ième de l’unité. Soit C le code
binaire de longueur n et de matrice de contrôle
H := (H0 ··· Hn−1 ) ∈ Mr,n (F2 )
où, pour tout indice i ∈ J0, nK, la i-colonne Hi est le vecteur des coordonnées de l’élément αi dans
la base (1, α, . . . , αr−1 ). Caractérisons les mots de ce code. Soit c := (c0 , . . . , cn−1 ) ∈ Fn2 . Alors
c∈C ⇐⇒ H tc = 0
⇐⇒ c0 H0 + · · · + cn−1 Hn−1 = 0
⇐⇒ c0 α0 + · · · + cn−1 αn−1 = 0
⇐⇒ c(α) = 0
n−1
⇐⇒ c(α) = c(α2 ) = · · · = c(α2 )=0
⇐⇒ Mα (X) | c(X)
où les polynômes c(X) et Mα (X) ont été définis dans le chapitre précédent. Ainsi le code C est le
code cyclique binaire de longueur n et de polynôme générateur P (X) := Mα (X).
Voyons un algorithme de décodage. Soit y = c + e avec c(X) = m(X)P (X) et wH (e) 6 1. Cette
dernière condition dit que le polynôme e(X) est soit nul soit égale à un monôme X j . Avec notre
caractérisation, on a ®
0 si e = 0,
y(α) = e(α) = j
α sinon.
On peut alors en déduire un algorithme.

Entrée : un mot y = c + e avec c(X) = m(X)P (X) et wH (e) 6 1


Sortie : le polynôme m(X)
S ←− y(α)
Si s = 0, alors
Rendre y(X)/P (X)
Sinon
Déterminer l’indice j ∈ J0, n − 1K tel que S = αj
Rendre (y(X) − X j )/P (X).

4.1.2 Un second code


Soit C le code cyclique binaire de longueur n et de polynôme générateur G(X) := Mα (X)Mα3 (X).
Autrement dit, pour un mot c ∈ Fn2 , on a
c∈C ⇐⇒ c(α) = c(α3 ) = 0.
Trouvons également un algorithme de décodage. Soit y = c+e avec c(X) = m(X)G(X) et wH (e) 6 2.
En procédant identiquement, on obtient
S1 := y(α) = e(α) et S3 := y(α3 ) = e(α3 ).
On distingue maintenant trois cas.

Codes BCH – Chapitre 4 19


4.2. DÉFINITION ET PROPRIÉTÉS

– Si wH (e) = 0, alors S1 = S3 = 0.
– Si wH (e) = 1, alors on peut écrire e(X) = X j et on a S1 = αj et S3 = α3j = S13 .
– On suppose désormais wH (e) = 2. On peut écrire e(X) = X i + X j avec i 6= j. Alors S1 = αi + αj
et S3 = α3i + α3j . Comme on est en caractéristique deux, on a
S13 = α3i + α2i αj + αi α2j = α3j
= S3 + αi αj S1 .
En notant σ(Z) := Z 2 + S1 Z + (S13 + S3 )/S1 ∈ F2r [Z], on a σ(αi ) = σ(αj ) = 0.
On en déduit l’algorithme

Entrée : un mot y = c + e avec c(X) = m(X)P (X) et wH (e) 6 1


Sortie : le polynôme m(X)
S1 ←− y(α)
S3 ←− y(α3 )
Si S1 = S3 = 0, alors
Rendre y(X)/G(X)
Si S3 = S13 , alors
Déterminer l’indice j ∈ J0, n − 1K tel que S1 = αj
Rendre (y(X) − X j )/G(X)
Sinon
σ(Z) ←− Z 2 + S1 Z + (S13 + S3 )/S1
Déterminer les indices i, j ∈ J0, n − 1K avec i 6= j tels que σ(αi ) = σ(αj ) = 0
Rendre (y(X) − X i − X j )/G(X).

 Remarque. En fait, les polynômes P (X) et G(X) n’ont pas été choisis au hasard : ils vérifient
P (X) = Mα (X) = ppcm(Mα (X), Mα2 (X)),
G(X) = Mα (X)Mα3 (X) = ppcm(Mα (X), Mα2 (X), Mα3 (X), Mα4 (X)).

4.2 Définition et propriétés


Définition 4.1. Soit q une puissance d’un nombre premier. Soit n ∈ N∗ . On suppose pgcd(q, n) = 1.
Soit m l’ordre multiplicatif de q modulo n. Soit α ∈ Fqm un élément d’ordre multiplicatif m. Soient
b ∈ N et δ ∈ J2, nK. Le code BCH de longueur n sur Fq , associé à α et b, de distance prescrite δ est
le code cyclique de longueur n sur Fq de polynôme générateur
ppcm(Mαb (X), . . . , Mαb+δ−2 (X)) ∈ Fq [X].
Si b = 1, on dit que ce code est strict. Si n = q m − 1, on dit que ce code est primitif.

. Exemple. On considère les codes BCH stricts primitifs binaires de longueur 15. Pour cela, on
construit d’abord le corps F24 comme
F24 ' F2 [X]/hX 4 + X + 1i.
Soit α ∈ F24 le classe X dans F24 . On vérifie qu’il s’agit bien d’une racine primitive quinzième
de l’unité. On cherche les codes BCH stricts primitifs binaires associé à la racine α et de distance
prescrite δ.
– Si δ = 2, alors le polynôme générateur est g := Mα .
– Si δ = 3, alors g = ppcm(Mα , Mα2 ) = Mα .
– Si δ = 4, alors g = ppcm(Mα , Mα2 , Mα3 ). On calcule le polynôme Mα3 . Les 2-classes cycloto-
miques modulo 15 sont
C(0) = {0},
C(1) = {1, 2, 4, 8},
C(3) = {3, 6, 12, 9},
C(5) = {5, 10},

20 Codes BCH – Chapitre 4


4.3. ALGORITHME DE DÉCODAGE DES CODES BCH

C(7) = {7, 14, 13, 11}.


On en déduit
Mα0 = X + 1,
Mα1 = X 4 + X + 1,
Mα3 = X 4 + X 3 + X 2 + X + 1,
Mα5 = X 2 + X + 1,
Mα7 = X 4 + X 3 + 1.
Finalement, on trouve g = (X 4 + X + 1)(X 4 + X 3 + X 2 + X + 1).
– Si δ ∈ {6, 7}, alors g = (X 4 + X + 1)(X 4 + X 3 + X 2 + X + 1)(X 2 + X + 1).
– Si δ ∈ {8, . . . , 15}, alors g = X 14 + · · · + X + 1.

Théorème 4.2 (de la borne BCH). Un code BCH de distance prescrite δ est de distance minimale
supérieure ou égale à δ.

Preuve Raisonnons par l’absurde et supposons que le code possède un mot c de poids w ∈ J1, δ −1K.
Notons
c(X) = ca1 X a1 + · · · + caw X aw .
On sait que c(αb ) = · · · = c(αb+δ−2 ) = 0, donc c(αb ) = · · · = c(αb+w−1 ) = 0. Sous forme matricielle,
ces dernières égalités s’écrivent
αba1 αbaw
á ëá ë
··· ca1
α(b+1)a1 ··· α(b+1)aw ca2
.. .. .. .. = 0.
. . . .
α(b+w−1)a1 ... α(b+w−1)aw caw
ai
Pour i ∈ J1, wK, on note ρi := α . Alors
á ë á ëá b ë
ca1 1 ··· 1 ρ1
ca2 ρ1 ··· ρw ρb2
A .. =0 avec A := .. .. .. .. .
. . . . .
caw ρw−1
1 ... ρw−1
w ρbw
Or les éléments ρi sont tous non nuls, donc la matrice A est inversible ce qui conduit à avoir c = 0.
Ceci étant impossible par hypothèse, le code ne possède pas de mots de poids inférieur strictement
à la distance prescrite δ. 

4.3 Algorithme de décodage des codes BCH


Soit C un code BCH strict sur Fq , de longueur n, de distance prescrite δ := 2t + 1 et associé à
une racine primitive n-ième α ∈ Fqm de l’unité. C’est le code cyclique de longueur n généré par le
polynôme
g := ppcm(Mα (X), . . . , Mα2t (X)) ∈ Fq [X].
Soit y := mg + e avec m, e ∈ Fq [X], deg m + deg g < n, deg e < n et r := wH (e) 6 t. On cherche le
mot m tout en connaissant le mot y. Notons
r
X
e= Yj xij avec 0 6 i1 < · · · < ir 6 n − 1 et Yj ∈ F× q .
j=1

Définition 4.3. Le polynôme syndrome associé au mot y est


2t
X
S(z) := Sj z j−1 ∈ Fqm [z]
j=1

Codes BCH – Chapitre 4 21


4.3. ALGORITHME DE DÉCODAGE DES CODES BCH

où Sj := y(αj ) pour tout j ∈ J1, 2tK. Le polynôme localisateur d’erreurs est


r
Y
σ(z) := (1 − Xj z).
j=1

On remarque qu’il est de degré inférieur à égal à la capacité de correction t. Le polynôme évaluateur
d’erreurs est
r
X σ(z)
w(z) := Xi Yi .
i=1
1 − Xi z

Théorème 4.4 (équation clé). On a


S(z)σ(z) ≡ w(z) mod z 2t .

Preuve On a
X r
2t X 
S(z)σ(z) = σ(z) Yi Xij z j−1
j=1 i=1
r
X 2t
X
= Xi Yi (Xi z)j−1 σ(z).
i=1 j=1

Or
2t
X
(1 − Xi z) (Xi z)j−1 ≡ 1 mod z 2t .
j=1

On en déduit
r
X σ(z)
S(z)σ(z) ≡ Xi Yi mod z 2t
i=1
1 − Xi z
≡ w(z) mod z 2t . 

L’idée de l’algorithme est d’utiliser l’algorithme d’Euclide étendu pour trouver une identité de
Bézout, celle apparaissant dans l’équation clé.

Théorème 4.5 (algorithme d’Euclide étendu). Soient a, b ∈ Fqm [z] deux polynômes non tous nuls.
On considère les suites (ri )i∈N , (ui )i∈N et (vi )i∈N de Fqm [z] telles que
– on ait (r0 , r1 , u0 , u1 , v0 , v1 ) = (a, b, 1, 0, 0, 1) ;
– pour tout i ∈ N, si ri 6= 0,
◦ le polynôme ri+1 est le reste de la division euclidienne de ri−1 par ri ;
◦ on ait ui+1 = ui−1 − qui et vi+1 = vi−1 − qvi où le polynôme q est le reste.
Soit N ∈ N le plus petit entier tel que rN +1 = 0. Alors
– rN = pgcd(a, b) ;
– pour tout i ∈ J0, N + 1K, on a ri = aui + bvi ;
– pour tout i ∈ J0, N + 1K, on a deg vi = deg a − deg ri−1 ;
– pour tout i ∈ J0, N + 1K, les polynômes ui et vi sont premiers entre eux.

Preuve On l’admet. 
Théorème 4.6. On considère les suites (ri )i∈N , (ui )i∈N et (vi )i∈N de Fqm [z] associées aux
polynômes z 2t et S(z). Soit j ∈ N un entier tel que deg rj−1 > t et deg rj < t. Alors
vj (z) rj (z)
σ(z) = et w(z) = .
vj (0) vj (0)

Preuve Grâce au précédent théorème, on trouve


rj (z) = z 2t uj (z) + S(z)vj (z),

22 Codes BCH – Chapitre 4


4.3. ALGORITHME DE DÉCODAGE DES CODES BCH

w(z) = z 2t λ(z) + S(z)σ(z) avec λ ∈ Fqm [z].


Une combinaison linéaire donne alors
rj (z)σ(z) − vj (z)w(z) = z 2t (uj (z)σ(z) − λ(z)vj (z)).
On sait que
deg rj < t, deg σ 6 t et deg w < t.
De plus, ce même théorème donne deg vj = deg z t − deg rj−1 6 t. Par conséquent, le polynôme z 2t
divise le polynôme rj (z)σ(z) − vj (z)w(z) qui est de degré strictement inférieur à 2t. On en déduit
rj (z)σ(z) − vj (z)w(z) = 0 et uj (z)σ(z) − λ(z)vj (z) = 0. (∗)
Ceci donne σ(z) | vj (z)w(z). Or on remarque que les polynômes σ(z) et w(z) sont premiers entre
eux, donc le lemme de Gauss implique σ(z) | vj (z). De même, grâce à la seconde égalité (∗), on
trouve vj (z) | σ(z). On peut alors trouver un élément µ ∈ Fqm tel que σ(z) = µvj (z). Or σ(0) = 1,
donc µ = 1/vj (0). Avec les égalités (∗), on trouve également w(z) = rj (z)/vj (0). ce qui conclut. 

On peut à présent donner un algorithme de décodage basé sur ce théorème.

Entrée : des polynômes y et g, une racine α et un entier t avec y = mg + e et wH (e) 6 t


Sortie : le polynôme m
Si ←− y(αi ) pour i ∈ J1, 2tK
S ←− 2t i−1
P
i=1 Si z
Déterminer les polynômes σ et w solutions de l’équation clé avec l’algorithme d’Euclide étendu
Calculer les entiers i1 , . . . , ir ∈ J0, n − 1K tels que σ(α−ij ) = 0 pour tout j ∈ J1, rK
P les éléments Y1 , . . . , Yr à l’aide du polynôme w
Calculer
e ←− rj=1 Yj X ij
c ←− y − e
Retourner c/g

. Exemple. On considère un code BCH strict de longueur 15, de distance prescrite 5, binaire et
associé à une racine primitive quinzième α ∈ F24 de l’unité définie par la relation α4 + α3 + 1 = 0.
Son polynôme générateur est
g := ppcm(Mα , Mα2 , Mα3 , Mα4 ).
Comme on est en caractéristique deux, les trois polynômes Mα , Mα2 et Mα4 sont tous égaux au
polynôme X 4 + X 3 + 1. De plus, l’élément α3 est une racine du polynôme
X 5 − 1 = (X − 1)(X 4 + X 3 + X 2 + X + 1).
Comme α3 6= 1, on en déduit Mα3 = X 4 + X 3 + X 2 + X + 1. D’où
g = (X 4 + X 3 + 1)(X 4 + X 3 + X 2 + X + 1).
On considère le mot reçu
y := X 12 + X 11 + X 8 + X 7 + X 6 + X 5 + X 4 + 1.
On peut l’écrire sous la forme y = mg + e avec wH (e) 6 2 et deg m < 7.
Appliquons le premier algorithme de décodage trouvé (cf. page 19), spécifique au cas t = 2. On
calcul S1 := y(α) = α5 et S3 := y(α3 ) = α13 . Le polynôme
S3 + S13
P (z) := z 2 + S1 z + = z 2 + α5 z + α2
S1
admet les éléments α8 et α9 pour racines. On en déduit e = X 8 + X 9 .

Codes BCH – Chapitre 4 23


Chapitre 5
Codes de Goppa
5.1 Définition et matrice de contrôle . . . . . . . . . 24 5.3 Algorithme de décodage . . . . . . . . . . . . . . 27
5.2 Distance minimale et dimension . . . . . . . . . 25

5.1 Définition et matrice de contrôle


Soient n, m ∈ N∗ et q une puissance d’un nombre premier.

Définition 5.1. Soit L := (γ0 , . . . , γn−1 ) ∈ Fnqm un n-uplet tel que les éléments γi soient distincts
deux à deux. Soit g ∈ Fqm [z] un polynôme tel que g(γi ) 6= 0 pour tout i ∈ J0, n − 1K. Le code de
Goppa de support L et de polynôme de Goppa g est l’ensemble
n−1
n X 1 o
Γ(L, g) := (c0 , . . . , cn−1 ) ∈ Fnq ci ≡ 0 mod g .
i=0
z − γi

. Exemple. Soit α ∈ F23 tel que α3 + α + 1 = 0. Les coordonnées du vecteur L := (1, α, α2 , α4 )


sont deux à deux distinctes. On considère le polynôme g := z − α3 . Pour tout i ∈ {0, 1, 2, 4}, on a
1
g(z) = z − αi + g(αi ), donc (z − αi ) ≡ 0 mod g.
g(αi )
On en déduit que les inverses des polynômes z − αi modulo g sont
z − 1 ←→ α6 car g(1) = α,
z − α ←→ 1 car g(α) = 1,
2 2
z − α ←→ α car g(α2 ) = α5 ,
z − α3 ←→ α car g(α6 ) = α6 .
Pour tout mot c := (c0 , c1 , c2 , c3 ) ∈ F42 , on obtient alors
c ∈ Γ(L, g) ⇐⇒ c0 α6 + c1 + c2 α2 + c3 α = 0.

Théorème 5.2. On a
Γ(L, g) = {c ∈ Fnq | H̃ tc = 0}
où H̃ := V D ∈ Mr,m (Fqm ) avec r := deg G et
á ë
1 ··· 1
γ0 · · · γn−1
V := .. .. .. et D := diag(1/g(γ0 ), . . . , 1/g(γn−1 )).
. . .
γ0r−1 · · · γn−1
r−1

Autrement dit, on a
Γ(L, g) = GRSn,n−r (L, (1/g(γ0 ), . . . , 1/g(γn−1 ))) ∩ Fnq .

Preuve Soit c := (c0 , . . . , cn−1 ) ∈ Fnq . Pour tout i ∈ J0, n − 1K, on a


g(z) − g(γi )
(z − γi ) ≡ −g(γi ) mod g,
z − γi
donc
n−1
X 1
c ∈ Γ(L, g) ⇐⇒ ci ≡0 mod g
i=0
z − γi

24 Codes de Goppa – Chapitre 5


5.2. DISTANCE MINIMALE ET DIMENSION

n−1
X g(z) − g(γi )
⇐⇒ ci hi ≡0 mod g avec hi := 1/g(γi )
i=0
z − γi
| {z }
deg<deg g
n−1
X g(z) − g(γj )
⇐⇒ cj hj = 0.
j=0
z − γj

Notons le polynôme g sous la forme g = rk=0 gk z k avec gr 6= 0. Pour tout j ∈ J0, n − 1K, on a
P
r
g(z) − g(γj ) X z k − γjk
= gk
z − γj z − γj
k=0
r
X k−1
X
= gk z i γik−1−i
k=0 i=0
r−1 X
X r 
= gk γjk−1−i z i .
i=0 k=i+1
Il vient alors que
n−1
X n−1
Xh r
X i 
c ∈ Γ(L, g) ⇐⇒ gk γjk−1−i hj cj z i = 0
i=0 j=0 k=i+1
n−1
X hr−1−i
X i
⇐⇒ ∀i ∈ J0, r − 1K, gk+i+1 γjk hj cj = 0.
j=0 k=0
Remarquons que le terme
r−1−i
X
gk+i+1 γjk
k=0
est le coefficient (i, j) de la matrice
à íá
gr 0 ··· ··· 0 1 ··· 1
ë
.. .. γ0 ··· γn−1
gr−1 gr . .
G := .. .. .. .. ..
.. .. .. . . .
. . . . .
g0 ··· gr−1 gr 0 γ0r−1 ··· r−1
γn−1
de telle sorte que
c ∈ Γ(L, g) ⇐⇒ GV D tc = 0.
Or gr 6= 0, donc la matrice est inversible et on a bien
c ∈ Γ(L, g) ⇐⇒ H tc = 0. 

. Exemple. Reprenons l’exemple précédent. En posant


V = (1 1 1 1) et D := diag(α6 , 1, α2 , α),
une matrice de contrôle du code Γ(L, g) est la matrice V D.

5.2 Distance minimale et dimension


Théorème 5.3. Le distance minimale d ∈ N∗ du code Γ(L, g) vérifie
d>r+1 avec r := deg g.

Preuve Le théorème précédent nous donne


Γ(L, g) = GRSn,n−r ((γ0 , . . . , γn−1 ), (h0 , . . . , hn−1 )) ∩ Fnq
où le code GRS, noté C, apparaissant est du type [n, n − r, r + 1]q . Comme Γ(L, g) ⊂ C, on obtient
la conclusion. 

Codes de Goppa – Chapitre 5 25


5.2. DISTANCE MINIMALE ET DIMENSION

Théorème 5.4. Le dimension du code k ∈ N∗ du code Γ(L, g) vérifie


k > n − rm.

Preuve Reprenons sa matrice de contrôle H̃ ∈ Mr,n (Fqm ). Elle est de rang r. Notons
H̃ = (H̃i,j )06i6r−1,06j6n−1 .
Soit c := (c0 , . . . , cn−1 ) ∈ Fnq . Alors
n−1
X
c ∈ Γ(L, g) ⇐⇒ ∀i ∈ J0, r − 1K, H̃i,j cj = 0.
j=0

Soit (β0 , . . . , βm−1 ) une base du Fq -espace vectoriel Fqn . Pour tous i ∈ J0, r − 1K et j ∈ J0, n − 1K,
on écrit
m−1
X
H̃i,j = H̃i,j,` β` .
`=0

On peut donc écrire


m−1
X n−1
X 
c ∈ Γ(L, j) ⇐⇒ ∀i ∈ J0, r − 1K, H̃i,j,` cj β` = 0
`=0 j=0
n−1
X
⇐⇒ ∀i ∈ J0, r − 1K, ∀` ∈ J0, m − 1K, H̃i,j,` cj = 0.
j=0

Définissons la matrice par blocs


Ö è
(H̃0,j,` )06j6n−1,06`6m−1
H := .. ∈ Mmr,n (Fq ).
.
(H̃r−1,j,` )06j6n−1,06`6m−1 .
de telle sorte que
c ∈ Γ(L, g) ⇐⇒ H tc = 0.
Comme rg H 6 mr, le théorème est montré. 

. Exemple. On reprend l’exemple précédent. Une matrice de contrôle du code Γ(L, g) est la matrice
H̃ := (α6 1 α2 α).
La famille (1, α, α2 ) est une base du F2 -espace vectoriel F23 . Soit c := (c0 , c1 , c2 , c3 ) ∈ F42 . Alors
c ∈ Γ(L, g) ⇐⇒ c0 α6 + c1 + c2 α2 + c3 α = 0
⇐⇒ c0 (1 + α2 ) + c1 + c2 α2 + c3 α = 0
⇐⇒ (c0 + c1 ) + c3 α + (c0 + c2 )α2 = 0

c0 + c1 = 0,

⇐⇒ c3 = 0,

c0 + c2 = 0

Ü ê
Ñ é c0
1 1 0 0
c1
⇐⇒ 0 0 0 1 =0
c2
1 0 1 0
c3
Remarquons que les colonnes de cette dernière matrice sont respectivement les coordonnées des
vecteurs α6 , 1, α2 et α. Finalement, on trouve
Γ(L, g) = {(0, 0, 0, 0), (1, 1, 1, 0)}.

Proposition 5.5. On se place dans le cas q = 2 et on suppose que le polynôme est sans facteur

26 Codes de Goppa – Chapitre 5


5.3. ALGORITHME DE DÉCODAGE

carré dans F2m [z] et de degré r. Alors la distance minimale d ∈ N∗ du code Γ(L, g) vérifie
d > 2r + 1.

Preuve Il suffit de montrer que Γ(L, g) = Γ(L, g 2 ) et d’appliquer le théorème. Comme g | g 2 , on


peut écrire Γ(L, g 2 ) ⊂ Γ(L, g). Montrons l’inclusion réciproque. Soit c := (c0 , . . . , cn−1 ) ∈ Γ(L, g).
Alors
n−1
X 1
ci ≡ 0 mod g.
i=0
z − γi
On pose Y
f := (z − γi ).
ci 6=0

En multipliant la dernière égalité par ce polynôme, on trouve


X f
≡ 0 mod g,
z − γi
ci 6=0

donc f ≡ 0 mod g. La réciproque est également vraie. Cela implique g | f 0 . Écrivons


0

d
X
f= ai z i .
i=0
En le dérivant, on obtient X
f0 = a2j+1 z 2j .
062j+16d

Comme on travaille dans le corps F2m , on a


X m
f0 = a22j+1 z 2j
062j+16d
 X m−1
2
= a22j+1 z j .
062j+16d

Ainsi le polynôme f 0 est un carré d’un polynôme et il est divisible par le polynôme g qui est
sans facteur carré. Par conséquent, on a g 2 | f 0 , donc c ∈ Γ(L, g 2 ) grâce à l’équivalence montrée
précédemment. D’où Γ(L, g) = Γ(L, g 2 ). Comme deg g 2 = 2r, il ne reste plus qu’à utiliser le
théorème précédent. 

5.3 Algorithme de décodage


Soient L := (γ0 , . . . , γn−1 ) ∈ Fnqm un n-uplet d’éléments deux à deux distincts et g ∈ Fqm [z]
un polynôme ne s’annulant sur aucun élément γi . On note r := deg g. On souhaite déterminer un
algorithme de décodage pour le code
Γ(L, g) = GRSn,n−r (L, (1/g(γ0 ), . . . , 1/g(γn−1 ))) ∩ Fnq .
On note k ∈ N sa dimension. Soient m ∈ Fkq un mot, G une matrice génératrice du code et e ∈ Fnq
un mot tel que wH (e) 6 br/2c. On considère le mot
y := mG + e = (y0 , . . . , yn−1 ).
Notons
– le polynôme syndrome du mot y
n−1
X yi
S := mod g ;
i=0
z − γi

– le polynôme localisateur d’erreurs


Y
σ := (z − γi ) avec I := {i ∈ J1, nK | ei 6= 0} ;
i∈I

Codes de Goppa – Chapitre 5 27


5.3. ALGORITHME DE DÉCODAGE

– le polynôme évaluateur d’erreurs


X Y X σ
w := ei (z − γj ) = ei .
z − γi
i∈I j∈I i∈I
j6=i

Proposition 5.6. On a
deg σ 6 t := br/2c et deg w < t.
De plus, pour tout indice i ∈ I, on a
Y
w(γi ) = ei (γi − γj ).
j6=i

En particulier, les polynômes σ et w sont premiers entre eux.

Théorème 5.7 (équation clef). Ces polynômes vérifient


Sσ ≡ w mod g.

Preuve On calcul
n−1
X yi
Sσ ≡ σ mod g
i=0
z − γi
n−1
X ci X ei  n−1
≡ + σ mod g
i=0
z − γi i=0
z − γi
X ei
≡ σ mod g car c ∈ Γ(L, g)
z − γi
i∈I
≡w mod g. 
Comme pour les codes GRS, on peut en déduire un algorithme de décodage utilisant l’équation
clef et l’algorithme d’Euclide étendu.

28 Codes de Goppa – Chapitre 5


Chapitre 6
Cryptosystème de McEliece
6.1 Cryptosystème à clef publique . . . . . . . . . . 29 6.3 Exemple . . . . . . . . . . . . . . . . . . . . . . . . 29
6.2 Cryptosystème de McEliece . . . . . . . . . . . . 29

6.1 Cryptosystème à clef publique


On considère un envoyeur Alice et un destinateur Bob. On va supposer que le canal de
transmission est parfait. Cependant, Charles peut écouter le canal. On souhaite alors crypter les
messages de telle sorte que Charles ne puissent pas intercepté les messages.

Définition 6.1. Un cryptosystème est un 5-uplet (P, C, K, E, D) où


– l’élément P est un ensemble, appelé l’espaces des messages en clair ;
– l’élément C est un ensemble, appelé l’espaces des messages chiffrés ;
– l’élément K est un ensemble, appelé l’espaces des clefs ;
– l’élément E est une famille d’applications Ek : C → C indicée par l’ensemble K, appelées les
fonctions de chiffrement ;
– l’élément D est une famille d’applications Dk : C → P indicée par l’ensemble K, appelées les
fonctions de déchiffrement.

Étant donné un cryptosystème, à chaque clef e ∈ K est associée une clef d ∈ K telle que
∀m ∈ P, Dd (Ee (m)) = m.
L’utilisation des cryptosystèmes se déroulent entre quatre étapes :
– la construction des clefs ;
– le chiffrement : on transforme un message m en le message c := Ee (m) ;
– le déchiffrement : on transforme le message c en le message Dd (c) = m ;
– la vérification de la sécurité.

6.2 Cryptosystème de McEliece


Génération des clefs. Soit C un code [n, k, d]q de matrice génératrice G décodant jusqu’à
t erreurs en temps polynomial. Soient S ∈ GLk (Fq ) une matrice inversible et P ∈ Mn (Fq ) une
matrice de permutation. Notons
G0 := SGP ∈ Mk,n (Fq ).
Cette matrice G0 sera appelée la clef publique et le triplet (G, S, P ) sera appelé la clef privée.

Chiffrement. Soit m ∈ Fkq un mot représentant le message en clair. On lui associe le crypto-
gramme c := mG0 + e avec wH (e) 6 t.

Déchiffrement. On calcul alors cP −1 = (mS)G + eP −1 où le mot (ms)G est dans le code C et


le mot eP −1 est de poids wH (e). On décode ainsi le mot y := cP −1 dans le code C et on retrouve
le mot mS, puis le mot S puisque la matrice S est connue du destinataire.

 Remarque. Dans la pratique, on utilisera un code de Goppa irréductible

6.3 Exemple
Soit a ∈ F23 un élément tel que a3 = a+1. Considérons le code C := Γ(L, z) avec L := (a, . . . , a7 ).
Ce code est l’ensemble des mots c ∈ F72 tels que H tc = 0 avec H̃ := V D où
V = (1 1 1 1 1 1 1) et D := diag(a6 , a5 , a4 , a3 , a2 , a, 1).

Cryptosystème de McEliece – Chapitre 6 29


6.3. EXEMPLE

Autrement dit, on a
H̃ = (a6 a5 a4 a3 a2 a 1).
On écrit maintenant les éléments ai dans la base (1, a, a2 ) pour obtenir la matrice de contrôle
Ñ é
1 1 1 0 1 0 0
H := 0 1 1 1 0 1 0 .
1 1 0 1 0 0 1
On en déduit une matrice génératrice
Ü ê
1 0 0 0 1 0 1
0 1 0 0 1 1 1
G= .
0 0 1 0 1 1 0
0 0 0 1 0 1 1
On considère maintenant les matrices
Ü ê
1 0 0 1
1 1 0 1
S := ∈ GL4 (F2 ) et P := (2 6 1 7 3 4 5).
0 1 0 1
1 1 1 0
On calcule alors la matrice
Ü ê
0 1 1 0 0 1 1
1 0 1 1 0 1 0
G0 := SGP = .
1 0 0 0 0 1 1
1 0 1 0 1 0 1
La distance minimale du code C est supérieur à 1 + 2 deg z = 3 puisque le polynôme z est sans
facteur carré et le code est binaire.
On considère le mot m := (1, 0, 1, 1). Pour l’erreur e := (0, 0, 0, 0, 1, 0, 0), le cryptogramme vaut
c := mG0 + e = (0, 1, 0, 0, 0, 0, 1).
On calcul le mot y := cP −1 = (0, 0, 0, 0, 1, 1, 0). Décodons-le avec l’algorithme d’Euclide étendu.
Son syndrome vaut
6
X yi
S= mod z 2
i=0
z − ai
1 1
= 5
+ mod z 2
z−a z − a6
z 2 − a10 1 z 2 − a12 1
= +
z − a5 a10 z − a6 a12
= (z + a )a + (z + a6 )a2
5 4

= az + a4 .
Appliquons l’algorithme d’Euclide étendu aux polynômes z 2 et S. On a successivement
z 2 = z 2 × 1 + S × 0,
S = z 2 × 0 + S × 1,
a6 = z 2 × 1 + S × (a6 z + a2 )
de telle sorte que
S × (z + a3 ) ≡ 1 mod z 2 .
Le polynôme localisateur d’erreur est σ := z + a3 . Comme σ(a3 ) = 0, on en déduit
eP −1 = (0, 0, 1, 0, 0, 0, 0).
Comme y = (mS)G + eP −1 , on en déduit (mS)G = (0, 0, 1, 0, 1, 1, 0), donc mS = (0, 0, 1, 0) et on
retrouve bien le mot m.

30 Cryptosystème de McEliece – Chapitre 6


6.3. EXEMPLE

Pour l’attaquant, il est facile de retrouver le mot m à partir du mot intercepté c. En effet, on
calcul une matrice de contrôle associé à la matrice G0 qui est
Ñ é
0 1 1 1 1 0 0
H 0 := 1 0 1 1 0 1 0 .
1 1 0 1 0 0 1
On trouve H 0 tc = (1, 0, 0), donc l’erreur est en position 5.

Cryptosystème de McEliece – Chapitre 6 31

Vous aimerez peut-être aussi