Registre à décalage à rétroaction linéaire
Un registre à décalage à rétroaction linéaire, ou LFSR (sigle de l'anglais Modèle:Lang), est un dispositif électronique ou logiciel qui produit une suite de bits qui peut être vue comme une suite récurrente linéaire sur le corps fini F2 à 2 éléments (0 et 1). La notion a été généralisée à n'importe quel corps fini.
Réalisé électroniquement, dans le cas particulier d'une suite de 0 et de 1, c'est un registre à décalage avec rétroaction linéaire, ce qui signifie que le bit entrant est le résultat d'un OU exclusif (ou XOR) entre plusieurs bits du registre, cette opération étant également l'addition sur le corps fini F2. Ces dispositifs sont simples, peu coûteux et efficaces.
La suite récurrente produite par un LFSR est nécessairement périodique à partir d'un certain rang. Les LFSR sont utilisés en cryptographie pour engendrer des suites de nombres pseudo-aléatoires. La fonction de rétroaction est alors choisie de façon à obtenir une période la plus grande possible.
L’étendue des applications est très large : chiffrement des communications, contrôle d'erreurs sur la transmission de données, auto-test des composants électroniques…

Fonctionnement
Principe

Un LFSR est un dispositif dérivé du registre à décalage de type SIPO, Serial In - Parallel Out, dans lequel un ou plusieurs « étages » du registre subissent une transformation pour être réinjectés en entrée de celui-ci[1].
Il est dit de longueur « » lorsqu'il est composé de éléments appelés « étages » ou « cellules », le contenu de l'ensemble de ces éléments à un moment « » est l'état du LFSR à ce moment[2]. À chaque top d'horloge le contenu d'un étage est transféré au suivant et le premier est rempli par le résultat d'une fonction linéaire qui prend en compte l'état d'un ou de plusieurs étages[2]. Modèle:Clr
Exemple
| Horloge | État du LFSR | Sortie |
|---|---|---|
| 0 | 0 1 1 0 |
|
| 1 | 1 0 1 1 |
0
|
| 2 | 0 1 0 1 |
1
|
| 3 | 0 0 1 0 |
1
|
| 4 | 0 0 0 1 |
0
|
| 5 | 1 0 0 0 |
1
|
| 6 | 1 1 0 0 |
0
|
| 7 | 0 1 1 0 |
0
|
Exemple des états successifs d'un LFSR à 4 bits avec une connexion des premier, second et quatrième étages au niveau de la fonction de retour[3] :
- à l'état initial du LFSR est
0 1 1 0; - à le bit d'entrée vaut
1, l'état du LFSR est1 0 1 1et le bit de sortie vaut0; - à le bit d'entrée vaut
0, l'état du LFSR est0 1 0 1et le bit de sortie vaut1; - à le bit d'entrée vaut
0, l'état du LFSR est0 0 1 0et le bit de sortie vaut1; - à le bit d'entrée vaut
0, l'état du LFSR est0 0 0 1et le bit de sortie vaut0; - à le bit d'entrée vaut
1, l'état du LFSR est1 0 0 0et le bit de sortie vaut1; - à le bit d'entrée vaut
1, l'état du LFSR est1 1 0 0et le bit de sortie vaut0; - à le bit d'entrée vaut
0, l'état du LFSR est0 1 1 0et le bit de sortie vaut0.
Au septième top d'horloge l'état du registre est identique à son état initial. On dit que le LFSR est de période 7. Modèle:Clr
Modèles mathématiques
Conception

Un LFSR est défini comme suit sur un corps fini où est premier et [4] :
- un entier qui est sa taille ;
- un état initial à éléments sur ;
- une fonction linéaire de retour ;
- on calcule ;
- on fait entrer et fait sortir ;
- on obtient une nouvelle séquence de sortie .
Définitions
Un LFSR peut être défini comme un triplet , où Fq est le corps fini à q éléments, r est le nombre de cellules du LFSR, les coefficients c1, …, cr sont des éléments de Fq[5].
- Suite engendrée
- La suite engendrée par ce LFSR est une suite vérifiant la relation de récurrence
, pour [5]
ou de façon équivalente
[1].
- Taille
- La taille du LFSR est r le nombre de cellules.
- Coefficients de connexion
- les coefficients c1, …, cr sont appelés les coefficients de connexion du LFSR[5].
- Fonction de retour ou de rétroaction
- La fonction f définie par
est appelée fonction de retour ou de rétroaction du LFSR[2]. Quand q=2, F2 est le corps des booléens et f est une fonction booléenne (linéaire). - Fonction génératrice
- La fonction génératrice de la suite engendrée par un LFSR sur le corps Fq est la série formelle de Fq [[X]] définie par[6]Modèle:,[7]
Représentations polynomiales
- Polynôme de rétroaction
- Soit un LFSR défini par le triplet . Son polynôme de rétroaction, appelé aussi polynôme caractéristique, est [8].
- Exemple : Un LFSR aura comme polynôme de rétroaction .
- Polynôme de connexion
- Pour un LFSR défini par le triplet , le polynôme de connexion est dans [6]Modèle:,[7].
- Exemple : Un LFSR aura comme polynôme de connexion .
Périodicité
Modèle:Section à recycler Puisque la prochaine valeur d'entrée d'un LFSR dépend uniquement des valeurs de certains étages de celui-ci et que l'état « tout à zéro » ne génère jamais de changement sa séquence est de période maximale sur où est la taille du registre[9]Modèle:,[10].
Une séquence d'un LFSR sur avec une période où est la taille du registre est appelé une « m-sequence »[3]Modèle:,[9].
Exemple : Un LFSR aura une période maximale de .
Algorithme de Berlekamp-Massey
Introduit en 1969 par James Massey l'algorithme de Modèle:Lien permet d'obtenir le plus petit LFSR possible pour une séquence de sortie choisie[11]. Il suffit de capter bits consécutifs d'une m-séquence de période pour pouvoir reconstruire la séquence entièrement[12].
Description de l'algorithme[13] :
En entrée : les éléments d'une séquence récurrente de manière linéaire définie sur avec donnés par la liste . Le polynôme minimal est de degré limite .
En sortie : le polynôme caractéristique minimal de la séquence.
Début
- Variables locales
- sont des polynômes de .
- Initialisation
- Boucle, tant que faire :
- quotient de la division de par
- reste de la division de par
- Fin boucle
- Retour
- .
Fin
Modes de connexion
La représentation employée jusqu'ici pour représenter la connexion entre les différents étages du registre décrit le mode dit de « Fibonacci ». Une autre représentation est possible, utilise le mode dit de « Galois »[14].
Fibonacci

Un registre en mode Fibonacci applique strictement la définition d'un LFSR : les contenus des différents étages sont ajoutés ou non les uns aux autres, le résultat de cette addition est ensuite placé dans l'étage d'entrée du registre et tous les étages subissent un décalage vers la sortie[15]. Modèle:Clr
Galois

Dans le mode dit de Galois le contenu de l'étage de sortie est ajouté ou non au contenu des étages du registre puis tous les étages subissent un décalage vers la sortie et le contenu de l'étage sortant est réinjecté dans l'étage d'entrée[16].
Au niveau matériel les LFSRs sont souvent mis en œuvre en utilisant ce mode car celui-ci est plus rapide et présente moins de latence que le mode Fibonacci puisque les étages sont mis à jour simultanément[17]Modèle:,[18]. Modèle:Clr
Applications
Les LFSRs existent sous deux formes: matérielle et logicielle, mais c'est surtout la première configuration qui est utilisée car elle est simple à mettre en œuvre (matériel peu onéreux associé à un algorithme de traitement simple)[14].
L'usage de cette technologie peut se retrouver dans les domaines suivants[3] :
- Générateur de nombres pseudo-aléatoires ;
- Algorithmes de chiffrement des données (Cryptographie, Stéganographie) ;
- Détection d'erreurs et correction de données ;
- Auto-contrôle des circuits électroniques ;
- Traitement numérique du signal ;
- Compteurs à base de LFSRs ;
- Autres utilisations des LFSRs (Jeux vidéo, radar…).
Génération de nombres pseudo-aléatoires
Il y a eu beaucoup de publications à propos de la génération des nombres pseudo-aléatoires par les registres à décalage et à part quelques études sur les Modèle:Lien, la majorité des auteurs utilisent la rétroaction linéaire[2].
Un problème fondamental en cryptologie est la production de suites de bits « aussi aléatoires que possible ». Un exemple évident étant la génération des clefs de chiffrement (symétrique ou asymétrique)[19].
Ce problème se décompose en fait en deux parties :
- La génération de bits par des procédés physiques, dans le cas d'un ordinateur des mesures liées à l'activité de la machine (températures interne, déplacement de la souris, etc.)
- L'expansion d'une courte suite aléatoire de bits en une suite éventuellement beaucoup plus grande; Dans ce dernier cas, on parle de suite pseudo-aléatoire.
Chiffrement des données
Cryptographie

Les générateurs pseudo-aléatoires à base de LFSR sont utilisés dans les chiffrements de flux que l'on retrouve sous le terme anglais cipher stream[20], ils constituent avec les chiffrements par bloc les 2 grandes catégories modernes du chiffrement symétrique de la cryptographie.
Les LFSRs sont les composants de base de nombreux générateurs chiffrants[21].
Les raisons pour lesquelles les LFSRs sont utilisés dans un grand nombre de générateurs de flux sont les suivantes[21] :
- Les LFSRs sont bien adaptés à une configuration matérielle ;
- Ils peuvent produire des grandes périodes de séquences binaires ;
- Les séquences produites ont des bonnes propriétés statistiques ;
- En raison de leur nature, ils peuvent être facilement analysés en utilisant des modèles mathématiques.
Cependant, l'utilisation des LFSRs dans leur configurations initiales est devenue très vite vulnérable aux attaques mathématiques (démontré par l'algorithme de Berlekamp-Massey).
Un système informatique pour ne pas être vulnérable doit être sécurisé contre les attaques connues et référencées, c'est pourquoi un LFSR ne doit jamais être utilisé par lui-même comme un générateur de flux de clés[22].
Néanmoins, les LFSRs restent encore utilisés en raison de leurs coûts de mise en œuvre très bas[22].
Trois méthodes peuvent être employées pour contourner l'effet des propriétés de linéarité des LFSRs[22] :
- Associer une fonction non linéaire aux sorties de plusieurs LFSRs ;
- Utiliser une fonction de filtrage non linéaire basé sur le contenu d'un seul LFSR ;
- Utiliser plusieurs LFSRs en parallèle ou une horloge externe qui peut provenir d'un autre LFSR[23].
Les propriétés attendues d'un générateur de flux de chiffrement sont[22] :
- Une grande période ;
- Grande complexité linéaire ;
- Bonnes propriétés statistiques.
Exemples d'algorithmes cryptographiques utilisant les LFSRs :
- Codage/décodage des transmissions des téléphones cellulaires
A5/1 : chiffrement des communications GSM[note 1], il utilise 3 LFSRs de 19, 22 et 23 bits (64 bits au total) ; - Codage du Bluetooth
E0 : protocole de codage du Bluetooth utilisant quatre LFSR de longueurs 25, 31, 33, et 39 bits (128 bits au total)[24].
Stéganographie

