密码学/DES
数据加密标准 (DES) 是一种广泛使用的加密数据算法。它由 IBM 开发,名为 Lucifer,并在 1973 年对更优密码系统的征集响应中提交给 NBS。美国国家标准与技术研究院在国家安全局的帮助下对 IBM 的设计进行了一些修改;DES 于 1977 年 1 月被采用为标准。
DES 是一种乘积分组加密算法(一种密码),其中 16 次迭代或轮次,即替换和置换(置换)过程级联。分组大小为 64 位,因此可以将 64 位数据块(明文)加密成 64 位密文。控制转换的密钥也包含 64 位。然而,只有其中 56 位可供用户使用;其余 8 位用于校验奇偶校验。因此,实际密钥长度为 56 位。
密钥位子集被指定为 K1、K2 等,下标表示轮数。在每轮中使用密钥位进行的密码函数(替换和置换)标记为 f。在转换过程的每个中间阶段,来自前一阶段的密码输出被划分为 32 个最左侧位 Li 和 32 个最右侧位 Ri。Ri 被置换以成为下一个更高中间密码 Li+1 的左侧部分。然而,下一个密码的右侧部分 Ri+1 是密钥和整个前一中间密码的复杂函数。DES 安全性的基本特征是 f 包括一个非常特殊的非线性替换 - 即 f(A) + f(B) 不等于 f(A + B) - 由标准局?以表格函数形式指定,称为 S 盒。此操作生成一个 32 位数字,逻辑上将其添加到 Ri 以生成新的中间密码的左侧部分。此过程重复 16 次。要解密密码,按相反顺序执行此过程,第 16 轮排在最前面。DES 算法适合集成电路实现。到 1984 年,标准局已认证了超过 35 种 DES 的 LSI 和 VLSI 芯片实现,大多数都在单个 40 引脚芯片上,其中一些芯片的速度为每秒数百万位。
当密码首次发布时,S 盒的设计标准没有公布。由于国家安全局参与了 S 盒的设计,大多数安全研究人员对 DES 非常谨慎,并且普遍担心 NSA 的修改是为了削弱密码。
在 1990 年,随着 Biham 和 Shamir 独立发现和公开发表差分密码分析,结果表明,至少有一部分谨慎是不必要的。在发表这篇论文后,参与设计的 IBM 人员公开声明,设计的主要因素是加强对差分密码分析的抵抗力。当时设计标准背后的保密性似乎是由于当时公众不知道这种技术。
值得注意的是,DES 理论上容易受到 Matsui 后来发现的一种技术 - 线性密码分析 - 的攻击。目前尚不清楚 NSA 在 DES 最终确定时是否知道线性密码分析,但大多数了解情况的观察人士认为不知道。IBM DES 的设计者之一 Don Coppersmith 称,IBM 本身当时并不知道线性密码分析。
由于密钥长度只有 56 位,DES 可以并且已被暴力破解方法(即穷举所有可能的密钥)破解。据信,选择这种缩短密钥长度的原因之一是,NSA 在 70 年代中期拥有足够的计算能力来暴力破解这种长度的密钥。自那以后,计算机硬件的进步使得现在几乎任何人都可以拥有足够的计算能力。EFF 是一个网络空间公民权利组织(没有太多资金和人员),他们在不到两天的时间里完成了这项工作,时间大约与美国司法部的一名律师公开宣布 DES 仍然不可破解时相同。
提高 DES 安全性的最明显方法是用不同的密钥对数据进行多次加密。用 DES 对数据进行双重加密并不能增加太多安全性,因为它容易受到中间相遇攻击。在这方面更进一步的是,许多以前的 DES 用户现在使用三重 DES (3DES),它由 DES 的专利权人之一进行描述和分析(参见 FIPS 46-3);它涉及用不同的密钥对每个数据块进行三次 DES 加密。3DES 被广泛认为目前足够安全,尽管它非常慢。但是请注意,有几种方法可以使用 DES 三次;其中只有一种是 Tuchman 的 3DES。
经过又一次长时间的延迟竞赛,(NIST) 选择了一种新的密码,高级加密标准 (AES) 来取代 DES(2001 年秋季)。AES 由其设计者以 Rijndael 的名字提交。
实施
http://www.codeproject.com/KB/cs/NET_Encrypt_Decrypt.aspx (C#,程新文)
http://frank.anemaet.nl/crypto/DES/ (Java 实现,Frank Anemaet)
http://www.tero.co.uk/des/ (Javascript 实现,Paul Tero)