30.10.2014 Views

Etude de l'algorithme de Canteaut-Chabaud. - Pages personnelles ...

Etude de l'algorithme de Canteaut-Chabaud. - Pages personnelles ...

Etude de l'algorithme de Canteaut-Chabaud. - Pages personnelles ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Etu<strong>de</strong></strong> <strong>de</strong> l’algorithme <strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong>.<br />

Matthieu Legeay<br />

Octobre 2009<br />

Résumé<br />

1 Introduction<br />

1.1 Généralités sur les co<strong>de</strong>s<br />

Toute l’étu<strong>de</strong> se fera dans le corps fini à q éléments F q .<br />

Soit F n q l’espace vectoriel <strong>de</strong>s n-uplets sur le corps F q .<br />

Un (n, M) co<strong>de</strong> C sur F q est un sous-ensemble <strong>de</strong> F n q <strong>de</strong> taille M. Si C est alors un sous-espace<br />

vectoriel <strong>de</strong> dimension k <strong>de</strong> F n q , on appelle dans ce cas C un [n, k] co<strong>de</strong> linéaire sur F q (on a<br />

d’ailleurs k = log q M).<br />

On écrit généralement les vecteurs <strong>de</strong> F n q comme les mots a 1 a 2 ...a n sur l’alphabet F q et on appelle<br />

les vecteurs <strong>de</strong> C les mots du co<strong>de</strong>.<br />

Il y a <strong>de</strong>ux outils communs qui permettent <strong>de</strong> caractériser un [n, k] co<strong>de</strong> linéaire.<br />

Matrice génératrice : Une matrice génératrice pour un [n, k] co<strong>de</strong> linéaire C est une matrice<br />

G <strong>de</strong> taille k×n dont les lignes forment une base <strong>de</strong> C. On dit que G est sous forme systématique<br />

si G est <strong>de</strong> la forme [Id k |A], où Id k est la matrice i<strong>de</strong>ntité <strong>de</strong> taille k × k.<br />

En appliquent à G les opérations suivantes :<br />

– permutation <strong>de</strong> lignes<br />

– addition d’une ligne avec le multiple scalaire d’une autre<br />

– multiplication d’une ligne par un scalaire non nul <strong>de</strong> F q<br />

on obtient une matrice génératrice du même co<strong>de</strong> C.<br />

En revanche, en appliquant à G les opérations suivantes :<br />

– permutation <strong>de</strong> colonnes<br />

– multiplication d’une colonne par un scalaire non nul <strong>de</strong> F q<br />

on obtient une matrice génératrice d’un co<strong>de</strong> équivalent à C.<br />

Par conséquent, pour tout co<strong>de</strong> linéaire C, on peut toujours trouver un co<strong>de</strong> équivalent C ′ dont<br />

la matrice génératrice est sous forme systématique.<br />

L’application linéaire <strong>de</strong> F k q dans F n q définie par a ↦→ aG est l’opération <strong>de</strong> codage.<br />

Ainsi si G est sous forme systématique et si on veut co<strong>de</strong>r x ∈ F q , on calcule xG = [x, xA] ;<br />

les k premiers bits sont alors les bits d’information et les n−k suivants sont les bits <strong>de</strong> redondance.<br />

1


Matrice <strong>de</strong> parité : Le co<strong>de</strong> dual <strong>de</strong> C est le [n, n − k] co<strong>de</strong> linéaire C ⊥ défini par<br />

C ⊥ = { v ∈ F n q | u · v = 0, ∀u ∈ C } .<br />

Une [n, n − k] matrice génératrice H <strong>de</strong> C ⊥ est appelée matrice <strong>de</strong> parité du co<strong>de</strong> C.<br />

La matrice <strong>de</strong> parité caractérise bien C car on a la relation C = { x ∈ F n q | Hx ⊤ = 0 } .<br />

Si G = [Id k |A] est la matrice génératrice sous forme systématique du co<strong>de</strong> C, alors H =<br />

[−A ⊤ |Id n−k ] est la matrice <strong>de</strong> parité <strong>de</strong> C sous forme systématique.<br />

Un invariant important d’un co<strong>de</strong> est la distance minimale entre les mots du co<strong>de</strong>.<br />

La distance <strong>de</strong> Hamming d(x, y) entre <strong>de</strong>ux vecteurs <strong>de</strong> F n q est le nombre <strong>de</strong> coordonnées où x<br />

et y diffèrent. La distance <strong>de</strong> Hamming est bien une distance.<br />

La distance minimale d’un co<strong>de</strong> C est la plus petite distance <strong>de</strong> Hamming entre <strong>de</strong>s mots <strong>de</strong><br />

co<strong>de</strong> distincts, clairement d(C) = min {d(x, y) , x, y ∈ C , x ≠ y}.<br />

Le poids <strong>de</strong> Hamming d’un vecteur x <strong>de</strong> F n q est le nombre wt(x) <strong>de</strong> coordonnées non nulles. On<br />

a facilement d(x, y) = wt(x − y) et si C est un co<strong>de</strong> linéaire, alors la distance minimale <strong>de</strong> C est<br />

le poids minimum parmi les mots du co<strong>de</strong> non nuls, c’est à dire<br />

d(C) = min {wt(x) , x ∈ C , x ≠ 0} = w(C).<br />

Si la distance/le poids minimal d d’un [n, k] co<strong>de</strong> est connu, on dit que c’est un [n, k, d] co<strong>de</strong>.<br />

Le résultat important est qu’un [n, k, d] co<strong>de</strong> détecte d − 1 erreurs et en corrige e = ⌊ ⌋<br />

d−1<br />

2 .<br />

2


2 Cryptanalyse du système <strong>de</strong> McEliece<br />

Comme pour tout système <strong>de</strong> chiffrement, l’intérêt porté aux <strong>de</strong>ux cryptosystèmes présentés<br />

précé<strong>de</strong>mment est leur attaque. Celle-ci revient à trouver un algorithme général <strong>de</strong> décodage efficace<br />

<strong>de</strong>s co<strong>de</strong>s linéaires jusqu’à une distance fixée. Contrairement au problème du décodage complet<br />

d’un co<strong>de</strong> linéaire, il n’a jamais été démontré que ce problème était NP-difficile. Mais l’existence<br />

d’un algorithme polynomial pour le résoudre paraît peu probable. Ainsi toute amélioration<br />

<strong>de</strong>s algorithmes existant est donc digne d’intérêt même si elle aboutit à un algorithme exponentiel.<br />

Je vais donc passer en revue différents algorithmes <strong>de</strong> décodage et m’attacher sur certains<br />

qui furent un tournant dans la réflexion sur la cryptanalyse <strong>de</strong>s systèmes basés sur les co<strong>de</strong>s<br />

correcteurs.<br />

Dans toute la suite, il s’agira <strong>de</strong> déco<strong>de</strong>r un [n, k, d] co<strong>de</strong> linéaire C sur F q .<br />

c désignera le mot à déco<strong>de</strong>r, formé <strong>de</strong> la somme d’un mot du co<strong>de</strong> x et d’un vecteur d’erreur e<br />

<strong>de</strong> poids t.<br />

On supposera d’ailleurs que e est le seul vecteur <strong>de</strong> poids ≤ t dans le coset C + c (ce qui est<br />

raisonnable, puisque cette probabilité est très forte pour <strong>de</strong>s co<strong>de</strong>s aléatoires <strong>de</strong> taille suffisante).<br />

G et H seront les matrices génératrices et <strong>de</strong> parité <strong>de</strong> C.<br />

2.1 Algorithmes exhaustifs<br />

Les algorithmes ”basiques” <strong>de</strong> décodage sont ceux dits exhaustifs qui énumèrent :<br />

– soit tous les mots du co<strong>de</strong><br />

– soit tous les vecteurs d’erreur<br />

Décodage par recherche exhaustive parmi tous les mots du co<strong>de</strong><br />

Pour tous les vecteurs m <strong>de</strong> longueur k,<br />

1. Calculer le mot <strong>de</strong> co<strong>de</strong> mG où G est la matrice génératrice <strong>de</strong> C.<br />

2. Calculer wt(c − mG).<br />

La solution est obtenue pour le vecteur m qui minimise wt(c − mG).<br />

Décodage par recherche exhaustive parmi tous les vecteurs d’erreur<br />

Soit s = Hc ⊤ . Tant que s ≠ s ′ faire :<br />

1. Choisir un vecteur x <strong>de</strong> longueur n − k et <strong>de</strong> poids inférieur ou égal à t.<br />

2. Calculer son syndrome s ′ = Hx ⊤ .<br />

Ces algorithmes sont bien sûr longs et coûteux car ils nécessitent <strong>de</strong> passer en revue tous les<br />

vecteurs d’une certaine taille.<br />

En revanche les algorithmes qui vont suivre utilisent <strong>de</strong>s propriétés qui leur permettent <strong>de</strong><br />

s’arrêter à n’importe quel moment.<br />

3


2.2 Décodage par ensembles d’information généralisé sur F q<br />

Ce principe est une technique classique, introduite par Prange [7] en 1962 pour les co<strong>de</strong>s<br />

cycliques, généralisée par la suite et encore utilisée aujourd’hui.<br />

Contrairement aux algorithmes exhaustifs précé<strong>de</strong>nts, le décodage par ensemble d’information<br />

exploite la redondance du co<strong>de</strong> : il repose sur la constatation qu’il suffit <strong>de</strong> trouver un<br />

ensemble <strong>de</strong> k positions d’information ne contenant aucune erreur parmi ses coordonnées pour<br />

déco<strong>de</strong>r c.<br />

Soit N = {1, . . . , n}. Si I est un sous-ensemble <strong>de</strong> N et J = N\I son ensemble complémentaire,<br />

on note G = (U, V ) I la décomposition <strong>de</strong> G par rapport à I ; cela signifie que U = (G i ) i∈I et<br />

V = (G j ) j∈J où (G 1 , . . . , G n ) est la décomposition en colonnes <strong>de</strong> la matrice G.<br />

