我试图了解使用S-Boxes的DES和许多其他密码系统。

我现在对Sbox的总体工作方式有一个非常基本的问题。对于DES,Sboxes将6位输入替换为4位输出。对我来说,很清楚如何使用合适的替换表来工作。我不明白的是密码系统如何处理“信息丢失”(至少对我来说似乎是信息丢失,但我可能错了)。

如果您将6位映射到4位会丢失信息。因此,可能有多个6位组合映射到相同的4位组合上。结果,在进行S-box操作后,对我来说似乎无法从4位结果中再次获得原始6位。那么如何再次解密您的密文?

#1 楼

很好的问题,是的,数据似乎丢失了。从技术上讲,显然必须在6不加4时消失一些。但是请考虑DES的总体体系结构:



追踪左右两半的流动单个数据块。您会看到2个完整的32位字通过Feistel网络顺畅地向下流动。那里没有任何信息丢失,仅对其进行XOR运算即可保持宽度。因此,有64位进入了该块,然后又出现了64位。

您实际上是在指代DES密码功能的内部结构,它看起来像:-



,您可以识别s框。它们确实接受6位并输出4,因此由于鸽子原理而丢失了一些东西。但是,请查看s框上方的扩展框。由于置换P而创建了其他位。因此,丢失的东西虽然从未真正存在,但却在密码函数内(并本地化)创建。因此,与密码功能类似,输入32位,输出32位。

可以通过类推考虑此工作的原因,但不要太过分。考虑一个回合。 DES的加密功能用作小型伪随机数生成器,该生成器以子密钥(舍入密钥)和该模块的32位数据的另一半为密钥。然后将其与原始数据进行XOR加密。然后交换流,并重复执行舍入函数。因此,作为(某种)伪随机数生成器,密码函数不必是可逆的。

实际上,您可以使用现成的哈希函数(例如MD5或SHA1(均截断为32位))重新设计DES,以查看仍然可以进行转码。将散列函数视为密码的基础是密码学中的一个常见主题,有关以下问题的更多见解可以从使用散列函数构造加密算法的问题中找到。 (我不知道该如何处理3种方式的重复项。)

这些东西的设计者倾向于使用主要算法来反映关键时间表。惠而浦同样是对称的。我怀疑这是设计人员认为使用与主要部件相似的几何结构轻松扩展64位密钥的唯一方法,并且仍然对32位半块进行XOR。因此,他们发明了48位子密钥。地球上没有48位圆形密钥的特殊原因。它们本可以是32位,这将使非对称6到4位s盒不必要。

评论


$ \ begingroup $
对于DES,选择6个输入和4个输出可能已适合扩展排列(目的是创建较快的纯文本雪崩效果)。
$ \ endgroup $
–丹尼尔
17-10-5在9:38

$ \ begingroup $
也是D. Coppersmith的文件说:(这是我们可以容纳的最大尺寸,并且在1974年的技术中仍然可以将所有DES装配到单个芯片上。)所以也许这就是为什么他们不制造s-如果盒子更大,那么256字节的s盒子数据可能已经很“庞大”了。我本来要提出这个问题,但没有什么好说的,因此在这里加为评论。
$ \ endgroup $
–丹尼尔
17-10-5在9:40

#2 楼

DES使用Feistel网络。 S盒结果与另一半进行异或运算,因此不会丢失任何信息。它不需要是可逆的。