この単純なXOR暗号化通信は完全に安全ですか?


23

アリスとピーターにはそれぞれ4GBのUSBフラッシュメモリスティックがあるとします。ランダムに生成されたビットを含むalice_to_peter.key(2GB)およびpeter_to_alice.key(2GB)という名前の2つのファイルを両方のスティックに保存します。二度と会うことはありませんが、電子的に通信します。また、Aliceはという変数を維持し、alice_pointerPeterはという変数を維持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_peteralice_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を持つことができます。アカウントを作成するときに銀行などと会うため、銀行口座を管理するなど、日常生活でも実用的です。


4
キーのどの部分を使用するかを調整する特定のスキーム以外は、これは1回限りのパッドです。しかし、綿密な調査の結果、99%のユースケースでは実際には役に立たないことがわかりました。

10
この質問は特定の暗号アルゴリズムの強度に関するものであるため、crypto.stackexchange.comにより適している可能性があります。そこで質問を移動するには、モデレーターの注意を引くためにフラグを立て、移行を依頼します。
バートヴァンインゲンシェナウ14年

12
OTPは1世紀以上前に発明され、両方の世界大戦で実際の紙の物理的なパッドとして使用されました。(en.wikipedia.org/wiki/One-time_pad)そのときの暗号化の問題は、鍵交換です。
ロボット

6
これにより、予想されるすべてのデータに対して十分な一意のキーを生成するという問題が2人の当事者が再び会うまで解決されず、キーは真にランダムなプロセスで生成される必要があることに注意してください-擬似乱数ジェネレーターは分析に対して脆弱です。同じPRNGを使用するサンプルがさらに利用可能になると、
ケシュラム14年

1
@keshlam。真の量子乱数の生成は非常に安価になっています。arxivの興味深い記事:携帯電話での量子乱数生成:arxiv.org/abs/1405.0435
user3123061

回答:


50

はい、これはワンタイムパッドです。キーマテリアルが再利用されない場合、理論的には安全です。

欠点は、プリンシパルの通信ペアごとに1つのキーが必要になることと、通信の前にキーマテリアルを安全に交換する方法が必要になることです。


52
キーが真にランダムで再利用されていない場合、「理論的に安全」とは数学的に解読不能あることを意味することを強調する価値があると思います。これは、暗号化のどこでも入手できる最も強力な保証です。
マイケルボルグワード14年

1
@MichaelBorgwardtの大きなポイントがあります。この場合、「理論的に安全」は「実際に安全」よりも実際に優れています。
マーク14年

2
ポイントでの場合:私は0の16シーケンシャルバイト持つようにたまたま2ギガバイトランダムキー持っている
マイケル・

@Michaelその可能性は10 ^ 27分の1です。
この14年

1
@Floris私の「計算」:バイトには256の可能な値があります。256個に1個で、すべてがゼロになります。256 ^ 16の場合、16バイトの可能性があります。そして、そのチャンスで2GBのバイト数を割ります。とにかく、ここでは(1024 * 1024 * 1024 * 1024 * 2 *(1/16))/(256 ^ 16)16による除算を逃したと思います。
この14年

32

以下のようVatineの答えは示し、あなたのアルゴリズムは、基本的には、ワンタイムパッドです。

ただし、メモの1つにコメントするには:

注:完全に安全な場合、今日の低コストの大容量メモリでは、高価な量子暗号法と同等のセキュリティよりも安全な通信の方法が実際にははるかに安価であるため、驚くべきことです!

私の反応はノーです、それは驚くべきことではありません。悪魔は常に詳細にあり、ここの悪魔は鍵の交換にあります。あなたの方法は完璧な、対面のキー交換に依存しています。何かを購入したり、他の安全な接続をしたいたびに、4GBのフラッシュディスクを携帯しているJames Bondをインターネット上のすべての商人に送る余裕はありません。

最後に、アルゴリズムのXORの側面は重要ではありません。OTPでは、単純な置換暗号で十分です。OTPの強みは、キーが再利用されないことであり、James Bondが両当事者のキーを問題なく交換していることを前提としています(つまり、事前の安全なキー交換)


13
OTPのもう1つの点は、キーが(少なくとも)暗号化するメッセージの長さであり、非常に高品質の乱数ソースが必要なことです。
ドナルドフェローズ14年