Définition 2.1. (Ensemble d’information)<br />

∗ Un sous-ensemble I <strong>de</strong> N <strong>de</strong> taille k est un ensemble d’information pour C si et seulement si<br />

la restriction <strong>de</strong> C à ces k positions forme un espace vectoriel <strong>de</strong> dimension k ; ce qui équivaut<br />

à G = (U, V ) I avec U inversible.<br />

∗ De la même manière, un ensemble <strong>de</strong> redondance <strong>de</strong> C est le complémentaire dans N d’un<br />

ensemble d’information.<br />

De tels ensembles d’information existent bien comme peut le montrer le résultat suivant <strong>de</strong><br />

la théorie <strong>de</strong>s co<strong>de</strong>s correcteurs :<br />

Proposition 2.2. Tout ensemble <strong>de</strong> n − d + 1 positions contient un ensemble d’information.<br />

Démonstration. Soit K un ensemble <strong>de</strong> s positions et G = (A, B) K .<br />

Supposons que K ne contienne aucun ensemble d’information.<br />

Ainsi, le rang <strong>de</strong> A est strictement inférieur à s.<br />

On peut donc trouver une combinaison linéaire <strong>de</strong>s lignes <strong>de</strong> A égale à 0, et par conséquent un<br />

mot du co<strong>de</strong> x qui a <strong>de</strong>s 0 sur ces s positions. Puisque wt(x) ≥ d, n − s ≥ d et donc s ≤ n − d.<br />

On obtient le résultat par contraposée.<br />

Ainsi dès lors que l’on trouve un ensemble d’information I ne contenant aucune position<br />

d’erreurs (voir FIGURE 1), il suffit <strong>de</strong> décomposer c = (c I , c J ) I et G = (U, V ) I pour obtenir le<br />

vecteur erreur. En effet, on a c = x + e, où x = mG, donc mU = x I et x = mG = x I U −1 G.<br />

Or c I = x I , car I ne contient pas <strong>de</strong> positions d’erreurs.<br />

Par conséquent e = c − x = c − c I U −1 G = (0 · · · 0, c J − c I U −1 V ) I et m = c I U −1 .<br />

Figure 1 – Motifs d’erreurs corrigés par l’algorithme <strong>de</strong> décodage par ensembles d’information,<br />

avec I un ensemble d’information.<br />

C’est cette propriété qui est à l’origine <strong>de</strong> l’algorithme dont parlait McEliece dans son article<br />

[2] au sujet <strong>de</strong> la cryptanalyse <strong>de</strong> son système.<br />

4


Décodage par ensembles d’information généralisé sur F q<br />

Tant qu’un vecteur d’erreurs <strong>de</strong> poids inférieur ou égal à t n’a pas été trouvé :<br />

1. Choisir aléatoirement un ensemble d’information I.<br />

2. Mettre G sous forme systématique U −1 G = (Id, Z) I , avec Z = U −1 V ,<br />

et décomposer c sous la forme (c I , c J ) I .<br />

3. Calculer wt(c J − c I Z).<br />

Si ce poids est inférieur ou égal à t, alors e = (0 · · · 0, c J − c I Z) I et m = c I U −1 .<br />

Coût <strong>de</strong> l’algorithme : La probabilité <strong>de</strong> choisir k zéros dans le vecteur d’erreurs e est Q = (n−t k )<br />

( n k) .<br />

C’est à dire que le cryptanalyste doit faire environ 1 Q<br />

essais avant <strong>de</strong> réussir, et pour chaque<br />

essai doit inverser la sous-matrice U <strong>de</strong> G <strong>de</strong> taille k × k.<br />

En supposant que cette inversion <strong>de</strong> matrice requiert αk 3 (α est petit quand k > n 2<br />

), le facteur<br />

total <strong>de</strong> travail attendu, c’est à dire le nombre total d’opérations binaires à effectuer en moyenne<br />

pour que l’algorithme trouve la solution, est W = αk 3 × (n k)<br />

( n−t<br />

k ) .<br />

2.3 Algorithme <strong>de</strong> Lee-Brickell généralisé sur F q<br />

Un <strong>de</strong>s problèmes qui apparaît dans le <strong>de</strong>rnier algorithme est que k positions choisies<br />

aléatoirement ne forment pas toujours un ensemble d’information, à moins que le co<strong>de</strong> ne soit<br />

un co<strong>de</strong> MDS (Maximum Distance Separable co<strong>de</strong>).<br />

Plutôt que <strong>de</strong> rechercher à nouveau k positions d’information totalement différente, l’algorithme<br />

<strong>de</strong> Lee-Brickell [8] tient compte du fait que parmi ces k premiers choix <strong>de</strong> positions, sans<br />

doute un certain nombre sont à gar<strong>de</strong>r.<br />

Dans le décodage par ensembles d’information, l’élimination <strong>de</strong> Gauss permettant <strong>de</strong> mettre<br />

la matrice génératrice sous forme systématique est <strong>de</strong> loin la procédure la plus coûteuse. Afin<br />

<strong>de</strong> trouver un meilleur compromis entre le nombre d’itérations et le coût <strong>de</strong> chacune d’elles, il<br />

est donc préférable d’augmenter légèrement le facteur <strong>de</strong> travail <strong>de</strong> chaque itération pour permettre<br />

d’en diminuer le nombre à effectuer, en ne modifiant par exemple qu’un petit nombre <strong>de</strong><br />

positions.<br />

Dans cette démarche, l’algorithme <strong>de</strong> Lee-Brickell autorise au plus p positions d’erreurs dans<br />

l’ensemble d’information (p est un paramètre <strong>de</strong> l’algorithme) : c’est donc un algorithme <strong>de</strong><br />

décodage par ensembles d’information avec p effacements (voir FIGURE 2).<br />

Figure 2 – Motifs d’erreurs corrigés par l’algorithme <strong>de</strong> Lee-Brickell, avec I un ensemble d’information.<br />

5


Algorithme <strong>de</strong> Lee-Brickell généralisé sur F q (avec paramètre p)<br />

Tant qu’un vecteur d’erreurs <strong>de</strong> poids inférieur ou égal à t n’a pas été trouvé :<br />

1. Choisir aléatoirement un ensemble d’information I.<br />

2. Mettre G sous forme systématique U −1 G = (Id, Z) I , avec Z = U −1 V , et<br />

décomposer c sous la forme (c I , c J ) I .<br />

3. Pour tous les vecteurs e ′ i <strong>de</strong> longueur k et <strong>de</strong> poids i ≤ p, calculer wt(c J −(c I −e ′ i )Z).<br />

Si ce poids est inférieur ou égal à t − i,<br />

alors e = (e ′ i , c J − (c I − e ′ i )Z) I et m = (c I − e ′ i )U −1 .<br />

Explication <strong>de</strong> l’algorithme : En reprenant les notations précé<strong>de</strong>ntes, on a<br />

c = (c I , c J ) I , e = (e I , e J ) I , G = (U, V ) I et c I − e I = mU = x I .<br />

On obtient alors (c I − e I )U −1 G = mUU −1 G = mG.<br />

Si on choisit un vecteur e ′ i <strong>de</strong> taille k et <strong>de</strong> poids i ≤ p et que c − (c I − e ′ i )U −1 G est <strong>de</strong> poids<br />

inférieur ou égal à t,<br />

ce qui équivaut à c J − (c I − e ′ i )U −1 V <strong>de</strong> poids inférieur ou égal à t − i,<br />

alors e ′ i = e I et m = (c I − e ′ i )U −1 .<br />

Coût <strong>de</strong> l’algorithme : La probabilité pour qu’un ensemble d’information contienne au plus p<br />

p∑<br />

positions d’erreur est Q p =<br />

( 1 ( n−t t n<br />

k) k−i)(<br />

i)<br />

.<br />

i=0<br />

p∑ (<br />

Soit N p le nombre <strong>de</strong> vecteurs d’erreur <strong>de</strong> k bits avec au plus p bits non nuls, alors N p = k<br />

)<br />

i .<br />

Par conséquent, le facteur total <strong>de</strong> travail <strong>de</strong> l’algorithme <strong>de</strong> Lee-Brickell avec paramètre p est<br />

W p = 1<br />

Q p<br />

(αk 3 + N p βk).<br />

On remarque que W 0 = W , ce qui parait logique puisque si p = 0, on ne se soucie pas <strong>de</strong><br />

gar<strong>de</strong>r certaines positions, on recherche alors à chaque fois k différentes positions et on retrouve<br />

donc le coût <strong>de</strong> l’algorithme <strong>de</strong> décodage par ensembles d’information.<br />

On peut <strong>de</strong> plus calculer que, pour <strong>de</strong>s valeurs raisonnables <strong>de</strong> α et β, W p diminue puis<br />

augmente quand p augmente. Dans leur article [8], Lee et Brickell ont montré que pour α = β,<br />

la valeur optimale <strong>de</strong> p qui minimise le facteur total <strong>de</strong> travail est p = 2.<br />

i=0<br />

2.4 Algorithme <strong>de</strong> Leon généralisé sur F q<br />

A l’inverse <strong>de</strong> Lee et Brickell, Leon propose dans son article [9] un algorithme qui augmente<br />

légèrement le nombre d’itérations effectuées mais diminue considérablement le nombre<br />

d’opérations requises par chacune d’elles.<br />

Pour ceci, il considère un ensemble <strong>de</strong> positions S = I ∪ L <strong>de</strong> taille supérieure à k, avec I un<br />

ensemble d’information et L un ensemble <strong>de</strong> l positions <strong>de</strong> redondance. De cette manière, Leon<br />

utilise une sorte <strong>de</strong> ”filtre” <strong>de</strong>s erreurs (voir FIGURE 3).<br />

6


Figure 3 – Motifs d’erreurs corrigés par l’algorithme <strong>de</strong> Leon, avec |S| = k + l.<br />

En effet, au lieu <strong>de</strong> calculer directement, comme le fait l’algorithme <strong>de</strong> Lee-Brickell, le poids<br />