La stéganographie est la technique qui permet de cacher de l'information, le plus souvent un texte dans des images, une des méthodes est de remplacer le bit de poids faible de chaque pixel formant l'image par un autre bit d'information[25].
Les séquences pseudo-aléatoires à base de LFSRs sont une des méthodes de chiffrement de l'information[25].
Embarqués dans des circuits logiques programmables tels que les FPGA[note 2], ils répondent à un besoin croissant de cacher l'information[26]. Modèle:Clr
Détection d'erreurs et correction de données
| Application | Type | taille LFSR |
|---|---|---|
| CRC | CRC-12 | 12 |
| CRC-16 | 16 | |
| Réseau ATM[note 3] | CRC-32 | 32 |
Ce mécanisme que l'on appelle contrôle de redondance cyclique et que l'on retrouve sous le nom de CRC[note 4] est un dispositif de contrôle d'erreur lors des transmissions de données brutes dans le domaine du réseau, le stockage numérique ou encore dans la compression de donnée[27].
Les composants hardware LFSR sont un des moyens faciles et bon marché pour générer des suites pseudo-aléatoires utilisées par ces procédés[27].
Auto-contrôle des circuits électroniques
Le test des circuits électroniques a été longtemps problématique car les solutions existantes donnant des temps de réponses corrects étaient souvent très onéreuses. Le coût n'est pas le seul problème, il faut aussi que le dispositif puisse répondre à 2 problématiques[28] :
- Le temps : Il ne faut pas que le mécanisme consomme trop de temps à générer l'échantillonnage de test au détriment de l'efficacité du composant ;
- Le volume de donnée : La taille de échantillonnage peut devenir tellement grande que le test n'est plus efficace.
La technologie BIST[note 5] est une méthode de test des composants électroniques qui s'appuie sur plusieurs mécanismes[29] :
- Technique de parité ;
- Technique de comptage ;
- LFSRs.
Les tests aléatoires sur une partie du composant suppose de pouvoir agir sur un échantillonnage des données du composant[30].
Traitement numérique du signal
C'est l’étude du traitement du signal numérisé tel que le filtrage ou la compression, elle est assurée par un processeur de signal numérique que l'on retrouve indiqué dans ce domaine par DSP[note 6]. Ces opérations seraient difficilement réalisables directement sur les données binaires en mémoire sans algorithme de compression/décompression.
Les LFSRs sont fréquemment utilisés pour cette tache car ils sont efficaces dans le traitement de grande quantité de données binaires et ils ont un faible cout d’implémentation dans leurs formes matériels [31].
Compteurs à base de LFSRs
Les compteurs binaires sont des composants qui sont utilisés couramment dans des équipements nécessitant un comptage comme, par exemple, les montres digitales ou les chronomètres.
Un LFSR est un type spécial de compteur qui génère une séquence pseudo-aléatoire, il peut être utilisé en remplacement des compteurs binaires traditionnels[32].
Exemples d'utilisation[33]:
- Compteurs à incrément ou décrément 'up/down counters' ;
- Down counters - commence à w/ 111 ;
- Utilise une porte 'XOR' pour la retroaction ;
- L'initialisation ne doit pas être que des zéros.
- 'Up counters' commence à w/ 000.
Utilisation du XNOR
| Avantages[34] | Inconvénients[34] |
|---|---|
Nécessite peu de logique pour être mis en place ;
|
|
Autres utilisations des LFSRs
L'industrie du jeu vidéo a utilisé le LFSR au travers d'un composant qui est le SN76489, on a pu ainsi sonoriser certaines consoles de jeux vidéo grâce à ce circuit électronique[35].
Notes et références
Notes
Références
Bibliographie
Manuels et cours
- Modèle:Ouvrage Modèle:Plume
- Modèle:Ouvrage
- Modèle:Ouvrage
- Modèle:Ouvrage, en particulier le chapitre 4, « Cyclic Codes, Rings, and Polynomials » Modèle:Plume
- Modèle:Ouvrage
- Modèle:Ouvrage
Articles de recherche
- Modèle:Article Modèle:Plume
- Modèle:Article Modèle:Plume
- Modèle:Article Modèle:Plume
- Modèle:Article Modèle:Plume
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article Modèle:Plume
- Modèle:Article
- Modèle:Ouvrage
- Modèle:Article
- Modèle:Article
- Modèle:Article Modèle:Plume
- Modèle:Article
- Modèle:Article Modèle:Plume
- Modèle:Ouvrage
- Modèle:Article Modèle:Plume
- Modèle:Article
- Modèle:Article
- Modèle:Article Modèle:Plume
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Article
- Modèle:Lien web
- Modèle:Article
Liens externes
- Registres à rétroaction linéaire sur www.apprendre-en-ligne.net
- Modèle:En Simple VHDL coding for Galois and Fibonacci LFSR.
- Les registres à décalages à rétroactions linéaires LFSR sur www.picsi.org
- Les Générateurs Linéaires Congruentiels sur http://rng.free.fr
- ↑ 1,0 et 1,1 Modèle:Harvsp
- ↑ 2,0 2,1 2,2 et 2,3 Modèle:Harvsp
- ↑ 3,0 3,1 3,2 3,3 et 3,4 Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ 5,0 5,1 et 5,2 Modèle:Harvsp
- ↑ 6,0 et 6,1 Modèle:Harvsp
- ↑ 7,0 et 7,1 Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ 9,0 et 9,1 Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ 14,0 et 14,1 Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ 21,0 et 21,1 Modèle:Harvsp
- ↑ 22,0 22,1 22,2 et 22,3 Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp.
- ↑ 25,0 et 25,1 Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ 27,0 et 27,1 Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ Modèle:Harvsp
- ↑ 34,0 et 34,1 Modèle:Harvsp
- ↑ Modèle:Harvsp
Erreur de référence : Des balises <ref> existent pour un groupe nommé « note », mais aucune balise <references group="note"/> correspondante n’a été trouvée