固定长度的CBC-MAC使用全零块作为初始化向量。

假设我们改用随机IV,然后将IV和标签一起发送。消息$ m $将是$ m = b_1 || b_2 || b_3 || ... || b_l $,则MAC将为$(IV,t)$,其中$ t $是定义为普通身份验证标签。

为什么使用随机IV的这种方法比普通方法更不安全使用全零IV?

(此方法在某些nCipher产品中使用,并且在nCipher咨询#13中声明为不安全–另请参见nCipher CBC-MAC API不安全)。 />

评论

欢迎使用密码学堆栈交换。您的问题之所以被迁移到这里,是因为与软件开发没有直接关系(Stack Overflow的主题),而在这里完全成为话题。请在这里也注册您的帐户,以便能够发表评论(如有必要)。

#1 楼

您的securityfocus.com链接中引用的nCipher咨询#13包含此漏洞的说明(在“加密详细信息”部分中)。

CBC-MAC算法的工作方式与CBC加密算法相似,但是仅输出最后一个块(或其中的一部分)。
每个纯文本块都与前一个密文进行异或,然后进行加密。

这意味着我们对第一个块进行异或在初始化向量与块密码首次接触之前,使用初始化向量。因此,仅更改第一个块以及初始化向量中的相应更改将意味着将相同的值输入到块密码中,从而在末尾给出相同的结果认证标签(不必更改)。 />
如果初始化向量固定为零(或其他常数),则攻击者无法与第一个块一起更改它,因此这种攻击是不可能的。另外,我们要传输的数据少了一块。

评论


$ \ begingroup $
到nCipher咨询#13的链接显示了“加密详细信息”部分中的图表,该图表已失真。你能提供更好的吗?谢谢。
$ \ endgroup $
–Ursa Major
16年5月24日在5:13

#2 楼

考虑到PaŭloEbermann给出的答案,我认为为了确保CBC-MAC的安全,IV必须在代码实现中保持恒定,而不是算法的参数。零常数简化了事情。

评论


$ \ begingroup $
欢迎使用crypto.stackexchange-我注意到一个问题,为什么使用随机IV的方法比使用全零IV的常规方法更不安全?但是,这个答案似乎并未解决关键问题。点“为什么”。考虑将解释添加到答案中,您的答案可能会获得更多投票。
$ \ endgroup $
–艾拉·罗斯(Ella Rose)
19年6月19日在13:24



$ \ begingroup $
您能扩展一下如何提供与Paŭlo的答案不同的信息吗?
$ \ endgroup $
–吱吱作响的s骨
19年6月19日在20:26