ガロア/カウンターモード(GCM)で認証タグを計算するには、最初に暗号上で GHASH を使用してMACを計算します。テキストと追加データ。その後、このMACは GCTR を使用して(最初のカウンターを使用して)暗号化されます。
私の質問は、なぜこの最後の暗号化手順が必要なのですか? GHASH の出力を認証タグとして直接使用した場合、セキュリティの問題はどうなりますか?
回答
GHASHの出力を認証タグとして直接使用した場合、セキュリティの問題はどうなりますか?
暗号化されたメッセージを聞いている人は、 $ H $ を回復できます。そのうちの1つは正しいです。
GHASHの出力は(暗号文とAADに基づく)公開多項式であり、秘密の値 $ H $ で評価されます。このような多項式が与えられた場合、多項式を $ \として書き直すことにより、 $ H $ を効率的に回復できることがわかります。 mathrm {GHASH}(H)+ \ mathrm {Tag} = 0 $ 、そしてその根を回復する(これは有限体で行うことができます)、またはさらに簡単に、2つのそのような暗号テキストを取得し、両方を書き直します
$ H $ が与えられると、攻撃者は暗号化されたメッセージに簡単に任意の変更を加えることができます。 ;はい、それは悪いことです。
コメント
- もう1つの質問:単に使用するのではなく、GCTRを使用してGHASHブロックを暗号化する必要があるのはなぜですか。タグとして$ Enc_H(GHASH)$?そうすれば、IVを必要とせずにGMACを使用できます。
- @mat:AESを介して$ GHASH $を送信することを意味します(キーとして$ H $を使用) )?ええと、実際には、そのようなことは機能し(まあ、私は'キーとして$ H $を使用しませんが、それ以外は…)、より保守的な設計。ただし、GCMは元々パイプライン可能なモードとして設計されていました。つまり、すべてのクロックサイクルで次のプレーンテキストブロックをハードウェアに渡し、すべてのクロックサイクルで、AESハードウェア実装を指定して実装できます。 10〜14サイクル前の暗号文が飛び出します。GHASHで暗号化を行うことにより、パイプラインを'ブロックします…
- 単純な意味ですGCTRで行う代わりに、GHASHのECB暗号化(キーとして$ H $または$ K $のいずれかを使用)。 'ナンスが不要になるため、GMACが使いやすくなるという利点があります。タグの暗号化はとにかくGCMで行われる最後のステップであるため、パイプラインはここでは問題になりません。したがって、パイプラインはこの段階では間違いなく空です。
- @David天宇ウォン:主にパフォーマンス( GHASHは並列化可能であり、キーなしのハッシュは通常' t)
- @David天宇ウォン:ああ、そうです、それも…