Vous êtes sur la page 1sur 7

I.

LE CRYPTOSYSTEME MCELIECE CLASSIQUE


1. Présentation et principe

Le cryptosystème Classic McEliece est un schéma de chiffrement asymétrique tout


récent. Il n’est pas du tout à confondre au cryptosystème de McEliece.
Le cryptosystème de McEliece a été inventé en 1978 par Robert McEliece. Ce système,
reposant sur un problème difficile de la théorie des codes(il fût d’ailleurs le tout premier), n'a pas
rencontré de véritable soutien dans la communauté cryptographique, entre autres car la clé de
chiffrement est particulièrement grande et que le message chiffré est deux fois plus long que
l'original. Pourtant, le cryptosystème de McEliece possède des propriétés intéressantes : la
sécurité croît beaucoup plus rapidement avec la taille des clés que pour le système RSA, et le
chiffrement est plus rapide. Un autre avantage est de reposer sur un problème très différent des
algorithmes asymétriques usuels. Cela signifie qu'une percée théorique dans le domaine de la
factorisation, réalisable par des algorithmes quantiques, qui ruinerait RSA, n'affecterait en rien ce
système. Cette avantage lui permet d'être sélectionné par le NIST comme candidat à la
standardisation des algorithmes de chiffrement post-quantique.

En réalité, Classic McEliece est une nette amélioration de McEliece. Dans le système de
McEliece, la clé publique spécifie un code Goppa binaire aléatoire ; un texte chiffré est un mot de
code plus des erreurs aléatoires. La clé privée permet un décodage efficace : extraction du mot de
code du texte chiffré, identification et suppression des erreurs.

Le système McEliece a été conçu pour être unidirectionnel (OW-CPA), ce qui signifie
qu'un attaquant ne peut pas trouver efficacement le mot de code à partir d'un texte chiffré et d'une
clé publique, lorsque le mot de code est choisi au hasard. Le niveau de sécurité du système
McEliece est resté remarquablement stable, malgré des dizaines de documents d'attaque sur 40
ans. Les paramètres originaux de McEliece ont été conçus pour seulement 2 64 de sécurité, mais le
système évolue facilement jusqu'à des paramètres "surpuissants" qui offrent une marge de
sécurité suffisante contre les progrès de la technologie informatique, y compris les ordinateurs
quantiques.

Le système McEliece a suscité une énorme quantité de travail de suivi. Certains de ces


travaux améliorent l'efficacité tout en préservant clairement la sécurité : cela inclut un PKE
"dual" proposé par Niederreiter (en 1986, il a d’ailleurs été montré équivalent à McEliece
en1994), des accélérations logicielles et des accélérations matérielles.

