Vous êtes sur la page 1sur 4

Registres ` dcalage ` rtroaction linaire a e a e e et algorithme de Berlekamp-Massey

Une mthode classique pour gnrer une suite binaire pseudo-alatoire est dutiliser un e e e e registre ` dcalage ` rtroaction linaire (LFSR pour Linear Feedback Shift Register). Un a e a e e LFSR de longueur L est compos dun registre ` dcalage contenant une suite de L bits e a e (si , . . . ,si+L1 ), et dune fonction de rtroaction linaire. e e

- si+L1

...

si+1

si

- sortie

si+L


c1

 
cL1 cL

 ?  

 

...

?  

A chaque top dhorloge, le bit de poids faible si constitue la sortie du registre, et les autres bits sont dcals vers la droite. Le nouveau bit si+L plac dans la cellule de poids fort du e e e registre est donn par une fonction linaire des bits (si , . . . ,si+L1 ) e e si+L = c1 si+L1 + c2 si+L2 + . . . + cL si o` les coecients de rtroaction (ci )1iL sont des lments de F2 . u e ee Les bits (s0 , . . . ,sL1 ), qui dterminent enti`rement la suite, constituent ltat initial du e e e registre. Les coecients de rtroaction sont usuellement reprsents par un polynme de F2 [X] de e e e o degr L, appel polynme de rtroaction du registre : e e o e P (X) = 1 + c1 X + c2 X 2 + . . . + cL X L . Un rsultat classique est que la priode de la suite binaire engendre par un LFSR est e e e maximale (et vaut 2L 1) quand le polynme de rtroaction est primitif. On se placera donc o e dans ce cas dans toute la suite. On peut donc utiliser un LFSR comme gnrateur pseudo-alatoire dans les applications e e e cryptographiques. La clef secr`te du syst`me peut alors correspondre ` linitialisation et aux e e a coecients de rtroaction du registre. e Un tel gnrateur pseudo-alatoire sav`re toutefois dune grande faiblesse cryptograe e e e phique. En 1969, J. Massey a montr que lalgorithme propos par Berlekamp pour le dcodage e e e des codes BCH pouvait tre adapt pour retrouver le polynme de rtroaction dun LFSR ` e e o e a partir uniquement des 2L premiers bits de la suite produite s. 1

Cet algorithme consiste ` construire pour les valeurs successives de N un LFSR de lona gueur LN et de polynme de rtroaction fN qui gn`re les N premiers bits de la suite s. On o e e e peut montrer que pour N = 2L, lalgorithme retourne le polynme de rtroaction du LFSR o e de dpart. e Entree : s0 ,s1 , . . . ,sn1 une suite de longueur n. Initialisation f (X) = 1, L = 0, m = 1, g(X) = 1 ` Pour N variant de 0 a n 1 L 1. Calculer d = sN + i=1 ci sN i mod 2. 2. Si d = 1 alors t(X) = f (X) et f (X) = f (X) + g(X)X N m . Si 2L N alors L = N + 1 L, m = N, g(X) = t(X). Exemple : Application de lalgorithme de Berlekamp-Massey ` la suite binaire de longueur 9, a s = 001101110. N sN d L f (X) m g(X) 0 1 -1 1 0 0 0 0 1 -1 1 1 0 0 0 1 -1 1 2 1 1 3 X3 + 1 2 1 3 1 1 3 X3 + X + 1 2 1 3 + X2 + X + 1 4 0 1 3 X 2 1 5 1 1 3 X2 + X + 1 2 1 2+X +1 6 1 0 3 X 2 1 7 1 1 5 X5 + X2 + X + 1 7 X2 + X + 1 8 0 1 5 X5 + X3 + 1 7 X2 + X + 1 Le LFSR de longueur 5 ayant pour polynme de rtroaction X 5 + X 3 + 1 gn`re donc la suite o e e e donne. e Pour plus dinformation sur cet algorithme, on pourra se rfrer ` : ee a Massey (J.L.). Shift-register synthesis and BCH decoding. IEEE Transactions on Information Theory, vol. 15, janvier 1969, pp. 122127.

