暴力破解攻击
对任何加密密码可能进行的最基本攻击形式是暴力破解攻击,即尝试所有可能的密钥组合,直到找到正确的密钥为止。
Frontier(新窗口) 是世界上已知的最强大的超级计算机。 即使将其全部算力用于暴力破解 AES-128,穷举 AES-128 的所有可能组合仍需要大约 10 到 12 万亿年的时间。 这远比宇宙的年龄还要漫长。 因此,即使在较低的位数大小下,AES 也能高度抵御常规计算机的暴力破解攻击。
AES-256 的暴力破解难度是 AES-128 的 340 亿亿亿亿 (2¹²⁸) 倍。
尽管 Grover 算法(新窗口)在理论上使对称密钥抵御量子威胁的安全性减半,但它们仍具有相对较强的抗量子性,尤其是在使用 256 位密钥时。
密钥攻击
多年来,密码学家发表了许多针对 AES 密钥的理论攻击,但所有这些攻击在实践中要么行不通,要么仅对使用减少轮数的 AES 实现有效(见下文)。
其中最成功的尝试是 2011 年发表的理论双团攻击(新窗口),它可将暴力破解 AES 所需的时间减少到原来的四分之一。 然而,在任何当前或可预见的计算机硬件上暴力破解 AES 仍然需要数十亿年。
没有任何已知的密钥攻击对正确实现的 AES-128 或更高级别有效。
侧信道攻击
侧信道攻击试图通过从执行加密计算的计算机中寻找线索,来减少成功进行暴力破解攻击所需的组合数量。 可以通过检查以下内容来获取线索:
- 时间 - 计算机执行某项操作所需的时间
- 电磁泄露
- 声音提示
- 视觉线索(使用高分辨率摄像头获取)。
尤其是缓存时间攻击,已被证明在成功破解 AES 方面相当有效。 在最显著的例子中,研究人员在 2016 年仅使用“约 6 - 7 个纯文本或密文块(理论上甚至单个块就足够)”就成功恢复(新窗口)了 AES-128 密钥。
然而,可以采取许多措施来缓解侧信道攻击的威胁:
- 正确实施的 AES 可以防止数据泄露的途径。
- 集成 AES 指令集的硬件可进一步减少 AES 的侧信道攻击面。
- 可以使用随机化技术来打破受 AES 保护的数据与通过侧信道攻击可能收集到的任何泄露数据之间的关联。
在许多情况下,侧信道攻击要求攻击者在设备解密数据时极度靠近或物理访问该设备,尽管如果设备上安装了恶意软件,远程攻击也是可能的(尤其是在计时攻击的情况下)。
AES 的工作原理
AES 是一种分组密码,使用 128 位、192 位或 256 位密钥以 128 位块为单位加密和解密数据。 如前所述,加密和解密数据使用的是同一个密钥。 使用 128 位密钥的 AES 通常称为 AES-128,AES-192 和 AES-256 同理。

数据是通过多轮加密的,每一轮都包含一系列数学运算。
该过程首先使用 Rijndael 的密钥编排算法从原始密钥派生出一系列新的轮密钥。 这被称为密钥扩展。
随后,每一轮都包含以下一项或多项(或组合)操作:
1. 轮密钥加(Add Round Key):执行 XOR 运算(新窗口),将待加密的数据(密文)与每个轮密钥结合。

2. 字节代换(Sub Bytes):使用替换表进一步混淆数据。 原则上,可以将其想象为您小时候使用的简单替换密码,即将消息中的每个字母替换为字母表中其后固定位数的字母。

3. 行移位(Shift Rows):每个 128 位数据块由一个 16 位 4x4 块组成。 该操作将块中每行中的每个字节向左移动一定的偏移量。

4. 列混淆(Mix Columns):对块中的每一列执行额外的可逆线性变换。

这一系列变换构成一轮,然后根据密钥大小对数据重复特定轮数的变换:
- AES-128 — 10 轮
- AES-192 — 12 轮
- AES 256 — 14 轮
要解密数据,只需逆向执行用于加密的所有步骤即可。 这需要使用原始密钥,通过各个逆轮密钥来逆转这一过程。
为什么 AES-256 比 AES-192 或 AES-128 更受青睐?
鉴于当前和可预见的技术,暴力破解 AES-128 所需的时间比宇宙的年龄还要长。 传奇密码学家 Bruce Schneier 甚至提出(新窗口),AES-128 可能比 AES-256 更强大,这要归功于它拥有更强的密钥编排——即从原始密钥计算所有轮密钥的算法。
然而,AES-256 已成为对称密钥加密事实上的黄金标准。 它通常(尽管略有争议)被视为更强大的选择,因为其更大的密钥大小意味着额外的安全裕度,即使发现某种可以大幅削弱该算法的方法,已加密的数据也依然能够保持安全。 随着后量子抗性需求的日益紧迫,这一观点变得更加有力。
AES-CBC 与 AES-GCM
直到最近,AES 通常在密码块链接(CBC)模式下使用,在该模式下,每个纯文本块在加密前都会与前一个密文块进行异或(XOR)运算。 在 CBC 模式下使用时,需要诸如 HMAC-SHA256 之类的 HMAC(新窗口) 哈希算法来验证数据。
然而,越来越普遍的做法是在伽罗瓦/计数器(GCM)模式下使用 AES,该模式使用计数器模式(新窗口)进行加密。 其主要优势在于使用伽罗瓦域(新窗口)来验证数据,无需外部算法。 因此,它比使用可能带来高计算开销的单独身份验证算法更高效。
尽管采用 HMAC 身份验证的 AES-CBC 通常被认为是安全的,但 CBC 可能会受到诸如 POODLE(新窗口) 等填充攻击(新窗口)的影响。 GCM 则不然。
硬件加速 AES
大多数现代 CPU 都包含高级加密标准新指令(AES-NI(新窗口)),这是一组直接在处理器上执行 AES 操作的硬件指令。 这使 AES 运行速度更快,并且还有助于防止基于时间的侧信道攻击,因为相关操作是在处理器的安全执行单元内进行的,攻击者可利用的可观测时间变化更少。
Proton 与 AES
我们广泛使用 AES 来保护 Proton 产品的安全:
Proton Drive 使用 AES-256 对所有上传的文件进行端到端加密,并使用 ECC 进行密钥交换。 Proton Docs 和 Proton Sheets 也使用带有基于 ECC 的密钥交换的 AES-256,但它们的加密实现方式与 Proton Drive 的常规文件加密方案有所不同。
Proton Mail 通过 OpenPGP 标准使用 AES-256 存储电子邮件和附件。 即使是用于解锁您电子邮件的私钥,在存储到服务器之前也会使用 AES-256 进行加密。
Proton Meet 使用 Messaging Layer Security (MLS) 加密音频、视频和聊天消息,确保所有通信的前向安全性(PFS)和后妥协安全性(PCS)。 所有会议数据均使用 AES-256-GCM 进行端到端加密。
关于 AES 加密的常见问题
- 哪个更好:AES 还是 DES?
- 哪个更好:AES 还是 RSA?
- AES 的安全性有多高?




