简介
DeDES是原型块密码,它采用固定长度的明文比特字符串,并通过一系列复杂的操作将其转换成相同长度的另一个密文比特字符串。 在DES的情况下,块大小是64位。 DES还使用密钥来定制变换,使得解密可以仅由知道用于加密的特定密钥的人来执行。 密钥表面上由64位组成; 然而,其中只有56个实际上被算法使用。 还有8位仅用于检查奇偶校验,并且此后被丢弃。 因此,有效密钥长度为56位。
密钥名义上存储或传输为8字节,每个具有奇偶校验。 根据ANSI X3.92-1981(现在,称为ANSI INCITS 92-1981)1,第3.5节:KEY的每个8位字节中的一个位可以用于密钥生成,分配和存储中的错误检测。 位8,16,...,64用于确保每个字节具有奇数奇偶性。
与其他块密码一样,DES本身不是加密的安全手段,而是必须在操作模式中使用。 FIPS-81规定了与DES一起使用的几种模式。解密使用与加密相同的结构,但使用相反顺序的密钥。 (这具有可以在两个方向上使用相同的硬件或软件的优点)。
发展历史该算法基于Horst Feistel的早期设计在20世纪70年代早期由IBM开发,在机构邀请后提交给国家标准局(NBS),以提出保护敏感、未分类的电子政府数据的候选。 1976年,在与国家安全局(NSA)协商后,国家统计局最终选择了一个略微修改的版本(加强了防差别密码分析,但对强力攻击削弱),作为官方的联邦信息处理标准美国在1977年。2
国家安全局批准的加密标准的出版同时导致其迅速的国际通过和广泛的学术审查。争议来自分类的设计元素,对称密钥块密码设计的相对短的密钥长度,以及NSA的参与,滋扰对后门的怀疑。随着时间的推移,算法所接受的激烈的学术审查导致了对块密码及其密码分析的现代理解。
DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。与每轮编码时,一个48位的“每轮”密钥值由56位的完整密钥得出来。DES用软件进行解码需要用很长时间,而用硬件解码速度非常快。在1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。所以,当时DES被认为是一种十分强壮的加密方法。
随着攻击技术的发展,DES本身又有发展,如衍生出可抗差分分析攻击的变形DES以及密钥长度为128比特的三重DES等。
算法算法的整体结构如图所示:有16个相同的处理阶段,称为循环。还存在称为IP和FP的初始和最终排列,其是反转(IP“撤销”FP的动作,反之亦然)。 IP和FP没有加密意义,但是它被包含在内以便于在20世纪70年代中期基于8位的硬件加载块使用。3
在主循环之前,块被分成两个32位半部分进行交替处理;这个十字交叉被称为Feistel方法。 Feistel结构确保解密和加密是非常类似的过程 - 唯一的区别是当解密时子密钥以相反的顺序应用。算法的其余部分是相同的。这极大地简化了实现,特别是在硬件中,因为不需要单独的加密和解密算法。
F函数
图所示的F函数一次操作半个数据块(32位),由四个阶段组成:
扩展:使用扩展置换(在图中用E表示),通过复制一半的比特,将32比特半块扩展为48比特。输出由8个6位(8 * 6 = 48位)片组成,每个片包含4个对应输入位的副本,以及从每个输入片到任一侧的直接相邻位的副本。
密钥混合:结果与使用异或运算的子密钥组合。使用密钥调度表从主密钥导出16个48位子密钥(每个循环一个)。
替换:在子密钥中混合之后,该块在被S盒或替换盒处理之前被分成8个6位片。八个S盒中的每一个根据以查找表的形式提供的非线性变换,用其四个输出位替换其六个输入位。 S盒提供了DES的安全性的核心 - 没有它们,密码将是线性的,并且易于破坏。
置换:最后,根据固定置换,P盒,重新排列来自S盒的32个输出。这被设计为使得在置换之后,每个S盒的输出比特在下一轮中散布在四个不同的S盒上。来自S盒的替换的交替和来自P盒和E扩展的比特的置换分别提供了所谓的“混淆和扩散”,Claude Shannon在1940年代时认为这是安全的必要条件。
调度-生成子密码图片显示了用于加密的密钥调度 - 生成子密钥的算法。
最初,通过排列选择1(PC-1)从初始64中选择密钥的56个比特,剩余的8个比特被丢弃或用作奇偶校验比特。 然后将56位分成两个28位的一半; 然后分别处理每一半。 在连续的循环中,两半都向左旋转一位或两位(为每个循环指定),然后通过排列选择2(PC-2)选择48个子密钥位,从左半边开始24位,从右边开始24位 。 旋转(在图中由“