Das OneTimePad (OTP) (Einmalschlüssel-Verfahren) wurde 1882 erfunden und 1917 zum Patent angemeldet.
Es ist bis heute eins der sichersten Verschlüsselungen, die es dadurch erreicht, dass das Passwort genauso lang sein muss wie die Nachricht, die damit Verschlüsselt werden soll.
Dabei ist wichtig das das Passwort (Pad) aus einer zufälligen Reihenfolge von Zahlen, Buchstaben und Sonderzeichen besteht, des weiteren darf jedes OneTimePad nur einmal verwendet werden.
Wenn diese Voraussetzung eingehalten werden bietet das OneTimePad noch heute eine Langzeitsicherheit, selbst gegen Quantum Computer.
Ein einfaches Beispiel :
Ich möchte Bob HALLOSTEEMIT
schicken das mit einem OTP per Hand verschlüsselt ist:
Die Nachricht (N) ist HALLOSTEEMIT
und das OneTimePad (P) ist YIPLWQSDZNLV
Wir besitzen beide eine Kopie des OneTimePads(P).
Jetzt ersetzten wir die Buchstaben durch Zahlen um sie zu berechnen
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Hierbei werden Buchstaben addiert H(8) + E(5) = M(13)
, falls das Ergebnis 26 überschreitet, wird minus 26 gerechnet :
I(9) + V(22) = 31 - 26 = E(5)
Das ergibt aus unserem oben genannten Beispiel:
Nachricht (N): HALLOSTEEMIT
8,1,12,12,15,19,20,5,5,13,9,20
OTP (P): YIPLWQSDZNLV
25,9,16,12,23,17,19,4,26,14,12,22
Jetzt wird das OneTimePad(P) mit der Nachricht addiert um das Geheimnis (G) zu erhalten:
Verschl.Nachr. :
(N):8,1,12,12,15,19,20,5,5,13,9,20 = HALLOSTEEMIT
+
(P):25,9,16,12,23,17,19,4,26,14,12,22
=
(G):7,10,2,24,12,10,13,9,5,1,21,16 = GJBXLJMIEAUP
Jetzt wird das Geheimnis (G) übermittelt... sobald der Empfänger es erhält, entschlüsselt er es mit seiner Kopie des OneTimePads(P):
(G):7,10,2,24,12,10,13,9,5,1,21,16 = GJBXLJMIEAUP
-
(P):25,9,16,12,23,17,19,4,26,14,12,22
=
(N):8,1,12,12,15,19,20,5,5,13,9,20 = HALLOSTEEMIT
Diese Methode ist für die Manuelle Verschlüsselung von kurze Nachrichten geeignet, falls es jedoch einmal eine etwas längere Nachricht sein soll, sind Software Lösungen praktisch.
Dabei ist darauf zu achten das der Computer und dessen Betriebssystem sicher und nicht kompromittiert sind, am besten benutzt man einen Computer der keine physische Möglichkeit hat sich mit dem Internet zu Verbinden ( Air Gapped ).
Ein einfaches Tool ist z.B. OneTime von kfogel
https://github.com/kfogel/OneTime
http://www.red-bean.com/onetime/get
Man erstellt ein 10MB OneTimePad (unter Linux) mit folgendem Befehl:
user@onetime:~$ dd if=/dev/random of=~/PADNAME.pad bs=1000 count=100000
dabei kann bei count=
die Zahl an die Größe der zu verschlüsselnden Datei/Nachricht angepasst werden.
Es sollten bei einer direkten Kommunikation immer zwei OneTimePads erstellt werden Bsp.:
Wenn Alice Bob etwas schicken will:
Alice_zu_Bob.pad
und
Bob_zu_Alice.pad
für die Antwort von Bob an Alice.
Dadurch wird der Fall vermieden das beide das gleiche OneTimePad zur Verschlüsselung einer Nachricht verwenden, OneTime achtet des weiteren darauf das kein Pad mehrfach benutzt wird.
Ein weiteres Beispiel:
Alice und Bob haben ihre Pads in Person oder durch einen Sicheren Kanal ausgetauscht, jetzt will Alice, Bob ihre wichtige Nachricht (geheim.txt) schicken.
user@onetime:~$ echo "Any movement that seeks social justice through political involvement and attempting to hold public officials democratically accountable is doomed to failure. The only real way to achieve social justice is by bypassing the state, treating it as irrelevant, and building the kind of society we want without the governments permission." > geheim.txt
Nun verschlüsselt sie es mit OneTime und dem Alice_zu_Bob.pad
user@onetime:~$ onetime -e -p Alice_zu_Bob.pad geheim.txt
Die verschlüsselte Nachricht ist nun unter geheim.txt.onetime zu finden.
So sieht die Nachricht jetzt aus:
user@onetime:~$ cat geheim.txt.onetime
-----BEGIN OneTime MESSAGE-----
Version: OneTime 1.122
Pad ID: b74e6011bff714161fce142881b6479d4f3de6e9
Offset: 0
QlpoOTFBWSZTWcsq2OgAAIJ///rfx23ehz77N3c7//v+Zs+fg/uv+eP//vf2baf//3nrMADwtIDT Q00ABoA00AAxMgNNDQaAZDQAYCaGmCZABo00yNBoADQMmgaDCNNNtUOjQabUGgAMjQBpoYjIAABk MmgaaNqaGjygGgNB6gAaGg00yYjTRpppoNAyGjEINDQNNBoMTIAaGQyNMCAA00ZAYEBhBoxDJhDE AAGmQDRgmgDQA2oAJjCijxMMgzyNeV7j7INAkBcNOM9XtQQWx8SVuRZfCiCZFvYj3qLLCkDwKExK CaCfFgDMvbnp+yQp253KbGsB/CVG/LLHI1qINatXvf7u9pQhJuQwwfNX1xIyZyGPJ7j0qUqOVXRG PUmr5iNGxwiQssNp/vma43KvyeJDd+oEGpdCY5JXoGOAAgzOqgGEoZOd5lZsMOh33miYWFq0WzZu aVRXfRLWTHFzpgoawOoikKkLhJmHC4pwejANmw/zPcTIQ4Ni18jgUL6YXMW/f+Qn75xTBprygXWX aqoFwGl/JMqizeRJvQLshLtfnrOcy5vI+YKv/pnf+J07AFGD2hffv0OFAbhWLBd04+8AEfjTSUNS wenttOX253Q1u11bZY7A5CTO230DMdBC+gkuBuACB/i7kinChIZZVsdA
-----END OneTime MESSAGE-----
Nun kann Alice diese Nachricht über jeden beliebigen Weg zu Bob kommen lassen.
Sobald Bob die Nachricht erhalten hat benutzt er seine Kopie des Alice_zu_Bob.pad und entschlüsselt die Nachricht wieder:
user@onetime:~$ onetime -d -p Alice_zu_Bob.pad geheim.txt.onetime
user@onetime:~$ cat geheim.txt
Any movement that seeks social justice through political involvement
and attempting to hold public officials democratically accountable is
doomed to failure. The only real way to achieve social justice is by
bypassing the state, treating it as irrelevant, and building the kind of
society we want without the governments permission.
Wenn Bob antworten möchte muss er nur das Bob_zu_Alice.pad
benutzten und die eben genannten Schritte wiederholen.
Jetzt haben Alice und Bob die Möglichkeit Sicher miteinander zu kommunizieren, ohne das sie befürchten müssten das ihre Nachrichten jemals (solange beide keinen groben Fehler machen) entschlüsselt werden können.
Dabei ist noch einmal wichtig auf die Sicherheit des Computers, der die Nachricht verschlüsselt und die OneTimePads erstellt/speichert, zu achten.
Deshalb sollte man einen Computer benutzen, der keinen Internetzugriff und dessen Betriebssystem sicher ist.
Der Austausch der OneTimePads ist dabei genauso wichtig, am besten macht man dieses in Person oder durch vertraute Dritte.
OneTimePads können aber auch zur Sicherung von Wallets oder Passwort Datenbanken dienen.
user@onetime:~$ onetime -e -p ~/.onetime/Wallet_0.pad WALLET.DAT
Jetzt kann man seinen Wallet sorglos abspeichern und das Pad an einem sicheren Ort bewahren.
Ich hoffe ich konnte euch einen kleinen Einblick in das OneTimePad bieten und das ihr es vielleicht sogar mal ausprobiert ;)
Cryptography easy. Danke!