<strong>de</strong>s mots <strong>de</strong> taille n − k, il s’assure au préalable que le poids <strong>de</strong> ces mots restreints à L est<br />

<strong>de</strong> poids très faible. Leon part donc du principe qu’il est très improbable que le poids total du<br />

mot soit faible, si sa restriction même à l’ensemble L ne l’est pas. Le reste <strong>de</strong> l’algorithme suit<br />

néanmoins les grands principes <strong>de</strong> Lee-Brickell.<br />

Explication <strong>de</strong> l’algorithme : Toujours avec les mêmes notations, on a<br />

(c I − e I )U −1 G = mG, avec U −1 G = (Id k |Z L |Z J\L ) et c = (c I |c L |c J\L ).<br />

En choisissant un vecteur e ′ i <strong>de</strong> taille k et <strong>de</strong> poids i ≤ p, on espère que ce vecteur soit proche<br />

<strong>de</strong> e I et donc que (c I − e ′ i )U −1 soit proche <strong>de</strong> m.<br />

Pour vérifier cela, on regar<strong>de</strong> dans un premier temps si le poids t ′ <strong>de</strong> c L − (c I − e ′ i )Z L est petit,<br />

c’est à dire inférieur ou égal à p − i.<br />

Si oui, alors on regar<strong>de</strong> maintenant le poids <strong>de</strong> c J\L − (c I − e ′ i )Z J\L et si celui-ci est à nouveau<br />

petit, c’est à dire inférieur ou égal à t − t ′ − i,<br />

alors on a e ′ i = e I et m = (c I − e ′ i )U −1 .<br />

L’algorithme qui suit est celui extrait <strong>de</strong> la thèse [5] d’Anne <strong>Canteaut</strong>, qui a légèrement<br />

modifié l’algorithme original <strong>de</strong> Leon tout en respectant très fidèlement ses grands principes.<br />

Algorithme <strong>de</strong> Leon généralisé sur F q (version modifiée avec paramètres p et l)<br />

Tant qu’un vecteur d’erreurs <strong>de</strong> poids inférieur ou égal à t n’a pas été trouvé :<br />

1. Choisir aléatoirement un ensemble d’information I et un ensemble L <strong>de</strong> l positions<br />

<strong>de</strong> redondance.<br />

2. A l’ai<strong>de</strong> d’une élimination <strong>de</strong> Gauss, mettre G sous la forme suivante U −1 G =<br />

(Id k |Z L |Z J\L ) et décomposer c sous la forme (c I |c L |c J\L ).<br />

3. Pour tous les vecteurs e ′ i <strong>de</strong> longueur k et <strong>de</strong> poids i ≤ p,<br />

calculer t ′ = wt(c L − (c I − e ′ i )Z L).<br />

– Si t ′ ≤ p − i, calculer wt(c J\L − (c I − e ′ i )Z J\L).<br />

– Si <strong>de</strong> plus ce poids est inférieur ou égal à t − t ′ − i,<br />

alors e = (e ′ I |c L − (c I − e ′ i )Z L|c J\L − (c I − e ′ i )Z J\L et m = (c I − e ′ i )U −1 .<br />

Coût <strong>de</strong> l’algorithme : La probabilité pour que l’ensemble S = I ∪L contienne au plus p positions<br />

p∑<br />

d’erreur est Q L(p,l) = 1 ( n−t t<br />

k+l−i)(<br />

i)<br />

.<br />

( k+l)<br />

n<br />

i=0<br />

Ainsi le facteur <strong>de</strong> travail <strong>de</strong> l’algorithme <strong>de</strong> Leon est W L(p,l) = 1<br />

Q L(p,l )<br />

× F (p, l), où F (p, l) est<br />

une fonction <strong>de</strong>s <strong>de</strong>ux paramètres représentant le nombre d’opérations <strong>de</strong> chaque itération <strong>de</strong><br />

l’algorithme.<br />

7


On retrouve W L(p,0) = W p car si on ne considère pas l’ensemble L, on effectue exactement<br />

l’algorithme <strong>de</strong> Lee-Brickell.<br />

Les paramètres proposés heuristiquement par Leon sont p = 2 et l = 2.<br />

2.5 Algorithme <strong>de</strong> Stern généralisé sur F q<br />

L’algorithme que présente Stern dans son article [10] est encore une amélioration <strong>de</strong>s algorithmes<br />

précé<strong>de</strong>nts, et est particulièrement proche <strong>de</strong> celui <strong>de</strong> Leon.<br />

La différence est que Stern divise à chaque itération l’ensemble d’information I en <strong>de</strong>ux parties<br />

égales I 1 et I 2 et ne corrige que les vecteurs d’erreur dont les restrictions à I 1 et I 2 sont <strong>de</strong> poids<br />

exactement p et qui s’annulent sur L (voir FIGURE 4).<br />

Figure 4 – Motifs d’erreurs corrigés par l’algorithme <strong>de</strong> Stern,<br />

avec I = I 1 ∪ I 2 , |I 1 | = ⌊ ⌋<br />

k<br />

2 , |I2 | = ⌈ ⌉<br />

k<br />

2 et |L| = l.<br />

Le choix <strong>de</strong> ces motifs d’erreurs particuliers est justifié par le fait qu’ils peuvent être détectés<br />

très facilement : le partage <strong>de</strong> l’ensemble d’information en <strong>de</strong>ux parties égales induit un partage<br />

similaire <strong>de</strong>s lignes <strong>de</strong> la matrice génératrice. L’algorithme reste, hormis le partage en <strong>de</strong>ux <strong>de</strong><br />

I et l’annulation sur L, exactement le même que celui <strong>de</strong> Leon.<br />

Explication <strong>de</strong> l’algorithme : On a toujours U −1 G = (Id k |Z L |Z J\L ) et c = (c I |c L |c J\L ).<br />

Si on choisit <strong>de</strong>ux vecteurs e ′ 1 et e′ 2 <strong>de</strong> longueur respective ⌊ ⌋ ⌈<br />

k<br />

2 et k<br />

⌉<br />

2 et <strong>de</strong> poids p,<br />

on veut que le vecteur d’erreur s’annule sur L, c’est à dire c L = (c I − (e ′ 1 |e′ 2 ))Z L.<br />

Si ceci se vérifie, il reste à vérifier si c J\L − (c I − (e ′ 1 |e′ 2 ))Z J\L a un poids inférieur ou égal à<br />

t − 2p. Dans ce cas, on a alors (e ′ 1 |e′ 2 ) = e I et m = (c I − (e ′ 1 |e′ 2 ))U −1 .<br />

Coût <strong>de</strong> l’algorithme :<br />

- La probabilité que I contienne 2p positions d’erreurs est Q S1 = ( 2p)( t<br />

k−2p)<br />

n−t<br />

.<br />

( n k)<br />

- La probabilité que I 1 contienne p positions d’erreurs parmi ces 2p est Q S2 = (2p p )<br />

4p<br />

2p∑ )<br />

(car = 2 2p = 4 p ).<br />

i=0<br />

