Angenommen, Alice und Peter haben jeweils einen 4 GB USB-Flash-Speicherstick. Sie treffen und speichern auf beiden Sticks zwei Dateien mit den Namen alice_to_peter.key
(2 GB) und peter_to_alice.key
(2 GB), die zufällig erzeugte Bits enthalten. Sie treffen sich nie wieder, sondern kommunizieren elektronisch. Alice verwaltet auch eine Variable namens alice_pointer
und Peter verwaltet eine Variable namens peter_pointer
, die beide anfänglich auf Null gesetzt sind.
Wenn Alice eine Nachricht an Peter senden muss, tut sie Folgendes (wo n
ist das n-te Byte der Nachricht):
encrypted_message_to_peter[n] = message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
encrypted_payload_to_peter = alice_pointer + encrypted_message_to_peter
alice_pointer += length(encrypted_message_to_peter)
(und für maximale Sicherheit kann der verwendete Teil des Schlüssels gelöscht werden)
Peter empfängt encrypted_payload_to_peter
, liest, alice_pointer
speichert am Anfang der Nachricht und macht:
message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
Und für maximale Sicherheit löschen Sie nach dem Lesen der Nachricht auch den verwendeten Teil des Schlüssels.
- BEARBEITEN: Tatsächlich verringert dieser Schritt mit diesem einfachen Algorithmus (ohne Integritätsprüfung und Authentifizierung) die Sicherheit, siehe Beitrag von Paulo Ebermann weiter unten.
Wenn Peter eine Nachricht an Alice senden muss, machen sie das Gegenteil, diesmal mit peter_to_alice.key
und peter_pointer
.
Mit diesem einfachen Schema können sie jeden Tag für die nächsten 50 Jahre 2 GB / (50 * 365) = ~ 115 kB verschlüsselte Daten in beide Richtungen senden. Wenn sie mehr Daten zum Senden benötigen, könnten sie größere Schlüssel verwenden, zum Beispiel mit den heutigen 2 TB HDs (1 TB Schlüssel) wäre es möglich, 60 MB / Tag für die nächsten 50 Jahre auszutauschen! Das sind viele Daten in der Praxis. Mit der Komprimierung ist es beispielsweise mehr als eine Stunde Sprachkommunikation von hoher Qualität.
Es scheint mir, dass ein Angreifer ohne die Schlüssel keine Möglichkeit hat, die verschlüsselten Nachrichten zu lesen, denn selbst wenn er einen unendlich schnellen Computer hat, kann er mit brachialer Gewalt jede mögliche Nachricht unter die Lupe nehmen, aber dies ist eine astronomische Zahl der Nachrichten und der Angreifer weiß nicht, welche von ihnen die eigentliche Nachricht ist.
Habe ich recht? Ist dieses Kommunikationsschema wirklich absolut sicher? Und wenn es sicher ist, hat es einen eigenen Namen? XOR-Verschlüsselung ist bekannt, aber ich suche nach dem Namen dieser konkreten praktischen Anwendung mit großen Schlüsseln auf beiden Seiten? Ich erwarte demütig, dass diese Anwendung jemand vor mir erfunden hat. :-)
Hinweis: Wenn es absolut sicher ist, ist es erstaunlich, denn mit den heutigen kostengünstigen großen Speichergeräten wäre die sichere Kommunikation viel billiger als mit der teuren Quantenkryptografie, und dies hat die gleiche Sicherheit!
EDIT:
Ich denke, dass dies in Zukunft praktischer sein wird, wenn die Speicherkosten sinken.Es kann die sichere Kommunikation für immer lösen.Heute haben Sie keine Gewissheit, ob jemand bereits ein Jahr später erfolgreich vorhandene Chiffren angreift und die oft teuren Implementierungen unsicher macht. In vielen Fällen, bevor die Kommunikation stattfindet, ist es an der Zeit, die Schlüssel zu generieren, wenn sich beide Seiten persönlich treffen. Ich denke, es ist perfekt für die militärische Kommunikation, zum Beispiel zwischen U-Booten, die HDs mit großen Schlüsseln haben können, und Militärzentralen, die HDs für jedes U-Boot haben können. Es könnte auch im Alltag praktisch sein, zum Beispiel Ihr Bankkonto zu kontrollieren, denn wenn Sie ein Konto erstellen, treffen Sie sich mit der Bank usw.