Kann das One-Time-Pad mit einem zusätzlichen Schlüssel noch sicherer gemacht werden?

Beherzigst du die grundlegenden Regeln des One-Time-Pad erhälst du eine simple Verschlüsselung, die nachweislich nicht gebrochen werden kann:

  1. Generiere das Pad mit einem echten Zufallsgenerator
  2. Verwende das Pad nie zwei mal

Trotzdem: Das One-Time-Pad ist und bleibt einfach unpraktikabel. Das musste auch ich bei meinen Experimenten damit feststellen. Meine Versuche den Algorithmus in irgendeiner Weise alltagstauglich zu bekommen sind kläglich gescheitert.

Alltagsexperimente

So habe ich zum Beispiel versucht einen Passwortmanager damit zu erstellen. Die Problematiken sind die wirklich langen Schlüssel, die mindestens genauso lang sind wie der Klartext und eine zuverlässige Zufallsquelle. Für das zweite Problem gibt es mittlerweile praktikable Lösungen wie random.org bzw. andere Möglichkeiten Randomness im Computersystem zu sammeln und zu generieren. Aber die Länge der Schlüssel ist wirklich problematisch, wenn du größere Dateien oder längere Texte verschlüsseln möchtest.

Daher blieb mir nichts anderes übrig, als die Schlüssel auf einen USB-Stick zu speichern. Das wiederrum birgt jedoch die Gefahr, dass jemensch den Schlüssel findet, wenn ich den Stick verliere oder, dass er mit Hilfe einer Malware kopiert wird.

Ich hatte daher die Idee, das Pad mit einem weiteren Schlüssel zu sicher, den ich mir einfach merken kann. So könnte ich das Pad auf einem USB-Stick speichern und den zusätzlichen Schlüssel könnte ich mir einfach merken.

Ich schreibe meinen zusätzlichen Schlüssel einfach unter das Pad und wiederhole ihn so lange bis die Länge meines Pads erreicht ist. Dann wende ich den One-Time-Pad Algorithmus erneut an.

Das One-Time-Pad wird nicht sicherer

Dabei habe ich allerdings bemerkt, dass ich mein Pad damit nur unsicherer mache. Denn nun versteckt sich die Signatur meines zusätzlichen Schlüssels selbst im Pad, was nicht gut ist.

Aber warum? Weil mein zweiter geheimer Schlüssel kein One-Time-Pad ist. Der Schlüssel wiederholt sich und bricht damit die zweite Regel des Pads. Diese Art der Verschlüsselung, die Aneinanderreihungen eines Schlüssels verwendet, wird übrigens auch Vigenère Chiffre genannt. Die Musterhaften Ausprägungen in den erzeugten Ciphertexten können leicht analysiert und gebrochen werden. An diesem einfachen PHP-Beispiel siehst du was ich versucht habe und was dabei passiert ist: https://github.com/steampixel/php-one-time-pad/blob/master/test/test_secure_pad.php

Alternative vorgehensweise

Die Lösung ist, auch den zweiten Schlüssel zufällig in der selben Länge wie das Pad zu generieren. Aber wohin dann mit dem zweiten Schlüssel? Merken kann ich mir diesen dann nicht mehr. Vielleicht auf einen zweiten USB-Stick?

Diese Idee ist tatsächlich interessant, denn der ursprüngliche Text kann dann nur wiederhergestellt werden wenn Ciphertext und beide Pads miteinander kombiniert werden. So wird das Verfahren noch sicherer. Die eigentlichen Probleme behebt es aber nicht.