首页/我的作品/密码学/5.2 DES与AES:从美国国家标准到全球标准
密码学:守护数字世界的秘密

5.2 DES与AES:从美国国家标准到全球标准

第 28 / 78 篇 · Crazy Boy

1973年,美国国家标准局(NBS,即后来的NIST)在联邦公报上发布了一份不寻常的征集令。他们向全世界征求一种“可以公开的、标准化的密码算法”——这在那时是闻所未闻的。密码历来是国家机密,藏在军事和外交部门的保险柜里,怎么可能公开?

但时代变了。计算机开始进入商业领域,银行要电子转账,企业要保护数据,他们都需要一种可靠的加密方法,而且不能是“自己瞎编的”——因为自己编的密码往往漏洞百出。美国政府决定站出来,制定一个国家标准,让所有人都能使用。

这就是DES的起点。

DES的诞生:第一个公开的加密标准

1974年,IBM提交了一个名为Lucifer的算法,它是在20世纪60年代末由霍斯特·费斯特尔领导的团队开发的。经过修改和简化,这个算法在1977年被正式采纳为美国联邦信息处理标准,命名为数据加密标准(Data Encryption Standard,DES)。

DES是一个划时代的产品。它首次将密码算法完全公开,任何人都可以研究、分析、实现。它的安全性完全依赖于密钥——一个56位的数字。

56位密钥在当时被认为是足够安全的。2的56次方大约是7200亿亿种可能,用当时的计算机暴力破解需要几百年。美国政府还规定DES只能出口到盟国,其他国家不允许使用——这从侧面说明他们对DES的安全性很有信心。

但DES的设计从一开始就伴随着争议。最引人注目的是它的密钥长度:IBM最初提交的版本是128位密钥,但被NBS改为56位。很多人怀疑这是国家安全局(NSA)在背后搞鬼,他们故意缩短密钥长度,让自己能够破解。直到今天,这种猜测仍在流传。

DES的内部结构:费斯特尔网络的魔力

DES的内部结构是一种称为费斯特尔网络(Feistel Network)的设计。它的巧妙之处在于:加密和解密可以用几乎相同的硬件实现,只需要把子密钥的顺序反过来。

DES的工作流程大致如下:

  1. 把64位明文分成左右两半,各32位。
  2. 对右半部分应用一个复杂的轮函数(包括扩展置换、与子密钥异或、S盒替换、P盒置换),结果与左半部分异或,成为新的右半部分。
  3. 交换左右两半,进入下一轮。
  4. 重复16轮。

这个过程像是一台精密的机器,每一轮都把数据搅得更乱。16轮之后,输出的64位数据就是密文。

(这里可以配一张费斯特尔网络的流程图)

DES的S盒(替代盒)是它最神秘的部分。S盒把6位输入映射成4位输出,是非线性的,也是DES安全性的核心。当年NSA参与设计了S盒,有人怀疑他们可能在S盒里藏了“后门”。但后来的研究表明,S盒的设计其实非常精巧,能够抵抗当时已知的密码分析攻击。

DES的黄昏:56位密钥的末路

随着计算机性能的飞速提升,56位密钥变得越来越脆弱。

1997年,一个名为DESCHALL的项目在互联网上发起分布式攻击,历时96天破解了一条DES密文。1998年,电子前哨基金会(EFF)用25万美元造了一台名为“Deep Crack”的专用机器,在56小时内破解了DES。1999年,Deep Crack和互联网上的10万台计算机合作,把破解时间缩短到22小时15分钟。

DES的时代结束了。它光荣地服役了20多年,从一个国家标准变成全球事实标准,最后在摩尔定律面前黯然退场。但它留下的遗产——费斯特尔网络、S盒设计思想、公开竞争的理念——至今仍在影响着密码学。

AES的诞生:全球大选

1997年,NIST再次发布征集令,这次他们要寻找DES的继任者,命名为高级加密标准(Advanced Encryption Standard,AES)。与20多年前不同,这次征集是全球性的、完全公开的,评审过程也向全世界透明。

全世界的密码学家都沸腾了。这是千载难逢的机会——谁设计的算法能成为下一代全球标准,谁就能在密码学史上留下自己的名字。15个算法从世界各地涌来,经过三轮激烈的评审,最终5个算法进入决赛:MARS、RC6、Rijndael、Serpent、Twofish。

2000年10月,NIST宣布获胜者:来自比利时的两位密码学家约翰·达门(Joan Daemen)和文森特·里门(Vincent Rijmen)设计的Rijndael算法。它被正式命名为AES。

AES的设计理念:简洁与安全

Rijndael的设计哲学与DES截然不同。它不是费斯特尔网络,而是一种称为置换-置换网络(Substitution-Permutation Network,SPN)的结构。每一轮包含三个步骤:

  • 字节替换(SubBytes):用一个固定的S盒替换每个字节。这是非线性的,提供混淆。
  • 行移位(ShiftRows):把状态矩阵的每一行向左循环移位不同的量。这是线性的,提供扩散。
  • 列混合(MixColumns):把每一列的四个字节通过矩阵乘法混合。这也是线性的,进一步增强扩散。

最后再加一个轮密钥加(AddRoundKey),把这一轮的状态与轮密钥异或。

(这里可以配一张AES轮函数的结构图)

这个设计既简洁又优雅。所有步骤都是可逆的,解密时可以反向操作。而且,AES的每一轮都可以用硬件高效实现,在软件上也很快。

AES支持三种密钥长度:128位、192位、256位。128位密钥已经足够安全——2的128次方是一个无法想象的天文数字,即使把全世界的计算机都用来暴力破解,也需要比宇宙年龄还长的时间。

为什么AES成为全球标准?

AES的胜出不是偶然。它有几个突出的优点:

  1. 安全性:在所有候选算法中,Rijndael对已知攻击的抵抗能力最强。它的数学结构清晰,分析起来相对容易,让人相信没有隐藏的弱点。
  2. 性能:无论在硬件还是软件上,AES都表现出色。特别是在8位处理器(如智能卡)上,它的效率远高于其他算法。
  3. 简洁性:Rijndael的设计思想简单明了,容易实现,也容易分析。密码学界喜欢这样的算法——因为越复杂的东西越容易藏漏洞。

今天,AES已经是全世界应用最广泛的对称加密算法。从你的手机到银行的服务器,从Wi-Fi到VPN,从文件加密到云存储,无处不在。

从DES到AES的启示

这段历史告诉我们几个重要的道理:

  • 公开竞争是最好的安全验证。DES和AES都是通过公开征集产生的,经过全世界密码学家的审视,比任何“闭门造车”的算法都可靠。
  • 算法可以公开,安全在于密钥。DES和AES的完整设计都是公开的,任何人都可以研究它们。这正是柯克霍夫原则的完美体现。
  • 没有永恒的密码。DES曾经被认为是安全的,但最终还是被计算机性能打败。今天的AES可能足够安全,但量子计算机的出现可能会改变一切。密码学永远是动态的,永远在攻防中演进。

下一节,我们将深入AES的内部,用图解的方式一步步看它如何加密数据。你会发现,这个现代密码的基石,其实并没有想象中那么神秘。