Merkles Puzzle
# Merkles Puzzle

Merkles Puzzle ist das erste Schlüsselaustauschprotokoll, bei dem die beiden Parteien nicht bereits einen geheimen Schlüssel mit der jeweils anderen oder einer dritten Partei teilen müssen. Es wurde im Jahr 1974 von Ralph Merkle entdeckt, aber erst 1978 veröffentlicht. Die Existenz eines solchen Protokolls wurde lange für unmöglich gehalten, und seine Entdeckung kann als Beginn der Public-Key-Kryptographie gesehen werden.

## Beschreibung

Alice und Bob einigen sich zunächst auf ein symmetrisches Verschlüsselungsverfahren $E$ und eine Schlüssellänge $n$, die so gewählt wird, dass eine mit $E$ und $n$ Bit langem Schlüssel verschlüsselte Nachricht mit realistischem, aber nicht zu kleinem Aufwand entziffert werden kann. Dann erzeugt Alice $m$ zufällige Schlüssel $k_{0},\cdots ,k_{m-1}$ der Länge $n$ Bit, und sie legt eine Tabelle mit $m$ zufälligen Schlüsseln $K_{0},\cdots ,K_{m-1}$ an, die ausreichend lang sind, um keine Entzifferung zu erlauben (128 Bit oder mehr). Sie verschlüsselt mit jedem Schlüssel $k_{i}$ den Tabelleneintrag $K_{i}$ zusammen mit seinem Tabellenindex $i$. Die so erzeugten Chiffrate $E_{k_{i}}(K_{i},i)$ mit $i=0,1,\cdots m-1$ sendet sie in zufälliger Reihenfolge an Bob.

Bob wählt zufällig eines der Chiffrate aus und entziffert es, indem er alle möglichen Schlüssel der Länge $n$ durchprobiert. Dafür braucht er höchstens $2^{n}$ Versuche, im Mittel $2^{n}/2$. Er merkt sich den Schlüssel $K_{i}$ und sendet den Index $i$ zurück an Alice. Damit haben die beiden den gemeinsamen Schlüssel $K_{i}$ vereinbart, mit dem sie nun z. B. mit einer symmetrischen Verschlüsselung, evtl. mit dem gleichen Verfahren $E$ wie oben, Nachrichten austauschen können.

In der Praxis müssen die Chiffrate auch redundante Information enthalten, damit Bob das richtige Dechiffrat erkennen kann. Alice könnte beispielsweise einen Text $T$ ausreichender Länge wählen und an alle Tabelleneinträge anhängen. $T$ wird im Klartext zusammen mit den Chiffraten $E_{k_{i}}(K_{i},i,T)$ an Bob gesendet. Oder man macht das Feld für den Index $i$ genügend groß (ausreichend für Zahlen bis über $m^{2}$), dann kann Bob einen falschen Schlüssel daran erkennen, dass ein Index größer als $m-1$ herauskommt.

## Sicherheit

Ein Angreifer, der die Kommunikation der beiden belauscht, sieht zuerst die $m$ Chiffrate, die Alice an Bob schickt, dann den Index, den Bob zurückschickt, der aber von der Reihenfolge, in der die Chiffrate gesendet wurden, unabhängig ist. Es bleibt ihm also nichts anderes übrig, als so lange Chiffrate zu entziffern, bis er dasjenige findet, das den Index $i$ enthält. Dafür muss er im Mittel $m/2$ Chiffrate entziffern. Bei jeweils $2^{n}/2$ Versuchen, den richtigen Schlüssel $k_{i}$ zu finden, braucht er insgesamt im Mittel $m\cdot 2^{n}/4$ Versuche. Wenn $m=2^{n}$ gewählt wurde, ist seine Laufzeit also quadratisch in der von Alice und Bob.

Angenommen, Bob kann pro Sekunde $2^{25}$ Schlüssel durchprobieren. Dann braucht er bei $n=25$ maximal eine, im Mittel 1/2 Sekunde, um ein Chiffrat zu entziffern. Ein Angreifer mit derselben Rechenleistung bräuchte bei $m=2^{25}$ jedoch im Durchschnitt drei Monate. Allerdings kann ein Angreifer den Schlüssel mit Glück auch deutlich früher erraten.

In der theoretischen Kryptologie wird heutzutage in der Regel angenommen, dass die Laufzeit des Angreifers polynomial in einem Sicherheitsparameter ist. Nach dieser Definition reicht ein quadratischer Unterschied in der Laufzeit zwischen den Benutzern und dem Angreifer nicht aus, der Angreifer könnte alle Chiffrate durchprobieren. Das Verfahren ist in einem solchen Modell also nicht sicher.

