RU EN ES 中文

AES:没有秘密的密码?

AES 是公开的,二十年来也没有被攻破。那为什么俄罗斯、中国和其他大国要造自己的密码,而不是直接采用它?

AES 既然这么公开,为什么不是所有人都用它?

AES 的完整规范是公开的,任何人都能拿到:它写在一份公开标准里,内置于每个浏览器和手机中,并被教科书详细讲解。人们在公开场合尝试攻破它已经二十多年——始终没有成功。按说它该是适合所有人的统一标准。可事实并非如此:俄罗斯采用了自己的密码——Kuznyechik,中国采用了 SM4,其他国家也都有自己的标准。

如果算法是公开的,二十年里又没人在其中找到一个实际的漏洞,是什么促使一个个国家花上数年去造自己的密码,而不用现成的?难道 AES 的“透明”并不那么彻底?

关键结论: 在数学上,AES 确实是公开的——这正是它的长处。但一个国家对密码的信任,不只关乎数学。问题与其说是“算法本身里有没有秘密”,不如说是“标准是谁写的、由谁控制”。正是在这里划出了那条分界线,催生了各国自己的密码。

AES 是如何构造的

先看看为什么 AES 在数学上几乎无可挑剔——然后再回到:为什么这还不能说服所有人。AES 是一种代换–置换网络(SP 网络):它不像费斯妥网络那样把分组切成两半,而是把分组放在一个字节矩阵里,每一轮用四层运算改变整个矩阵。因此每个运算都必须可逆。

1

分组是一个矩阵

数据块被铺进一个方阵的各个格子里。在真正的 AES 中,这是一个 4×4 的 16 字节矩阵(128 位);在 Ludus Lab 的游戏里,是一个 2×2 的四个半字节矩阵(16 位)。后面所有步骤都在这个矩阵的行和列上进行。

2

SubBytes——S 盒代换

每个字节按一张固定的表——S 盒——替换成另一个字节。这就是“混淆”(confusion):AES 中唯一的非线性运算。没有它,整个密码就会退化成一个线性方程组,可以直接求解。

3

ShiftRows 与 MixColumns——混合

矩阵的行被循环移位,列之间相互混合。这就是“扩散”(diffusion):只需几轮,一个被改变的输入比特就会散布到整个分组。这两个运算都是线性且可逆的。

4

AddRoundKey——加入密钥

状态与本轮的密钥做异或。轮密钥是事先由共享密钥通过一个单独的过程——密钥编排——推导出来的。正是这一步,不知道密钥就无法撤销。

5

多轮重复与解密

这些层会重复很多次:根据密钥长度分别是 10、12 或 14 轮。最后一轮没有 MixColumns——它对强度毫无增益。要解密,鲍勃就按相反顺序执行逆运算——但前提是他知道密钥。

AES 的一轮
SubBytes
S 盒代换(混淆)
→
ShiftRows
移位各行
→
MixColumns
混合各列(扩散)
→
AddRoundKey
加入轮密钥

每一步都可逆——但它们合在一起,把分组和密钥缠绕得如此之深,以至于没有密钥就无法倒着跑。

为什么不能倒着跑: 不知道密钥就无法撤销密钥加法。而非线性的 S 盒加上十来轮,使得任何在没有密钥的情况下“解开”密码的尝试,都会撞上一个极其复杂的方程组。混淆隐藏了密钥与密文之间的关系;扩散把每个比特抹遍整个分组——两层反复叠加,就没有留下任何捷径,只剩下穷举密钥。

混淆与扩散这两个概念,早在 1949 年就由克劳德·香农提出:他建议用多次重复的简单代换和置换来构造强密码。1970 年代初 IBM 的 Lucifer 密码的早期版本就是按这个思路设计的;后来的 Lucifer 变成了费斯妥网络并演变为 DES,而 AES 又回到了最初的思想。

公开——但是谁的?

AES 的选定过程空前公开:1997 至 2000 年,美国标准机构(NIST)举办了一场国际竞赛——来自世界各地的 15 个密码,三年的公开分析,任何人都可以寻找弱点。获胜的是比利时人琼·达门和文森特·雷门的 Rijndael,2001 年它成为标准。这是一个诚实的过程,也是 AES 真正的长处。然而,算法的公开,并不等于信任选定它的人、以及把标准握在手里的人。

这种不信任有其历史根源。美国国家安全局(NSA)当年曾秘密改动过 DES 密码的 S 盒——后来才知道是为了抵御一种攻击,但二十年的保密埋下了猜疑。2013 年又爆出 Dual_EC_DRBG 事件——一个 NIST 标准的随机数生成器,NSA 似乎在其中留了后门。AES 本身并没有发现类似的东西——而且它的 S 盒是用一条公开的代数规则构造的,而不是“魔法”数字。但对一个国家来说,“大概是干净的”并不足以成为把自己的秘密托付给某个密码的理由。

由此便有了密码主权:自己的密码、自己的监管机构、由本国专家审计,以及不依赖他国标准。这并不一定意味着 AES 里有后门——而是说,国家安全不会建立在对他国机构的信任之上。

