在查看Feistel密码的设计时,他们使用了一系列轮密钥,这些轮密钥是使用关联的分组密码的密钥时间表从主密钥生成的。一些分组密码需要这样做以防止重复,但是为什么Feistel网络需要它?



如果$ F $是一个好的PRF,则输出应该是在最初的几轮之后与随机的没有区别。在随机预言模型下,可以预期在第一轮之后将$ L_0 $设为伪随机,然后在之后立即将$ R_0 $设为伪随机。继续执行此操作永远都不会在合理的时间内使您回到纯文本。

所以我的问题是,为什么Feistel网络中使用的是圆形密钥,而不是使所有圆形密钥都相同?我的推理有什么错误吗?

评论

因为方形钥匙不适合钥匙孔。 * baddum-tsh *

#1 楼

迭代密码需要在各回合之间具有可变性以抵抗所谓的滑动攻击。阻止此攻击的一种常见方法是使用密钥调度程序为每个回合生成不同的回合密钥。

滑动攻击通过在一个输入明文与中间值之间找到一个冲突来利用密码的重复循环。其他一些明文的一轮加密。这种冲突产生了一个“滑动对”,并为攻击者提供了两个已知的回合函数输入/输出对,在许多情况下,这些输入/输出对足以恢复密钥的至少一部分。

问题中,我们有平衡的Feistel密码,每个回合都使用相同的回合功能和密钥。由于生日的悖论,我们期望找到一个滑动对,其选择的明文顺序为$ 2 ^ {n / 4} $或已知的明文文本为$ 2 ^ {n / 2} $,从而打破密码。

评论


$ \ begingroup $
最好指定n为块长度(而不是回合数),因此对于在128位块上运行的密码,大约40亿个选定的纯文本就足够了。另一个问题是,在任何给定的回合中,经常会有一些键,Feistel网络的重复迭代将产生较短的值周期。如果每个回合对键的操作有所不同,则某些回合可能具有较弱的键,但是仍然会有很多有用的具有强键的回合。
$ \ endgroup $
–超级猫
17年6月20日在22:03

#2 楼

这是由于Luby和Rackoff对Feistel网络的证明。证明假设PRF是独立的。请参阅“如何从伪随机函数构造伪随机排列(收费墙)”的第4.5和第5节。安全的钥匙,参见例如如何从单个伪随机函数构造伪随机排列或如何描述Luby-Rackoff及其最佳单键变体(后者有效)。

评论


$ \ begingroup $
使用相同的密钥被证明是不安全的,还是被证明是不安全的?
$ \ endgroup $
–橙色狗
17年6月20日在11:02

$ \ begingroup $
@OrangeDog,被证明是不安全的。我认为上面的第二篇参考文献中有一个证明。
$ \ endgroup $
–otus
17年6月20日在11:45

#3 楼

说任何固定函数$ F $“都是好的PRF”是没有道理的。但是,函数的分布可以是伪随机的(与所有函数的集合的均匀分布没有区别)。

因此,考虑使用键函数来模拟随机预言是有道理的。 >

评论


$ \ begingroup $
我想的问题是,为什么我们每个回合都使用不同的密钥,而不是每个回合使用相同的密钥。
$ \ endgroup $
–PaŭloEbermann
17年6月20日在19:26