アリスとピーターにはそれぞれ4GBのUSBフラッシュメモリスティックがあるとします。ランダムに生成されたビットを含むalice_to_peter.key
(2GB)およびpeter_to_alice.key
(2GB)という名前の2つのファイルを両方のスティックに保存します。二度と会うことはありませんが、電子的に通信します。また、Aliceはという変数を維持し、alice_pointer
Peterはという変数を維持peter_pointer
します。どちらも最初はゼロに設定されています。
アリスがピーターにメッセージを送信する必要がある場合、アリスn
は次のことを行います(メッセージのn番目のバイトは次のとおりです)。
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)
(そして最大限のセキュリティのために、キーの使用済み部分は消去できます)
Peterはencrypted_payload_to_peter
、alice_pointer
メッセージの最初に格納された読み取りを受け取り、実行します。
message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
また、最大限のセキュリティを確保するために、メッセージを読んだ後、キーの使用済み部分も消去します。
-編集:実際、この完全なチェックと認証のないこの単純なアルゴリズムのステップはセキュリティを低下させます。以下のPaŭloEbermannの投稿を参照してください。
ピーターがアリスにメッセージを送信する必要があるとき、彼らは今度はとで逆をpeter_to_alice.key
行いpeter_pointer
ます。
この簡単なスキーマを使用すると、今後50年間、毎日2GB /(50 * 365)=〜115kBの暗号化データを双方向に送信できます。より多くのデータを送信する必要がある場合、たとえば、今日の2TB HD(1TBキー)を使用すると、より大きなキーを使用でき、今後50年間で60MB /日を交換できます。これは実際には大量のデータです。たとえば、圧縮を使用すると、1時間以上の高品質の音声通信になります。
攻撃者がキーなしで暗号化されたメッセージを読む方法はないようです。なぜなら、彼らが無限に高速なコンピューターを持っているとしても、総当たりで彼らはすべての可能なメッセージを制限の下で得ることができますが、これは天文学的な数字ですメッセージの数と攻撃者は、それらのどれが実際のメッセージであるかを知りません。
私は正しいですか?この通信方式は本当に安全ですか?また、安全な場合、独自の名前を持っていますか?XOR暗号化はよく知られていますが、両側で大きなキーを使用するこの具体的な実用的なアプリケーションの名前を探していますか?私はこのアプリケーションが私の前に誰かによって発明されたことを謙虚に期待しています。:-)
注:完全に安全であれば、驚くべきことです。今日の低コストの大容量ストレージデバイスでは、高価な量子暗号より安全な通信を行う方がはるかに安価であり、同等のセキュリティを備えているからです!
編集:
これは、ストレージコストが減少するので、将来的にはより実用的になると思います。安全な通信を永遠に解決できます。今日、誰かが1年後でも既存の暗号を正常に攻撃し、しばしば高価な実装を安全でないものにするかどうかは確実ではありません。通信が発生する前の多くの場合、双方が個人的に会うとき、それが鍵を生成する時です。たとえば、大きなキーを持つHDを持つことができる潜水艦間の軍事通信に最適だと思います。また、軍の中央は各潜水艦にHDを持つことができます。アカウントを作成するときに銀行などと会うため、銀行口座を管理するなど、日常生活でも実用的です。