102 Chapitre 6. Co<strong>de</strong>s à eacements MDS basés sur les FNTpremier connu. Dans la pratique, nous avons donc développé notre co<strong>de</strong> sur le corps<strong>de</strong> Galois F 65537 qui permet <strong>de</strong> co<strong>de</strong>r <strong>de</strong>s valeurs sur <strong>de</strong>s mots <strong>de</strong> 16 bits hormis lavaleur "65536".Il est possible <strong>de</strong> résoudre ce <strong>pro</strong>blème, car en pratique, le co<strong>de</strong> est limité à unetaille n = 32768. Ce qui signie que pour chaque paquet <strong>de</strong> symboles, il existe uneplus petite valeur du corps qui n'est pas présente. Dans ce cas, la valeur 65536 seracodée par cette valeur absente, et sera signalé tel quel par l'enco<strong>de</strong>ur via un champd'en-tête <strong>de</strong> 16 bits.L'application <strong>de</strong> la DFT/FFT sur ce type <strong>de</strong> corps se dénit ainsi :Dénition 6.8. La Transformée en Nombres <strong>de</strong> Fermat (FNT) est l'application <strong>de</strong> latransformée <strong>de</strong> Fourier rapi<strong>de</strong> (FFT) sur un corps Fq où q est un nombre <strong>de</strong> Fermatpremier.Dans le corps F 65537 , nous avons utilisé 3 comme racine primitive. Pour <strong>de</strong>s co<strong>de</strong>s<strong>de</strong> taille n = 2 i , l'élément d'ordre utilisé pour la FNT sera 3 216 i .6.2.3 L'algorithme <strong>de</strong> décodage <strong>de</strong> la FNTDans la suite <strong>de</strong> cette partie, nous prenons l'hypothèse que la taille n du co<strong>de</strong> estune puissance <strong>de</strong> <strong>de</strong>ux. Lors d'une implémentation pratique, si n n'est pas une puissance<strong>de</strong> <strong>de</strong>ux, alors la FNT travaillera sur la plus petite puissance <strong>de</strong> <strong>de</strong>ux supérieureà n et le co<strong>de</strong> sera poinçonné. De la même manière, nous prenons aussi k commeune puissance <strong>de</strong> <strong>de</strong>ux, en remplissant éventuellement le vecteur source <strong>de</strong> la FNT <strong>de</strong>zéros jusqu'à atteindre une puissance <strong>de</strong> <strong>de</strong>ux. Au niveau du décodage, le déco<strong>de</strong>urconsidérera ainsi ce padding comme faisant partie <strong>de</strong> l'ensemble <strong>de</strong>s éléments reçus.Soit un vecteur <strong>de</strong> symboles sources s = (s 0 ; s 1 ; :::; s k 1 ) <strong>de</strong> dimension k et àvaleurs dans Fq, et soit ∑ k 1s(x) = s i=0 ix i le polynôme associé. Nous complétonsce vecteur avec <strong>de</strong>s 0 an <strong>de</strong> former un vecteur <strong>de</strong> taille n. Le polynôme associén'est ainsi pas modié. Il est alors possible <strong>de</strong> calculer la FNT <strong>de</strong> ce vecteur, quidonnera un vecteur <strong>de</strong> symboles codés c = (c 0 ; c 1 ; :::; c n 1 ). La <strong>pro</strong>position 6.6 nousindique ainsi que ce mécanisme forme un co<strong>de</strong> MDS, à savoir qu'il est possible <strong>de</strong>retrouver l'ensemble <strong>de</strong>s symboles sources à partir <strong>de</strong> n'importe quel sous-ensemble<strong>de</strong> c comportant k symboles. Le point principal est donc <strong>de</strong> dénir un décodage ecaceassocié à cette opération.Dans le cas particulier où l'ensemble du vecteur c a été reçu, le décodage est immédiat.Il correspond simplement à l'application <strong>de</strong> la transformée <strong>de</strong> Fourier inverse(FNT 1 ) sur le vecteur c. Dans le cas général cependant, au moins un <strong>de</strong>s symbolescodés a pu être perdu, rendant impossible l'application du mécanisme précé<strong>de</strong>nt. Il estdonc nécessaire <strong>de</strong> dénir un algorithme <strong>de</strong> décodage <strong>de</strong> la FNT lorsque au moins ksymboles codés ont été reçus, mais pas tous.La <strong>pro</strong>position 6.7 a permis <strong>de</strong> mettre en lumière la relation entre la FNT/DFTet l'évaluation polynômiale. Soit ! l'élément d'ordre n utilisé pour la FNT, alors lessymboles codés c i correspon<strong>de</strong>nt à l'évaluation du polynôme s(x) sur les ! i :
6.2. Construction <strong>de</strong>s co<strong>de</strong>s RS-FNT 1038i 2 f0; 1; :::; n 1g; c i = s(! i )Le décodage peut donc être vu comme un <strong>pro</strong>blème général d'interpolation polynômiale.Il s'agit ici, <strong>de</strong> déterminer le polynôme <strong>de</strong> <strong>de</strong>gré k 1, s(x) à partir <strong>de</strong> kpoints d'évaluations reçus faisant partie d'une suite en <strong>pro</strong>gression géométrique. Cettevue nous permet d'ailleurs <strong>de</strong> démontrer d'une autre manière le caractère MDS <strong>de</strong> laFNT.L'interpolation polynômiale est un vaste domaine étudié <strong>de</strong>puis <strong>de</strong> très nombreusesannées et qui possè<strong>de</strong> un large éventail <strong>de</strong> solutions. Certaines solutions <strong>de</strong> complexitéO(n log n) ont été <strong>pro</strong>posées. Toutefois, elles sont relativement diciles à implémenteren l'état et la plupart <strong>de</strong>s solutions et implémentations classiques possè<strong>de</strong>nt unecomplexité quadratique. L'algorithme <strong>de</strong> décodage que nous présentons permet quantà lui d'eectuer cette interpolation et <strong>de</strong> déco<strong>de</strong>r la FNT avec une complexité pratique<strong>de</strong> O(n log n).Prérequis mathématiquesTout d'abord, nous présentons quelques résultats utiles à l'algorithme <strong>de</strong> décodage.Dans le cas général, la multiplication <strong>de</strong> <strong>de</strong>ux polynômes <strong>de</strong> <strong>de</strong>gré strictementinférieur à n est <strong>de</strong> complexité O(n 2 ) en utilisant une métho<strong>de</strong> naïve où chaque<strong>pro</strong>duit <strong>de</strong> monômes est calculé. Dans les années 1960, Karatsuba a présenté unalgorithme [80] permettant <strong>de</strong> réduire la complexité théorique <strong>de</strong> cette multiplicationà O(n log 23 ) ' O(n 1:59 ). Soient les polynômes a(x) = a 1 x + a 0 et b(x) = b 1 x + b 0 ,l'algorithme <strong>de</strong> Karatsuba utilise la décomposition <strong>de</strong> a(x)b(x) suivante :a(x)b(x) = a 1 b 1 x 2 + (a 1 b 1 + a 0 b 0 (a 1 a 0 )(b 1 b 0 ))x + a 0 b 0Cette décomposition ne requiert ainsi que 3 multiplications et permet d'atteindrela complexité <strong>pro</strong>posée. Toom et Cook [81][82] ont généralisé cette métho<strong>de</strong> pour <strong>de</strong>sschémas <strong>de</strong> polynômes <strong>de</strong> <strong>de</strong>gré k qui ont donné les algorithmes <strong>de</strong> Toom-k, et quilog(2k 1)sont <strong>de</strong> complexité O(nlog k). Cependant ces algorithmes trainent une constante<strong>pro</strong>hibitive dès lors que k dépasse 5. L'algorithme <strong>de</strong> multiplication polynômiale quenous allons utiliser ici est une adaptation <strong>de</strong> l'algorithme <strong>de</strong> Schönhage-Strassen [83]aux corps nis.Proposition 6.9. (Schönhage-Strassen) Soient a(x) = ∑ n 1i=0 a ix i et b(x) = ∑ n 1i=0 b ix i<strong>de</strong>ux polynômes à valeurs dans (Fq) n avec q > 2n. Il est possible d'en calculer le <strong>pro</strong>duita(x)b(x) avec la complexité M(n) = O(n log n).Démonstration. Soit ! un élément d'ordre 2n dans le corps considéré. La DFT-2n <strong>de</strong>spolynômes a(x) et b(x) peut être vue grâce à la <strong>pro</strong>position 6.7 comme l'évaluation<strong>de</strong> ces polynômes sur les diérents ! i . Soient A et B ces DFT, nous avons :8i 2 f0; 1; :::; 2n 1g; A i = a(! i ); B i = b(! i )