Une implémentation pratique du générateur de commutation à l'aide de Verilog HDL

Résumé


Les registres Ă  dĂ©calage Ă  rĂ©troaction linĂ©aire sont un excellent outil pour implĂ©menter un gĂ©nĂ©rateur de bits pseudo-alĂ©atoires dans le matĂ©riel; ils inhibent une structure Ă©lectronique simple et efficace. De plus, ils sont capables de produire des sĂ©quences de sortie avec de grandes pĂ©riodes et de bonnes propriĂ©tĂ©s statistiques. Cependant, les LFSR standard ne sont pas sĂ©curisĂ©s cryptographiquement, car la sĂ©quence de sortie peut ĂȘtre prĂ©dite de maniĂšre unique Ă©tant donnĂ© un petit nombre de bits de flux de clĂ©s en utilisant l'algorithme Berlekamp-Massey. Plusieurs mĂ©thodes ont Ă©tĂ© proposĂ©es pour dĂ©truire la linĂ©aritĂ© inhĂ©rente Ă  la conception LFSR. Ces mĂ©thodes comprennent des gĂ©nĂ©rateurs de combinaison non linĂ©aires, des gĂ©nĂ©rateurs de filtres non linĂ©aires et des gĂ©nĂ©rateurs contrĂŽlĂ©s par horloge. NĂ©anmoins, ils restent vulnĂ©rables Ă  de nombreuses attaques telles que les attaques par canal latĂ©ral et les attaques algĂ©briques. En 2015, un nouveau gĂ©nĂ©rateur commandĂ© par horloge, appelĂ© gĂ©nĂ©rateur Ă  dĂ©coupage, a Ă©tĂ© proposĂ©. Ce nouveau gĂ©nĂ©rateur s'est avĂ©rĂ© rĂ©sistant aux attaques algĂ©briques et aux attaques par canal latĂ©ral, tout en prĂ©servant les exigences d'efficacitĂ© et de sĂ©curitĂ©. Dans ce projet, nous prĂ©sentons une conception du gĂ©nĂ©rateur de commutation utilisant Verilog HDL.


Introduction et historique


L'histoire de la génération de nombres pseudo aléatoires dans le matériel est fortement liée au développement des chiffrements de flux. Les chiffrements de flux sont des chiffrements qui chiffrent les caractÚres de texte brut individuellement (généralement bit par bit), contrairement aux chiffrements par blocs, qui chiffrent le texte brut en gros blocs (64 bits ou plus). De nombreuses architectures de chiffrement de flux nécessitent un générateur de flux de clés, qui est un générateur de bits pseudo-aléatoires dont la graine est la clé de chiffrement. Pour chaque bit de texte brut, le bit de texte chiffré correspondant est calculé comme une fonction réversible (généralement une porte xor) du bit de texte brut et du bit de flux de clé correspondant. Par conséquent, la conception de générateurs de flux de clés sûrs et efficaces est essentielle pour le fonctionnement du chiffrement de flux.


Un outil utile pour construire des gĂ©nĂ©rateurs de flux clĂ©s est les registres Ă  dĂ©calage Ă  rĂ©troaction linĂ©aire. Ils peuvent ĂȘtre facilement transformĂ©s Ă  l'aide de composants Ă©lectroniques Ă©lĂ©mentaires et peuvent ĂȘtre programmĂ©s simplement sur des dispositifs logiques programmables. De plus, en raison de leur structure simple, les LFSR peuvent ĂȘtre modĂ©lisĂ©s et analysĂ©s mathĂ©matiquement, ce qui a conduit Ă  un vaste ensemble de connaissances et de rĂ©sultats les concernant. La sĂ©quence de sortie d'un LFSR correctement construit a une longueur exponentielle et de bonnes propriĂ©tĂ©s statistiques telles qu'une grande complexitĂ© linĂ©aire.


