4.5.3 Merkle-Hellman Kryptosystem
1976 stellten W. Diffie und Hellman ein neues Konzept der
Kryptographie vor: Public-Key Kryptographie. Kurz darauf, 1978, veröffentlichten
Merkle und Hellman in [MH78] ein Kryptosystem, das auf dem Subset-Sum Problem basiert.
Wie schon im Kapitel Subset-Sum Problem
erklärt, gibt es Knapsacks, so dass ein Problem (A, s) einfach zu Lösen
ist. Superansteigende Knapsacks gehören in diese Kategorie. Andererseits kann es äußerst schwierig sein, für einen Knapsack A eine
Lösung zu finden, wenn A nicht superansteigend ist.
Diese Tatsache benutzten Merkle und Hellman, um darauf ein Kryptosystem
aufzubauen. Ausgangspunkt ist ein superansteigender Knapsack A. Dieser
ist Teil des privaten Schlüssels. Ein zweiter Knapsack, B, wird dann
aus A konstruiert und als öffentlicher Schlüssel bereitgestellt.
B besitzt die superansteigende Eigenschaft nicht. Eine Nachricht p wird
chiffriert, indem die Summe c = pB = p1b1 + p2b2 +... + pnbn berechnet wird. Dabei ist pi ist das i-te Bit der Klartextnachricht p.
Jemand, der eine chiffrierte Nachricht c abfängt, ist mit dem schweren
Problem (B, c) konfrontiert; er muss also herausfinden, welche Elemente bi von B sich zu c aufsummieren. Der Besitzer des privaten Schlüssels
jedoch kann aus c leicht die Nachricht p bestimmen, da er die zu B passende
superansteigende Menge A kennt.
Im Folgenden wird das Merkle-Hellman Kryptosystem näher beschrieben.
-
Schlüsselerzeugung
-
Verschlüsselung
-
Der Parameter n legt fest, dass pro Verschlüsselungsvorgang eine n-Bit
Nachricht chiffriert wird. Daher muss vor Verschlüsselung eine evtl.
größere Nachricht p in n-Bit Blöcke unterteilt werden.
-
Sei nun p = (p1, p2, ..., pn) die zu verschlüsselnde
binäre Nachricht. Der Chiffretext c wird durch die Vorschrift
c = pB = p1b1 + p2b2 + ... + pnbn
erzeugt.
Das i-te Element von B wird zu c hinzuaddiert, wenn
das i-te Bit von p Eins ist.
-
Entschlüsselung
Die Entschlüsselung eines Chiffretextes c erfolgt in zwei
Schritten:
- Berechne c' = Uc mod M = W-1c mod M
-
Lösen des Problems (A, c').
Da A eine superansteigende Menge ist, lässt
sich das Problem (A, c') einfach lösen. Sei X = (x1, ...,
xn) der erhaltene Lösungsvektor für (A, c').
Bei Verwendung einer Permutation ergeben sich die Nachrichtenbits pi aus pi = xpi(i). Ansonsten gilt pi = xi
Damit ein Kryptosystem korrekt funktioniert, muss d(e(p)) = p sein. Dabei ist p die Klartextnachricht, e die Verschlüsselungsfunktion und d die Entschlüsselungsfunktion.
Tatsächlich gilt
c' = Uc mod M = W-1c mod M = W-1(pB) mod M = W-1W(pA) mod M = pA mod M
Da sowohl c' < M als auch SUM (ai) < M, folgt c' = pA = p1a1 + ... + pnan. Die Klartextbits pi ergeben sich durch Lösen von (A, c') und anschließendem Rückgängigmachen der Permutation pi.
Applet starten
Anmerkungen zum Merkle-Hellman Kryptosystem
-
Merkle und Hellman gaben zur Schlüsselerzeugung folgende Werte als
untere Grenze für n, M und A an:
-
n = 100: die Knapsack-Vektoren A und B haben jeweils 100 Elemente.
-
a1 sollte etwa 100 Bit lang sein: |a1| = 100
-
|ai| = 100 + i - 1
-
|M| = 202
-
Durch Verwenden dieser Parameter ergibt sich für den Chiffretext c eine binäre Länge von 209 Bit. Eine 100-bit Nachricht p wird durch eine 209-bit Chiffre dargestellt: die Datenexpansion beträgt 2,09.
-
A. Shamir hat 1983 in [SH83] einen Algorithmus vorgestellt, der das Basis-Merkle-Hellman Kryptosystem erfolgreich kompromittierte.
Aus dem öffentlichen Schlüssel B ermittelte Shamir
ein Trapdoor-Paar (U', M'). Mit B, M' und U' kann eine superansteigende Menge A'
konstruiert werden. Diese wiederum kann anstatt des ursprünglichen Knapsack-Vektors A benutzt werden, um alle Nachrichten zu entschlüsseln, die mit B verschlüsselt wurden.
-
Ein weiterer Angriff auf das Merkle-Hellman System erfolgt mit Hilfe der
Gitter-Basis-Reduktion.
Hier kann aus dem öffentlichen Schlüssel B und einer gegebenen verschlüsselten Nachricht c die Klartextnachricht p bestimmt werden.