k
, le décodage au maximum de vraisemblance permet de
retrouver le mot émis.
2.4 Codes linéaires
Les codes linéaires, qui représentent des sous-espaces vectoriels de An, forment la quasi totalité
des codes correcteurs.
On rappelle que l’alphabet A est un corps fini Fq
m. L’ensemble (Fq
m)n est naturellement muni
d’une structure d’espace vectoriel. Le corpsFq
mpeut être pris comme corps des scalaires.
2.4.1 Généralités
Définition 16. Un codeC de longueurnsur l’alphabetA=Fq
mest dit linéairesiCest un
sous-espace vectoriel de An.
La dimension du code notéekest égale à la dimension deCen tant qu’espace vectoriel.
Pour un code linéaire Cde longueur net de dimensionk, on note ses paramètres
[n, k, d]
oùd représente la distance minimale du code telle que définie au paragraphe précédent.2
Proposition 17. Si Cest un code linéaire alorsd= min
x∈C,x=/ 0wH(x).
2.4.2 Bornes sur les paramètres d’un code
Nous redonnons deux bornes importantes sur les paramètres des codes linéaires :
La borne de Gilbert-Varshamov permet de déterminer des paramètres pour lesquels on est sûr
qu’un code linéaire existe :
Proposition 18. Borne de Gilbert-Varshamov :
Il existe un code linéaire de longueur n, de dimensionket de distance minimale �dsur l’alphabet
Fq lorsque l’inégalité suivante est vérifiée :
qn−k−1>X
d−2
i=1
n−1
i
(q−1)i
De la proposition17on déduit la borne de Singleton :
Proposition 19. Borne de Singleton :
Notons |C |le cardinal du code |C |, alors :
|C |�qn−d+1
Dans le cas d’un code linéaire Cde paramètres [n, k, d] on a |C |=qk et ce qui précède implique
d�n−k+ 1
2. Ainsi, lorsque l’on note les paramètres d’un code linéaire, on écrit sa dimensionkau lieu de son cardinalM.
Dans le cas d’un code linéaireM=|A|
k.
Lorsqued=n−k+ 1on dit que le code estparfait ouMDS (Maximum Distance Separable).
2.4.3 Matrice génératrice, matrice de contrôle de parité
Définition 20. Une matrice génératrice deC, notée G, est une matrice àk lignes et ncolonnes
dont les vecteurs lignes forment une base de Cen tant que sous-espace vectoriel de An.
Remarque 21.Un sous ensemble{j1...jk}de{1...n}tel que la matrice carrée formée des colonnes
(cj
1, ..., cjk)est inversible est appelé unensemble d’information.
Si{1...k}est un ensemble d’information on peut se ramener par des opérations sur les lignes à une
matrice de la forme
ncolonnes
G= klignes
1 0 ... 0 × ... ×
0 1 ··· ··· ···
··· ··· 0
0 ··· 0 1 × ... ×
= (Ik | M )
oùM est une matrice de dimensionsk×(n−k).
On dit qu’une telle matrice est sous forme systématique.
Exemple 22. Le code par bit de contrôle de parité de longueurnsurF2est un code linéaire de
paramètres[n, n−1,2]. Il est MDS. Sa matrice génératrice est
1 0 ... 0 1
0 1 ··· 1
··· ··· 0 ···
0 ··· 0 1 1
Définition 23. Soit un code linéaire C[n, k, d].
Une matriceH de dimension (n−k)×nest une matrice de parité pour Csi elle vérifie
C=ker(H)
(On fait l’analogie entre la matrice et l’application linéaire)
Autrement dit pour tout x∈(Fq
m)n on a l’équivalence
x∈C⇔HxT= 0
où0 désigne le vecteur colonne nul à(n−k)composantes.
Proposition 24. Expression de la matrice de parité :
Considérons un code C[n, k, d] dont on donne la matrice génératrice G sous forme systématique
G=(Ik | M)oùM est de dimensionk×(n−k).
Alors la matrice
H=�
−MT | In−k
Exemple 25. Lecode de Hamming Hmest un code linéaire dont on donne la matrice de parité.
Cette matrice notéeHmest constituée des2m−1vecteurs colonnes non nuls de(F2)m. Par exemple
pourm= 3on a
H3=
1 1 0 1 1 0 0
1 0 1 1 0 1 0
0 1 1 1 0 0 1
On a choisi l’ordre des vecteurs colonnes de façon à écrire H3 directement sous la forme H3 =
�
−
tM | I
3. Ceci permet d’écrire la matrice génératrice
G3=
1 0 0 0 1 1 0
0 1 0 0 1 0 1
0 0 1 0 0 1 1
0 0 0 1 1 1 1
= (I4 | M )
Par construction de G3on voit que le codeH3est de longueur7 et de dimension4.
Dans la matriceM on trouve tous les éléments de(F2)3de poids supérieur ou égal à 2 de sorte que
tout vecteur ligne deG3a un poids supérieur ou égal à 3. Si on additionne deux vecteurs lignesvi
etvjdistincts deG3le vecteur résultat a au moins 3 bits égaux à1: les bitsI4i,ietI4j , jet comme
M regroupe des vecteurs lignes distincts de(F2)3il existe au moins un indicektel queMi,k=/Mj ,k
de sorte que Mi,k+Mj ,k= 1. On a trouvé trois bits égaux à 1 donc la distance minimaled est
supérieure ou égale à 3.
Comme il existe des mots de poids 3 on afinalementd= 3.
Le code de Hamming H3est un code surF2de paramètres[7,4,3]. Il est MDS.
On généralise ce résultat pour tout entierm :
Le code de Hamming Hmest un code surF2de paramètres[2m−1,2m−m−1,3].
Remarquons que l’on peut utiliser la matrice de parité pour déterminer l’intersection de deux
sous-espaces vectoriels deAn :
Proposition 26. Soit C1 et C2 deux codes sur An (ce sont donc deux sous-espaces vectoriels
quelconques de An) de matrices de parité respectivesH1etH2. Alors la matriceH=H
1H
2définie
par blocs est une matrice de parité de C1∩C2.
Démonstration. Pour tout vecteur v= (v1, ..., vn)∈An on a H vt=H
1H
2vt= H
1v
tH
2v
t!
. Ce
vecteur est nul si et seulement siH1vTetH2vTsont nuls tous les deux i.e. v∈Ker(H1) =C1∩C2=
Ker(H2). �
2.4.4 Code dual
Soient de vecteursv= (v1, ..., vn)et w= (w1, ..., wn)deAn. On définit sur Anla forme bilinéaire
symétrique suivante :
<.|.>:
An× An → A
(v,w) 7→ <v|w>=X
n
j=1
vjwj
On appellera produit scalaire surAncette forme bilinéaire. On fait ainsi un léger abus de langage
car le caractère défini n’est pas vérifié, il existe des vecteurs v=/ 0A
ntels que<v|v�0. De tels
vecteur sont ditsisotropes.
Généralisant la définition usuelle, on dit que vet w sontorthogonaux pour ce produit scalaire si
<v|w>=0.
On en déduit la définition decode dual :
Définition 27. Soit C un code (linéaire) de An, le code dualde C, notéC⊥, est l’ensemble des
éléments de An orthogonaux à tous les éléments deC.
C⊥={w∈An;∀v∈C, <v|w>=0}
On vérifie queC⊥ est aussi un code linéaire, plus précisément :
Proposition 28. SoitCun code linéaire de paramètres[k, n]de matrice génératriceGet de matrice
de parité H, alorsC⊥ est un code linéaire de paramètres [n−k, n]de matrice génératrice Het de
matrice de parité G. On a égalementC⊥⊥=C.
Ainsi, pour avoir une matrice génératrice de l’intersection de deux espaces vectoriels C1 et C2,
on peut déterminer une matrice de parité de C1, une matrice de parité de C2, en déduire par
concaténation une matrice de parité deC1∩C2, ce qui donne une matrice génératrice de(C1∩C2)⊥,
dont on reprend à nouveau une matrice de parité qui génère doncC1∩C2.
2.4.5 Exemples d’algorithmes de calcul pour la matrice de parité
Nous nous attardons un peu plus longuement sur les méthodes de calcul des matrices de parité qui
jouent un rôle prépondérant dans les codes que nous introduisons au chapitre VI. Il y a deux cas
où nous avons été amenés à calculer des matrices de parité :
D’une part, mentionnons le cas (fréquent) oùk=n2, pour lequel nous avons le résultat suivant :
Proposition 29. Lorsque k=n2 la matrice génératrice du code peut s’écrire par blocsG= (A|B)
oùA etB sont des matrices carrées de dimensionk.
Si AetB sont inversibles (ce qui se produit dans le contexte où nous en avons besoin au chapitre
VI) alors une matrice de parité du code est donnée par la matrice par blocs suivante :
H=�
−A−1
T|B−1
TDémonstration. La produit par bloc GHT est égal à (−AA−1+BB−1) = (−I+I) = (0) �
L’autre situation où nous avons eu besoin, dans nos travaux, de calculer une matrice de parité,
est une généralisation de la situation présentée dans la proposition (24). Dans la pratique, rien ne
garantit que la matrice Gpuisse s’écrire sous forme systématique G= (I|M). En effectuant des
opérations sur les lignes deG(on reste dans une base de l’espace vectoriel engendré par les lignes
deG) on peut écrire la matrice sous forme échelonnée de la façon suivante :
G=
0 ... 1 0 0 × ... ×
0 ... 0 ... 1 ··· ··· ···
··· 0 ... 1 ... × ... ×
··· 0 ···
··· 0 ... 0
··· ···
0 0 0 0 ... 0
Quitte à enlever les dernières lignes de la matrice on peut supposer que Gest de rangk.
Si l’on notemjles vecteurs colonnes deGnous obtenons l’écriture suivante pourGaprès opérations
sur les lignes :
G=
n
m11 ... m1 (c
1−1) 1c
1m1(c
1+1) ... m1(c
2−1) 0 m1(c
2+1) ... 0 ... m1(n−k)
m21 ··· 0 ··· ··· 1c
2··· ··· ···
··· ··· ··· 0
mk1 mk(c
1−1) 0 mk(c
1+1) mk(c
2−1) 0 mk(c
2+1) 1ck mk(n−k)
k
Leskcolonnes grisées d’indices{c1, ..., ck}(ensemble d’information) sont les colonnes de la matrice
identitéIk.
Nous en déduisons l’expression d’une matrice de parité :
Proposition 30. Avec les notations précédentes pour la matrice G, on définit la matrice H
suivante :
H=
n
1 0 ... m11 ... m21 ... m31 ... 0
··· 1 ··· ··· ··· ···
···
0
0 m1(n−k) m2(n−k) m3(n−k) 1
n−k
c1 ... c2 ... ck
La matriceH ainsi obtenue est une matrice de parité pourG.
Démonstration. Si l’on effectue sur les indices la permutation circulaire
c
1c
2ck 1 2 n−k
↓ ↓ ... ↓ ↓ ↓ ... ↓
1 2 k k+ 1 k+ 2 n
, on voit que dans les coefficients du produitH GTles termes qui
interviennent dans la somme sont exactement les mêmes que dans la proposition (24) mais dans
un ordre différent, ainsiH est bien une matrice de parité pourG. �
On en déduit un l’algorithme suivant pour la génération d’une matrice de parité :
Entrée : La matriceG.
Sortie : Le rang deG, une matriceH de parité pourG.
• On écrit Gsous forme échelonnée. Quitte à enlever des lignes on suppose que G est de
rangk.
• Au fur et à mesure de la mise sous forme échelonnée on relève un ensemble d’information
{c1, ..., ck} pourG(par exemple en construisant itérativement l’entier P
i=1
k
2ck)
• On construit la matriceH de la façon suivante :
− Les colonnesc1, ..., ck de H sont formées des transposées des lignes 1, ..., k de G
auxquelles on a enlevés les coefficients d’indice(i, ci).
Dans le document
Résultants de polynômes de Ore et Cryptosystèmes de McEliece sur des Codes Rang faiblement structurés
(Page 31-36)