Dieser Beitrag wurde am 26. Januar 2018 das letzte Mal aktualisiert.

Unknackbare Verschlüsselung ist möglich!

Mit dem Verfahren des One Time Pad wurden schon im kalten Krieg unentschlüsselbare Nachrichten ausgetauscht. Wie diese Verschlüsselung abläuft, was es zu beachten gibt und die Hürden stellen wir euch in diesem Artikel vor.

Beim One Time Pad gibt es einen Einmalschlüssel (in dem Verfahren wird das auch Pad genannt) mit dessen Hilfe ihr euren Geheimtext verschlüsselt.

Dieser Einmalschlüssel muss ein paar Eigenschaften erfüllen:

  1. mindestens so lang sein wie die Nachricht
  2. gleichverteilt zufällig gewählt werden
  3. darf nicht wiederverwendet werden, auch nicht teilweise – deswegen auch Einmalschlüssel
  4. geheim bleiben

Hier könnt ihr schon die Hürde feststellen: Der Einmalschlüssel hat sehr komplexe Anforderungen. Zu den Problemen mehr in der Sektion Schwachstellen.

Beispiel

Damit ihr euch Vorstellen könnt wie das Verfahren abläuft, rechnen wir es per Hand durch.

Jeder Buchstabe wird durch seine Zahl im Alphabet repräsentiert (z.B. A=1 oder Z=26)

Geheimtext: EIN HUND ISST HUHN

5 9 14 8 21 14 4 9 19 19 20 8 21 8 14

Schlüssel (Pad): FJS WJFU QILD VCNA

6 10 19 23 10 6 21 17 8 12 4 22 3 14 1

Geheimtext + Schlüssel (Pad):

= 11 19 33 31 31 20 25 26 27 31 24 30 24 22 15

Alle Zahlen >26 werden minus 26 gerechnet:

= 11 19 7 5 5 20 25 26 1 5 24 4 24 22 15

Verschlüsselter Text: KSG EETY ZAEX DYVO

Und genau umgekehrt geht die Entschlüsselung von statten. (Verschlüsselter Text – Schlüssel (Pad) & Zahlen <0 werden plus 26 gerechnet)

Beweis der Sicherheit

Geheimtexte werden mit dem so genannten Brute Force Verfahren (deutsch: brachiale Gewalt) entschlüsselt. Bei diesem Verfahren wird so oft ein Schlüssel ausprobiert bis irgendwann der Geheimtext entschlüsselt ist.

Brute Force ist bei One Time Pad nicht möglich, denn dadurch das der Schlüssel mindestens so lang ist wie der Geheimtext, kann der Angreifer nie herausfinden was der richtige Text ist. Es kann jeder gleich lange Geheimtext entschlüsselt werden, aber er weiß nicht welcher der Richtige ist.

Bei unserem Beispiel könnte aus unserem Verschlüsselten Text jede Nachticht mit der gleichen Länge entschlüsselt werden (ihr könnt die Bespiele selbst nachrechnen):

Verschlüsselter Text: KSG EETY ZAEX DYVO

Brute Force Schlüssel (Pad) 1: GNO RDFL HIYD PXAU

Brute Force Nachricht 1: DER MANN RUFT LAUT

Brute Force Schlüssel (Pad) 2: GJB SJNE URQS XGUT

Brute Force Nachricht 2: DIE LUFT EINE FRAU

…und so weiter (manche Texte machen mehr andere weniger Sinn, doch alle Möglichkeiten werden im Laufe der Brute Force Attacke auftreten)

Schwachstellen

Wie schon in der Einleitung zu erkennen ist, liegt die große Hürde bei dem Schlüssel an sich. Sollte nur eines der Kriterien nicht erfüllt sein ist das Verfahren knackbar.

Die ersten drei Eigenschaften sind mit moderner Technik relativ leicht zu bewerkstelligen:

  • mindestens so lang sein wie die Nachricht
  • gleichverteilt zufällig gewählt werden
  • darf nicht wiederverwendet werden, auch nicht teilweise

