web-dev-qa-db-ja.com

暗号化してからMACでAES-256-CBCとHMAC-SHA512に同じ秘密鍵を使用すると、鍵が危険にさらされる可能性がありますか?

キー(およびIV)を使用して、バイナリデータの一部をAES-256-CBCで暗号化し、対応する暗号化データを生成するとします。

次に、この暗号化されたデータをHMAC-SHA512 上記と同じキーを使用に入れてMACを生成するとします。暗号化されたデータとMACを受信者に送信します。

受信者は、MACに対して暗号化されたデータを検証できます(鍵を知っている場合)。

私の質問は単純です:私がAES-256-CBCに使用したキーI alsoがHMAC-SHA512に使用されたという事実は、何らかの方法で私のキーを危険にさらす可能性がありますか?言い換えれば、これは私のキーに対する潜在的な追加の攻撃ベクトルですか(SHA-512の潜在的な弱点などのため)?

別の言い方をすれば、AES-256-CBCにのみキーを使用する場合と、AES-256-CBCとHMAC-SHA512の両方に使用する場合でキーの保護に違いがあるのか​​と思います。

CBC-MACを使用したほうがよいでしょうか? (特に、CBC-MACを使用すると、キーがAES-256-CBCも通過するようになり、追加の攻撃ベクトルが追加されない場合はどうなのかわかりません。)

4
cryptonamus

この質問は crypto.SE の質問のバリエーションで効果的に回答されます。ここでは Encrypt-then-MACスキームでの暗号化と認証に同じ秘密鍵を使用しています

答えの適切な部分はここにあります:(私の強調)。

暗号化とMACに同じキーを使用する場合の潜在的な問題は構造的なものです。 [1つ]の例はCBC-MACです。これは、最後の暗号化されたブロックのみをMACとして使用することを除いて、CBC暗号化とまったく同じです。攻撃者にペア(p、c)へのアクセスを許可しない限り、CBC-MACは正常に機能します。pはプレーンテキストブロック、cは対応する暗号文ブロックで、CBC-MACに使用するキーkに対応します。しかし、データの暗号化に同じキーkを使用すると、攻撃者にそのようなブロックをたくさん与えます。

HMACとAESでは、そのような干渉は知られていません。暗号技術者の一般的な感覚は、AESとSHA-1(またはSHA-256)は「十分に異なっている」ということで、AESとHMAC/SHA-1に同じキーを使用しても実用上の問題はないはずです。ただし、あらゆる種類の科学的厳密さとの「違い」を単に定義することは困難であり、十分に調査されたセキュリティ機能ではありません。これは、「修正する必要はないが、回避できる場合は実行しない」と見なすことができるこれらの構造の1つです。はるかに「安全な」方法(「実行している関連アルゴリズムの特性を知っている」という意味)は、マスターキーKを取得し、そこから導出することです。これには、優れた一方向キー導出関数を使用します。暗号化用のサブキーとMAC用の別のサブキー。これは、KにSHA-256を適用し、256ビットの結果を2つの128ビットキーに分割するのと同じくらい簡単です。

同じ鍵の共有を本質的にサポートするいくつかのMACおよび暗号化アルゴリズムがあります。これがまさにGCMで起こることです。

したがって、一般的なコンセンサスは、セキュリティに問題はなく、AESとHMACの間でキーを共有して脆弱性を導入することはありませんが、異なる目的でキーを再利用することは適切ではないということも一般的なコンセンサスです。したがって、私たちが解決しようとしていることは、この構造は一般的には嫌われているということですが、現時点では既知の、または疑われるセキュリティ上の弱点はありません。

2
Xander