One-Time-Pad: Einmal unknackbar, zweimal gebrochen

Verknüpfe jedes Byte einer Nachricht per XOR mit einem zufälligen Schlüsselbyte, und der Geheimtext verrät niemandem etwas. Verwendest du denselben Schlüssel jedoch für zwei Nachrichten, fällt er heraus: Rate ein Wort, schiebe es entlang der Zeile und lies die andere Nachricht darunter ab.

Interaktive Simulation wird geladen...

Lektion

Die Theorie — One-Time-Pad: Einmal unknackbar, zweimal gebrochen

Ein One-Time-Pad verknüpft jedes Zeichen einer Nachricht mit einem zufällig gewählten Schlüsselzeichen, das genau für dieses Zeichen und nie wieder verwendet wird. Hier geschieht diese Verknüpfung Byte für Byte über das bitweise exklusive Oder: C = P ⊕ K. Die Entschlüsselung ist dieselbe Operation: P = C ⊕ K. Ist der Zufallsschlüssel mindestens so lang wie die Nachricht, bietet das Verfahren perfekte Sicherheit: Die Kenntnis des Geheimtexts verändert die Wahrscheinlichkeit für keine einzige denkbare Nachricht. Verwendet man denselben Schlüssel für zwei Nachrichten, hebt er sich auf, C₁ ⊕ C₂ = P₁ ⊕ P₂, und beim Crib-Dragging schiebt man ein vermutetes Wort w daran entlang: Wo immer eine der Nachrichten tatsächlich w enthält, liefert w ⊕ C₁ ⊕ C₂ die andere Nachricht.

Was die einzelnen Symbole bedeuten

P
die Nachricht, ein Byte pro Zeichen
K
der Schlüssel: zufällige Bytes, so viele wie die Nachricht Zeichen hat
C
der Geheimtext, P ⊕ K
⊕
exklusives Oder: Jedes Bit des Ergebnisses ist 1, wenn sich die beiden Eingangsbits unterscheiden
w
der Crib: ein Wort, das in einer der Nachrichten vermutet wird
Setzt voraus
Nachrichten bestehen aus Kleinbuchstaben und Leerzeichen als ASCII-Bytes. Die Schlüsselbytes stammen aus einem Generator mit 32-Bit-Startwert, sodass diese Seite nur 232 ≈ 4,3 × 109 Schlüssel erzeugen kann. Bereits ab sieben Zeichen sind das weniger Schlüssel als mögliche Nachrichten; nach Shannons Kriterium ist das Pad dieser Seite daher nicht perfekt sicher. Ein echtes One-Time-Pad verlangt Bytes, die niemand reproduzieren kann. Ein Textabschnitt „ähnelt lesbarem Text“, wenn jedes Byte ein Buchstabe oder Leerzeichen ist und jede enthaltene Dreierfolge in den ersten zwei Dritteln von Poes „The Gold-Bug“ (1843) vorkommt. Die untersuchten Paare stammen aus dem letzten Drittel. Verwendet wird XOR statt einer buchstabenweisen Addition modulo 26, weil XOR vorzeichenlos ist: Es entsteht dasselbe Textstück, unabhängig davon, in welcher Nachricht der Crib liegt.

Wer jeden Schlüssel probiert, findet jeden Text 🖖

Gehe Angriff im Morgengrauen Schritt für Schritt durch und betrachte die beiden untersten Zeilen. Sie zeigen den Schlüssel, der denselben Geheimtext in „retreat at ten“ verwandeln würde. Tippst du beliebige andere 14 Buchstaben und einzelne Leerzeichen in das zweite Feld, erscheint sofort auch dafür ein passender Schlüssel. Denn XOR hebt sich selbst auf: Geheimtext XOR Wunschtext ergibt den Schlüssel. Wer als Angreifer alle 25614 Schlüssel durchprobiert, gewinnt also keineswegs die Nachricht. Er erhält schlicht jede einzelne der 2714 ≈ 1,1 × 1020 möglichen Zeichenketten dieser Länge, jede erzeugt von genau einem Schlüssel. Weil jeder Schlüssel gleich wahrscheinlich war, ist nach dem Abfangen keine einzige Nachricht plausibler als zuvor. Claude Shannon nannte dies 1949 perfekte Sicherheit und bewies zugleich ihren Preis: Man benötigt mindestens so viele Schlüssel wie mögliche Nachrichten. Ein wiederholter Vigenère-Schlüssel bietet weit weniger Möglichkeiten, weshalb Häufigkeitsanalysen ihn brechen können.

Die Leerzeichen zeichnen sich vor jedem Raten ab 🖖

Klicke auf Wo die Leerzeichen sind. Der Schlüssel hat sich aufgehoben: C₁ ⊕ C₂ entspricht Byte für Byte direkt P₁ ⊕ P₂, ohne jede Spur des Schlüssels. Sieh dir die blauen Bytes an, 19 von den 50. Ein Kleinbuchstabe liegt als ASCII-Byte zwischen 0x61 und 0x7a, ein Leerzeichen bei 0x20. Nur die Kombination aus einem Buchstaben und einem Leerzeichen setzt das 0x40-Bit. Jedes Byte ab 64 markiert folglich eine Stelle, an der genau eine der beiden Nachrichten ein Leerzeichen trägt. Noch ehe man ein einziges Wort errät, treten die Wortgrenzen zutage — wenn auch unklar bleibt, zu welchem Text die Lücke jeweils gehört. Bei 2.000 Paaren von Textstücken mit je 60 Zeichen aus „The Gold-Bug“ zeigt sich das an rund 30 % aller Positionen. Der sowjetische Funkverkehr, den Meredith Gardner ab 1946 unter dem Codenamen Venona entschlüsselte, addierte Ziffern zu Codegruppen statt Bytes per XOR zu verknüpfen. Doch zieht man zwei Geheimtexte voneinander ab, hebt sich ein doppelt genutzter Schlüssel ebenso auf. Bei den Sowjets geschah das aus Versehen: Unter dem Druck des deutschen Vormarschs auf Moskau druckte die Manufaktur für KGB-Einmalblöcke rund 35.000 Seiten an Schlüsseln doppelt.

