【问题标题】:Why do JSON Web Encryptions (JWEs) not integrity protect the IV and content encryption key?为什么 JSON Web 加密 (JEW) 不能完整性保护 IV 和内容加密密钥?
【发布时间】:2015-04-08 12:48:37
【问题描述】:

所有 JWE 都使用经过身份验证的加密和关联数据 (AEAD) 算法进行加密。您是否有任何理由不想将 IV 和 Encrypted Content Encryption Key (CEK) 包含在 Additional Authenticated Data (AAD) 中?它会以某种方式使 JWE 变得脆弱吗?

编辑:我继续研究这个,发现根据RFC 5116 Section 2.1

nonce 在算法内部经过身份验证,无需将其包含在 AD 输入中。如果方便应用,nonce 可以包含在 P 或 A 中。

密钥 K 不得包含在任何其他输入(N、P 和 A)中。 (此限制并不意味着必须检查这些输入的值以确保它们不包含与键匹配的子字符串;相反,它意味着不得将键显式复制到这些输入中。)

所以我剩下的唯一问题是考虑加密内容密钥等同于随机值是否可以将其也包含在 aad 中?再次完全是为了方便。或者这会导致可能的信息泄露?

【问题讨论】:

    标签: authentication encryption jwt jwe


    【解决方案1】:

    无需对 IV 或加密内容加密密钥 (CEK) 进行完整性保护。修改任何一个都将导致解密失败,无论它们是否包含在 AAD 中。但是,avoid timing oracle attacks 实现必须进行整个解密过程,包括解密 CEK、验证 MAC(用于 AES-CBC + HMAC-SHA2 算法)和内容解密。

    好的,因此不需要通过将 IV 或 CEK 包含在 AAD 中来完整性保护它们,但是将它们包含在其中有什么害处吗?正如您在问题中指出的那样,RFC 5116 表明可以将 IV 包含在 AAD 中,但 CEK 不得包含在包括 AAD 在内的其他算法输入中。但是加密 CEK,假设加密算法是安全的,在计算上与随机数据无法区分,因此将其包含在 AAD 中应该没问题。

    【讨论】:

    • 我不是在谈论所有经过身份验证的加密 (AE) 密码,而是那些具有关联数据 (AEAD) 的密码。因此,如果我有一些 AEAD 密码 E(plainText, key, iv, aad) -> (cipherText, tag),如果 aad = F(key) + iv 我的密码系统的安全性会降低。其中 F() 是密钥的某种排列,在 jwe 的情况下,它将是密钥管理算法。显然,这些东西被认为是已知值,因为它们是作为 jwe 的一部分传输的。但是,攻击者是否通过在 aad 中包含身份验证标签来获得任何优势?
    • 我不这么认为——我已经更新了答案来澄清。但我不是密码学家,所以不要把我的建议当成福音。
    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 2021-12-25
    • 1970-01-01
    • 2012-02-21
    • 2018-11-28
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    相关资源
    最近更新 更多