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 ...
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