web-dev-qa-db-ja.com

対称暗号プリミティブは整合性と機密性の両方を提供しますか?

対称暗号アルゴリズムは、キーを使用してプレーンテキストを暗号化してテキストを暗号化することにより機密性を提供することを理解していますが、どのようにして整合性も提供できますか?

暗号化された暗号文を傍受できた場合、攻撃者がメッセージのビットを改ざんし、受信者に誤った(必ずしも一貫性のある)メッセージを送信するのは簡単ではないでしょうか?特に対称暗号は認証ではうまく機能しないことを考慮してください。

これが実際にそうではなく、対称暗号がデータの整合性を提供できる場合、これを実装するアルゴリズムの例を私と共有できますか?

1

AESは対称アルゴリズムの例です。固定サイズのブロックを同じサイズの別のブロックにマップし、暗号化と復号化の両方に固定キーサイズを使用します。複数のブロックの暗号化(または復号化)をサポートするために、ブロック暗号の単一の操作がモードで使用されます。

CBCモードのAESのような暗号は実際に整合性を提供しません。そのため、通常、整合性と信頼性を実現するために別のMAC構成で使用されます(たとえば、HMAC-SHA256)。この計算は、平文(MAC-then-Encrypt/MAC-and-crypt)または暗号文(Encrypt-then-MAC)のいずれかで実行できます。 (これらの比較については、 MAC-then-encryptまたはencrypt-then-MAC? を参照してください)

認証された暗号化では、このような外部構成は必要ありません。暗号化モードでは、暗号モードが完全性と信頼性のプロパティを提供します。 AEADを参照してください: https://tools.ietf.org/html/rfc5116

GCMモードのAESは、ブロックの暗号化/復号化に加えて、認証タグを計算します。このタグは暗号文に追加され、鍵にも依存する整合性チェックを可能にします。攻撃者が暗号文または認証タグの1ビットを変更した場合、それを検出できます。

2
Lekensteyn