多くの暗号化アルゴリズムは、何らかの方法でキーをランダムデータと区別できないデータストリームに変換し、そのデータをワンタイムパッドとして使用することで機能します。攻撃者の観点から見ると、真にランダムなデータとランダムなデータと区別できないデータに違いはありません(定義により、違いを見つけた場合は区別できません)、理論上はOTPと同じくらい安全です。もちろん、データが真のランダムデータと見分けがつかないと言う場合、通常はいくつかの注意事項があります。もちろん、この説明はかなり単純化しすぎています。
ブライアン14年

21

ワンタイムパッドには、メッセージを読むことしかできない攻撃者に対する無条件の(数学的に証明された)プライバシー保証がありますが、いくつかの弱点があります。

  • プレーンテキストを正しく推測する傍受攻撃者は、暗号テキストを任意の(同じ長さで)操作できます。

  • 攻撃者がメッセージ(またはその一部)を挿入または削除すると、アリスとボブのポインターが同期しなくなり、今後の通信がすべて切断されます。

    更新:これは、両当事者が両方のポインターを追跡することを前提としています。現在のポインター値を送信すると、2回パッド攻撃(同じ範囲のキーを複数回使用できるようにする場合)またはDOS攻撃(同じ範囲のキーを許可しない場合)に対して脆弱です。削除するなどして、複数回使用します)。

これらの問題は両方とも、整合性の欠如と認証保護が原因で発生します。完全な暗号がありますが、MACはありません。

MACをワンタイムパッドプロトコルに追加して、実際にセキュアにします。各メッセージは、想定される送信者によって実際に送信され、その間に変更されていないことを保証する「チェックサム」を取得する必要があります。また、前のメッセージが失われた場合(またはメッセージが重複している場合はメッセージを拒否する場合)に受信者が使用するキーの部分を知るために、シーケンス番号を送信する必要があります。

通常のMACアルゴリズムはここで行いますが、ワンタイム多項式MACを使用して、ワンタイムパッドにセキュリティを一致させることができます。(暗号化キーの前後のビットからMACキーを取得します。つまり、1つのキーを両方の目的に再利用しないでください。)


攻撃者がメッセージ(またはその一部)を挿入または削除すると、アリスとボブのポインターが同期しなくなり、今後の通信がすべて切断されます。ポインターは独立しており、同期する必要がないため、メッセージが失われても将来の通信が中断されることはありません(メッセージの暗号化に使用されるキーの実際のオフセットは、そのメッセージと共に送信されます)。ただし、部分的に正しい:非同期メッセージは受信側のキーの一部として使用されますが、削除されたメッセージは受信されないため消去されません(使用された部分は次の受信メッセージで消去されます)。
user3123061 14年

しかし、あなたは正しい。単純なアルゴリズムミスインテグリティと認証を提示しました。実用的な実装はより堅牢である必要があります。
user3123061 14年

@ user3123061もし私があなただったら、私は完全性と認証を無視するだけではありません。適応的な選択された暗号文攻撃のテクニックは、保全保護の不在を利用して秘密性を破ります。古典的なワンタイムパッド(これはあなたが再発明したものです)は、この攻撃のために、その明白な数学的堅牢にもかかわらず、完全に安全ではないと言っているところまで行きます。
zwol 14年

2
適応型の選択されたcipertext攻撃は、人間がチェックしたOTPに対する攻撃のかなり貧弱な選択です。OOSに気付くと、攻撃者はかなり速くパントされます。受信者がマシン処理され、応答を返す場合にのみ、この攻撃はまったく役に立ちません。
ジョシュア14年

@Zack OTPには多くの問題がありますが、機密性を脅かすものはありません。前のメッセージのplantext + keyを完全に推測しても、次のメッセージはまったく新しい独立したキー(かなりのサイズ)で暗号化されることに注意してください。複数の相互作用に適応するものは何もありません。

4

実際、完全に安全というわけではありません。プロトコルがリークするのは、通信されたメッセージの長さです。

たとえば、スパイが「yes」または「no」で返信することを知っていて、長さ= 2を見つけた場合、彼はそれが「no」であると推測できます。

実際に、コンテキストを推測できる場合、既知の長さからどれだけ推測できるかは驚くべきことです。


3
ただし、メッセージをランダムジャンクで埋めることができるため、合理的なレベルのセキュリティで修正するのは非常に簡単です。したがって、メッセージの長さは固定ブロックサイズの倍数、たとえば256文字です。これは、OTPをより速く使い果たすという犠牲を払って、単純なyes v no分析を無効にします。
ピーターバグナル14年

実際、次の50年間は毎日〜115kB 送信できるため、各ブロックは少なくとも20kbになると予想される場合があります。これは、長さがそれほど重要ではないことを意味します。
アプノートン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.