( 2p<br />

i<br />

- La probabilité que L ne contienne aucune positions d’erreurs est Q S3 = (n−k−t+2p<br />

Ainsi la probabilité que le vecteur d’erreur correspon<strong>de</strong> au motif est<br />

( t<br />

)( n−t 2p<br />

2p k−2p)(<br />

p<br />

Q S(p,l) = Q S1 × Q S2 × Q S3 = ( n<br />

(<br />

k)<br />

4p<br />

n−k<br />

l<br />

)( n−k−t+2p<br />

l<br />

)<br />

) .<br />

l )<br />

( n−k<br />

l )<br />

.<br />

8


Algorithme <strong>de</strong> Stern généralisé sur F q (avec paramètres p et l)<br />

Tant qu’un vecteur d’erreurs <strong>de</strong> poids inférieur ou égal à t n’a pas été trouvé :<br />

1. Choisir aléatoirement un ensemble d’information I et un ensemble L <strong>de</strong> l positions<br />

<strong>de</strong> redondance.<br />

2. A l’ai<strong>de</strong> d’une élimination <strong>de</strong> Gauss, mettre G sous la forme suivante U −1 G =<br />

(Id k |Z L |Z J\L ) et décomposer c sous la forme (c I |c L |c J\L ).<br />

3. Diviser aléatoirement les lignes <strong>de</strong> la matrice (Z L |Z J\L ) en <strong>de</strong>ux parties <strong>de</strong> même<br />

taille<br />

4. Pour tous les vecteurs e ′ 1 <strong>de</strong> longueur ⌊ k<br />

2<br />

⌋<br />

et <strong>de</strong> poids p, calculer e<br />

′<br />

1 Z 1 L .<br />

5. Pour tous les vecteurs e ′ 2 <strong>de</strong> longueur ⌈ k<br />

2<br />

⌉<br />

et <strong>de</strong> poids p, calculer e<br />

′<br />

2 Z 2 L .<br />

6. Pour tout couple (e ′ 1 , e′ 2 ) tel que c L = c I Z L − e ′ 1 Z1 L − e′ 2 Z2 L ,<br />

calculer wt(c J\L − c I Z J\L + e ′ 1 Z1 J\L + e′ 2 Z2 J\L ) = wt(c J\L − (c I − (e ′ 1 |e′ 2 ))Z J\L).<br />

7. Si ce poids est inférieur ou égal à t − 2p,<br />

alors e = (e ′ 1 |e′ 2 |0 · · · 0|c J\L − (c I − (e ′ 1 |e′ 2 ))Z J\L) et m = (c I − (e ′ 1 |e′ 2 ))U −1 .<br />

Le facteur total <strong>de</strong> travail <strong>de</strong> l’algorithme <strong>de</strong> Stern est donc <strong>de</strong><br />

W S(p,l) = 1<br />

Q S(p,l)<br />

× G(p, l),<br />

où G(p, l) est une fonction <strong>de</strong>s <strong>de</strong>ux paramètres représentant le nombre d’opérations <strong>de</strong> chaque<br />

itération <strong>de</strong> l’algorithme.<br />

Une étu<strong>de</strong> asymptotique <strong>de</strong> la complexité <strong>de</strong> l’algorithme <strong>de</strong> Stern a conduit Florent <strong>Chabaud</strong><br />

[11] à proposer les paramètres p = 2 ou 3, selon la mémoire disponible, et l = log 2 k.<br />

9


2.6 Synthèse<br />

J’ai ainsi présenté diverses améliorations chronologiques et généralisations du décodage par<br />

ensembles d’information. Toutes ces métho<strong>de</strong>s sont reprises et comparées dans la TABLE 1<br />

réalisée par A. <strong>Canteaut</strong>.<br />

Décodage par ensembles<br />

d’information<br />

Algorithme <strong>de</strong><br />

Lee-Brickell<br />

Algorithme <strong>de</strong><br />

Leon<br />

Algorithme <strong>de</strong><br />

Stern<br />

2 80,7 p = 2<br />

p = 2 et l = 2 p = 2 et l = 9<br />

2 71,2 2 70,7 2 69,9<br />

Table 1 – Facteur <strong>de</strong> travail <strong>de</strong>s algorithmes présentés précé<strong>de</strong>mment pour cryptanalyser le<br />

système <strong>de</strong> McEliece correspondant à l’utilisation d’un [1024, 524, 101] co<strong>de</strong>.<br />

Comme le suggère l’équivalence <strong>de</strong>s cryposystèmes <strong>de</strong> McEliece et Nie<strong>de</strong>rreiter, chacun <strong>de</strong>s<br />

algorithmes présentés précé<strong>de</strong>mment peuvent être approchés <strong>de</strong> façon duale, c’est à dire en utilisant<br />

une matrice <strong>de</strong> parité plutôt qu’une matrice génératrice.<br />

De même, plutôt que d’utiliser un algorithme <strong>de</strong> décodage jusqu’à la distance t, on peut<br />

aussi se servir d’un algorithme <strong>de</strong> recherche ( ) <strong>de</strong> mots <strong>de</strong> poids minimal.<br />

G<br />

En effet, la matrice génératrice G ′ = est la matrice du [n, k + 1] co<strong>de</strong> linéaire C<br />

c ′ formé par<br />

la réunion du co<strong>de</strong> C et du coset C+c, a pour unique mot <strong>de</strong> poids minimal le vecteur recherché e.<br />

Ainsi tout algorithme <strong>de</strong> recherche <strong>de</strong> mots <strong>de</strong> poids minimal est potentiellement un algorithme<br />

<strong>de</strong> décodage. Il apparaît que tous les algorithmes présentés précé<strong>de</strong>mment peuvent être<br />

appréhendés <strong>de</strong> ce point <strong>de</strong> vue. C’était d’ailleurs l’approche originale <strong>de</strong>s algorithmes <strong>de</strong> Leon<br />

et Stern.<br />

Ces modifications, certes minimes, induisent quelques variations <strong>de</strong>s facteurs <strong>de</strong> travail.<br />

La prochaine section présentera un algorithme dont le facteur <strong>de</strong> travail se révèlera meilleur<br />

que ceux présentés jusque là.<br />

10


3 Algorithme <strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong> généralisé sur F q<br />

Les articles qui m’ont permis <strong>de</strong> rédiger cette partie, la plus importante et la plus conséquente,<br />

sont ceux réalisés par Anne <strong>Canteaut</strong> en collaboration avec Hervé Chabanne [12], Florent <strong>Chabaud</strong><br />

[13] et Nicolas Sendrier [14], ainsi que <strong>de</strong> sa thèse personnelle [5].<br />

Les meilleurs algorithmes généraux <strong>de</strong> décodage et <strong>de</strong> recherche <strong>de</strong> mots <strong>de</strong> poids minimal<br />

dans un co<strong>de</strong> linéaire aléatoire sont tous <strong>de</strong>s variantes <strong>de</strong> l’algorithme <strong>de</strong> décodage par ensembles<br />

d’information. Ils ont tous le même but : explorer les ensembles d’information jusqu’à ce que le<br />

mot initial (ou <strong>de</strong> manière équivalente le vecteur d’erreurs) soit retrouvé. Ils sont par conséquent<br />

tous conçus suivant le même schéma : ils explorent une succession d’ensembles d’information<br />

choisis aléatoirement, effectuant pour chacun d’eux une élimination <strong>de</strong> Gauss sur la matrice<br />

génératrice du co<strong>de</strong> puis quelques opérations sur sa forme systématique, et finalement tentent<br />

<strong>de</strong> trouver <strong>de</strong>s mots <strong>de</strong> poids faible avec quelques propriétés et opérations sur l’ensemble <strong>de</strong><br />

redondance.<br />

Les algorithmes introduits par Lee-Brickell, Leon et Stern visaient tous à réduire le coût<br />

relatif <strong>de</strong> l’élimination <strong>de</strong> Gauss dans le décodage par ensembles d’information, puisque, initialement,<br />

cette procédure représentait 99, 9% <strong>de</strong>s calculs pour déco<strong>de</strong>r un co<strong>de</strong> aléatoire <strong>de</strong><br />

longueur 512 et <strong>de</strong> dimension 256. Bien que le temps <strong>de</strong> calcul soit mieux réparti entre les<br />

différentes procédures dans l’algorithme <strong>de</strong> Stern, la mise sous forme systématique <strong>de</strong> la matrice<br />

génératrice reste relativement coûteuse (surtout quand le nombre d’effacements p est faible).<br />

Cette constatation a donc amené A. <strong>Canteaut</strong> à imaginer un nouvel algorithme <strong>de</strong> décodage<br />

dans lequel les formes systématiques successives <strong>de</strong> la matrice G pourraient se déduire les unes<br />

<strong>de</strong>s autres sans que l’on ait recours à une élimination <strong>de</strong> Gauss. Cela impose alors que les<br />

différents ensembles d’information ne soient plus indépendants.<br />

La disparition <strong>de</strong> l’élimination <strong>de</strong> Gauss diminue considérablement le nombre d’opérations effectuées<br />

à chaque itération. Toutefois, le nombre moyen d’itérations augmente dès lors que les ensembles<br />

d’information examinés ne sont plus indépendants. Malgré tout, cela permet d’améliorer<br />

les attaques précé<strong>de</strong>ntes <strong>de</strong>s cryptosystèmes à mots <strong>de</strong> poids faible.<br />

3.1 Principe <strong>de</strong> la métho<strong>de</strong> itérative généralisée sur F q<br />

Cette métho<strong>de</strong> consiste à ne plus examiner à chaque nouvelle itération un ensemble d’information<br />

complètement indépendant du précé<strong>de</strong>nt (ce qui nécessite une élimination <strong>de</strong> Gauss<br />

complète pour mettre la matrice génératrice sous forme systématique), mais à en choisir un qui<br />

ne diffère du précé<strong>de</strong>nt que par un élément.<br />

Cette idée est formalisée par la notion d’ensembles d’information voisins.<br />

N représente toujours l’ensemble {1, . . . , n}.<br />

Définition 3.1. Deux ensembles d’information I et I ′ sont voisins si |I \ I ′ | = |J \ J ′ | = 2,<br />

c’est à dire si ∃λ ∈ I et µ ∈ J tels que I ′ = (I \ {λ}) ∪ {µ} (avec J = N \ I).<br />

Le résultat suivant motive l’utilisation <strong>de</strong>s ensembles d’information voisins.<br />

11


Proposition 3.2. Soient I et I ′ <strong>de</strong>ux ensembles d’information. Il existe alors une suite finie<br />

d’ensembles d’information voisins reliant I à I ′ .<br />

Démonstration. Il suffit <strong>de</strong> considérer le graphe dont les sommets sont les ensembles d’information<br />

et dont les arêtes relient <strong>de</strong>ux ensembles d’information si et seulement s’ils sont voisins.<br />

Ce graphe est alors connexe, ce qui traduit bien notre proposition.<br />

Cette suite va pouvoir être utilisée pour générer les ensembles d’information successifs examinés<br />

dans les algorithmes <strong>de</strong> décodage précé<strong>de</strong>mment étudiés. La proposition suivante explique<br />

comment choisir λ et µ tels que I ′ reste un ensemble d’information.<br />

Proposition 3.3. Soit I un ensemble d’information pour le co<strong>de</strong> C et G = (U, V ) I la matrice<br />

génératrice associée. Soit λ un élément <strong>de</strong> I et µ un élément <strong>de</strong> J = N \ I.<br />

Alors l’ensemble I ′ = (I \ {λ}) ∪ {µ} est un ensemble d’information pour C si et seulement si<br />

z λ,µ ≠ 0, où Z = U −1 V = (z i,j ) i∈I, j∈J .<br />

Démonstration.<br />

Z est définie par Z = U −1 V , c’est à dire V = UZ, avec V = (G j ) j∈J et U = (G i ) i∈I .<br />

On obtient alors les relations <strong>de</strong> dépendance linéaire suivantes sur les colonnes <strong>de</strong> G<br />

∀j ∈ J, G j = ∑ i∈I<br />

z i,j G i .<br />

Les colonnes d’indice λ et µ sont donc en particulier liées par<br />

G µ = z λ,µ G λ +<br />

∑<br />

z i,µ G i .<br />

i∈I\{λ}<br />

Puisque les colonnes in<strong>de</strong>xées par I sont linéairement indépendantes,<br />

les colonnes G µ et (G i ) i∈I\{λ} le sont aussi si et seulement si z λ,µ est non nul.<br />

Si I est un ensemble d’information, donc <strong>de</strong> taille k, on peut in<strong>de</strong>xer les lignes <strong>de</strong> Z par les<br />

indices <strong>de</strong> I (puisqu’aux colonnes in<strong>de</strong>xées par I, U −1 G est l’i<strong>de</strong>ntité).<br />

On notera Z i la i-ème ligne <strong>de</strong> Z.<br />

Puisque tous les algorithmes précédant utilisent la matrice G sous la forme systématique<br />

U −1 G = (Id k , Z) I , correspondant à I, on a juste besoin d’une procedure permettant d’obtenir<br />

la matrice sous forme systématique U ′−1 G = (Id k , Z ′ ) I ′, correspondant à I ′ , à partir <strong>de</strong> U −1 G.<br />

En d’autres termes, on a besoin <strong>de</strong> savoir comment passer <strong>de</strong> Z (qui correspond à I) à Z ′ (qui<br />

correspond à I ′ ).<br />

Cette mise à jour va se faire à l’ai<strong>de</strong> d’une procédure <strong>de</strong> pivot, et non plus d’une élimination<br />

<strong>de</strong> Gauss, comme le montre le résultat suivant :<br />

12


Proposition 3.4. Soient I et I ′ <strong>de</strong>ux ensembles d’information voisins tels que<br />

I ′ = (I \ {λ}) ∪ {µ}.<br />

Soient U −1 G = (Id k , Z) I et U ′−1 G = (Id k , Z ′ ) I ′ les matrices génératrices sous forme systématique<br />

associées. Alors Z ′ se déduit <strong>de</strong> Z par :<br />

. ∀i ∈ I \ {λ} = I ′ \ {µ}, ∀j ∈ J \ {µ} = J ′ \ {λ}, z ′ i,j = z i,j − z λ,j×z i,µ<br />

z λ,µ<br />

. ∀j ∈ J \ {µ} = J ′ \ {λ}, z ′ µ,j = z λ,j<br />

z λ,µ<br />

. ∀i ∈ I \ {λ} = I ′ \ {µ}, z ′ i,λ = − z i,µ<br />

z λ,µ<br />

. z ′ µ,λ = 1<br />

z λ,µ<br />

Démonstration.<br />

Dans cette démonstration, nous noterons G = (g i,j ) 1≤i≤k,1≤j≤n , U = (u i,j ) i,j∈I , U −1 = (u −1<br />

i,j ) i,j∈I<br />

et, quitte à changer d’indices, nous supposerons que I = {1, · · · , k} et J = {k + 1, · · · , n − k}.<br />

Le choix d’un λ et d’un µ valables au vu <strong>de</strong> la proposition précé<strong>de</strong>nte implique un échange <strong>de</strong>s<br />

colonnes d’indice λ et µ <strong>de</strong> G.<br />

⎛ 1 λ−1 λ λ+1 k ⎞<br />

0 · · · 0 g 1,µ − g 1,λ 0 · · · 0<br />

.<br />

En d’autres termes U ′ = U + A, avec A =<br />

. 0 . g i,µ − g i,λ . 0 .<br />

.<br />

⎜<br />

⎟<br />

⎝<br />

.<br />

⎠<br />

0 · · · 0 g k,µ − g k,λ 0 · · · 0<br />

⎛<br />

1 µ−1 µ µ+1 n−k⎞<br />

0 · · · 0 g 1,λ − g 1,µ 0 · · · 0<br />

.<br />

Parallèlement, on a aussi V ′ = V + B, avec B =<br />

. 0 . g i,λ − g i,µ . 0 .<br />

.<br />

⎜<br />

⎟<br />

⎝<br />

.<br />

⎠<br />

0 · · · 0 g k,λ − g k,µ 0 · · · 0<br />

Ainsi<br />

Z ′ = U ′−1 V ′<br />

= (U + A) −1 (V + B)<br />

= [U(Id + U −1 A)] −1 (V + B)<br />

= [Id + U −1 A] −1 (Z + U −1 B).<br />

Le problème ici est <strong>de</strong> pouvoir inverser la matrice Id+U −1 A sans le faire <strong>de</strong> manière ”brute”.<br />

En effet, l’idée <strong>de</strong> l’algorithme <strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong> dans le cas binaire est d’éviter <strong>de</strong> refaire<br />

à chaque itération une élimination <strong>de</strong> Gauss qui coûte cher et donc <strong>de</strong> faire une mise à jour <strong>de</strong><br />

la matrice Z entre <strong>de</strong>ux itérations (qui ne sont plus indépendantes).<br />

On veut reprendre le même principe ici : trouver une expression simple <strong>de</strong> l’inverse <strong>de</strong> la<br />

matrice Id + U −1 A et mettre à jour la matrice Z.<br />

13


Regardons plus attentivement U −1 A et (U −1 A) 2<br />

⎛<br />

λ<br />

⎞<br />

0 · · · 0 α 1,λ 0 · · · 0<br />

On a U −1 ⎜<br />

A = (α i,j ) i,j∈I = ⎝<br />

.<br />

. .. . . . . ..<br />

⎟<br />

. ⎠.<br />

0 · · · 0 α k,λ 0 · · · 0<br />

La seule colonne non nulle <strong>de</strong> cette matrice est donc (U −1 A) λ .<br />

⎛<br />

λ<br />

⎞<br />

0 · · · 0 × 0 · · · 0<br />

De même, (U −1 A) 2 ⎜<br />

est aussi <strong>de</strong> la forme ⎝<br />

.<br />

. .. . . . . ..<br />

⎟<br />

. ⎠,<br />

0 · · · 0 × 0 · · · 0<br />

<strong>de</strong> colonne non nulle égale à α λ,λ × (U −1 A) λ .<br />

En d’autres termes : (U −1 A) 2 = α λ,λ × U −1 A .<br />

Calculons ce α λ,λ<br />

∑<br />

On a α λ,λ = k<br />

i=1<br />

. Calculer k ∑<br />

u −1<br />

λ,i (g i,µ − g i,λ ) = k ∑<br />

i=1<br />

i=1<br />

u −1<br />

λ,i × g i,µ − k ∑<br />

i=1<br />

u −1<br />

λ,i × g i,λ.<br />

u −1<br />

λ,i × g i,µ c’est calculer le produit <strong>de</strong> la ligne d’indice λ <strong>de</strong> U −1 par la colonne<br />

d’indice µ <strong>de</strong> G : (U −1 ) λ × G µ = (U −1 ) λ × V µ , car µ ∈ J.<br />

Or U −1 V = Z d’où (U −1 ) λ ∑<br />

× V µ = z λ,µ = k u −1<br />

λ,i × g i,µ.<br />

. Calculer k ∑<br />

i=1<br />

i=1<br />

u −1<br />

λ,i × g i,λ c’est calculer le produit <strong>de</strong> la ligne d’indice λ <strong>de</strong> U −1 par la colonne<br />

d’indice λ <strong>de</strong> G : (U −1 ) λ × G λ = (U −1 ) λ × U λ , car λ ∈ I.<br />

Or U −1 U = Id d’où (U −1 ) λ ∑<br />

× U λ = 1 = k u −1<br />

λ,i × g i,λ.<br />

Par conséquent, on a trouvé α λ,λ = z λ,µ − 1<br />

et plus généralement on peut même étendre α i,λ = z i,µ , ∀i ∈ I \ {λ} .<br />

Petite astuce (en effet, au vu <strong>de</strong> la proposition précé<strong>de</strong>nte, z λ,µ ≠ 0)<br />

On a prouvé (U −1 A) 2 = (z λ,µ − 1) × U −1 A. Ce qui équivaut successivement à :<br />

i=1<br />

(U −1 A) 2 = z λ,µ (1 − 1 ) × U −1 A<br />

z λ,µ<br />

1<br />

(U −1 A) 2 = (1 − 1 ) × U −1 A<br />

z λ,µ z λ,µ<br />

1<br />

(U −1 A) 2 = U −1 A − 1 × U −1 A<br />

z λ,µ z λ,µ<br />

14


Ainsi<br />

U −1 A − 1<br />

z λ,µ<br />

× U −1 A − 1<br />

z λ,µ<br />

(U −1 A) 2 = 0<br />

U −1 A − 1<br />

z λ,µ<br />

× U −1 A(Id + U −1 A) = 0<br />

Id + U −1 A − 1<br />

z λ,µ<br />

× U −1 A(Id + U −1 A) = Id<br />

(Id + U −1 A)(Id − 1<br />

z λ,µ<br />

× U −1 A) = Id<br />

En d’autres termes : [Id + U −1 A] −1 = Id − 1<br />

z λ,µ<br />

× U −1 A.<br />

On a donc réussi à inverser la matrice Id + U −1 A sans calcul direct mais en l’exprimant à l’ai<strong>de</strong><br />

<strong>de</strong> matrices simples et déjà connues auparavant.<br />

On peut maintenant remplacer ce résultat dans la formule suivante :<br />

Z ′ = [Id + U −1 A] −1 (Z + U −1 B)<br />

Z ′ = (Id − 1<br />

z λ,µ<br />

× U −1 A)(Z + U −1 B)<br />

Et on obtient finalement Z ′ = Z + U −1 B − 1<br />

z λ,µ<br />

× U −1 AZ − 1<br />

z λ,µ<br />

× U −1 AU −1 B .<br />

Calculons les éléments <strong>de</strong> cette somme<br />

⎛<br />

µ<br />

⎞<br />

0 · · · 0 β 1,µ 0 · · · 0<br />

* U −1 ⎜<br />

B = (β i,j ) i∈I,j∈J est <strong>de</strong> la forme ⎝<br />

.<br />

. .. . . . . ..<br />

⎟<br />

. ⎠,<br />

0 · · · 0 β k,µ 0 · · · 0<br />

<strong>de</strong> colonne non nulle (U −1 B) µ .<br />

Par symétrie <strong>de</strong> B avec A, on trouve <strong>de</strong> la même façon que<br />

β λ,µ = 1 − z λ,µ et β i,µ = −z i,µ , ∀i ∈ I \ {λ}<br />

⎛<br />

λ<br />

⎞<br />

0 · · · 0 α 1,λ 0 · · · 0<br />

* U −1 ⎜<br />

AZ = ⎝<br />

.<br />

. .. . . . . ..<br />

⎟<br />

. ⎠ ×Z = (γ i,j ) i∈I,j∈J<br />

0 · · · 0 α k,λ 0 · · · 0<br />

a la propriété que sa colonne d’indice j est égale à z λ,j × (U − A) λ .<br />

Ce qui peut s’écrire γ λ,j = z λ,j (z λ,µ − 1), ∀j ∈ J et γ i,j = z λ,j × z i,µ , ∀i ∈ I \ {λ}, ∀j ∈ J<br />

⎛<br />

λ<br />

⎞ ⎛<br />

µ<br />

⎞<br />

0 · · · 0 α 1,λ 0 · · · 0 0 · · · 0 β 1,µ 0 · · · 0<br />

* U −1 AU −1 ⎜<br />

B = ⎝<br />

.<br />

. .. . . . . ..<br />

⎟ ⎜<br />

. ⎠ × ⎝<br />

.<br />

. .. . . . . ..<br />

⎟<br />

. ⎠= (δ i,j ) i∈I,j∈J<br />

0 · · · 0 α k,λ 0 · · · 0 0 · · · 0 β k,µ 0 · · · 0<br />

et il est aisé <strong>de</strong> remarquer que sa colonne d’indice µ est égale à β λ,µ × (U − A) λ .<br />

D’où δ λ,µ = (1 − z λ,µ )(z λ,µ − 1) et δ i,µ = (1 − z λ,µ )z i,µ , ∀i ∈ I \ {λ}<br />

15


Il suffit maintenant <strong>de</strong> reprendre la formule Z ′ = Z+U −1 B− 1<br />

z λ,µ<br />

U −1 AZ− 1<br />

z λ,µ<br />

U −1 AU −1 B pour<br />

conclure.<br />

. ∀i ∈ I \ {λ} = I ′ \ {µ}, ∀j ∈ J \ {µ} = J ′ \ {λ}, z ′ i,j = z i,j− z λ,j×z i,µ<br />

z λ,µ<br />

. ∀j ∈ J \ {µ} = J ′ \ {λ}, z ′ µ,j = z λ,j− z λ,j(z λ,µ −1)<br />

z λ,µ<br />

= z λ,j<br />

z λ,µ<br />

. ∀i ∈ I \ {λ} = I ′ \ {µ}, z<br />

i,λ ′ = z i,µ−z i,µ − z λ,µ×z i,µ<br />

z λ,µ<br />

− (1−z λ,µ)z i,µ<br />

z λ,µ<br />

. z µ,λ = z λ,µ +1 − z λ,µ − z λ,µ(z λ,µ −1)<br />

z λ,µ<br />

− (1−z λ,µ)(z λ,µ −1)<br />

z λ,µ<br />

= 1<br />

z λ,µ<br />

= −z i,µ<br />

z λ,µ<br />

Ce qui est bien le résultat attendu.<br />

Remarque 3.5. Dans le cas binaire, on retrouve le résultat cité par Anne <strong>Canteaut</strong> :<br />

(car z λ,µ = 1)<br />

. ∀i ∈ I \ {λ} = I ′ \ {µ}, ∀j ∈ J \ {µ} = J ′ \ {λ}, z ′ i,j = z i,j + z λ,j × z i,µ<br />

. ∀j ∈ J \ {µ} = J ′ \ {λ}, z ′ µ,j = z λ,j<br />

. ∀i ∈ I \ {λ} = I ′ \ {µ}, z ′ i,λ = z i,µ<br />

. z µ,λ = z λ,µ<br />

Remarque 3.6. Dans la pratique, on fera la mise à jour <strong>de</strong> Z dans cet ordre :<br />

1. z ′ µ,λ ← 1<br />

z λ,µ<br />

2. ∀i ∈ I \ {λ} = I ′ \ {µ}, z ′ i,λ ← −z i,µ × z ′ µ,λ<br />

3. ∀i ∈ I \ {λ} = I ′ \ {µ}, ∀j ∈ J \ {µ} = J ′ \ {λ}, z ′ i,j ← z i,j + z λ,j × z ′ i,λ<br />

4. ∀j ∈ J \ {µ} = J ′ \ {λ}, z ′ µ,j ← z λ,j × z ′ µ,λ<br />

Ce qui représente, en termes <strong>de</strong> calculs dans le corps F q , en moyenne :<br />

* 1 Inversion<br />

* (k − 1)(n − k − 1)<br />

* (k − 1)(n − k − 1)<br />

(<br />

q−1<br />

q<br />

(<br />

q−1<br />

q<br />

) 2<br />

+ (n − 2)<br />

q−1<br />

) 2<br />

Additions<br />

q<br />

Multiplications<br />

L’emploi <strong>de</strong> cette procédure itérative considérablement moins coûteuse au vu <strong>de</strong> cette remarque<br />

(contrairement au αk 3 dans le cas d’une mise sous forme systématique) permet donc<br />

d’améliorer les algorithmes <strong>de</strong> décodage précé<strong>de</strong>nts.<br />

16


3.2 L’algorithme détaillé<br />

L’algorithme <strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong> n’est rien d’autre que la reprise intégrale du principe <strong>de</strong><br />

l’algorithme <strong>de</strong> Stern (en particulier, on corrige les même motis d’erreurs, voir FIGURE 4) en y<br />

rajoutant tout <strong>de</strong> même la procédure itérative précé<strong>de</strong>nte qui permet <strong>de</strong> faire le lien entre <strong>de</strong>ux<br />

itérations à un coût bien moindre.<br />

Algorithme <strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong> généralisé sur F q (avec paramètres p et l)<br />

Initialisation :<br />

Choisir aléatoirement un ensemble d’information I et mettre la matrice G sous forme<br />

systématique U −1 G = (Id k , Z) I à l’ai<strong>de</strong> d’une élimination <strong>de</strong> Gauss.<br />

Tant qu’un vecteur d’erreurs <strong>de</strong> poids inférieur ou égal à t n’a pas été trouvé<br />

1. Choisir aléatoirement un ensemble L <strong>de</strong> l positions <strong>de</strong> redondance.<br />

Diviser aléatoirement les lignes <strong>de</strong> la matrice Z = (Z L |Z J\L ) en <strong>de</strong>ux parties <strong>de</strong><br />

même taille, Z 1 et Z 2 .<br />

2. Pour tous les vecteurs e ′ 1 <strong>de</strong> longueur ⌊ k<br />

2<br />

⌋<br />

et <strong>de</strong> poids p, calculer e<br />

′<br />

1 Z 1 L .<br />

3. Pour tous les vecteurs e ′ 2 <strong>de</strong> longueur ⌈ k<br />

2<br />

⌉<br />

et <strong>de</strong> poids p, calculer e<br />

′<br />

2 Z 2 L .<br />

4. Pour tout couple (e ′ 1 , e′ 2 ) tel que c L = c I Z L − e ′ 1 Z1 L − e′ 2 Z2 L ,<br />

calculer wt(c J\L − c I Z J\L + e ′ 1 Z1 J\L + e′ 2 Z2 J\L ) = wt(c J\L − (c I − (e ′ 1 |e′ 2 ))Z J\L).<br />

5. Si ce poids est inférieur ou égal à t − 2p,<br />

alors e = (e ′ 1 |e′ 2 |0 · · · 0|c J\L − (c I − (e ′ 1 |e′ 2 ))Z J\L) et m = (c I − (e ′ 1 |e′ 2 ))U −1 .<br />

6. Sinon on choisit aléatoirement λ dans I et µ dans J.<br />

Si z λ,µ ≠ 0, on met à jour la matrice Z à l’ai<strong>de</strong> <strong>de</strong> la procédure itérative :<br />

. z µ,λ ← 1<br />

z λ,µ<br />

. z i,λ ← −z i,µ × z µ,λ , ∀i ∈ I \ {λ} = I ′ \ {µ}<br />

. z i,j ← z i,j + z λ,j × z i,λ , ∀i ∈ I \ {λ} = I ′ \ {µ}, ∀j ∈ J \ {µ} = J ′ \ {λ}<br />

. z µ,j ← z λ,j × z µ,λ , ∀j ∈ J \ {µ} = J ′ \ {λ}<br />

et on remplace I par (I \ {λ}) ∪ {µ}. Retour à l’étape 1.<br />

3.3 Temps <strong>de</strong> calcul théorique <strong>de</strong> l’algorithme<br />

Cette analyse est primordiale afin <strong>de</strong> trouver les valeurs <strong>de</strong> p et l qui minimise le coût <strong>de</strong><br />

l’algorithme.<br />

Contrairement aux algorithmes <strong>de</strong> la partie précé<strong>de</strong>nte, les itérations successives <strong>de</strong> l’algorithme<br />

<strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong> ne sont pas indépendantes. La métho<strong>de</strong> utilisée pour calculer le<br />

17


nombre moyen d’itérations n’est donc plus valable, et il est nécessaire <strong>de</strong> modéliser cet algorithme<br />

par un processus stochastique à temps discret.<br />

Cette modélisation consiste à associer à chaque itération <strong>de</strong> l’algorithme <strong>de</strong> décodage une<br />

variable aléatoire qui décrit la distribution <strong>de</strong>s positions erronées suivant la décomposition<br />

(I 1 , I 2 , L, J \ L).<br />

L’algorithme atteint alors un état <strong>de</strong> succès lorsque cette décomposition correspond à un<br />

<strong>de</strong>s motifs d’erreurs que l’on souhaite déco<strong>de</strong>r. Dans la plupart <strong>de</strong>s cas, il suffit pour décrire<br />

l’itération <strong>de</strong> considérer le nombre <strong>de</strong> positions erronées contenues par l’ensemble d’information.<br />

Toutefois, quand ce nombre correspond à un <strong>de</strong>s effacements autorisés par l’algorithme, il est<br />

nécessaire <strong>de</strong> distinguer si l’on se trouve dans un état <strong>de</strong> succès ou un état d’échec.<br />

Ainsi, la i-ème itération peut être représentée par une variable aléatoire X i qui correspond au<br />

nombre <strong>de</strong> 1 du vecteur e sur l’ensemble d’information I = I 1 ∪ I 2 . Cette variable peut prendre<br />

ses valeurs dans l’ensemble {1, · · · , t}. Cependant, si elle prend la valeur 2p, il faut distinguer<br />

<strong>de</strong>ux cas, suivant que l’on se trouve ou non en possession d’un motif d’erreurs favorable (voir<br />

FIGURE 4).<br />

Dans la définition suivante, supp(e) désigne naturellement le support <strong>de</strong> e.<br />

Définition 3.7. (Processus stochastique associé à l’algorithme <strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong>)<br />

Soit (I 1 , I 2 , L, J \ L) la décomposition <strong>de</strong> N = {1, · · · , n} associée à l’itération i <strong>de</strong> l’algorithme<br />

<strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong> et I = I 1 ∪ I 2 .<br />

A cette itération est associée une variable aléatoire X i prenant ses valeurs dans l’espace <strong>de</strong>s états<br />

E = {0, · · · , 2p − 1} ∪ {(2p) F , (2p) S } ∪ {2p + 1, · · · , t}<br />

<strong>de</strong> la manière suivante :<br />

X i = u ssi |I ∩ supp(e)| = u, ∀u ≠ 2p<br />

X i = (2p) F ssi |I ∩ supp(e)| = 2p et (|I 1 ∩ supp(e)| ≠ p ou |L ∩ supp(e)| ≠ 0)<br />

X i = (2p) S ssi |I ∩ supp(e)| = 2p et |I 1 ∩ supp(e)| = p et |L ∩ supp(e)| = 0<br />

L’ensemble <strong>de</strong>s états <strong>de</strong> succès est donc : S = {(2p) S }<br />

et celui <strong>de</strong>s états d’échec est : F = {0, · · · , 2p − 1} ∪ {(2p) F } ∪ {2p + 1, · · · , t}<br />

Un petit rappel sur les chaînes <strong>de</strong> Markov :<br />

Définition 3.8.<br />

∗ Un processus stochastique {X i } i∈N est une chaîne <strong>de</strong> Markov si la probabilité d’accé<strong>de</strong>r à un<br />

certain état ne dépend seulement que du <strong>de</strong>rnier état occupé.<br />

∗ Une chaîne <strong>de</strong> Markov {X i } i∈N est homogène si pour tous états u et v, la probabilité conditionnelle<br />

P r[X i = v/X i−1 = u] ne dépend pas <strong>de</strong> l’itération i.<br />

Cette probabilité est alors dénotée par P u,v et, si l’espace d’états est fini, la matrice<br />

P = (P u,v ) (u,v)∈E 2 est appelée la matrice <strong>de</strong> transition <strong>de</strong> la chaîne.<br />

On obtient le résultat important suivant :<br />

Proposition 3.9. Le processus stochastique {X i } i∈N associé à l’algorithme <strong>de</strong> décodage <strong>de</strong><br />

<strong>Canteaut</strong>-<strong>Chabaud</strong> est une chaîne <strong>de</strong> Markov homogène.<br />

Démonstration. Les ensembles I, I 1 , I 2 et L correspondant à l’itération i ne dépen<strong>de</strong>nt que <strong>de</strong><br />

l’ensemble d’information précé<strong>de</strong>nt, puisqu’ils sont choisis aléatoirement à chaque itération.<br />

Ainsi, pour toute itération i et pour tout ensemble d’états (u 0 , u 1 , · · · , u i ) ∈ E i+1 , on a :<br />

P r[X i = u i /X i−1 = u i−1 , X i−2 = u i−2 , · · · , X 0 = u 0 ] = P r[X i = u i /X i−1 = u i−1 ].<br />

18


De plus, cette probabilité ne dépend pas <strong>de</strong> l’itération i et il existe alors une matrice P telle<br />

que :<br />

∀i ∈ N, ∀(u, v) ∈ E 2 , P r[X i = v/X i−1 = u] = P u,v<br />

La chaîne <strong>de</strong> Markov {X i } i∈N est donc entièrement déterminée par sa distribution initiale<br />

π 0 = (P r[X 0 = u]) u∈E et sa matrice <strong>de</strong> transition P . Ces <strong>de</strong>ux quantités peuvent être facilement<br />

déterminées puisque <strong>de</strong>ux ensembles d’information successifs ne varient que d’un élément.<br />

Proposition 3.10. (Matrice <strong>de</strong> transition du processus stochastique associé à l’algorithme<br />

<strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong>)<br />

La matrice <strong>de</strong> transition P à (t + 2) lignes et (t + 2) colonnes <strong>de</strong> la chaîne <strong>de</strong> Markov associée<br />

à l’algorithme <strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong> est donnée par :<br />

P u,u = k − u<br />

k<br />

×<br />

n − k − (t − u)<br />

n − k<br />

+ u k × t − u<br />

n − k , ∀u /∈ {(2p) S, (2p) F } (1)<br />

P u,u−1 = u n − k − (t − u)<br />

× , ∀u ≠ 2p + 1 (2)<br />

k n − k<br />

P u,u+1 = k − u × t − u , ∀u ≠ 2p − 1 (3)<br />

k<br />

[<br />

n − k<br />

]<br />

2p + 1 n − k − (t − (2p + 1))<br />

P 2p+1,(2p)F = (1 − β) × (4)<br />

k<br />

n − k<br />

[ ]<br />

2p + 1 n − k − (t − (2p + 1))<br />

P 2p+1,(2p)S = β × (5)<br />

k<br />

n − k<br />

[ ]<br />

k − (2p − 1) t − (2p − 1)<br />

P 2p−1,(2p)F = (1 − β)<br />

× (6)<br />

k<br />

n − k<br />

[ ]<br />

k − (2p − 1) t − (2p − 1)<br />

P 2p−1,(2p)S = β<br />

× (7)<br />

k<br />

n − k<br />

[ k − 2p n − k − (t − 2p)<br />

P (2p)F ,(2p) F<br />

= (1 − β) × + 2p<br />

k n − k k × t − 2p ]<br />

(8)<br />

n − k<br />

[ k − 2p n − k − (t − 2p)<br />

P (2p)F ,(2p) S<br />

= β × + 2p<br />

k n − k k × t − 2p ]<br />

(9)<br />

n − k<br />

P (2p)S ,(2p) S<br />

= 1 (10)<br />

P u,v = 0, pour tous les autres cas (11)<br />

avec β = P r[X i = (2p) S /|I ∩ supp(e)| = 2p] = (2p p )( k−2p<br />

k<br />

2<br />

−p )<br />

( k k<br />

2<br />

)<br />

× (n−k−(t−2p) l )<br />

( n−k<br />

l )<br />

Proposition 3.11. (Distribution initiale du processus markovien associé à l’algorithme<br />

<strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong>)<br />

De même que précé<strong>de</strong>mment, la distribution initiale <strong>de</strong> probabilité π 0 est donnée par :<br />

( t n−t<br />

)<br />

π 0 (u) =<br />

u)(<br />

k−u<br />

( n<br />

, ∀u /∈ {(2p) S , (2p) F } (12)<br />

k)<br />

π 0 ((2p) F ) = (1 − β) × π 0 (2p) (13)<br />

π 0 ((2p) S ) = β × π 0 (2p) (14)<br />

avec β = P r[X i = (2p) S /|I ∩ supp(e)| = 2p] = (2p p )( k−2p<br />

k<br />

2<br />

−p )<br />

( k k<br />

2<br />

)<br />

× (n−k−(t−2p) l )<br />

( n−k<br />

l )<br />

19


La chaîne <strong>de</strong> Markov associée à l’algorithme est apériodique.<br />

L’état (2p) S est un état absorbant, c’est à dire qu’on ne peut plus sortir <strong>de</strong> cet état une fois<br />

qu’on y est rentré.<br />

Un état transient est un état non absorbant. Ainsi, F est l’ensemble <strong>de</strong>s états transients.<br />

La chaîne {X i } i∈N est donc une chaîne <strong>de</strong> Markov absorbante.<br />

Une propriété classique <strong>de</strong>s chaînes absorbantes apériodique ayant un nombre fini d’états est<br />

que, quelque soit l’état initial du processus, la probabilité pour qu’il soit dans un état transient<br />

après n itérations tend vers 0 quand n tend vers l’infini. Cette propriété traduit le théorème<br />

suivant :<br />

Théorème 3.12. L’algorithme itératif <strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong> pour le décodage est convergent.<br />

La propriété <strong>de</strong> chaîne absorbante permet également d’expliciter le nombre moyen d’itérations<br />

effectuées par l’algorithme.<br />

On peut dans un premier temps associer à toute chaîne absorbante sa matrice fondamentale,<br />

définie comme suit :<br />

Proposition 3.13. (Matrice fondamentale d’une chaîne <strong>de</strong> Markov absorbante)<br />

Soit {X i } i∈N une chaîne <strong>de</strong> Markov absorbante ayant un nombre fini d’états et P sa matrice <strong>de</strong><br />

transition.<br />

Soit Q la restriction <strong>de</strong> P aux états transients <strong>de</strong> la chaîne, c’est à dire Q = (P u,v ) (u,v)∈F 2.<br />

Alors la matrice (Id − Q) est inversible et son inverse R, appelé matrice fondamentale, est<br />

donnée par :<br />

∞∑<br />

R = (Id − Q) −1 = Q m<br />

Dans un second temps, grâce à cette matrice fondamentale, on va enfin obtenir le nombre<br />

moyen d’itérations effectuées par l’algorithme :<br />

Théorème 3.14. (Nombre moyen d’itérations <strong>de</strong> l’algorithme)<br />

Soit {X i } i∈N la chaîne <strong>de</strong> Markov associée à l’algorithme <strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong>, π 0 sa distribution<br />

initiale <strong>de</strong> probabilité et R sa matrice fondamentale.<br />

L’espérance du nombre d’itérations N effectuées par cet algorithme est<br />

E(N) = ∑ i∈F<br />

m=0<br />

π 0 (i) ∑ j∈F<br />

R i,j<br />

où F est l’ensemble <strong>de</strong>s états d’échec <strong>de</strong> la chaîne.<br />

Proposition 3.15. En conclusion, le facteur total <strong>de</strong> travail <strong>de</strong> l’algorithme <strong>de</strong> <strong>Canteaut</strong>-<br />

<strong>Chabaud</strong> généralisé sur F q est W p,l = E(N) × Ω p,l , où Ω p,l représente :<br />

* 1 Inversion<br />

* k(n−k)<br />

(n − 2) q−1<br />

* k(n − k)<br />

(<br />

q−1<br />

q<br />

q<br />

(<br />

q−1<br />

q<br />

(k − 1)(n − k − 1)<br />

) 2<br />

+2pl<br />

q−1<br />

q<br />

×<br />

Multiplications<br />

) 2 (<br />

+ (2p − 1)l<br />

q−1<br />

(<br />

q−1<br />

q<br />

( k<br />

)<br />

2<br />

+2p(n−k−l) q−1<br />

p<br />

q<br />

× 1 ×<br />

q l<br />

q<br />

) ( 2 k<br />

)<br />

×<br />

2<br />

+ 2p(n − k − l)<br />

p<br />

) 2<br />

Additions<br />

20<br />

( k<br />

) 2<br />

2<br />

+(k−1)(n−k−1)<br />

p<br />

( ) 2 q−1<br />

q ×<br />

1<br />

×<br />

q l<br />

( k<br />

) 2<br />

2<br />

+<br />

p<br />

( ) 2 q−1<br />

q +


Démonstration. Le nombre d’opérations effectuées en moyenne à chaque itération se décompose<br />

<strong>de</strong> la manière suivante :<br />

1. Le calcul <strong>de</strong><br />

(<br />

c J −<br />

)<br />

c I Z nécessite<br />

2<br />

* k(n − k) q−1<br />

q Multiplications<br />

( ) 2<br />

* k(n − k) q−1<br />

q Additions<br />

( k<br />

)<br />

2. Pour chacun <strong>de</strong>s<br />

2<br />

vecteurs e ′ 1<br />

p<br />

, le calcul <strong>de</strong> e′ 1 Z1 L nécessite<br />

* pl q−1<br />

q<br />

Multiplications<br />

) 2<br />

