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.
quelle
Antworten:
Ja, dies ist ein One-Time-Pad . Wenn das Schlüsselmaterial nie wiederverwendet wird, ist es theoretisch sicher.
Die Nachteile sind, dass Sie einen Schlüssel pro kommunizierendem Prinzipalpaar benötigen und eine sichere Methode zum Austauschen des Schlüsselmaterials vor der Kommunikation benötigen.
quelle
Wie aus der Antwort von Vatine hervorgeht, handelt es sich bei Ihrem Algorithmus im Grunde genommen um ein One-Time-Pad.
Um jedoch einen Ihrer Notizen zu kommentieren:
Meine Antwort ist nein, es ist nicht erstaunlich. Der Teufel steckt immer im Detail und der Teufel hier im Schlüsselaustausch. Ihre Methode hängt von einem einwandfreien Schlüsselaustausch von Angesicht zu Angesicht ab. Ich kann es mir nicht leisten, James Bond jedes Mal, wenn ich etwas kaufen oder andere sichere Verbindungen haben möchte, mit einer 4-GB-Flash-Disk an jeden Händler im Internet zu schicken.
Und schließlich ist der XOR-Aspekt Ihres Algorithmus nicht wichtig. Eine einfache Ersetzungs-Chiffre ist mit einem OTP in Ordnung. Die Stärke des OTP ist, dass der Schlüssel niemals wiederverwendet wird und dass James Bond die Schlüssel für beide Parteien fehlerfrei austauscht (dh vorheriger sicherer Schlüsselaustausch).
quelle
Während das One-Time-Pad eine unbedingte (mathematisch nachgewiesene) Datenschutzgarantie gegen einen Angreifer bietet, der nur Nachrichten lesen kann, weist es einige Schwächen auf.
Ein abfangender Angreifer, der den Klartext richtig errät, kann den Chiffretext beliebig manipulieren (mit der gleichen Länge).
Wenn ein Angreifer eine Nachricht (oder einen Teil davon) einfügt oder löscht, sind die Zeiger von Alice und Bob nicht mehr synchron und jede zukünftige Kommunikation ist unterbrochen.
Update: Dies setzt voraus, dass beide Parteien beide Zeiger verfolgen. Wenn Sie den aktuellen Zeigerwert senden, sind Sie anfällig für Two-Time-Pad-Angriffe (wenn Sie zulassen, dass derselbe Bereich von Schlüsseln mehrmals verwendet wird) oder für DOS-Angriffe (wenn Sie nicht den gleichen Bereich von Schlüsseln zulassen) mehrmals verwendet werden (z. B. durch Löschen).
Beide Probleme werden durch fehlende Integrität und fehlenden Authentifizierungsschutz verursacht - Sie haben eine perfekte Verschlüsselung, aber keinen MAC.
Fügen Sie Ihrem One-Time-Pad-Protokoll einen MAC hinzu, um es tatsächlich sicher zu machen. Jede Nachricht sollte eine "Prüfsumme" erhalten, die sicherstellt, dass sie tatsächlich vom vermeintlichen Absender gesendet und dazwischen nicht geändert wurde. Außerdem sollten Sie eine Sequenznummer senden, damit der Empfänger weiß, welcher Teil des Schlüssels verwendet werden soll, wenn eine vorherige Nachricht verloren gegangen ist (oder um die Nachricht abzulehnen, wenn sie dupliziert wurde) - schließen Sie dies in die Prüfsummenberechnung ein.
Hier würde ein gewöhnlicher MAC-Algorithmus funktionieren, aber ich nehme an, Sie möchten einen einmaligen Polynom-MAC verwenden, um die passende Sicherheit für Ihr One-Time-Pad zu erhalten. (Nehmen Sie den MAC-Schlüssel von den Bits vor oder nach Ihrem Verschlüsselungsschlüssel, dh verwenden Sie nicht einen Schlüssel für beide Ziele.)
quelle
Eigentlich ist es nicht ganz sicher. Was Ihr Protokoll verliert, ist die LÄNGE der übermittelten Nachricht.
Wenn der Spion zum Beispiel weiß, dass Sie mit "Ja" oder "Nein" antworten und die Länge = 2 sehen, kann er daraus schließen, dass es "Nein" ist.
Es ist tatsächlich erstaunlich, wie viel nur aus bekannten Längen abgeleitet werden kann, wenn man den Kontext erraten kann.
quelle