我想知道在循环Feistel密码的情况下,FPE是如何解密的。我的理解是,只要通过具有反向密钥顺序的网络进行重复,就会生成在网络开始时输入的密文。
密文是某个数字的一个位表示,所以我只是在扩展数字,以便在停止之前搜索正确的长度。
然而,我的问题是,我使用AES作为我的圆函数。但是,我需要大量填充(0),因为AES块大小是128,而块大小(每一半)在10-30位时要小得多。我只是简单地将这些0附加到字符串的末尾,然后使用AES获得一个加密的128位输出。
在这一点上,我不太确定该做什么。我通过删除最后的~100位并只取字符串的开头来截断。然而,在我看来,这似乎是在丢失数据,我无法理解如何使用同样的方法解密。
这种简单的截断方法实际上是对较小块实现AES的正确方法,还是应该以另一种方式填充/截断?另外,如果它是正确的,有人能解释为什么它是或链接到一些相关的文献吗?
干杯!
我见过用AES从截断密文中恢复明文的相关链接,但我要么不理解这些评论,要么就没有发布解决方案。
发布于 2015-07-23 19:05:39
在Feistel网络中,您可以使用任何函数,并且它是可逆的。当然,为了获得安全性,您需要函数来实现某些属性。使用Feistel网络的主要原因之一是得到伪随机排列。为此,您需要3或4轮具有伪随机函数的Feistel (每轮都有调整或独立键)。现在,截断AES是一个伪随机函数(也是一个非常有效的函数),所以这是一个好主意。您可以按您所说的使用零填充,但也必须将圆号添加到填充中(这是“调整”),或者在每一轮中使用不同的键。后一个选项的效率要低得多,因为您需要多次运行AES密钥调度。圆函数的使用在本质上保证了在每一轮中都有一个“计算独立的”伪随机函数(与在每一轮中使用不同的键基本相同)。
为了看它是否有效,只需绘制并跟踪解密。Feistel的神奇之处在于你不需要倒转圆函数就可以解密。
https://crypto.stackexchange.com/questions/27108
复制相似问题