Implmentation dun LFSR e

Le but de cette premi`re partie est dcrire un programme qui prend en argument un e e entier N et le nom de chier dans lequel est dcrit le polynme de rtroaction du LFSR, e o e et qui crit dans un chier les N premiers bits de la suite produite par ce LFSR avec une e initialisation alatoire. e Les spcications du registre seront donnes dans un chier contenant la liste des degrs e e e des monmes intervenant dans le polynme de rtroaction P , classs par ordre dcroissant. o o e e e Ainsi, le polynme 1 + X 3 + X 40 sera reprsent par la ligne o e e 40 3 0

1.1

Lecture du polynme de rtroaction o e

Dans tout le programme, on reprsentera les polynmes ` coecients binaires et ltat e o a e des registres par des tableaux dentiers de type unsigned long. Par exemple, le polynme o 1 + X 2 + X 3 + X 5 + X 6 sera reprsent par un tableau dont lunique lment est lentier 1 + e e ee 2 + 23 + 25 + 26 = 109. 2 Pour faciliter le calcul du bit de rtroaction, on fera en sorte que les tableaux dentiers e reprsentant respectivement ltat du registre et les coecients de rtroaction correspondent e e e aux bits ordonns de la faon suivante : e c (si+L1 , . . . ,si+1 ,si ) pour le tableau donnant ltat ; e (c1 , . . . ,cL1 ,cL ) pour le tableau reprsentant les coecients de rtroaction. e e De cette faon, le calcul du bit de rtroaction va pouvoir se faire ` laide dun ET entre les 2 c e a tableaux. Ecrire une fonction qui, pour une variable L de type unsigned int et un ot (type FILE*) donns, aecte ` L le degr du polynme lu dans le ot et retourne un tableau dunsigned e a e o long correspondant aux coecients (c1 , . . . ,cL1 ,cL ).

1.2

Initialisation dun LFSR par une valeur alatoire e

Ecrire une fonction qui gn`re alatoirement linitialisation dun LFSR de longueur L sous e e e forme dun tableau dunsigned long. Son en-tte sera e unsigned long *lfsr_random_init(unsigned int L)

1.3

Implmentation dun LFSR e

Ecrire une fonction lfsr clock qui correspond ` un top dhorloge du LFSR. Cette fonction a a pour en-tte e unsigned int lfsr_clock(unsigned long *lfsr, unsigned long *Q, unsigned int L) Le param`tre lfsr donne le contenu du registre ` un instant donn, Q est le polynme e a e o reprsentant les coecients de rtroaction et L la longueur du registre. La fonction lfsr clock e e retournera le bit produit en sortie du LFSR et aura pour eet de mettre ` jour le contenu du a registre.

1.4

Programme principal

Ecrire un programme qui, ` partir de la description du syst`me donn dans un chier, a e e initialise le LFSR par une valeur alatoire et ache les N premiers bits de sa sortie. Le nom e du chier contenant la description du syst`me et la valeur de N seront passs en arguments e e du programme. On entrera par exemple la ligne de commande generateur description.txt 10000

Algorithme de Berlekamp-Massey

Lobjectif de cette deuxi`me partie est dcrire un programme qui prend comme argument e e un chier contenant une suite binaire et un entier L correspondant ` la longueur maximale a

attendue pour le LFSR, et qui applique lalgorithme de Berlekamp-Massey aux 2L premiers bits de la suite. On pourra crire une fonction qui prend comme param`tre un tableau dunsigned long e e reprsentant un polynme et qui ache ` lcran ce polynme sous forme habituelle. Le e o a e o prototype de cette fonction sera void affiche polynome(unsigned long *);

Vous aimerez peut-être aussi