web-dev-qa-db-ja.com

暗号化とMACに同じキーを使用できないのはなぜですか?

暗号化を正しく行う方法の例として 単純なファイル暗号化プログラム を記述しましたが、- 暗号化+ MACに関する質問 を読んだ後、両方に同じキー。

プログラムを修正してより長いキーを生成して分割しようとしていますが、これを行うとどのような問題が発生しますか?

34
Brendan Long

1つのキーを複数の目的に使用することは、一般的に悪いスタイルと見なされています。脆弱性を直接意味するものではありません。プロトコル設計に都合がよい場合は、この原則に違反することがあります。

これの最も重要な理由は、複数のスキームに同じキーを使用する場合、異なるスキーム間の相互作用を考慮する必要があることです。独立したキーを使用すると、これを心配する必要はありません。

もう1つの懸念は、1つのスキームが壊れて、キーの回復が可能になることです。その後、その鍵の回復により、その鍵を使用したプロトコルのすべての部分が破壊されます。たとえば、不正なMACアルゴリズムを実装した場合、そのアルゴリズムに違反すると、認証だけでなくメッセージの機密性も失われる可能性があります。

いくつかの実用的な例:

  • 暗号化にAES-CBCをAES-CBC-MACと一緒に使用すると、同じ鍵を使用すると完全に壊れてしまいます。
  • 暗号化にAESをHMAC-MD5/SHA-1/SHA-2と一緒に使用すると、既知の相互作用はありません。そのような相互作用があることは信じられない。
  • AES-CCM は、暗号化にAES-CTRを使用し、MACとしてAES-CBC-MACを使用するモードです。このモードは、AES自体と同じくらい強力です。

これらの例は、そのような組み合わせの実際的なセキュリティは、完全に破壊されたものから証明できるほど安全なものまでさまざまであることを示しています。


適切なアプローチは、1つのマスターキーから開始し、HKDFなどのキー派生関数を使用して個々のキーを導出することです。これらのキーは独立しており、異なるスキーム間の相互作用を防ぎます。個々のキーからマスターキーを復元することは現実的ではないため、システムの1つの部分に違反しても、そのマスターキーに基づいて他のすべてが破損することはありません。

40
CodesInChaos