Cryptosystème de McEliece

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Le cryptosystème de McEliece est un schéma de chiffrement asymétrique, inventé en 1978 par Robert McEliece. Ce système, reposant sur un problème difficile de la théorie des codes, 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 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, qui ruinerait RSA, n'affecterait en rien ce système.

Des attaques efficaces ont été publiées contre le cryptosystème de McEliece, ainsi que contre de nombreuses variantes. Cependant, des améliorations ont été proposées afin d'éviter ces attaques. Il est rarement utilisé en pratique du fait de la grande taille des clefs, mais a été utilisé pour le chiffrement dans Entropy, une alternative à Freenet.

Principe[modifier | modifier le code]

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 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 codes. Le cryptosystème de Niederreiter a été prouvé équivalent à celui de McEliece en 1994 par Y.X. Li, R.H. Deng et X.M. Wang.

Description du schéma[modifier | modifier le code]

Le cryptosystème de McEliece consiste en trois algorithmes: un algorithme probabiliste de génération des clefs qui produit une clef secrète et une clef 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.

Génération des clefs[modifier | modifier le code]

  1. Sélectionner aléatoirement un (n,k)-code linéaire C capable de corriger t erreurs. Ce code doit posséder un algorithme de décodage efficace.
  2. Alice genère une matrice génératrice G pour le code C (matrice k \times n).
  3. Sélectionner aléatoirement une matrice binaire k \times k non singulière S.
  4. Sélectionner aléatoirement une matrice de permutation P n \times n.
  5. Calculer la matrice {\hat G} = SGP. Celle-ci est une matrice k \times n.
  6. La clef publique est ({\hat G}, t); la clef privée est (S,G,P).

Chiffrement[modifier | modifier le code]

Pour chiffrer une suite binaire m de longueur k :

  1. Calculer le vecteur c^{\prime} = m{\hat G}.
  2. Générer un vecteur d'erreur e de poids t (une suite binaire de longueur n contenant t 1 et n-t 0).
  3. calculer le chiffré c = c^{\prime} + e.

Déchiffrement[modifier | modifier le code]

  1. Calculer {\hat c} = cP^{-1}.
  2. Utiliser l'algorithme de décodage de C pour décoder {\hat c} en un mot {\hat m}.
  3. Calculer m = {\hat m}S^{-1}

Critiques[modifier | modifier le code]

Positives[modifier | modifier le code]

Généralement, les codes de Goppa sont considérés comme de « bons » codes linéaires puisqu'ils permettent de corriger jusqu'à  {n^k} \choose {\log_2 n} erreurs ; ils se décodent efficacement, par les algorithmes d'Euclide et de Berlekamp-Massey, en particulier.

Négatives[modifier | modifier le code]

Les clés publique et privée sont de grandes matrices, ce qui constitue un des plus grands désavantages de ce chiffre. Par exemple, la clé publique est de 2^{19} bits (64 Kio).

Il y a eu des tentatives de cryptanalyse sur l'algorithme de McEliece, mais des changements ont permis de les rendre inopérantes. Néanmoins, cet algorithme n'est pas utilisé en pratique, d'une part à cause de la grandeur des clés, mais aussi parce que la grandeur du texte chiffré est de deux fois celle du texte d'origine.

La ressemblance entre ce problème et celui du sac à dos inquiète aussi une partie des spécialistes.

En 1991, E.M. Gabidulin et al. ont proposé une amélioration, qui, deux ans après, sera prouvée sans avantage par J.K. Gibson.

Bibliographie[modifier | modifier le code]

  • R.J. McEliece, A public-key cryptosystem based on algebraic coding theory, JPL DSN Progress Report 4244 (1978), 114-116.
  • H. Niederreiter, Knapsack-type Cryptosystems and Algebraic Coding Theory, Problems of Control and Information Theory, 15(2), 1986, 159-166.
  • Y.X. Li, R.H. Deng and X.M. Wang, On the equivalence of McEliece's and Niederreiter's public-key cryptosystems, IEEE Transactions on Information Theory, 40(1), 1994, 271-273
  • E.M. Gabidulin, A.V. Paramonov, and O.V. Tretjakov, Ideals over a non-commutative ring and their application in cryptology, Advances in Cryptology - Eurocrypt '91, Springer-Verlag (1991), 482-489.
  • J.K. Gibson, Severely denting the Babidulin version of the McElience public key cryptosystem, Preproceedings of the 4th IMA Conference on Cryptography and Coding (1993).