AccueilđŸ‡«đŸ‡·Chercher

CryptosystĂšme de Merkle-Hellman

En cryptologie, Merkle-Hellman (MH) est un des premiers cryptosystÚmes asymétriques, défini par Ralph Merkle et Martin Hellman en 1978[1]. Bien que l'idée soit élégante, et bien plus simple que RSA, il a été démontré comme vulnérable par Adi Shamir[2] - [3].

Description

Merkle-Hellman est un cryptosystĂšme asymĂ©trique. Cependant, contrairement Ă  RSA, il est Ă  sens unique, c'est-Ă -dire que la clĂ© publique est utilisĂ©e uniquement pour le chiffrement, et la clĂ© privĂ©e uniquement pour le dĂ©chiffrement. Il ne peut donc pas ĂȘtre utilisĂ© pour un protocole d'authentification.

Il est basé sur le problÚme de la somme de sous-ensembles (un cas spécial du problÚme du sac à dos): étant donnés n entiers et un entier p, existe-t-il un sous-ensemble de ces éléments dont la somme des valeurs est p ? Ce problÚme est NP-Complet[3]. Une instance composé de n entiers s'appelle un sac. On dit qu'un sac est supercroissant lorsque chaque élément est plus grand que la somme des éléments qui sont plus petits que lui. Le problÚme restreint aux instances supercroissantes est décidable en temps polynomial avec un algorithme glouton[3].

Génération de clefs

Pour ce cryptosystÚme, les clés sont des sacs :

  • La clĂ© privĂ©e contient entre autres (voir la section formalisation pour plus de dĂ©tails) un sac supercroissant dit "facile" solvable en temps polynomial ;
  • La clĂ© publique est un sac Ă  dos dit "dur" calculĂ©e Ă  partir de la clĂ© privĂ©e.

Chiffrement

Pour chiffrer le message, on utilise la clĂ© publique. Le mot Ă  chiffrer peut ĂȘtre vu comme un certificat de l'instance du sac "dur". Le mot chiffrĂ© est la valeur obtenue Ă  l'aide de ce certificat. Le mot Ă  chiffrer est aussi un certificat pour l'instance du sac "facile" mais seul le possesseur de la clĂ© privĂ©e peut l'obtenir facilement.

DĂ©chiffrement

L'algorithme de déchiffrement de Merkle-Hellman consiste à résoudre l'instance du sac "facile".

Formalisation

Génération des clés

On procĂšde en 3 Ă©tapes[3]:

  • Choix d'une sĂ©quence super-croissante et d'un nombre
  • Choix d'un nombre tel que
  • Calcul des

DÚs lors, on obtient une clé publique (un sac "dur") et une clé privée (un sac "facile" et deux nombres et ).

Chiffrement

La clé publique permet de chiffrer des messages de longueur . Considérons un mot fini de longueur . Alors[3]:

est le message chiffré par la clé publique .

DĂ©chiffrement

Considérons le mot chiffré . Posons [note 1]. On peut alors écrire, l'instance du problÚme du sac à dos[3]:

qui a pour solution . Le détenteur de la clef privée peut calculer calculer et résoudre en temps polynomial l'instance du sac à dos pour retrouver le message original .


Exemple

Tout d'abord, on génÚre la clé privée . D'abord, on génÚre une séquence super-croissante :

(a1, etc. a8) = {2, 7, 11, 21, 42, 89, 180, 354}

On calcule la somme :

puis on choisit un nombre plus grand que cette somme :

N = 881

Puis on choisit un nombre avec :

A = 588

La clé privée est générée : c'est .

À prĂ©sent on calcule la clĂ© publique avec :

b = {295, 592, 301, 14, 28, 353, 120, 236}

car

(2 * 588) mod 881 = 295
(7 * 588) mod 881 = 592
(11 * 588) mod 881 = 301
(21 * 588) mod 881 = 14
(42 * 588) mod 881 = 28
(89 * 588) mod 881 = 353
(180 * 588) mod 881 = 120
(354 * 588) mod 881 = 236

Alice veut chiffrer le message "a". Elle traduit le message "a" en binaire (en utilisant ASCII ou UTF-8) :

w = 01100001

Elle calcule le message chiffré :

w = 01100001
b = 0 * 295
  + 1 * 592
  + 1 * 301
  + 0 * 14
  + 0 * 28
  + 0 * 353
  + 0 * 120
  + 1 * 236
         = 1129 

Elle envoie alors 1129 Ă  Bob. Vous pouvez essayer l'exemple ici.

Pour déchiffrer le message chiffré 1129, Bob calcule :

p = 1129 * 442 mod 881 = 372

Maintenant, Bob résout l'instance avec un algorithme glouton. Il décompose p = 372 en sélectionnant le le plus grand qui inférieur ou égal à 372. Puis il recommence jusqu'à obtenir 0 :

372 - 354 = 18
18 - 11 = 7
7 - 7 = 0
                         rappel : (a1, etc. a8) = {2, 7, 11, 21, 42, 89, 180, 354}

Les éléments sélectionnées de notre sac privé , c'est-à-dire donne le message initial :

w = 01100001

qui correspond au message "a".

Voir aussi

Notes et références

Notes

  1. peut ĂȘtre calculĂ© facilement Ă  l'aide de l'algorithme d'Euclide Ă©tendu.

Références

  1. Ralph Merkle and Martin Hellman, Hiding Information and Signatures in Trapdoor Knapsacks, IEEE Trans. Information Theory, 24(5), September 1978, pp525–530.
  2. Adi Shamir, A Polynomial Time Algorithm for Breaking the Basic Merkle-Hellman Cryptosystem. CRYPTO 1982, pp279–288. http://dsns.csie.nctu.edu.tw/research/crypto/HTML/PDF/C82/279.PDF
  3. Pascal Boyer, Petit compagnon des nombres et de leurs applications, Calvage et Mounet, , 648 p. (ISBN 978-2-916352-75-6), VI. Cryptographie, chap. 6 (« La méthode du sac à dos »), p. 538-539.
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.