One-Time-Pad

One-Time-Pads (OTP) sind Schlüssel, die zur Verschlüsselung einer beliebigen Nachricht verwendet werden. Praktisch handelt es sich um eine Reihe von zufälligen Fünfergruppen. Die Nachricht, die gesendet werden soll, muss vor dem Verschlüsseln kodiert werden. Kodierung selbst bezeichnet keinen Mechanismus der Geheimhaltung sondern die Umwandlung des Text in Zahlen, um mit der Nachricht Berechnungen (eben die Verschlüsselung) durchführen zu können. Der Ablauf der Kodierung selbst ist festgelegt und nicht geheim.

Grundlegende Anleitung

Schlüssel erzeugen

Jeder Schlüssel (und das dazugehörige Invers) darf nur einmal, zum Senden bzw. Empfangen einer Nachricht, verwendet werden. Nach dem Senden oder Empfangen ist der Schlüssel rückstandslos zu vernichten. Daher muss der Schlüssel auf wasserlöslichem Papier oder einem anderen verlässlich löschbaren Medium aufbewahrt sein. Die sichere Aufbewahrung des Schlüssels muss gewährleistet sein, und es dürfen keine elektronischen Kameras auf den Schlüssel gerichtet sein (auch nicht von Mobiltelefonen).

Auf wasserlösliches Papier werden zufällig gewürfelte Blöcke von je fünf Dezimalziffern geschrieben. Für äußerst kurze Nachrichten sollten das zumindest zehn Blöcke sein. Ich verwende (auch im Zusammenhang mit meinen Vordrucken) meist ein Vielfaches von 12, also neben der Zahl selbst 24, 36, 48, 72, 96 und 144. Mehr als 48 ist jedoch nur im Ausnahmefall und bei (für OTP-Verhältnisse) sehr langen Nachrichten angemessen. Für den Anfang empfehle ich 12 oder 24 Blöcke. Der Faktor von Schriftzeichen zu Blöcken ist ca. 0.24: 60 Schriftzeichen erfordern 60 * 0.24 ≈ 14 Blöcke. Dies sind jedoch keine präzisen Angaben, die näheren Hintergründe dazu unter Kodierung.

Ein Schlüssel von 12 Blöcken kann wie folgt aussehen:

07395 97038 30817 41065 63294 46341 99794 60120 85226 02328 60101 31694

Dieser wird in der gesamten Anleitung als Beispiel verwendet.

Invers erzeugen

Das Invers ist eine Kopie des Schlüssels für den Empfänger. Es lässt sich direkt aus dem Schlüssel ableiten, jedoch werden die Ziffern nach einer festen Regel ersetzt, um das Entschlüsseln später zu erleichtern:

0 → 0
1 → 9
2 → 8
3 → 7
4 → 6
5 → 5
6 → 4
7 → 3
8 → 2
9 → 1

Null und Fünf bleiben somit unverändert, bei den anderen Ziffern wird jene Ziffer aufgeschrieben, dass es zusammen zehn ergibt:

03715 13072 70293 69045 47816 64769 11316 40980 25884 08782 40909 79416

Kodierung

Bei der Kodierung wird die Nachricht in eine Ziffernfolge umgewandelt, damit diese mit dem erzeugten Schlüssel verknüpft, verschlüsselt, werden kann.

Kodierungstabelle 2.1
0 1 2 3 4 5 6 7 8 9
Code E N I S
5 A AB AG AM AU B BE CH CK D
6 DE F FR G GE H K KL L M
7 MA MI ND NG NT O P QU R RA
8 SCH SP ST T TR TZ U UN V VER
9 W WA WI Z ; 123 Ende
940 andere
941 aufgrund
942 hatte
943 keine
944 können
945 obwohl
946 schnellstens
947 sondern
948 vielleicht
949 zwischen
950 explizit leer
951 explizit groß
952 Ich kann
953 Ich habe
954 Ich möchte
955 Kannst du
956 Hast du
957 Möchtest du
958 Soll ich...?
959 Ich wiederhole:
960 ?
961 !
962
963 C
964 J
965 Q
966 X
967 Y
968 (reserviert)
969 (reserviert)