* (p − 1)l Additions<br />

(<br />

q−1<br />

q<br />

et celui <strong>de</strong> c L − c I Z L + e ′ 1 Z1 L<br />

ne nécessite plus que<br />

( ) 2<br />

* l q−1<br />

q Additions<br />

( k<br />

)<br />

3. De même, pour chacun <strong>de</strong>s<br />

2<br />

vecteurs e ′ 2<br />

p<br />

, le calcul <strong>de</strong> e′ 2 Z2 L nécessite<br />

* pl q−1<br />

q<br />

Multiplications<br />

) 2<br />

* (p − 1)l Additions<br />

(<br />

q−1<br />

q<br />

4. Le nombre <strong>de</strong> collisions, c’est à dire le nombre <strong>de</strong> couples (e ′ 1 , e′ 2 ) tels que<br />

c L − c I Z L + e ′ 1 Z1 L = −e′ 2 Z2 L , est (<br />

1 k<br />

) 2<br />

q l × 2<br />

p<br />

et pour chacune <strong>de</strong> ces collisions, le calcul <strong>de</strong> c J\L − c I Z J\L + e ′ 1 Z1 J\L + e′ 2 Z2 J\L nécessite :<br />

* 2p(n − k − l) q−1<br />

* 2p(n − k − l)<br />

q<br />

(<br />

q−1<br />

q<br />

Multiplications<br />

) 2<br />

Additions<br />

5. Le coût moyen <strong>de</strong> la mise à jour <strong>de</strong> Z a été fait dans la remarque 0.4.<br />

On retrouve bien le résultat donné en additionnant chaque partie.<br />

Combien coûte :<br />

→ le test d’égalité <strong>de</strong> <strong>de</strong>ux vecteurs ? (c L − c I Z L + e ′ 1 Z1 L = −e′ 2 Z2 L )<br />

→ le calcul du poids d’un vecteur ? (wt(c J\L − c I Z J\L + e ′ 1 Z1 J\L + e′ 2 Z2 J\L ))<br />

→ l’allocation dynamique <strong>de</strong> la mémoire ? (voir page 66 thèse Anne)<br />

21


Table <strong>de</strong>s matières<br />

Résumé 1<br />

1 Introduction 1<br />

1.1 Généralités sur les co<strong>de</strong>s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />

2 Cryptanalyse du système <strong>de</strong> McEliece 3<br />

2.1 Algorithmes exhaustifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

2.2 Décodage par ensembles d’information généralisé sur F q . . . . . . . . . . . . . . 4<br />

2.3 Algorithme <strong>de</strong> Lee-Brickell généralisé sur F q . . . . . . . . . . . . . . . . . . . . . 5<br />

2.4 Algorithme <strong>de</strong> Leon généralisé sur F q . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

2.5 Algorithme <strong>de</strong> Stern généralisé sur F q . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

2.6 Synthèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

3 Algorithme <strong>de</strong> <strong>Canteaut</strong>-<strong>Chabaud</strong> généralisé sur F q 11<br />

3.1 Principe <strong>de</strong> la métho<strong>de</strong> itérative généralisée sur F q . . . . . . . . . . . . . . . . . 11<br />

3.2 L’algorithme détaillé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

3.3 Temps <strong>de</strong> calcul théorique <strong>de</strong> l’algorithme . . . . . . . . . . . . . . . . . . . . . . 17<br />

Références 23<br />

22


Références<br />

[1] E.R. Berlekamp, R.J. McEliece and H.C.A. Van Tilborg. ”On the inherent intractability<br />

of certain coding problems”. IEEE Trans. Inform. Theory, vol. IT-24 : pages 384-386, mai<br />

1978.<br />

[2] R.J. McEliece. ”A public-key cryptosystem based on algebraic coding theory”. JPL DSN<br />

Progress Report 42-44, pages 114-116, janvier 1978.<br />

[3] H. Nie<strong>de</strong>rreiter. ”Knapsack-type cryptosystems and algebraic coding theory”. Problems of<br />

Control and Information Theory, 15(2) : pages 159-166, 1986.<br />

[4] W. Diffie et M.E. Hellman. ”New directions in Cryptography”. IEEE Trans. Inform. Theory,<br />

vol. IT-22 : pages 644-654, novembre 1976.<br />

[5] A. <strong>Canteaut</strong>. ”Attaques <strong>de</strong> cryptosystèmes à mots <strong>de</strong> poids faible et construction <strong>de</strong> fonctions<br />

t-résilientes”. Ph.D. dissertation, Univ. Paris 6, octobre 1996.<br />

[6] T.A. Berson. ”Failure of the McEliece public-key cryptosystem un<strong>de</strong>r message-resend and<br />

related-message attack”. Lecture Notes in Computer Science, Advances in Cryptology -<br />

CRYPTO ’97, vol. 1294, pages 213-220, août 1997.<br />

[7] E. Prange. ”The use of information sets in <strong>de</strong>coding cyclic co<strong>de</strong>s”. IEEE Transactions, vol.<br />

IT-8, pages S5-S9, septembre 1962.<br />

[8] P.J. Lee et E.F. Brickell. ”An observation on the security of McEliece’s public-key cryptosystem”.<br />

Lecture Notes in Computer Science, Advances in Cryptology - EUROCRYPT’88,<br />

vol. 330, pages 275-280, Springer-Verlag, mai 1988.<br />

[9] J.S. Leon. ”A probabilistic algorithm for computing minimum weights of large errorcorrecting<br />

co<strong>de</strong>s”. IEEE Trans. Inform. Theory, vol. IT-34(5), pages 1354-1359, septembre<br />

1988.<br />

[10] J. Stern. ”A method for finding co<strong>de</strong>words of small weight”. Lecture Notes in Computer<br />

Science, Coding Theory and Applications, vol. 388, pages 106-113, Springer-Verlag, 1989.<br />

[11] F. <strong>Chabaud</strong>. ”Asymptotic analysis of probabilistic algorithms for finding short co<strong>de</strong>words”.<br />

CISM Courses and Lectures - EUROCODE 92, vol. 339, pages 175-183, 1992.<br />

[12] A. <strong>Canteaut</strong> et H. Chabanne. ”A further improvement of the work factor in an attempt at<br />

breaking McEliece’s cryptosystem”. EUROCODE 94, P. Charpin, Ed., INRIA, mars 1994.<br />

[13] A.<strong>Canteaut</strong> et F. <strong>Chabaud</strong>. ”A new algorithm for finding minimum-weight words in a linear<br />

co<strong>de</strong> : application to McEliece’s cryptosystem and to narrow-sense BCH co<strong>de</strong>s of length<br />

511”. IEEE Trans. Inform. Theory, vol. IT-44 : pages 367-378, janvier 1998.<br />

[14] A. <strong>Canteaut</strong> et N. Sendrier. ”Cryptanalysis of the Original McEliece Cryptosystem”. Lecture<br />

Notes in Computer Science, Advances in Cryptology ASIACRYPT’98, vol. 1514, pages 187-<br />

199, Springer-Verlag, janvier 1998.<br />

[15] C.M. Adams et H. Meijer. ”Security-related comments regarding McEliece’s public-key<br />

cryptosystem”. Lecture Notes in Computer Science, Advances in Cryptology - CRYPTO<br />

’87, vol. 293, pages 224-228, Springer-Verlag, août 1987.<br />

[16] D.J. Bernstein, T. Lange et C. Peters. ”Attacking and <strong>de</strong>fending the McEliece cryptosystem”.<br />

Lecture Notes in Computer Science, PQCrypto 2008, vol. 5299, pages 31-46, Springer-<br />

Verlag, août 2008.<br />

23

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!