オラクル攻撃のパディングの実際の結果はありますか?
私はPythonでデータを暗号化するプログラムを書いていて、オラクル攻撃のパディングについて聞いたことがありますが、脆弱な古い実装( SSLv3のように、パディングは正しいか間違っています。
理由:
- 必要なのは2つの暗号文だけなら $c(n-1)$、 $c(n)$ これは最後の2つの暗号化されたメッセージブロックであり、復号化されたのパディングかどうかを通知するサーバーです $c(n)$が正しいかどうかは、サーバーが送信したものをすべて復号化するという意味ではありません(つまり、暗号化されたメッセージ全体を受信時に送信し、出力を読み取るだけです)。つまり、これはサーバーのバグであり、そもそもキーを取得して、それが正しいかどうかを確認しません。
- 最後のブロック(パディングブロック)を認識して復号化するために、これら2つの暗号メッセージを送信するだけでよいと仮定しましょう。これは、パディング平文が既知であるか、少なくともランダムではないか、何らかの理由でのみ機能します。
しかし、たとえば、メッセージ全体の真ん中にあるc2とc3はどうでしょうか。私たちはc3とc2を知っていますが、私たちは知りませんし、p3またはp2(平文)も中間状態IS3も知りません。つまり、c2とis3をXORしてp3を取得することはできないため、この攻撃では、パディングブロックの中間状態であることが実際にわかっている唯一の新しいことで、パディングブロックを復号化することしかできないと思います。
この攻撃が、実際の影響や実際のデータ復号化機能(実際のデータ)を持たない攻撃であるかどうかを知りたいと思っています。
回答
つまり、これはサーバーのバグであり、そもそもキーを取得せず、それが正しいかどうかを確認します:)
それはどういう意味なの?キーは正しいものである必要があり、パディングoracle攻撃は、実際には、攻撃を実行するために反対側のそのキーで暗号化された暗号文を変更します。
しかし、メッセージ全体の真ん中にあるc2、c3についてはどうでしょうか。私たちは、c3とc2を知っていますが、私たちは知りません。p3(もちろん平文)も中間状態IS3も知りません。
いいえ、パディングオラクル攻撃はメッセージを完全に復号化することができます。これは、XORが次のブロックに影響を与えるためです。
パディングオラクル攻撃は、プレーンテキストのオラクル攻撃の一形態にすぎないことに注意してください。たとえば、パディング自体を使用しなくても、XML-encに対してプレーンテキストのオラクル攻撃を実行することもできます。
この攻撃が、現実世界への影響や実際のデータ復号化機能(実際のデータ)を持たない攻撃であるかどうかを知りたいと思っています。
はい、それは完全に間違っています。パディングオラクル攻撃は、バイトあたり128回の試行を使用してメッセージ全体を復号化でき、他のプレーンテキストオラクルは実際にはさらに効果的です。
それに加えて、受信側に変更された平文を受け入れさせることは、機密性を失うことと同じくらい危険である可能性があります。そのため、認証された暗号化を使用する必要があります。つまり、認証されていないCBCの代わりに認証された暗号化を利用するプロトコルを使用する必要があります。
この攻撃が、現実世界への影響や実際のデータ復号化機能(実際のデータ)を持たない攻撃であるかどうかを知りたいと思っています。
ラッキーサーティーン攻撃はTLSに対する現実世界の攻撃です。これは、当時の最新バージョンのTLSプロトコルにとって深刻な攻撃でした(当時のTLS 1.0 — TLS 1.1および1.2は存在していましたが、ほとんど採用されていませんでした)。つまり、パディングオラクル攻撃は現実の世界では絶対に機能します。
(sslv3のように、パディングが正しいか間違っているかを示すもの)。
Lucky Thirteenは、今日の安全な通信の大部分に使用されているバージョンであるTLS1.2までのバージョンに影響します。これは、CBCを使用する暗号スイートにのみ影響します。これは、この攻撃のために非推奨になりましたが、AEAD暗号スイートを好む場合でも、ほとんどのエンドポイントは引き続き許可します。すべてではありませんが、多くの一般的なTLS実装には、Lucky Thirteen攻撃を防ぐコードがあります(パフォーマンスを犠牲にして)。したがって、パディングオラクル攻撃は、まだ広く使用されているプロトコルに関連しています。
私はPythonでデータを暗号化するプログラムを書いていて、オラクル攻撃のパディングについて聞いたが、過大評価されていると思う
まあ、オラクル攻撃のパディングについて心配する必要はないのは事実です。しかし、心配する必要がない理由は、それらがよく知られているので、それらに対して防御する方法を知っているからです。パディングを使用しないでください。また、暗号化の最新モードではパディングを使用しません。GCM、CCM、ChaCha20 + Poly1305などの一般的なAEADモードを使用するだけです。または、NaCl / libsodium(PythonではPyNaCl)などの高レベルライブラリを使用することをお勧めします。コードにAESという文字を入力している場合は、間違っています。