MalgrĂ© les bonnes propriĂ©tĂ©s statistiques du LFSR, il ne peut pas ĂȘtre utilisĂ© comme gĂ©nĂ©rateur de flux de clĂ©s sous sa forme standard en raison de sa nature linĂ©aire. Si un attaquant a rĂ©ussi Ă  savoir 2L bits de flux de clĂ©s consĂ©cutifs, alors la sĂ©quence de sortie peut ĂȘtre prĂ©dite de maniĂšre unique et efficace en utilisant l'algorithme de Berlekamp-Massey, oĂč L est le nombre de registres. De nombreuses façons diffĂ©rentes de dĂ©truire la linĂ©aritĂ© inhĂ©rente Ă  la sĂ©quence de sortie LFSR ont Ă©tĂ© proposĂ©es:


  • Utilisation de plusieurs LFSR et d'une fonction de combinaison non linĂ©aire de leurs sorties (gĂ©nĂ©rateurs de combinaison non linĂ©aire).
  • GĂ©nĂ©ration de la sĂ©quence de sortie en tant que fonction non linĂ©aire de l'Ă©tat LFSR (gĂ©nĂ©rateurs de filtres non linĂ©aires).
  • Synchronisation irrĂ©guliĂšre des LFSR (gĂ©nĂ©rateurs commandĂ©s par horloge).


Pourtant, toutes ces conceptions sont restĂ©es vulnĂ©rables aux attaques telles que les attaques algĂ©briques et latĂ©rales. AprĂšs l'an 2000, ce n'Ă©tait plus un problĂšme critique, car le chiffrement par blocs Rijndael a Ă©tĂ© proposĂ© et Ă©lu comme Advanced Encryption Standard (AES). AES Ă©tait capable de fonctionner en mode de chiffrement de flux et de rĂ©pondre Ă  toutes les normes industrielles pour un chiffrement de flux. De plus, avec l'augmentation des pouvoirs de calcul, AES pourrait ĂȘtre dĂ©ployĂ© sur diverses plates-formes. Cela a conduit Ă  une diminution significative des applications de chiffrement de flux.


Adi Shamir a présenté une conférence invitée dans State of the Art dans Stream Ciphers 2004 et Asiacrypt 2004 intitulée "Stream Ciphers: Dead or Alive?". Dans sa présentation, il a suggéré que les chiffrements de flux peuvent survivre dans les applications suivantes:


  • Applications orientĂ©es logiciel avec des vitesses exceptionnellement Ă©levĂ©es (par exemple des routeurs).
  • Applications orientĂ©es matĂ©riel avec un encombrement exceptionnellement faible (par exemple les cartes Ă  puce).

L'une des derniĂšres propositions de gĂ©nĂ©rateurs de flux clĂ©s est le gĂ©nĂ©rateur de commutation. Il est censĂ© ĂȘtre rĂ©sistant aux attaques algĂ©briques et des canaux latĂ©raux, tout en prĂ©servant l'efficacitĂ© et les vitesses de fonctionnement.


Dans ce projet, nous présenterons une conception du générateur de commutation en matériel, en utilisant Verilog HDL. Tout d'abord, nous présentons les deux formes courantes de LFSR, les LFSR de Fibonacci et les LFSR de Galois. Ensuite, nous présentons une présentation mathématique des LFSR. Nous présenterons ensuite le générateur de commutation tel qu'introduit par. Enfin, nous présentons notre conception Verilog du générateur de commutation.


Registres à décalage à rétroaction linéaire


Les registres à décalage à rétroaction linéaire sont des circuits constitués d'une liste linéaire de registres (également appelés éléments à retard) et d'un ensemble prédéfini de connexion entre eux. Un signal d'horloge global (unique) contrÎle le flux de données à l'intérieur du LFSR. Les deux types de LFSR les plus couramment utilisés sont les LFSR de Fibonacci et les LFSR de Galois; ne différer que sous forme de connexions. Comme nous le verrons plus loin dans la section sur les modÚles mathématiques, il existe de nombreuses similitudes entre les architectures de Fibonacci et de Galois, la préférence l'une par rapport à l'autre étant spécifique à l'application.


Tout au long de cet article, nous supposons un compteur de temps global hypothétique commençant à 0 et augmentant de 1 aprÚs chaque front positif du cycle d'horloge global.


Registres