Die Tabelle ist an die deutsche Sprache angepasst. So werden SCH oder FR, häufige Wortbestandteile, verkürzt geschrieben. Für wichtige Wörter gibt es sogar im Raum 940 bis 949 eigene Codes.

Hierzu wird der Text gemäß der oben dargestellten Tabelle umgewandelt. Soll beispielsweise:

Fand kein Hotel; musste nach Hannover

kodiert werden, wird von links nach rechts versucht, möglichst viele Zeichen auf einmal zu kodieren (damit etwa CH als 57 kodiert wird, und nicht C und H einzeln als 963 65).

61 50 72 66 1 3 2 65 75 83 1 68 97 69 86 4 4 83 1 2 50 57 65 50 2 2 75 89  99
F  A  ND K  E I N H  O  T  E L  ;  M  U  S S T  E N A  CH H  A  N N O  VER /ENDE

Nehme dir am besten die Zeit, diesen Kodierungsvorgang selbst nachzuvollziehen. Schau dabei auf die einzelnen Zeichen(blöcke), auf die darüber stehenden Ziffern und die Bedeutung gemäß Kodierungstabelle. Die Leerzeichen bei den Ziffern dienen nur der Lesbarkeit - tatsächlich wird die kodierte Nachricht wie der Schlüssel in Fünferblöcken geschrieben.

Hinweis: Das Leerzeichen wird normalerweise ausgelassen. Ist es für das Verständnis unerlässlich, kann 950 (explizit leer) als Code verwendet werden.

Verschlüsselung

Die kodierte Nachricht wird unter den Schlüssel geschrieben, ebenfalls in Fünferblöcken. Beide Zeilen zusammen sehen dann so aus:

07395 97038 30817 41065 63294 46341 99794 60120 85226 02328 60101 31694
61507 26613 26575 83168 97698 64483 12505 76550 22758 999

Die beiden jeweils untereinander stehenden Ziffern müssen nun addiert werden, um die verschlüsselte Nachricht zu erhalten. Dabei handelt es sich nicht um gewöhnliche Addition, sondern Addition modulo 10. Das bedeutet vereinfacht gesagt, nur die rechte Ziffer nach der Addition zu beachten. Eine andere Analogie ist Die Addition um einen Kreis herum, der dem Ziffernblatt einer Zeigeruhr gleicht, jedoch von 0 bis 9 geht.

Somit wäre 8 + 3 = 1, da das Zahlensystem hier auf die einstelligen Zahlen (einschließlich 0) beschränkt ist, und es danach wieder von vorne anfängt. Ähnlich ist 20 Minuten nach einem Ereignis in der 55. Minute einer Stunde nicht die 75. Minute, sondern die 15. Minute der Folgestunde (wobei es das Konzept der Stunde bzw. eines übergeordeten Wertes hier nicht gibt).

07395 97038 30817 41065 63294 46341 99794 60120 85226 02328 60101 31694
61507 26613 26575 83168 97698 64483 12505 76550 22758 999              
68892 13641 56382 24123 50882 00724 01299 36670 07974 91228 60101 31694

Nun wurde jede Ziffer des Schlüssels mit der darunter stehenden Ziffer der kodierten Nachricht modulo 10 addiert. Dabei werden die Ziffern stets einzeln betrachtet! Insbesondere wird nicht versucht, eine schriftliche Addition von zwei vermeintlichen fünfstelligen Zahlen durchzuführen, da dies zu einem völlig anderen Ergebnis führen würde. Die Gruppierung erfolgt nur zu Lesbarkeitszwecken, und jedes untereinanderstehende Paar aus Schlüssel- und Nachrichtenziffer steht für sich.

