我正在为考试而学习。我想确保我的观点正确。

AES不是Feistel密码,因为AES中的操作不可逆。

以上说法正确吗?如果不是,为什么它不是Feistel密码?

评论

如果操作不可逆,则我们将无法解密任何内容。阅读Reid答案中的链接,并尝试记住原理图和Feistel网络的外观。这与简单的子烫发网络(在Reid的答案中也提供链接)非常不同。 Feistel密码是在设计中使用Feistel结构的密码-AES不使用。

@rath,如果未使用仅需要一种方式加密的模式(例如CTR模式)增强密码,则您将无法解密任何内容

@rath除了我之前的评论,对于总的来说不是的结构,使用不可逆的结构是很有可能的。作为主要示例,子密钥派生可能是不可逆的。

#1 楼

好吧,AES不是Feistel密码,因为它是替代置换网络。如果我要进行一个测试,问我为什么AES不是Feistel密码,那将是我的论点:即置换置换网络的结构与Feistel网络的本质不同。 (这里可以详细说明可逆性和其他差异。)

这就是说,您的说法不正确。在Feistel密码中,舍入函数不一定是可逆的(DES的舍入函数不是),但是在AES中,像任何置换置换网络一样,舍入是可逆的。这是结构本身的属性。

#2 楼

根据定义,Feistel网络使用一系列回合,将输入块分成两个侧面,使用一侧置换另一侧,然后交换侧面。与往常一样,Wikipedia拥有一个不错的图表。

AES不会这样做。进行回合必定会置换整个状态。每个回合由SubBytesShiftRowsMixColumnsAddRoundKey步骤组成,这些步骤都不像Feistel网络一样运行:



SubBytes从以下位置执行字节替换常量表,没有字节的值会影响另一个字节的置换值。

ShiftRows一次仅使用这4个字节置换4个字节的字,另一个字的任何字节都不会影响其置换的输出。

MixColumns一次仅使用这4个字节对4个字节的单词进行置换,其他单词的字节均不会影响其置换输出。

AddRoundKey是使用派生的回合密钥的置换,没有字节的值因此会影响另一个字节的置换值。

因此,只有ShiftRowsMixColumns步骤甚至允许一个字节影响状态中任何其他字节的置换,并且在这两个步骤中,给定字节仅影响置换当它本身也被排列时,其他字节的字节数。

都不匹配Feistel网络的“将块分成A和B并使用A置换B”的样式。

#3 楼

简单的答案是“因为它是SPN密码”。

Feistel和SPN之间有什么区别?

SPN在一轮处理整个数据,而Feistel将数据划分分成N个部分,其中N> = 2,然后对X个部分进行操作,其中0




图像来源:FEISTEL,SPN

在平衡状态下,数据分为两部分,即N = 2,并且X = 1(例如山茶密码)
在平衡状态下,数据被分为两个以上的部分,即N> 2(例如SMS4)密码)

现在谈论可逆问题。

SPN必须是可逆的,否则将无法解密。
与Feistel密码一样,F函数可以是可逆的或不可逆的。而且您仍然可以进行加密和解密。

Feistel Cipher的另一个优点是加密和解密的代码是相同的,只需要以相反的顺序使用回合密钥即可。 (即使您的F函数是可逆的,也不必在代码中编写它的反函数)。

还有一点要注意的是,在Feistel中,您的F函数可以是一个简单的SPN。

评论


$ \ begingroup $
评论不用于扩展讨论;此对话已移至聊天。
$ \ endgroup $
– e-sushi
17年12月17日在13:12