Die vierte Eigenschaft ist es, die dieses Verfahren für die meisten Verwendungszwecke unbrauchbar macht:

  • geheim bleiben

Denn damit ihr One Time Pad Nachrichten verschicken könnt müssen beide Kommunikationspartner das gleiche Pad vorliegen haben. Dieses muss jedoch auf einem sicheren Weg zu eurem Partner gelangen. Problem erkannt?

Somit könnt ihr nur mit Personen One Time Pad verschlüsselte Nachrichten austauschen, wenn ihr das Pad vorher auf einem sicheren Weg ausgetauscht wurde (z.B. Persönlich mit Hilfe eines USB Sticks). Obendrein ist es (wie immer) wichtig das beide Kommunikationspartner sichere Plattformen nutzen, da sonst das Pad geklaut werden kann.

One Time Pad selbst nutzen

Für die One Time Pad Verschlüsselung nutzen wir das Python-Programm onetime von red-bean.com

Um das Program zu nutzen muss Python installiert sein! Python ist bei dem meisten Linux-Systemen und Mac OS X vorinstalliert. Um Python unter Windows zu installieren, folgt bitte folgender Anleitung: https://www.johannespetz.de/python-unter-windows-installieren/

Im Anschluss ladet ihr das onetime Program herunter und entpackt die Dateien:

Nutzung

Linux

  1. Erstellen des zufälligen Pads
    1. dd if=/dev/random of=~/.onetime/to_foo.pad bs=1000 count=10000
    2. Ersetzt ~/.onetime/to_foo.pad ggf. durch ein Verzeichnis euer Wahl (z.B. direkt einen USB Stick)
  2. Öffnet ein Terminal und navigiert in das Verzeichnis in welches ihr onetime entpackt habt
  3. Verschlüsseln
    1. Gebt im Terminal den Befehl python onetime -e -p ~/.onetime/to_foo.pad WALLET.DAT ein
    2. Ersetzt ggf. ~/.onetime/to_foo.pad durch den Pfad zu eurem Pad (der gleiche Pfad den ihr in 1.b. ausgewählt habt)
    3. Ersetzt ggf. WALLET.DAT durch die zu verschlüsselnde Datei
    4. Onetime verschlüsselt euch nun die Datei und gibt das Ergebnis als WALLET.DAT.onetime aus (<Name der Ursprungsdatei>.onetime)
  4. Entschlüsseln
    1. Gebt im Terminal den Befehl python onetime -d -p ~/.onetime/to_foo.pad WALLET.DAT.onion ein
    2. Ersetzt ggf. ~/.onetime/to_foo.pad durch den Pfad zu eurem Pad (der gleiche Pfad den ihr in 1.b. ausgewählt habt)
    3. Ersetzt ggf. WALLET.DAT.onetime durch die zu entschlüsselnde Datei
    4. Onetime verschlüsselt euch nun die Datei und gibt das Ergebnis als WALLET.DAT aus (<Name der Ursprungsdatei> ohne .onetime)

Mac OS X

  1. Erstellen des zufälligen Pads
    1. dd if=/dev/random of=~/.onetime/to_foo.pad bs=1000 count=10000
    2. Ersetzt ~/.onetime/to_foo.pad ggf. durch ein Verzeichnis euer Wahl (z.B. direkt einen USB Stick)
  2. Öffnet ein Terminal und navigiert in das Verzeichnis in welches ihr onetime entpackt habt
  3. Verschlüsseln
    1. Gebt im Terminal den Befehl python onetime -e -p ~/.onetime/to_foo.pad WALLET.DAT ein
    2. Ersetzt ggf. ~/.onetime/to_foo.pad durch den Pfad zu eurem Pad (der gleiche Pfad den ihr in 1.b) ausgewählt habt)
    3. Ersetzt ggf. WALLET.DAT durch die zu verschlüsselnde Datei
    4. Onetime verschlüsselt euch nun die Datei und gibt das Ergebnis als WALLET.DAT.onetime aus (<Name der Ursprungsdatei>.onetime)
  4. Entschlüsseln
    1. Gebt im Terminal den Befehl python onetime -d -p ~/.onetime/to_foo.pad WALLET.DAT.onion ein
    2. Ersetzt ggf. ~/.onetime/to_foo.pad durch den Pfad zu eurem Pad (der gleiche Pfad den ihr in 1.b. ausgewählt habt)
    3. Ersetzt ggf. WALLET.DAT.onetime durch die zu entschlüsselnde Datei
    4. Onetime verschlüsselt euch nun die Datei und gibt das Ergebnis als WALLET.DAT aus (<Name der Ursprungsdatei> ohne .onetime)

