• Aucun résultat trouvé

Exemple 2 : Le code de Hamming de paramètres [7, 4, 3] 2

3.2 Cryptosystème de Niederreiter

Le deuxième protocole cryptographique basé sur les codes correcteurs d'erreurs est le système de chirement à clé publique proposé par Harald Niederreiter en 1986 [Nie86]. Pour simplier les notations, les coordonnées des vecteurs seront numéro-tées à partir de zéro dans cette section. Les algorithmes de génération de clés, de chirement et de déchirement sont constitués de la façon suivante.

3.2.1 Génération de clés

Comme ce cryptosystème est basé sur les codes, nous avons encore besoin de deux entiers n et t lors de la génération des clés, qui déniront respectivement la longueur et la capacité de correction d'un code linéaire, où t sera beaucoup plus petit que n. La génération des clés du cryptosystème de Niederreiter est présentée dans l'Algorithme 8.

Algorithme 8 Génération de clés de Niederreiter Entrée(s): n et t deux entiers.

Sortie(s): pk = ( ˜H, t) la clé publique et sk = (Q, H, P,C ) la clé privée associée.

1: Choisir un code linéaire C de longueur n et t correcteur. On notera k la dimension du code C et r la co-dimension.

2: ` = blog2 ntc.

3: Prendre une matrice de contrôle H ∈ Mr,n(F2)de C .

4: Choisir aléatoirement une matrice inversible Q ∈ Mr,r(F2).

5: Choisir aléatoirement une matrice de permutation P ∈ Mn,n(F2).

6: Calculer la matrice génératrice ˜H = Q · H · P.

7: sk← (Q, H, P,C )

8: pk ← ( ˜H, t, `)

9: Retourner (pk, sk).

Notons que n et k sont des données publiques puisque ces entiers sont donnés par la taille de ˜H. Une variante possible est de rajouter une étape dans l'Algorithme 8 pour calculer les inverses des matrices Q et P, c'est-à-dire les matrices Q−1 et P−1, puis de les mettre dans la clé privée skà la place des matrices Q et P, donnant ainsi sk = (Q−1, H, P−1,C ), car ce sont les inverses qui seront utilisés par la suite dans l'algorithme de déchirement (donné dans l'Algorithme 11) et non pas les matrices Qet P directement. Une fois la génération de clés eectuée, voici comment utiliser ce cryptosystème.

3.2.2 Chirement

Comme dans tout système de chirement à clé publique, nous avons besoin du message à chirer et de la clé publique pour la phase de chirement. Le chirement de Niederreiter est présenté dans l'Algorithme 9.

3.2. CRYPTOSYSTÈME DE NIEDERREITER TR Algorithme 9 Chirement de Niederreiter

