アリスとピーターがそれぞれ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)
(最大のセキュリティのために、キーの使用済み部分は消去できます)
ピーターは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の暗号化データを両方向に送信できます。送信するデータがさらに必要な場合は、より大きなキーを使用できます。たとえば、今日の2 TB HD(1 TBキー)では、今後50年間60 MB /日を交換することが可能です。これは実際には大量のデータです。たとえば、圧縮を使用すると、1時間を超える高品質の音声通信になります。
攻撃者が鍵なしで暗号化されたメッセージを読む方法はないようです。無制限に高速なコンピューターを使用している場合でも、ブルートフォースを使用すると、制限内ですべての可能なメッセージを取得できますが、これは天文学的な数字ですメッセージと攻撃者はそれらのどれが実際のメッセージであるかを知りません。
私は正しいですか?この通信方式は本当に安全ですか?安全な場合、独自の名前を付けますか? XOR暗号化はよく知られていますが、両側で大きな鍵を使用するこの具体的な実用的なアプリケーションの名前を探していますか?このアプリケーションが私の前に誰かによって発明されたと私は控えめに思っています。 :-)
注:今日の低コストの大容量ストレージデバイスでは、安全な通信を行う方が高価な量子暗号化よりもはるかに安く、完全に安全であるとすれば驚くべきことです。これには同等のセキュリティがあります。
編集:ストレージコストが削減されるので、これは将来的にはより実用的だと思います。 安全な通信を永遠に解決できます。 今日でも、誰かが1年後でも既存の暗号を攻撃し、その高価な実装を安全でない場合は確実ではありません。多くの場合、通信が発生する前に、双方が個人的に会うときに、それが鍵を生成する時です。私はそれが軍事通信に最適だと思います。たとえば、大きなキーを備えたHDを持つことができる潜水艦と、軍中央は各潜水艦にHDを持つことができます。また、銀行口座を管理するなど、日常生活で実用的な場合もあります。口座を作成すると、銀行などと出会うためです。
はい、これは ワンタイムパッド です。キーマテリアルが再利用されない場合、理論的には安全です。
欠点は、通信するプリンシパルのペアごとに1つのキーが必要になることと、通信する前にキーマテリアルを安全に交換する方法が必要になることです。
Vatine's 回答が示すように、アルゴリズムは基本的にワンタイムパッドです。
ただし、メモの1つにコメントするには:
注:完全に安全であるとすれば、驚くべきことです。今日の低コストの大容量メモリでは、高価な量子暗号よりも安全で安全な通信方法であり、同等のセキュリティを備えているからです。
私の反応はノーです、それは驚くべきことではありません。悪魔は常に詳細にあり、ここの悪魔は鍵の交換にあります。あなたの方法は、完璧な対面の鍵交換に依存しています。何かを購入したり、他の安全な接続を確立したりするたびに、4GBのフラッシュディスクを搭載したJames Bondをインターネット上のすべての販売者に送る余裕はありません。
そして最後に、アルゴリズムのXOR=側面は重要ではありません。OTPでは単純な置換暗号で十分です。OTPの強みは、キーが再利用されないことであり、Jamesを想定しています。 Bondは両当事者の鍵を完全に交換しています(つまり、以前の安全な鍵交換)。
ワンタイムパッドには、メッセージを読み取ることしかできない攻撃者に対する無条件の(数学的に証明された)プライバシー保証がありますが、いくつかの弱点があります。
平文を正しく推測する傍受攻撃者は、暗号文を好きなように操作できます(同じ長さ)。
攻撃者がメッセージ(またはその一部)を挿入または削除すると、アリスとボブのポインターが同期しなくなり、以降のすべての通信が切断されます。
pdate:これは、両方のパーティが両方のポインタを追跡していることを前提としています。現在のポインター値を送信すると、2タイムパッド攻撃(同じ範囲のキーを複数回使用できるようにする場合)またはDOS攻撃(同じ範囲のキーを許可しない場合)に対して脆弱になりますたとえば、それらを削除するなどして、複数回使用する場合).
これらの問題は両方とも、整合性の欠如と認証保護によって引き起こされます。完全な暗号はありますが、MACはありません。
MACをワンタイムパッドプロトコルに追加して、実際にセキュアにします。各メッセージは、想定される送信者によって実際に送信され、その間に変更されていないことを保証する「チェックサム」を取得する必要があります。また、シーケンス番号を送信して、受信者が前のメッセージが失われたときに使用する(またはメッセージが重複している場合はメッセージを拒否する)ために使用するキーの部分を把握できるようにする必要があります。これをチェックサム計算に含めます。
通常のMACアルゴリズムがここで実行されますが、ワンタイムパッドと一致するセキュリティを確保するために、ワンタイム多項式MACを使用したいと思うかもしれません。 (暗号化キーの前後のビットからMACキーを取得します。つまり、1つのキーを両方の目的で再利用しないでください)。
実際、完全に安全というわけではありません。プロトコルがリークするのは、通信されるメッセージの長さです。
たとえば、スパイがあなたが「はい」または「いいえ」で返信することを知っていて、長さが= 2であると見た場合、スパイは「いいえ」であると推定できます。
コンテキストを推測できる場合、既知の長さからしか推定できないことは実際に驚くべきことです。