Un registre est un Ă©lĂ©ment logique capable de stocker un bit de donnĂ©es, appelĂ© l'Ă©tat. Il a deux lignes d'entrĂ©e: une ligne de donnĂ©es Ă  un bit et une ligne de signal d'horloge. Il a une sortie d'un bit qui est toujours Ă©gale Ă  l'Ă©tat interne. À chaque front positif de l'entrĂ©e d'horloge, l'entrĂ©e de donnĂ©es est affectĂ©e Ă  l'Ă©tat, sinon l'Ă©tat reste inchangĂ©. Notons l'Ă©tat d'un registre S au moment t comme  mathopS nolimitst .


Fibonacci lfsrs


Un LFSR de Fibonacci se compose de L registres Ă©numĂ©rĂ©s Ă  partir de 0 Ă  L−1 , tous connectĂ©s au mĂȘme signal d'horloge. L'entrĂ©e du registre i est la sortie du registre i+1 pour 0 lei leL−2 . L'entrĂ©e de rĂ©troaction pour le registre L−1 est la somme xor des sorties d'un sous-ensemble de registres. La mise Ă  jour du registre peut ĂȘtre dĂ©crite mathĂ©matiquement comme suit:

\ mathop S \ nolimits_i ^ t = \ left \ {\ begin {array} {l} \ mathop S \ nolimits_ {i + 1} ^ {t-1} {\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ rm {if} \ \} 0 \ le i \ le L-2 \\ \ mathop \ bigoplus \ limits_ {j = 1} ^ k \ mathop S \ nolimits_j ^ {t-1} \ otimes \ mathop C \ nolimits_j {\ \ \ \ \ rm {if} \ \} i = L-1 \ end {array} \ right.

\ mathop S \ nolimits_i ^ t = \ left \ {\ begin {array} {l} \ mathop S \ nolimits_ {i + 1} ^ {t-1} {\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ rm {if} \ \} 0 \ le i \ le L-2 \\ \ mathop \ bigoplus \ limits_ {j = 1} ^ k \ mathop S \ nolimits_j ^ {t-1} \ otimes \ mathop C \ nolimits_j {\ \ \ \ \ rm {if} \ \} i = L-1 \ end {array} \ right.

oĂč Cj=1 si vous vous inscrivez j est inclus dans les commentaires et 0 sinon.

La sĂ©quence de sortie est obtenue Ă  partir du registre 0 . Autrement dit, la sĂ©quence de sortie est \ mathop {\ left \ {{\ mathop S \ nolimits_0 ^ i} \ right \}} \ nolimits_ {i \ ge 0}\ mathop {\ left \ {{\ mathop S \ nolimits_0 ^ i} \ right \}} \ nolimits_ {i \ ge 0} .

image


LFSR de Galois


Les LFSR de Galois consistent Ă©galement en une liste linĂ©aire de L registres Ă©numĂ©rĂ©s Ă  partir de 0 Ă  L−1 , partageant tous le signal d'horloge global. L'entrĂ©e du registre i est la sortie du registre i−1 pour 1 lei leL−1 . Pour certains sous-ensembles de registres, leur entrĂ©e est xorĂ©e avec la sortie du registre L−1 . Cela peut s'exprimer comme suit:

\ mathop S \ nolimits_i ^ t = \ left \ {\ begin {array} {l} \ mathop S \ nolimits_ {i-1} ^ {t-1} \ oplus \ mathop S \ nolimits_ {L-1} ^ {t-1} \ otimes \ mathop C \ nolimits_i {\ rm {\ \ \ \ if \ \}} 1 \ le i \ le L-1 \\ \ mathop S \ nolimits_ {L-1} ^ {t- 1} \ otimes \ mathop C \ nolimits_0 {\ rm {\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if \ \}} i = 0 \ end {array} \ right.

\ mathop S \ nolimits_i ^ t = \ left \ {\ begin {array} {l} \ mathop S \ nolimits_ {i-1} ^ {t-1} \ oplus \ mathop S \ nolimits_ {L-1} ^ {t-1} \ otimes \ mathop C \ nolimits_i {\ rm {\ \ \ \ if \ \}} 1 \ le i \ le L-1 \\ \ mathop S \ nolimits_ {L-1} ^ {t- 1} \ otimes \ mathop C \ nolimits_0 {\ rm {\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ if \ \}} i = 0 \ end {array} \ right.

oĂč Ci=1 si l'entrĂ©e du registre i est xored avec la sortie du registre L−1 .


D'une maniĂšre similaire Ă  celle des LFSR de Fibonacci, la sĂ©quence de sortie est dĂ©finie comme \ mathop {\ left \ {{\ mathop S \ nolimits_ {L-1} ^ i} \ right \}} \ nolimits_ {i \ ge 0}\ mathop {\ left \ {{\ mathop S \ nolimits_ {L-1} ^ i} \ right \}} \ nolimits_ {i \ ge 0} .


image

Comparaison entre Fibonacci et Galois Designs


Il existe une correspondance directe entre les LFSR de Fibonacci et de Galois au sens mathématique, comme nous le verrons dans la section suivante. Cependant, l'utilisation de la conception de Galois présente deux avantages notables:
  • Dans la mise en Ɠuvre logicielle, il ne nĂ©cessite pas de L vĂ©rification de la paritĂ© des bits, qui ajoute un facteur logarithmique de complexitĂ©.
  • Dans l'implĂ©mentation matĂ©rielle, il ne nĂ©cessite que des portes xor Ă  deux entrĂ©es, dont le retard de propagation est nettement infĂ©rieur Ă  celui des portes xor Ă  entrĂ©es multiples utilisĂ©es dans la conception de Fibonacci.

Dans notre projet, nous considérons la formulation matricielle du LFSR, donc les deux architectures sont interchangeables.


ModÚle mathématique des LFSR


Dans les sections suivantes, sauf indication contraire, nous supposons que tous les calculs sont effectuĂ©s sous champ de Galois Gf gauche(2 droite) . Autrement dit, toutes les opĂ©rations sont calculĂ©es modulo 2 . Une autre implĂ©mentation de cette convention est que toute multiplication est une porte logique et que toute sommation est une porte xor.


ConsidĂ©rez les Ă©tats de tous L registres d'un LFSR Ă  un moment donnĂ© t ; cela peut ĂȘtre reprĂ©sentĂ© comme un vecteur de {\ left \ {{0,1} \ right \} ^ L}{\ left \ {{0,1} \ right \} ^ L} :

St= left( mathopS nolimitst0; mathopS nolimitst1; ldots; mathopS nolimitstL−1 right)

Nous désignons ce vecteur comme l'état du LFSR. Notez qu'il y a tout au plus 2L états possibles pour un L enregistrer LFSR. Notez également que si un LFSR devait atteindre l'état zéro, il ne pourrait atteindre aucun autre état. Par conséquent, nous disons qu'il y a 2 $ ^ L-1 $ non trivial d'un LFSR.


Considérez la transformation linéaire suivante:

F = \ left ({\ begin {array} {* {20} {c}} 0 & 1 & \ cdots & 0 \\ \ vdots & \ vdots & \ ddots & \ vdots \\ 0 & 0 & \ cdots & 1 \\ {\ mathop C \ nolimits_0} & {\ mathop C \ nolimits_1} & \ cdots & {\ mathop C \ nolimits_ {L-1}} \ end {array}} \ right)

F = \ left ({\ begin {array} {* {20} {c}} 0 & 1 & \ cdots & 0 \\ \ vdots & \ vdots & \ ddots & \ vdots \\ 0 & 0 & \ cdots & 1 \\ {\ mathop C \ nolimits_0} & {\ mathop C \ nolimits_1} & \ cdots & {\ mathop C \ nolimits_ {L-1}} \ end {array}} \ right)



Étant donnĂ© que  mathopS nolimitst est l'Ă©tat d'un LFSR de Fibonacci, on peut observer que

F cdot mathopS nolimitst= mathopS nolimitst+1

Si  mathopS nolimitst Ă©tait un Ă©tat d'un LFSR de Galois, alors considĂ©rons la transformation G :


G = \ left ({\ begin {array} {* {20} {c}} 0 & \ cdots & 0 & {\ mathop C \ nolimits_0} \\ 1 & \ cdots & 0 & {\ mathop C \ nolimits_1} \\ \ vdots & \ ddots & \ vdots & \ vdots \\ 0 & \ cdots & 1 & {\ mathop C \ nolimits_ {L-1}} \ end {array}} \ right)

G = \ left ({\ begin {array} {* {20} {c}} 0 & \ cdots & 0 & {\ mathop C \ nolimits_0} \\ 1 & \ cdots & 0 & {\ mathop C \ nolimits_1} \\ \ vdots & \ ddots & \ vdots & \ vdots \\ 0 & \ cdots & 1 & {\ mathop C \ nolimits_ {L-1}} \ end {array}} \ right)


Dans ce cas, nous avons

G cdot mathopS nolimitst= mathopS nolimitst+1

Les reprĂ©sentations matricielles des LFSR peuvent ĂȘtre flexibles lorsqu'il s'agit de mises Ă  jour rĂ©pĂ©tĂ©es, car elles peuvent ĂȘtre interprĂ©tĂ©es comme un simple produit matriciel. On constate que F=GT . Ce fait indique les nombreuses similitudes entre les plans de Fibonacci et de Galois s'ils Ă©taient considĂ©rĂ©s comme des transformations linĂ©aires {\ left \ {{0,1} \ right \} ^ N} Ă  {\ left \ {{0,1} \ right \} ^ N} .


La multiplication du vecteur d'Ă©tat de certains LFSR par une matrice (de type Fiboancci ou Galois) est connue sous le nom d'horloge ou de mise Ă  jour du LFSR.

Le générateur de commutation


Le générateur de commutation est un générateur commandé par horloge proposé en 2015. Il est prouvé qu'il résiste aux attaques algébriques et à canaux latéraux. Dans cette section, nous présenterons la conception du générateur de commutation, telle que spécifiée par ses inventeurs.


Structure de base


Le gĂ©nĂ©rateur de commutation se compose de deux LFSR: un LFSR de commande A de longueur N et un LFSR de donnĂ©es B de longueur M . Le contrĂŽle LFSR est mis Ă  jour comme dĂ©crit prĂ©cĂ©demment. Cependant, le LFSR de donnĂ©es est mis Ă  jour Ă  l'aide de l'une des deux matrices possibles,  mathopM nolimitsi1 ou  mathopM nolimitsj2 , oĂč M1,M2 sont des matrices compagnes de certains polynĂŽmes primitifs. Le choix d'une matrice par rapport Ă  l'autre est dĂ©terminĂ© par la sortie du signal du LFSR de commande. Ce processus peut ĂȘtre dĂ©crit comme suit:

\ mathop B \ nolimits ^ t = \ left \ {\ begin {array} {l} \ mathop M \ nolimits_1 ^ i \ cdot \ mathop B \ nolimits ^ {t-1} {\ rm {\ \ \ \ if \ \}} \ mathop A \ nolimits_ {M-1} ^ t = 0 \\ \ mathop M \ nolimits_2 ^ j \ cdot \ mathop B \ nolimits ^ {t-1} {\ rm {\ \ \ \ if \ \}} \ mathop A \ nolimits_ {M-1} ^ t = 1 \ end {array} \ right.


La sortie du générateur de commutation est la sortie de LFSR B . Notez que nous avons supposé que A est un LFSR de Galois. Il peut tout aussi bien s'agir d'un LFSR de Fibonacci.


Entiers i,j Sont appelés les indices de commutation.

La graine


Rappelons qu'un LFSR peut parcourir au plus 2L−1 Ă©tats non triviaux avant de revenir sur les Ă©tats prĂ©cĂ©dents. Depuis les matrices M1,M2 sont des matrices de transformation de LFSR, on peut en dĂ©duire que les entiers i,j peut ĂȘtre au maximum 2 $ ^ M-1 $ avant que les matrices commencent Ă  se rĂ©pĂ©ter.


Le germe du gĂ©nĂ©rateur de commutation est N+3M bits, reprĂ©sentant les Ă©tats initiaux des LFSR A et B et les puissances entiĂšres i,j . Notez que les matrices M1,M2 sont fixĂ©s tout au long de la mise en Ɠuvre et ne sont pas inclus dans la graine.


Conception Verilog


Dans cette section, nous prĂ©senterons notre conception du gĂ©nĂ©rateur de commutation utilisant Verilog HDL. Nous prĂ©senterons chaque conception de module de façon ascendante. À la toute fin, nous prĂ©sentons le module gĂ©nĂ©rateur de commutation.


Dans notre conception, nous avons essayé de réduire au minimum les composants synchrones. Les seuls composants contrÎlés par horloge sont les LFSR A,B .


Les opĂ©rations matricielles et vectorielles peuvent ĂȘtre mises en Ɠuvre dans un certain nombre de mĂ©thodes diffĂ©rentes, variant en termes de consommation d'unitĂ©s logiques, d'unitĂ©s de mĂ©moire et de complexitĂ© procĂ©durale. Dans notre conception, nous Ă©liminons le besoin de blocs procĂ©duraux et utilisons les Ă©lĂ©ments logiques au maximum.


Toutes les matrices des modules suivants sont indexées à partir de 0 de gauche à droite, puis de haut en bas.


Notez également que tous les modules ont des tailles paramétrées; c'est à des fins de débogage. Dans une implémentation réelle, toutes les tailles sont fixes.


Multiplexeur


Ceci est un module implémentant un 2 à 1 N multiplexeur de bits. Le module a deux N lignes d'entrée à 1 bit, une ligne de sélection à 1 bit et N ligne de sortie -bit. Si l'entrée du sélecteur est 0 alors la sortie est définie sur la premiÚre ligne d'entrée, sinon elle est définie sur la seconde.


Module multiplexeur


Transformation vectorielle


Ce module implĂ©mente une transformation linĂ©aire sur un vecteur. Il accepte en entrĂ©e un N foisN matrice de transformation et un N -bit vecteur. Il produit le produit matrice-vecteur de son entrĂ©e.


Chaque bit du vecteur de sortie est le résultat d'un N -bit xor gate, prenant en entrée le résultat de la N -bit au niveau du bit et du vecteur d'entrée et de la ligne de matrice correspondante. Autrement dit, chaque bit de sortie est cùblé à l'entrée et aucun bloc de procédure n'est nécessaire.


Exactement N2 deux entrées et portes sont utilisées, ainsi que NN - portes xor d'entrée.


Module de transformation vectorielle


Identité


Ce module n'accepte aucune entrĂ©e. Son N foisN la sortie -bit est initialisĂ©e Ă  la N matrice d'identitĂ©. Un tel module est dĂ©clarĂ© par souci de commoditĂ©, de sorte que nous n'avons pas Ă  initialiser un vecteur de registre global pour chaque taille diffĂ©rente.


Module de matrice d'identité


Transposer


Ce module accepte un N foisN matrice et sortie sa transposition. Aucun Ă©lĂ©ment logique ni Ă©lĂ©ment mĂ©moire n'est utilisĂ© dans ce module, sa sortie n'est qu'une permutation de son entrĂ©e
.

Module de transposition matricielle


Multiplication de matrice


Il s'agit d'un module implĂ©mentant la multiplication matrice-matrice. Il accepte deux N foisN matrices en entrĂ©e, et sort leur produit matrice-matrice.


Ce module contient une instance du module de transposition matricielle. Cela permet d'affecter des indices consécutifs aux colonnes de la deuxiÚme matrice d'entrée. Chaque entrée de la matrice de sortie est ensuite affectée à la sortie d'un N -entrée xor gate, dont l'entrée est au niveau du bit et de la ligne correspondante de la premiÚre matrice et de la colonne de la seconde.


Exactement N3 deux entrées et portes et N2N Les xor d'entrée sont utilisés dans cette implémentation.


Module de multiplication de matrice


Exponentiation matricielle


Ce module Ă©lĂšve une matrice Ă  une puissance entiĂšre. Il accepte en entrĂ©e un N foisN matrice et un K -bit entier. Sa sortie est la matrice Ă©levĂ©e Ă  la puissance entiĂšre spĂ©cifiĂ©e.


Module d'exponentiation matricielle


Unité de contrÎle


Ce module implémente le N -bit control LFSR. Il s'agit de l'un des deux modules contrÎlés par horloge de notre conception.


Il comprend un statique N foisN Matrice de transformation LFSR et une variable N Ă©tat -bit. Son entrĂ©e comprend une horloge, un N rĂ©initialisation de l'Ă©tat des bits et un signal de rĂ©initialisation. Sa sortie est un seul bit, qui est le dernier bit du LFSR.


AprÚs chaque front positif du signal d'horloge, l'état est mis à jour en fonction de la matrice de transformation à l'aide d'un module de multiplication matrice-vecteur. La réinitialisation d'état est affectée à l'état interne aprÚs chaque front positif du signal de réinitialisation.


image


Module d'unité de commande


Unité de données


Le N LFSR de données est implémenté à l'aide de ce module. Comme le module de l'unité de contrÎle, il est commandé par horloge


Le module comprend deux N foisN matrices de transformation et un N Ă©tat LFSR -bit. Il accepte en entrĂ©e un signal d'horloge, un signal de commande, un N rĂ©initialisation de l'Ă©tat LFSR Ă  2 bits, deux N foisN la transformation de matrice est rĂ©initialisĂ©e et un signal de rĂ©initialisation. Il a une sortie d'un bit, le dernier bit du LFSR interne.


Notez que puisque la graine peut ĂȘtre modifiĂ©e, les matrices de transformation peuvent Ă©galement ĂȘtre modifiĂ©es, contrairement Ă  l'unitĂ© de contrĂŽle dont la matrice de transformation est fixe.

image


\ Unité de données


Le générateur de commutation


Ceci est le module principal de notre conception. Il est paramétré par des entiers N,M , qui sont les tailles des unités de contrÎle et de données, respectivement.


L'entrée de ce module est un signal d'horloge, un N+3M -bit seed, et un signal défini. Le germe est simplement une concaténation de la réinitialisation du LFSR de contrÎle, de la réinitialisation du LFSR de données et des nombres entiers i,j Sa sortie est un bit, le bit pseudo aléatoire généré par le générateur de commutation.


Ce module comprend deux M foisM matrices  mathopM nolimits1, mathopM nolimits2 . Ces matrices sont fixĂ©es tout au long de l'implĂ©mentation.


Deux instances de modules d'exponentiation de matrice sont utilisĂ©es pour calculer les matrices d'entrĂ©e pour l'unitĂ© de donnĂ©es, oĂč leurs entrĂ©es sont les matrices de transformation fixes et les entiers i,j , extrait de la graine.


Le module générateur de commutation


Conclusions et recommandations


Dans ce projet, nous avons prĂ©sentĂ© une conception du gĂ©nĂ©rateur de commutation utilisant Verilog HDL. Cette conception est entiĂšrement axĂ©e sur le matĂ©riel et Ă©limine l'utilisation de blocs procĂ©duraux. Une telle approche permet des performances maximales au dĂ©triment des Ă©lĂ©ments logiques et mĂ©moire. Pour certaines applications avec des contraintes d'Ă©lĂ©ments logiques et de mĂ©moire, il peut ĂȘtre avantageux de sacrifier les performances et d'augmenter l'utilisation de blocs procĂ©duraux pour rĂ©duire l'utilisation des Ă©lĂ©ments Ă©lectroniques.


Un inconvénient du projet est qu'il confie la responsabilité de choisir de bons indices de commutation à l'utilisateur. Un progrÚs possible consiste à ajouter un composant matériel pour vérifier la validité de l'index de commutation utilisé. Cela nécessite une implémentation matérielle d'algorithmes complexes tels que la recherche des caractéristiques polynomiales d'une matrice donnée et la vérification de la primitivité.


Un progrĂšs possible consiste Ă  ajouter un vĂ©ritable gĂ©nĂ©rateur de nombres alĂ©atoires pour vĂ©rifier les indices de commutation alĂ©atoires et Ă  sortir une paire valide une fois qu'il est trouvĂ©. Il peut ĂȘtre prouvĂ© que ce processus s'arrĂȘte aprĂšs un court laps de temps avec une forte probabilitĂ©.


Les références



  1. Katz, Jonathan et al. Manuel de cryptographie appliquée. Presse CRC, 1996.
  2. Choi, Jun et al. "Le générateur de commutation: Nouveau générateur commandé par horloge avec une résistance contre les attaques algébriques et latérales." Entropie 17,6 (2015): 3692-3709.
  3. Shamir, Adi. "Chiffres de flux: morts ou vivants?." ASIACRYPT. 2004.
  4. LFSR pour les non-initiés

Source: https://habr.com/ru/post/fr431468/


All Articles