De plus, il est maintenant bien connu comment convertir efficacement un PKE OW-CPA
(Public Key Encryption, One-Way function, indistingability under Chosen Plaintext Attack) en
un KEM IND-CCA2 (Indistingability Under adaptative Chosen Ciphertext Attack) sécurisé
contre toutes les attaques ROM. Cette conversion est serrée, préservant le niveau de sécurité, sous
deux hypothèses satisfaites par la McEliece PKE : premièrement, la PKE est déterministe (c'est-
à-dire que le déchiffrement récupère tout l'aléatoire qui a été utilisé) ; deuxièmement, le PKE n'a
aucun échec de déchiffrement pour les textes chiffrés valides. Mieux encore, des travaux récents
atteignent une étanchéité similaire pour une classe plus large d'attaques, à savoir les attaques
QROM. Le risque qu'une attaque spécifique à une fonction de hachage soit plus rapide qu'une
attaque ROM ou QROM est traité par la pratique standard consistant à sélectionner une fonction
de hachage "non structurée" bien étudiée, de haute sécurité.

Classic McEliece rassemble tout cela. Il s'agit d'un KEM conçu pour la sécurité IND-CCA2 à un
niveau de sécurité très élevé, même contre les ordinateurs quantiques. Le KEM est construit de
manière conservatrice à partir d'un PKE conçu pour la sécurité OW-CPA, à savoir la version
duale de Niederreiter du PKE de McEliece utilisant des codes binaires Goppa. Chaque niveau de
la construction est conçu pour que les futurs auditeurs cryptographiques puissent avoir confiance
dans la sécurité à long terme du chiffrement à clé publique post-quantique.

Principe
Un code correcteur d'erreurs permet de corriger une information qui se serait altérée lors
de sa transmission via un canal (réseau, CD-ROM, temps, etc). Pour ce faire, un mot (une suite
de symboles) est transformé en un mot du code en rajoutant de l'information (appelée
redondance). À la sortie du canal, la redondance est utilisée pour corriger les erreurs et ainsi
retrouver le mot de code transmis en entrée. Ce mot est alors retransformé pour fournir le mot
original.
L'idée de McEliece est de masquer le mot de code correspondant au message en lui ajoutant
autant d'erreurs que possible tout en gardant la possibilité de corriger celles-ci. Si la méthode de
correction est gardée secrète, alors seul le destinataire sera en mesure de retrouver le message
original. La méthode d'encodage peut, quant à elle, être laissée publique tant qu'elle ne révèle pas
d'information sur le décodage.
Le cryptosystème de McEliece Classique utilise les codes de Goppa. Les codes de Goppa sont
faciles à décoder, mais une fois leur structure masquée par permutation, il est difficile de les
distinguer des codes linéaires. De plus, il est difficile de décoder un code linéaire aléatoire. La
sécurité du système repose donc sur deux problèmes distincts : l'indistingabilité d'un code de
Goppa permuté d'une part et le problème du décodage borné d'autre part.
En 1986, Harald Niederreiter a proposé un autre cryptosystème fondé sur la théorie des codes3.
Le cryptosystème de Niederreiter a été prouvé équivalent à celui de McEliece en 1994 par Li,
Deng et Wang.
2. Codes de Goppa Binaires
C’est ce type de code linéaire qui est utilisé dans le cryptosystème McEliece
Classique. Donc, il nous faut bien comprendre son fonctionnement. Pour ce faire,
nous avons l’obligation de faire un détour sur les codes de Reed-Solomon Généralisés
et les codes alternants.
i) Codes de Reed-Solomon généralisés
Définition
Soient :
 x=(x0,……,xn-1) un n-uplet d’éléments de c deux à deux distincts.
 y=(y0,….,yn-1) un n-uplet d’éléments non nuls dans Fq
 un entier k n
Le code de Reed-Solomon Généralisé GRSk(x,y) est défini par :
GRSk(x,y)={(y0f(x0),……,yn-1f(xn-1)) / f ϵ Fq[z], deg(f) k }
Le vecteur x est appelé le support et le vecteur y le multiplicateur.
Théorème
Les paramètres de GRSk(x,y) sont :
 dim GRSk(x,y) = k
 dmin GRSk(x,y) = n-k+1
ii) Codes alternants
Définition
Soit C une partie de de (Fqm)n un code sur Fqm . On définit son sous-
code sur un sous-corps par :
C ∩ (Fq)n
Proposition
Si C ⊆  (Fqm)n a pour paramètres [n, n-c, d]qm, alors
· dim C ∩ (Fq)n ≥ n - mc
· dmin C ∩ (Fq)n ≥ d
Définition
Soient x,y ∈ (Fqm)n comme dans la définition de GRS. Le code A r( x , y ) est
défini par :
A r( x , y ) = GRSr(x,y) ⊥  ∩  (Fq)n
Proposition
 dim A r( x , y ) ≥ n – mr
 dmin A r( x , y ) ≥ r + 1
iii) Codes de Goppa
Définition
Soit x ∈ (Fq ) un support et Г ∈ Fqm[z] tel que pour tout i, Г (xi) ≠ 0, alors le code de Goppa
m n

G(x , Г) est défini par :



1
G(x , Г) = A deg Г ( x , y ) avec yi ¿
Г (x i)
 
  Proposition
Les paramètres de code sont:
dim G(x , Г) ≥ n – m’deg Г
dmin G(x , Г) ≥ deg Г + 1
Théorème (Sugyama en 1976)
Soit x ∈ (Fqm)n un support et γ ∈ Fqm[z] irréductible, alors :

G(x , γq-1 ) = G(x , γq )


Un tel code est dit sauvage. De plus, ses paramètres sont de la forme :
dim G(x , γq ) ≥ n – m(q-1)deg γ
dminG(x , γq ) ≥ q’ deg γ + 1
Il est clair que pour avoir un code de Goppa binaire, il suffit de prendre q = 2.

3. Schéma de McEliece Classique


