Tcl/Tk

One-Time-Pad (Verschlüsselung)

Programm: osOTP
Version: 2017-01-07
Autor: Oliver Scholl
Lizenz: GPL Version 2
Sprachen: Deutsch, Englisch
Betriebssystem: Windows, Linux (evtl. OS X)

Hier finden Sie die Installationsanleitung

Kurzbeschreibung:

Das One-Time-Pad ist ein symmetrisches Verschlüsselungsverfahren, das nachweislich (auch mit beliebig hohem Rechenaufwand) nicht gebrochen werden kann. Voraussetzungen für die Sicherheit des One-Time-Pad-Verfahrens sind:

Der Schlüssel muss mindestens so lang sein wie die Nachricht
Der Schlüssel muss zufällig sein
Der Schlüssel darf nicht wiederverwendet werden, auch nicht teilweise
Der Schlüssel ist nur dem Sender und Empfänger bekannt

Bitte beachten Sie die Zulässigkeit kryptographischer Verfahren in Ihrem Land. In Deutschland sind kryptographische Verfahren ohne Einschränkungen zulässig.

Weitere Informationen findet man z. B. bei Wikipedia (https://de.wikipedia.org/wiki/One-Time-Pad).

Anleitung und Screenshots:

Das Programm sieht wie folgt aus:

1. Datei verschlüsseln

Wählen Sie die zu verschlüsselnde Datei aus. Wenn Sie ganze Ordner verschlüsseln wollen, zippen Sie bitte zuerst den Ordnerinhalt in eine Datei.

Wählen Sie durch einen Klick auf den Button mit den drei Punkten eine Schlüsseldatei mit Zufallszahlen aus (siehe Kapitel 3).

Falls Sie keine Schlüsseldatei verwenden möchten, erstellen Sie durch einen Klick auf den Button Erzeugen einen zufälligen Schlüssel. Beachten Sie, dass es sich nur um Pseudo-Zufallszahlen handelt.

Zuerst müssen Sie eine 10-stellige Zufallszahl eingeben. Diese Zahl wird verwendet, um den Zufallszahlengenerator zu initialisieren.

Übernehmen Sie die Zufallszahl durch einen Klick auf den OK-Button. Es wird jetzt eine Schlüsseldatei erzeugt. Beachten Sie die Meldung am unteren Rand des Dialogs.

Nun klicken Sie auf den Button Start und beachten Sie erneut die Meldung.

Es wurden zwei Dateien erzeugt: die Schlüsseldatei Text.txt.key und die verschlüsselte Datei Text.txt.otp. Die ursprüngliche Datei Text.txt wurde nicht gelöscht.

Beim Verschlüsseln erscheint ein Histogramm. Ein Histogramm ist eine Häufigkeitsverteilung. Die Grafik zeigt, wie oft der Schlüssel die Zahlenwerte 0 bis 255 enthält. Ein guter Schlüssel sollte alle Zahlenwerte in ausreichender Häufigkeit enthalten. Das Histogramm gibt Ihnen einen ersten Anhaltspunkt, ob der Schlüssel aus Zufallszahlen besteht. Das Histogramm prüft aber nicht, ob die Zahlenfolge des Schlüssels eine bestimmte Gesetzmäßigkeit hat und somit nicht mehr zufällig ist.

Ein schlechter Schlüssel sieht z. B. wie folgt aus:

Bei einem guten Schlüssel sind die Zahlenwerte 0 bis 255 eher gleich verteilt:

Nach dem Verschlüsseln sollten Sie in einem anderen Ordner die verschlüsselte Datei probeweise entschlüsseln. Wenn die Entschlüsselung korrekt ist, können Sie die ursprüngliche Datei und die testhalber entschlüsselte Datei löschen (informieren Sie sich bitte, wie Sie bei Ihrem Betriebssystem, Datenträger und Dateisystem eine Datei wirklich löschen können; ein einfaches Löschen ist unzureichend). Heben Sie die Schlüsseldatei getrennt von der verschlüsselten Datei auf (z. B. auf einer SD-Karte oder einem USB-Stick).

Da Sie ohne den Schlüssel die Datei nicht mehr entschlüsseln können, ist es ratsam eine zusätzliche Kopie der Schlüsseldatei auf einem weiteren Datenträger zu speichern und sicher zu verwahren, da ein Datenträger irgendwann beschädigt und nicht mehr lesbar sein kann.

Wenn Sie die verschlüsselte Datei an eine andere Person weitergeben möchten, müssen Sie auf separatem Weg dem Empfänger auch den Schlüssel zukommen lassen.

2. Datei entschlüsseln

Wenn Sie das obige Beispiel durchgeführt haben, löschen Sie bitte zuerst die unverschlüsselte Datei Text.txt.

Wählen Sie die zu entschlüsselnde Datei aus:

Wählen Sie die Schlüsseldatei aus:

Klicken Sie auf den Button Start und beachten Sie die Meldung.

Die verschlüsselte Datei Text.txt.otp wurde entschlüsselt zu Text.txt.

Sie haben bei verschlüsselten Textdateien auch die Möglichkeit, anstelle der entschlüsslelten Datei (die auf der Festplatte gespeichert wird) den Text direkt im OTP-Programm anzeigen zu lassen. Dabei wird keine Datei erzeugt und nichts auf der Festplatte gespeichert. Dazu aktivieren Sie das Kästchen vor dem Text Beim Entschlüsseln nur als Text anzeigen.

Klicken Sie anschließend auf den Start-Button. Der entschlüsselte Text wird dann in der Textbox angezeigt.

3. Eigene Schlüsseldatei verwenden

Die Stärke der Verschlüsselung hängt von dem ausgewählten Schlüssel ab. Je zufälliger der Inhalt der Schlüsseldatei ist, desto sicherer ist die Verschlüsselung. Das Programm bietet Ihnen die Möglichkeit, eine Schlüsseldatei aus Zufallszahlen zu erstellen (wie in dem obigen Beispiel). Ein solcher Schlüssel ist nur so gut, wie der Computer zufällige Zahlen generieren kann. Für den normalen Gebrauch sollte ein solcher Schlüssel ausreichend sicher sein. Sie können aber auch eine eigene Datei als Schlüssel verwenden. Der Schlüssel muss mindestens genauso lang sein, wie die zu verschlüsselnde Datei. Im Internet werden Verfahren beschrieben, echte Zufallszahlen zu erzeugen. Diese sind allerdings sehr aufwendig. Alternativ können Sie z. B. auch eine selbst erstellte Bilddatei im jpg-Format oder eine selbst erstellte Videodatei (z. B. mp4-Format) als Schlüssel benutzen. Dabei müssen Sie aber darauf achten, dass solche Dateien normalerweise einen Header haben, der sich zwischen Dateien gleichen Typs kaum unterscheidet. Hierzu ein Beispiel:

Der folgende Text soll mit einer jpg-Datei verschlüsselt werden:

Die verschlüsselte Datei sieht wie folgt aus:

Jetzt wird die verschlüsselte Datei mit einer anderen jpg-Datei entschlüsselt:

Das Ergebnis ist der fast vollständig korrekte ursprüngliche Text.

Wenn Sie solche Dateien als Schlüssel verwenden, achten Sie unbedingt darauf, den Header-Bereich zu überspringen und den Schlüssel erst Mitten in der Datei beginnen zu lassen. Dazu können Sie im Programm einen Startwert (in Bytes) eingeben. Nachfolgend die gleiche Verschlüsselung, aber jetzt mit einem Startwert:

Wenn man dann die verschlüsselte Datei mit einer anderen jpg-Datei entschlüsselt, ...

... scheitert die Entschlüsselung:

4. Programm in der Shell benutzen (ohne Gui)

Das Programm kann auch ohne GUI benutzt werden. Starten Sie das Programm in einer Shell (Konsole) wie folgt:

./osotp.tcl Eingabedatei Schluesseldatei Startwert bzw.

tclsh osotp.tcl Eingabedatei Schluesseldatei Startwert

5. Beschreibung und Dokumentation des Verschlüsselungsverfahren

Die zu verschlüsselnde Datei und der Schlüssel werden Byte für Byte xor-verknüpft. Das xor-Gatter sieht wie folgt aus:

0 und 0 -> 0
0 und 1 -> 1
1 und 0 -> 1
1 und 1 -> 0

Wenn man beispielsweise den Buchstaben A (binär: 01000001) mit dem Schlüssel 11001001 xor-verknüpft, erhält man den Code 10001000:

01000001
11001001
--------
10001000

Zum Entschlüsseln wird der Code 10001000 erneut mit dem Schlüssel 11001001 xor-verknüpft und man erhält wieder den ursprünglichen Buchstaben A:

10001000
11001001
--------
01000001

Nachfolgend sehen Sie ein Beispiel, wie das Programm einen Text verschlüsselt:

Der zu verschlüsselnde Text besteht aus dem Wort Geheim. Der Schlüssel ist die Zeichenfolge Bk5dF4

Die erste Spalte ist der zu verschlüsselnde Buchstabe. Die zweite Spalte ist die binäre Darstellung des Buchstabens. Die Spalten drei und vier zeigen den Schlüssel und die fünfte Spalte zeigt den verschlüsselten Code.

Wichtiger Hinweis zur alten Version vom 10.03.2015

Wenn ein Benutzer über das Programm in der Version vom 10.03.2015 einen Schlüssel generierte, wurde zur Initialisierung des Zufallszahlengenerators die aktuelle Systemzeit (gemessen als Anzahl der Sekunden seit dem 1.1.1970, also rund 1,4 Milliarden Sekunden) benutzt. Da ein Computer keine echten Zufallszahlen erzeugt, sondern nur Pseudo-Zufallszahlen, führen gleiche Startwerte für den Zufallszahlengenerator zu gleichen Abfolgen an Zufallszahlen. Ein potentieller Angreifer auf den Schlüssel könnte abschätzen, wann die Datei verschlüsselt wurde (z. B. im Oktober 2015) und bräuchte nur 2.678.400 (= 31 Tage x 24 Stunden x 60 Minuten x 60 Sekunden) Startwerte durchprobieren. Wenn er zudem davon ausgehen kann, dass der Schlüssel in derselben Minute erzeugt wurde, in der die Datei verschlüsselt wurde (dies ist oft am Dateidatum zu erkennen), reduziert sich die Anzahl der Schlüssel auf nur noch 60 (= 60 Sekunden).

In den neuen Versionen seit dem 24.12.2015 wird deshalb die Initialisierung nicht mehr von der aktuellen Systemzeit abhängig gemacht, sondern der Benutzer gibt selbst eine 10-stellige Zahl ein. Diese Zahl sollte möglichst zufällig sein, also nicht 1234567890. Der Benutzer braucht und sollte die Zahl nicht aufschreiben und auch nicht absichtlich mehrfach verwenden. Denn wie bereits beschrieben: gleiche Initialisierung des Zufallszahlengenerators führt zu gleichen Zufallszahlenfolgen.

Somit gibt es 10 Milliarden mögliche Startwerte und in Folge dessen theoretisch ebensoviele mögliche Schlüssel. Allerdings muss man davon ausgehen, dass der Algorithmus, der die Zufallszahlen generiert, nicht zu jedem Startwert eine einzigartige Zufallszahlenreihe erzeugt. Vermutlich werden verschiedene Startwerte dieselben Zahlenfolgen ergeben und zudem kann es sein, dass sich die Zahlenfolgen nach einer bestimmten Länge wiederholen. Deshalb ist es immer besser, eine eigene Datei mit Zufallszahlen zu verwenden (siehe auch Kapitel 3).

Es ist sichergestellt, dass Sie mit jeder neuen Programmversion weiterhin die Dateien, die mit der alten Version verschlüsselt wurden, entschlüsseln können.

Wer als Schlüssel eine eigene Datei verwendet hat, ist von der Schwachstelle nicht betroffen.