Zwei Leerzeichen um den Crib leisten die Hauptarbeit 🖖

Klicke auf Ohne die Leerzeichen. Das Suchwort „the“ an Position 26 ergibt „org“ — lauter Buchstaben, und jede einzelne Dreierfolge kommt im Referenztext vor. Dennoch enthält keine der beiden Nachrichten an dieser Stelle „the“. Fügt man die Leerzeichen wieder hinzu, „ the “, bestehen bei diesem Paar nur noch echte Treffer. Bei 2.000 Paaren von 60-Zeichen-Abschnitten aus dem letzten Drittel von „The Gold-Bug“, die dem Referenztext unbekannt waren, bestand „ the “ an 3.661 Positionen und stimmte an 3.281 davon tatsächlich, also in etwa 9 von 10 Fällen. Ohne Leerzeichen bestand „the“ an 9.615 Stellen, war aber nur 4.169-mal korrekt: weniger als die Hälfte. Der Grund dafür sind die blauen Bytes. Ein Leerzeichen im Crib wird nur über einem Byte ab 64 zu einem Buchstaben und nur über einer 0 zu einem Leerzeichen; bei jedem anderen Wert entsteht ein Byte, das überhaupt kein Buchstabe ist. Jedes Leerzeichen des Cribs muss also genau dort landen, wo eine Nachricht tatsächlich eine Wortgrenze hat. Eine falsche Position trifft selten gleich zwei davon.

Aufgabe vollständig gelöst

  1. Fünf Buchstaben aus zwei Nachrichten mit demselben Einmalschlüssel 4 Schritte

    Zwei Nachrichten mit je 50 Zeichen wurden mit demselben One-Time-Pad verschlüsselt. An den Positionen 32 bis 36 lautet C₁ ⊕ C₂ hexadezimal 54 06 09 0c 4e. Nimm an, eine der Nachrichten enthalte dort „ the “, also die Bytes 20 74 68 65 20. Wie lautet die andere Nachricht an diesen fünf Stellen? Gehört die Annahme zu Nachricht 2, deren Geheimtext dort 9d 8e 23 40 9e lautet: Wie heißen dann die fünf Schlüsselbytes? Klicke anschließend auf Beispielaufgabe und führe den nächsten Schritt auf der Seite aus.

    Öffne diese Aufgabe im Tool

    1. Schreibe das erste Bytepaar binär: 0x54 ist 01010100 und das Leerzeichen 0x20 ist 00100000. XOR setzt ein Bit genau dort, wo sich beide Bits unterscheiden. Das ergibt 01110100, also 0x74, den Buchstaben t. Das 0x40-Bit von 0x54 verriet bereits vor jedem Raten, dass eine der Nachrichten an Position 32 ein Leerzeichen hat.

    2. Die übrigen vier: 0x06 ⊕ 0x74 = 0x72, r; 0x09 ⊕ 0x68 = 0x61, a; 0x0c ⊕ 0x65 = 0x69, i; 0x4e ⊕ 0x20 = 0x6e, n. Die andere Nachricht lautet somit „train“. Ihre drei Dreierfolgen „tra“, „rai“ und „ain“ kommen alle im Referenztext vor.

    3. Steht „ the “ in Nachricht 2, lautet der Schlüssel C₂ ⊕ P₂: 0x9d ⊕ 0x20 = 0xbd, 0x8e ⊕ 0x74 = 0xfa, 0x23 ⊕ 0x68 = 0x4b, 0x40 ⊕ 0x65 = 0x25, 0x9e ⊕ 0x20 = 0xbe. Gehörte die Vermutung zu Nachricht 1, stünde in Nachricht 2 das Wort „train“, und die Schlüsselbytes ergäben sich stattdessen aus C₁ ⊕ „ the “. Da C₁ ⊕ C₂ in beiden Fällen identisch ist, kann die Rechnung allein nicht entscheiden, welcher Fall zutrifft.

    4. Auf der Seite wird „ the “ an Position 32 in Nachricht 2 übernommen, und im Crib-Feld steht nun „ train “ an Position 31 — in der Annahme, dass „train“ in Nachricht 1 ein vollständiges Wort bildet. Für Nachricht 2 ergibt sich „y the r“: ausschließlich Buchstaben und Leerzeichen, und jede Dreierfolge ist aus dem Referenztext bekannt. Übernimmst du dies in Nachricht 1, wachsen beide Zeilen auf sieben Zeichen an.

    Antwort

    „train“, und die Schlüsselbytes bd fa 4b 25 be, falls die Vermutung zu Nachricht 2 gehörte. Nichts an C₁ ⊕ C₂ verrät, welche Nachricht „ the “ enthält, und das wird es auch nie: Vertauscht man die beiden Nachrichten vollständig, bleibt C₁ ⊕ C₂ unverändert. Erst die nächste Vermutung entscheidet, welche Bruchstücke zur selben Nachricht gehören. Die Seite zählt zudem mit, wie viele der rekonstruierten Zeichen stimmen, weil ihr beide Nachrichten vorliegen. Ein Angreifer sieht hingegen nur die beiden Zeilen und muss beurteilen, ob sie Sinn ergeben.

Lernpfad

Wie Chiffren gebrochen werden

Quellen (2)