Le cryptosystème de McEliece Classique consiste en trois algorithmes: un
algorithme probabiliste de génération des clés qui produit une clé secrète et une clé
publique, un algorithme (probabiliste) de chiffrement et un algorithme (déterministe)
de déchiffrement. Tous les utilisateurs partagent des paramètres de sécurité : (n,k,t).
3.a) Génération des 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éfiniront respectivement la longueur et
la capacité de correction d'un code de Goppa binaire, où t sera beaucoup plus petit que n. La
génération des clés du cryptosystème de McEliece classique est telle que celle de Niederreiter
(comme nous l’avons dit plus haut) et est présentée dans l'Algorithme 1:
Algorithme 1: Génération des clés
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 de Goppa binaire C de longueur n et t-correcteur.
On notera k la dimension du code C et r la co-dimension.
2: l = ⌊log2(( kt))⌋.
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, l)
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 1 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échiffrement (donné dans
l'Algorithme 3) et non pas les matrices Q et P directement. Une fois la génération de clés
effectuée, voici comment utiliser ce cryptosystème.
3.b) Chiffrement
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 2.
Algorithme 2: Chiffrement
Entrée(s): pk = (H ’, t, l ) la clé publique et M ∈ (F2)l un message à chiffrer.
Sortie(s): S’ ∈ (F2)l le texte chiffré associé à M.
1: Représenter M comme un vecteur erreur E de longueur n et de poids t,
//grâce à un algorithme d'encodage en poids constant.
2: Calculer S’ = H ’. tE, //fonction syndrome.
3: Retourner S’.
On peut constater que le chiffrement est grossièrement une mise sous forme de syndrome
du message, au lieu d’un encodage comme c’est le cas pour le cryptosystème de McEliece.
L’encodage en poids constant mentionné ci-dessus peut se faire d’une manière simple comme
proposée dans dans l’Algorithme 3 qui suit ce paragraphe.
Notons: φn,t :{0, 1,…, (nt )−1 }→ W n,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écodage
énumératif. D’autres méthodes existent, mais celle-ci est la plus efficace en terme de
rendement (c’est-à-dire de taux d’information).
Algorithme 3: Décodage énumératif

Entrée(s): x ∈ {0, 1,…, (nt )−1 }


Sortie(s): E un vecteur de n bits et de poids t, où les t entiers 0≤i1<i2<…it≤t 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)

//où inverse-binomial(x, j) retourne l’entier i tel que ( ij) ≤ x <( j+1i )


4: x ← x − (i jj )
5: j ← j − 1
6: Fin tant que
7: Retourner E.

L’entier x ∈ {0, 1,…, (nt )−1 } correspond à celui ayant pour écriture binaire M ∈ (F ) .
2
l

3.c) Déchiffrement
Comme dans tout système de chiffrement à 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 4.
Algorithme 4 Déchiffrement
Entrée(s): sk = (Q, H,P, C ) la clé privée, S’ ∈ (Fr) le texte chiffré.
Sortie(s): M ∈ (F2)l le texte clair associé à C’.
1: Calculer S = Q−1 · S’.
2: Décoder S = H · P · tE pour retrouver E’ = P · tE,
//décodage par syndrome.
3: Calculer tE = P −1 · E’.
4: Représenter E comme un message M,
//fonction réciproque de l’encodage en poids constant.
5: Retourner M.

L’algorithme de décodage utilisé à l’étape 2 est dans ce cadre celui de la famille des codes de
Goppa binaires dans laquelle C a été choisi et de l’algorithme de décodage le plus efficace
connu pour celle-ci. Quant à la fonction réciproque de l’encodage en poids constant,

(nt)−1 } , elle est donnée dans par la formule suivante:


φ −1 n,t : Wn,t → {0, 1,…,

φ −1 n,t : Wn,t → {0, 1,…,(nt)−1 }


(i , i , …,i ) → ( )+ ( )+ …+ ( t )
i 1 i2 ¿
1 2 t
1 2

4. Sécurité du cryptosystème

Etant donné que le schéma du cryptosystème de Mc Eliece classique est le même


que celui de Niederreiter, nous allons donc évaluer la sécurité du cryptosystème de
Niederreiter.
Le cryptosystème de Niederreiter est de type sac à dos. En effet, 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, afin que le décodage soit toujours
possible. Il faut donc posséder un algorithme d’encodage en poids constant e-cace. Une
version dite "moderne" de Niederreiter, correspond à une matrice de contrôle sous forme
systématique afin 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.

Vous aimerez peut-être aussi