AES计数器模式与CBC模式的安全性

Evgeni Vaknin 09/05/2017. 1 answers, 401 views
aes cbc ctr nonce

为了使AES-CBC成为CPA安全,必须为每个数据包随机选择使用的IV。 如果IV是可预测的,那么加密不是CPA安全的。 对于AES-CTR模式也是如此? 也就是说,对于AES-CTR模式,第一个计数器必须是随机的,或者它可以是随机数? 谢谢

1 Answers


Patrick K 07/31/2017.

对AES-CTR输入块的要求是,它们在密钥的生命周期内应该是unique的。 在大多数情况下,随机的96位随机数与从0开始的32位计数器一起使用。如果AES-CTR的相同输入块出现两次,则AES-CTR不再是CPA安全。 在这种情况下,这可能是由于$ 2 ^ {32} $块之后的反溢出或由于碰撞随机选择的96位随机数(生日悖论:在$ \ sqrt {2 ^ {96}} $消息之后有50%的机会)。考虑以下情况:

两个不同的1块消息$ P $和$ P'$在相同的密钥$ K $(可以事先协商)和相同的随机数$ N $下发送。 攻击者知道相关密码文本$ C $和$ C'$,其中通过与密钥流(基于nonce和计数器)进行异或来计算:

$ C = P \ oplus E_K(N,0)$

$ C'= P'\ oplus E_K(N,0)$

然后攻击者可以简单地对密文进行异或运算

$ C \ oplus C'= P \ oplus E_K(N,0)\ oplus P'\ oplus E_K(N,0)= P \ oplus P'$

他获得了两个明文之间的“距离”。 由于英语冗余,他可能能够确定$ P $和$ P'$。

这个问题也被称为“双时间垫”。 一旦相同的密钥流与明文异或,我们就会陷入困境。 因此,重要的是,AES加密的输入在密钥的生命周期内是唯一的。 它不一定是不可预测的,而是独一无二的。

5 comments
Evgeni Vaknin 07/31/2017
通过声明“2 ^ 32消息”,我认为你的意思是AES中的每个16字节的2 ^ 32块? 如果是这样,比2 ^ 32块的时间是2 ^ 32 * 128位,这是10Gbps,大约1分钟......所以每1分钟就必须执行一次密钥交换算法,以便建立一个新的密钥和随机数?
1 Patrick K 07/31/2017
你是对的。 我编辑了答案。 如果你有一个静态随机数,那么你需要在这种情况下每分钟进行一次密钥交换。 但是由于随机数通常随每条消息而改变,所以限于消息的最大长度为$ 2 ^ {32} \ cdot128 $ bits。 在给定密钥下可以发送的最大消息数量受到生日悖论的限制。 如果对于每条消息均匀随机地选择96位随机数,则对于q消息,随机数碰撞的概率为$ \ 0.5q ^ 2/2 ^ {96} $。 如果您希望此项最多为1%,那么您的$ q_ {max} = 4 \ cdot10 ^ {13} $。
Evgeni Vaknin 07/31/2017
如果我不使用随机随机数,会发生什么情况,而是对随机数初始值使用一个随机值,而不是每个数据包增加一个? 例如,假设每个数据包包含少于256个AES数据块(每个数据包含128位),并且AES-CTR的计数器由120位随机数组成,在交换密钥时随机初始化,而在数据包内则为8位计数器用于计数128位块。 并且每个新数据包(在下一个评论中继续)
Evgeni Vaknin 07/31/2017
我将随机数递增1,并清除8位计数器。 在这种情况下,生日悖论是不相关的,因为碰撞是不可能的(假设我在nonce的120位计数器到期之前替换密钥)
1 Patrick K 08/01/2017
是的,如果你以某种方式确保你永远不会重用密钥流生成的相同(输入块,密钥)对,那么一切都很好。 (当然假定密钥是保密的并且从随机统一选择)

Related questions

Hot questions

Language

Popular Tags