所有JWE都使用经过身份验证的加密和相关数据(AEAD)算法进行加密。您是否有任何理由不想在其他经过身份验证的数据(AAD)中包含IV和加密内容加密密钥(CEK)?它会以某种方式使JWE变得脆弱吗?
修改:我继续研究这个并根据RFC 5116 Section 2.1找到
nonce在算法内部进行身份验证,不必将其包含在AD输入中。如果应用程序方便的话,nonce可以包含在P或A中。
和
密钥K不得包含在任何其他输入(N,P和A)中。 (此限制并不意味着必须检查这些输入的值以确保它们不包含与键匹配的子串;相反,它意味着不能将键显式复制到这些输入中。)
所以我唯一剩下的问题是考虑加密内容密钥相当于一个随机值是否也可以包含在aad中?再次完全是为了方便。或者这会导致信息泄露吗?
答案 0 :(得分:2)
不需要完整性保护IV或加密内容加密密钥(CEK)。对它们的修改会导致解密失败,无论它们是否包含在AAD中。但是,对于avoid timing oracle attacks实现,必须继续整个解密过程,包括解密CEK,验证MAC(用于AES-CBC + HMAC-SHA2算法)和内容解密。
好的,所以不需要通过包含它们AAD来完整地保护IV或CEK,但是将它们包含在那里是否有任何伤害?正如您在问题中指出的那样,RFC 5116表明将IV包含在AAD中是可以的,但CEK 绝不能包含在其他算法输入中,包括AAD。但是假设加密算法是安全的,加密 CEK在计算上与随机数据无法区分,因此将其包含在AAD中应该可以。