Die unten stehende Folge von Ziffernblöcken ist die verschlüsselte Nachricht. Diese kann nun über eine beliebige, unsichere Verbindung übertragen werden.

Padding

In den meisten Fällen ist die kodierte Nachricht kürzer als der verwendete Schlüssel (Wäre sie länger, wäre der Versand unmöglich bzw. die Nachricht müsste abgekürzt werden). Dennoch hat die verschlüsselte Nachricht die Länge des Schlüssels und dieser wurde dort, wo die kodierte Nachricht aufhörte, unmittelbar übernommen. Dadurch ist sichergestellt, dass ein Angreifer nicht feststellen kann, wie lang die Nachricht ist. Auch so etwas kann nämlich verräterisch sein; gerade dann, wenn nur eine begrenzte Auswahl an Texten (z.B. die Nennung von Ortsnamen) in Frage kommen. Auch die Worte Ja und Nein haben eine unterschiedliche Anzahl an Ziffern in kodierter Form (5 und 4).

Eine Nachricht immer gleich lang zu halten, um die tatsächliche Länge nicht zu offenbaren (sondern nur die maximal mögliche Länge), wird Padding genannt.

Entschlüsselung

Die Entschlüsselung wird mit dem Invers des Schlüssels (wie es im Besitz des Empfängers ist) und der verschlüsselten Nachricht vorgenommen. Wie beim Verschlüsseln erfolgt die Addition modulo 10.

68892 13641 56382 24123 50882 00724 01299 36670 07974 91228 60101 31694
03715 13072 70293 69045 47816 64769 11316 40980 25884 08782 40909 79416
61507 26613 26575 83168 97698 64483 12505 76550 22758 99900 00000 00000

Nun muss die entschlüsselte Nachricht dekodiert werden, um im Klartext lesbar zu werden. Hinweis: Die Nullen am Ende der entschlüsselten Nachricht kommen vom Padding, und entstanden dadurch, das nach dem Ende der kodierten Nachricht der Schlüssel unmittelbar gesendet wurde. Sie tragen keine nähere Bedeutung, da das Ende der Nachricht schon durch den Code 99 angezeigt wurde.

Dekodierung

Die entschlüsselte Nachricht wird dekodiert, indem die Ziffern von links nach rechts als Zeichen gemäß der Kodierungstabelle interpretiert werden. Die Dekodierung ist dabei immer eindeutig. So hat die 6 alleine keine Bedeutung, da sonst bei 61 nicht klar wäre, ob 61 zusammen oder 6 und 1 getrennt gemeint ist. Auf dem Papier kann es helfen, dekodierte Ziffern durchzustreichen (oder zu unterstreichen, damit sie weiter lesbar, aber markiert sind), um sich besser zurecht zu finden.

Weiterführende Themen

Kodierung im Detail

Auf einige Besonderheiten der Kodierungstabelle wurde bisher nicht eingegangen:

0 - Code

Die 0 bedeutet, dass ein Code folgt (hat nichts mit One-Time-Codes zu tun!). Damit können Abkürzungen für häufige Wörter und Phrasen geschaffen werden, analog zu den zehn Worten in der Kodierungstabelle (940 bis 949). Welche Codes was bedeuten kann frei bestimmt werden. Ich werde noch meine Codetabelle veröffentlichen.

97 - Semikolon

Das Semikolon ist das häufigste Satzzeichen in den Nachrichten. Es ersetzt quasi Punkt und Komma und soll dazu anregen, kurze Phrasen, die klar voneinander abgegrenzt sind, zu schreiben. Das spart unnötige Formulierungen und damit Aufwand bzw. Schlüsselkapazität.

98 - Ziffer

Die Darstellung von Ziffernfolgen wird mit 98 eingeleitet. Anschließend wird (innerhalb der Kodierung) jede Ziffer dreimal wiederholt und mit erneuten 98 abgeschlossen. Die Darstellung von 495 wäre also:

98444 99955 598

Mit der dreifachen Wiederholung wird das Risiko, dass eine Zahl falsch übertragen wird, minimiert. Bei Zahlen sind Fehler ja besonders schwerwiegend.

968, 969

Diese Codes haben keine Bedeutung und ich behalte mir vor, in einer künftigen Version der Kodierungstabelle diesen eine nützliche Funktion zuzuordnen.

Schlüsselverwaltung

Bei der praktischen Nutzung des One-Time-Pads gibt es nicht nur einen Schlüssel, der verwendet wird, um danach keinerlei Kommunikation mehr vorzunehmen. Stattdessen sind vielfältige Szenarien denkbar, die eine gewisse Verwaltung erfordern:

Schlüssel-ID

Mit der Schlüssel-ID wird gekennzeichnet, welcher Schlüssel zur Entschlüsselung zu verwenden ist. Es sollte sich um eine zufällige oder serielle vierstellige Zahl handeln, die genau gleich (d.h. nicht als Invers) auf beiden Fassungen des Schlüssels angegeben ist. Diese ist bei jedem Versand einer verschlüsselten Nachricht anzugeben, um die richtige Zuordnung zu ermöglichen.

Richtung der Nachricht

Auf ein paar aus zwei Schlüsseln mit gleicher ID wird jeweils tx und rx geschrieben. tx steht für transmit, bezeichnet den Schlüssel zum Senden. rx steht für receive, und ist zum Empfang der Nachricht. Eine Person darf somit nicht den tx- und rx-Schlüssel mit der gleichen ID besitzen, da sonst keine Kommunikation möglich ist. Dies muss beim Schlüsselaustausch beachtet werden. Das Verhältnis von tx- und rx-Schlüsseln richtet sich nach praktischen Aspekten. So kann zu erwarten sein, dass jemand weitaus mehr Nachrichten senden als Empfangen muss. Nicht zwangsläufig muss daher die Verteilung gleichmäßig sein.

Prioritätsziffer

Auf jedem Schlüssel sollte eine Prioritätsziffer stehen. Damit kann der Empfänger schnell prüfen, ob er die Bearbeitung sofort oder demnächst vornehmen sollte. Es handelt sich bei dieser Ziffer gewissermaßen um einen Schlüssel der Länge 1, der daher gleichverteilt zufällig und mit Invers auf dem jeweils anderen Blatt angegeben sein muss.

Je höher die (entschlüsselte) Priorität, desto dringender ist die Nachricht. Ergänzend können die Kommunikationspartner/-innen weiteres vereinbaren, z.B. dass nur bestimmte Vorfälle gewisse Priorität rechtfertigen.

Dynamische Festlegung von One-Time-Codes

Es ist möglich, beim Austausch von One-Time-Pads auch One-Time-Codes auszutauschen, denen zu diesem Zeitpunkt noch keine Bedeutung zugeteilt wird. Stattdessen erfolgt eine abstrakte Bezeichnung mit Buchstaben:

ad-hoc Codes
A 84752
B 37955
C 70308
D 24859

Sendet Alice nun eine One-Time-Pad-Nachricht an Bob, kann sie in dieser Bedeutungen zuweisen, auf deren Grundlage Bob den richtigen Code als Antwort sendet. Das kann etwa eine Frage von Alice an Bob sein, deren naheliegende Antworten sie im Voraus definiert. Dafür können auch eigene Codebuch-Einträge existieren.

Vorteil ist, dass Bob keinen Schlüssel "verschwendet", um eine von wenigen vorgegebenen Antworten zu äußern. Auch die Reaktion kann schneller erfolgen. Ein in der Praxis marginaler Vorteil sind verringerte Telekommunikationszeiten und -gebühren. Nachteil ist, dass passive Angreifer wissen, dass Alice und Bob sich asymmetrisch viel zu sagen haben (oder dies vortäuschen).