Windows

  1. Erstellen des zufälligen Pads
    1. Leider gibt es unter Windows keine einfache Möglichkeit sichere Zufallszahlen zu generieren. Bitte lasst euch das Pad von einem Mac bzw. Linux Nutzer generieren und geben (Dieser sollte euer gewünschter Kommunikationspartner sein, da er durch das erstellen des Pads all eure Nachrichten entschlüsseln kann. Vertraut deswegen keinem Dritten!)
  2. Öffnet eine CMD und navigiert in das Verzeichnis in welches ihr onetime entpackt habt
    1. WIN  + R auf der Tastatur klicken
    2. In dem neuen Fenster CMD eingeben
  3. Verschlüsseln
    1. Gebt im Terminal den Befehl python onetime -e -p C:/onetime/to_foo.pad WALLET.DAT ein
    2. Ersetzt ggf. C:/onetime/to_foo.pad durch den Pfad zu eurem Pad. Dieses habt ihr von eurem Kommunikationspartner bekommen.
    3. Ersetzt ggf. WALLET.DAT durch die zu verschlüsselnde Datei
    4. Onetime verschlüsselt euch nun die Datei und gibt das Ergebnis als WALLET.DAT.onetime aus (<Name der Ursprungsdatei>.onetime)
  4. Entschlüsseln
    1. Gebt im Terminal den Befehl python onetime -d -p C:/onetime/to_foo.pad WALLET.DAT.onion ein
    2. Ersetzt ggf. C:/onetime/to_foo.pad durch den Pfad zu eurem Pad. Dieses habt ihr von eurem Kommunikationspartner bekommen.
    3. Ersetzt ggf. WALLET.DAT.onetime durch die zu entschlüsselnde Datei
    4. Onetime verschlüsselt euch nun die Datei und gibt das Ergebnis als WALLET.DAT aus (<Name der Ursprungsdatei> ohne .onetime)

 

Wie ihr im laufe des Artikels gemerkt habt, ist der größte Vorteil der One Time Pad Verschlüsselung die Tatsache, das ihr diese Verschlüsselung auch per Hand durchrechnen könnt. Im Vergleich zu anderen Verschlüsselungen die auf einen Computer angewiesen sind, könnt ihr somit (mit einem bestehenden Pad) auch offline und im Urwald diese Methode für eure Nachrichten nutzen.

Mini One Time Pad

Quelle: http://users.telenet.be/ – © Dirk Rijmenants

Aus genau diesem Grund wurde das Verfahren auch im kalten Krieg von Spionen viel genutzt. Diese hatten ein (wie oben) ein ganz kleines One Time Pad dabei und konnten somit ihren Vorgesetzten auch über feindliche Infrastruktur unknackbare Nachrichten schicken.

Hoffentlich hat euch das rechnen und ausprobieren Spaß gemacht. Wenn ihr noch Fragen/Wünsche/Anregungen habt, ab damit in die Kommentare.

– Eure Datenschutzhelden


Quellen:

http://red-bean.com/onetime

https://de.wikipedia.org/wiki/One-Time-Pad

http://users.telenet.be/d.rijmenants/en/onetimepad.htm

http://gxamjbnu7uknahng.onion/wiki/index.php/Unbreakable_Encryption