Entrée(s): pk = ( ˜H, t, `)la clé publique et M ∈ F`

2 un message à chirer. Sortie(s): ˜S ∈ Fr2 le texte chiré associé à M.

1: Représenter M comme un vecteur erreur E de longueur n et de poids t,

2: //grâce à un algorithme d'encodage en poids constant.

3: Calculer ˜S = ˜H ·tE,

4: //fonction syndrome.

5: Retourner ˜S.

On peut constater que le chirement est grossièrement une mise sous forme de syndrome du message, au lieu d'un encodage comme c'est le cas pour le cryptosys-tème de McEliece. L'encodage en poids constant mentionné ci-dessus peut se faire d'une manière simple comme proposée dans [Cov73], donnée ici dans l'Algorithme 10. Notons φn,t : J0, nt

J→ Wn,t cette fonction d'encodage, où Wn,t est l'ensemble des mots de longueurs n et de poids t. Cette fonction correspond à l'algorithme de déco-dage énumératif [OS09]. D'autres méthodes existent, mais celle-ci est la plus ecace en terme de rendement (c'est-à-dire de taux d'information).

Algorithme 10 Décodage énumératif Entrée(s): x ∈J0,

n t

 J

Sortie(s): E un vecteur de n bits et de poids t, où les t entiers 0 6 i1 < i2 < . . . < it 6 n − 1 correspondent aux indices des positions des bits non nuls dans E.

1: j ← t

2: Tant que j > 0 faire

3: ij ←inverse-binomial(x, j)

4: //où inverse-binomial(x, j) retourne l'entier i tel que i

j 6 x < i+1 j



5: x ← x − ijj

6: j ← j − 1

7: Fin tant que

8: Retourner E.

L'entier x ∈J0, n t



J correspond à celui ayant pour écriture binaire M ∈ F

` 2.

3.2.3 Déchirement

Comme dans tout système de chirement à clé publique, nous avons besoin du texte chiré à déchirer et de la clé privée pour la phase de déchirement. Le déchirement de Niederreiter est présenté dans l'Algorithme 11.

Algorithme 11 Déchirement de Niederreiter Entrée(s): sk = (Q, H, P,C ) la clé privée, ˜S ∈ Fr

2 le texte chiré. Sortie(s): M ∈ F`

2 le texte clair associé à ˜C.

1: Calculer S = Q−1· ˜S.

2: Décoder S = H · P ·tE pour retrouver ˜E = P ·tE,

3: //décodage par syndrome.

4: Calculer tE = P−1· ˜E.

5: Représenter E comme un message M,

6: //fonction réciproque de l'encodage en poids constant.

7: Retourner M.

L'algorithme de décodage utilisé à l'étape 2 dépend de la famille de code dans laquelle le code C a été choisi et de l'algorithme de décodage le plus ecace connu pour celle-ci. Quant à la fonction réciproque de l'encodage en poids constant, φ−1

n,t : Wn,tJ0, nt

J, elle est donnée dans par la formule suivante (c.f. [OS09]) : φ−1n,t : Wn,tJ0,n t  J (i1, i2, . . . , it) 7→i1 1  +i2 2  + . . . +it t  .

3.2.4 Sécurité

Il a été démontré en 1994 que les cryptosystèmes de McEliece et de Niederreiter sont équivalents si on utilise la même famille de codes [LDW94]. Le cryptosystème de Niederreiter est souvent présenté comme le dual du cryptosystème de McEliece, car les algorithmes de chirement et de déchirement sont grossièrement opposés par rapport à leurs utilisations des matrices génératrice et de contrôle dans ces deux cryptosystèmes.

Le cryptosystème de Niederreiter est de type sac à dos. En eet, pour réaliser un cryptosystème à clé publique, il faut s'appuyer sur un problème inversible mais fortement asymétrique d'un point de vue calculatoire : une fonction à trappe. Dans le cas présent, il s'agit de la fonction syndrome et du décodage par syndrome. Le cryptosystème de Niederreiter a pour avantage qu'il ne nécessite pas de générateur d'aléa, contrairement à la génération des clés dans le cryptosystème de McEliece. L'inconvénient en revanche est qu'un message doit être un mot de longueur n et de poids t, an que le décodage soit toujours possible. Il faut donc posséder un algorithme d'encodage en poids constant ecace.

Une version dite "moderne" de Niederreiter, nommée ainsi dans [HG13], correspond à une matrice de contrôle sous forme systématique an de réduire l'espace mémoire nécessaire pour stocker la matrice de contrôle publique ˜H. La matrice P est alors choisie de telle sorte que ˜H = [Ir|A] en utilisant l'algorithme de Gauss-Jordan.

3.2.5 Implantations

Nous présentons les diérentes implantations existantes du cryptosystème de Niederreiter dans le Tableau 3.3. Contrairement au cryptosystème de McEliece, les implantations du cryptosystème de Niederreiter sont essentiellement embarquées [Hey10, vMHG16] ou matérielles [HG12, HG13, HC15]. La seule implantation logi-cielle est proposée dans [BBMR14]. Même si les deux cryptosystèmes ont une

sécu-3.3. SCHÉMA DE CHIFFREMENT HYBRIDE DE MCELIECE TR rité prouvée équivalente, il serait intéressant dans l'avenir de s'intéresser davantage à celui de Niederreiter.

Tableau 3.3  Implantations de Niederreiter

Titre Auteur(s) Année Référence

Low-Reiter : Niederreiter Encryption Scheme Heyse 2010 [Hey10]

for Embedded Microcontrollers

Towards One Cycle per Bit Heyse

2012 [HG12]

Asymmetric Encryption :

Code-Based Cryptography Güneysu

on Recongurable Hardware

Code-based cryptography Heyse

2013 [HG13]

on recongurable hardware :

tweaking Niederreiter encryption Güneysu

for performance

Scaling ecient code-based cryptosystems Biasi

2014 [BBMR14]

Barreto

for embedded platforms RuggieroMisoczki

An Application Specic Instruction Set Processor (ASIP) Hu 2015 [HC15]4

for the Niederreiter Cryptosystem Cheung

von Maurich

2016 [vMHG16]

IND-CCA Secure Hybrid Encryption Heberle

from QC-MDPC Niederreiter Güneysu