AES(美国,NIST)

民用互联网事实上的世界标准:几乎所有网页流量、Wi-Fi 和磁盘都用它加密。监管机构是美国的 NIST。

公开,却在他国掌控之下

Kuznyechik(俄罗斯)

俄罗斯标准 GOST R 34.12-2015——也和 AES 一样是 SP 网络:128 位分组,256 位密钥,9 轮外加最后一次密钥加法。监管机构是俄罗斯联邦安全局(FSB,TC 26)。

自己的密码,自己的监管机构

SM4(中国)

中国的国家密码(标准 GB/T 32907):分组和密钥均为 128 位,32 轮。在国内许多场景中是强制的,例如中国的 Wi-Fi(WAPI)。

中国的密码主权

而且不止如此:几乎每个大国都有自己的分组密码,而它们共有的,正是大多数现代算法所依赖的 SP 网络结构本身:

AES-128 AES-192 AES-256 KUZNYECHIK(GOST) SM4 Serpent Twofish Camellia
那俄罗斯呢? 俄罗斯有两种现代密码。“Kuznyechik”是一种 SP 网络,是 AES 的直系亲属。而“Magma”(前身是 GOST 28147-89)构造不同——它是一种费斯妥网络。两者都由现行 GOST 标准确定;它们的工作模式定义在 GOST R 34.13-2015 中。

亲手搭一个 AES

Ludus Lab 的交互式演示运行的是与真正的 AES 相同的运算,但作用在一个很小的 16 位分组上(2×2 矩阵,2 轮)——好让每一步都完整可见。你可以:

游戏的主要收获: 在 AES 中每一步都可逆,混合各列甚至是线性的——可是没有密钥,这个密码仍然是一堵看不穿的墙。它的强度,是由公开、重复、唯一的一个非线性 S 盒,以及密钥组装起来的。在 16 位上亲手走一遍,AES、Kuznyechik 以及几十种其他密码背后的原理就清楚了。
给好奇的人

AES 与 Kuznyechik 对比

这两种密码都是代换–置换网络,但历史和参数各不相同:

参数AESKuznyechik(GOST R 34.12-2015)
起源国家比利时 / 美国(标准)俄罗斯
采用年份20012015
结构SP 网络SP 网络
分组大小128 位128 位
密钥长度128 / 192 / 256 位256 位
轮数10 / 12 / 149 轮 + 最后一次密钥加法
如何选出公开的国际竞赛在监管机构主持下开发
监管机构NIST(美国)俄罗斯联邦安全局(FSB,TC 26)

为什么 AES 至今没被攻破

经过二十年公开分析,针对 AES-128 的最佳攻击(如“biclique”)只把搜索量降到约 2126 而非 2128——几乎没有收益。实际上这意味着:没有捷径,只剩穷举所有密钥,而那是不可能的。

即便是量子计算机也救不了攻击者:Grover 算法只能把强度“减半”,把 256 位密钥变成相当于 128 位。因此 AES-256 被认为连量子威胁也能抵御——它也正是长期保护所推荐的。

你每天都在哪里用到 AES

HTTPS 与互联网

地址栏里的小锁多半就是 AES-GCM:它在 TLS 中加密了几乎所有网页流量

Wi-Fi 与即时通讯

WPA2/WPA3 用 AES-CCM 保护你的网络;热门即时通讯应用的加密也建立在 AES 之上

磁盘与手机

BitLocker、FileVault 以及智能手机存储加密都使用 AES;处理器用 AES-NI 指令为它加速

有趣的事实

  • “Rijndael”这个名字由两位作者的姓氏拼成——Rijmen 和 Daemen;读音大致像“rain-dahl”
  • AES 的最后一轮没有 MixColumns:它是线性的、与密钥无关,所以完全可以从密文上剥掉——放在那里并不增加强度
  • S 盒是 AES 唯一的非线性部分,而且它的取值并非“魔法”:它们由一条公开规则得出(伽罗瓦域 GF(2⁸) 中的乘法逆元,再加一个仿射变换)。正因如此,AES 本身的透明度很难被质疑。
  • 密钥编排中的 Rcon 常数每一轮都不同——这样各轮就不会变得一模一样,也就不会给“滑动攻击”可乘之机
  • “Magma”(GOST)是费斯妥网络,而“Kuznyechik”是 SP 网络;有趣的是,Kuznyechik 的轮密钥恰恰是用费斯妥网络生成的
一个出人意料的结论: 公开且未被攻破,是必要条件,却不是充分条件。一个把秘密托付给密码的国家,不会依赖一份由另一个大国撰写并控制的标准。密码学中的信任,不只是数学,也是权力。Kuznyechik、SM4 以及其他密码之所以出现,正因如此:真正的问题不是“AES 里有没有秘密”,而是“写标准的那支笔握在谁手里”。

现在你既明白了 AES 如何工作,也明白了为什么它的公开并不能让它成为适合所有人的唯一密码:数学到此为止,信任与控制的问题从这里开始

在演示中,你将带着 16 个比特,从明文一路走到密文再回来——亲眼看看为什么没有密钥就跨不过这堵墙