Coco
Coco
Coco
Delphine Boucher
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.
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).
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 .
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.
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
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.
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.
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.
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.
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.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
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.
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 .
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 }
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.
– 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.
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 .
Algorithme de décodage
On peut alors exhiber l’algorithme suivant qui repose sur ce théorème.
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.
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.
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.
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.
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
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).
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 .
. 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
– 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.
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).
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.
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
Y
= (X q − αj ) = Mαs (X q ).
j∈Cs
– 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
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)).
. 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},
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 δ.
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
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)
. 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 .
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
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 .
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.
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
. 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
carré dans F2m [z] et de degré r. Alors la distance minimale d ∈ N∗ du code Γ(L, g) vérifie
d > 2r + 1.
d
X
f= ai z i .
i=0
En le dérivant, on obtient X
f0 = a2j+1 z 2j .
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.
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
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.
É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é.
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.
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).
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.
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.