AES-256 加密详解:对您的数据意味着什么
AES-256 详解:密码如何工作,256 位密钥为何重要,GCM 模式增加了什么,以及当应用声称使用 AES-256 加密时应检查什么。
什么是 AES-256?
AES-256 是一种对称分组密码:使用 256 位密钥运行的高级加密标准(AES)。同一把密钥既用于加密,也用于解密。它以 128 位为一个分组处理数据,共 14 轮,于 2001 年由 NIST 标准化为 FIPS 197。
这个名称叠加了三个事实。AES 是算法名称,由 NIST 于 2001 年从 Rijndael 方案中选定。256 是以位为单位的密钥长度,决定了暴力破解者必须尝试多少把密钥。GCM 或 CBC 这样的模式通常写在名称后面,例如 AES-256-GCM,它决定分组如何串联,以及是否检查密文遭到篡改。单说 AES-256,只告诉您密码算法和密钥长度,既不告诉您模式,也不告诉您谁持有密钥。
AES-256 是使用 256 位密钥的高级加密标准,于 2001 年由 NIST 标准化为 FIPS 197。这是美国政府用于机密信息、银行用于金融交易以及注重安全的 App 用于保护静态和传输数据的对称加密算法。AES-256 有 2^256 种可能的密钥——这个数字比可观测宇宙中估计的原子数量还要大。没有已知攻击能将这个密钥空间缩减到计算上可行的搜索范围。
本指南解释 AES-256 的实际工作原理、密钥大小为何重要、不同模式的含义(ECB、CBC、GCM),以及当应用声称使用 AES-256 加密时应检查什么。
AES 的实际工作原理
AES 是一种对称分组密码。“对称”意味着同一密钥加密和解密。“分组密码”意味着它以 128 位(16 字节)的固定大小块处理数据。
该算法获取您的数据(明文),将其与密钥组合,并通过一系列数学变换生成加扰输出(密文)。这些变换——替换、移位、混合和密钥加法——重复固定轮数。AES-256 使用 14 轮。
每轮应用四种操作:
- 字节替换(SubBytes):每个字节使用固定替换表(S 盒)替换,引入非线性。
- 行移位(ShiftRows):每行中的字节按不同偏移量移位,将数据分散到各位置。
- 列混淆(MixColumns):列通过有限域中的矩阵乘法混合,在字节间扩散变化。
- 轮密钥加(AddRoundKey):轮密钥(从主密钥派生)与数据进行 XOR。
经过 14 轮后,明文被彻底加扰。使用正确密钥逆转这些操作可以恢复原始数据。没有密钥,密文与随机噪声无法区分。
256 位为何重要
AES-256 中的"256"是指密钥长度:256 位。这决定了攻击者必须尝试多少种可能的密钥才能通过暴力破解。
| 密钥大小 | 可能的密钥数 | 暴力破解时间(每秒 1 万亿次猜测) |
|---|---|---|
| 56 位(DES) | 7.2 x 10^16 | 约 20 小时 |
| 128 位(AES-128) | 3.4 x 10^38 | 10^13 年(10 万亿年) |
| 256 位(AES-256) | 1.16 x 10^77 | 10^51 年 |
作为参考:宇宙大约有 1.38 x 10^10 年历史。即使每秒猜测万亿次,暴力破解 AES-256 所需时间也大约是宇宙年龄的 10^41 倍。
AES-128 本身已经在计算上无法暴力破解。AES-256 为未来的计算进步(包括量子计算)提供了额外裕度。Grover 量子算法(一种量子计算攻击)有效地将密钥长度减半——将 AES-256 降低到相当于针对量子攻击的 AES-128,这仍然不可行。AES-128 将被降低到 64 位有效安全性,这可能存在漏洞。这就是为什么安全关键 App 偏好 AES-256。
AES 模式:为何重要
AES 本身一次只加密一个 128 位块。对于真实数据(照片、文档、视频),您需要一种“操作模式”来处理大于 16 字节的数据。该模式决定了块如何链接在一起,并具有重要的安全影响。
ECB(电子密码本)——不要使用
每个块都使用相同的密钥独立加密。相同的明文块产生相同的密文块。这会泄漏数据中的模式。经典演示:使用 ECB 加密位图图像会在密文中保留图像结构,使内容可识别。ECB 包含在标准中,但绝不应用于具有结构或重复模式的数据(这几乎包括所有现实世界的数据)。
CBC(密码块链接)——遗留方式
每个块在加密之前先与前一个密文块进行 XOR。这消除了 ECB 的模式泄漏。CBC 曾是数十年的标准模式,但在大多数应用中已被 GCM 取代。CBC 需要随机初始化向量(IV),并且不提供内置身份验证(您无法检测密文是否被篡改)。
GCM(Galois/Counter 模式)——当前标准
GCM 将计数器模式加密与 Galois 域身份验证相结合。它提供认证加密:加密数据并生成一个身份验证标签,可以检测对密文的任何修改。如果单个位被更改,解密将失败而不是生成损坏的明文。
NIST 在 SP 800-38D(2007 年)中对 GCM 进行了标准化。它是新实现的推荐模式。
AES-256-GCM 是在 Galois/Counter 模式下使用 256 位密钥的 AES。这是安全关键 App 应使用的,也是 Vaultaire 用于加密照片和文件内容的方式。
| 模式 | 模式泄漏 | 身份验证 | 当前建议 |
|---|---|---|---|
| ECB | 是(严重) | 否 | 不要使用 |
| CBC | 否 | 否(需要单独的 MAC) | 遗留;配合 HMAC 可接受 |
| GCM | 否 | 是(内置) | 推荐用于新实现 |
AES-256 对照片存储意味着什么
当照片保险库应用声称“AES-256 加密”时,三件事应该是真实的:
文件内容使用 AES-256 加密。原始照片数据(像素、元数据、缩略图)使用 256 位密钥转换为密文。
每个文件使用唯一的初始化向量(IV)。如果使用相同密钥加密两张相同的照片,密文应该不同。这需要每个文件有唯一的 IV。没有它,统计分析可以揭示模式。
该模式提供身份验证(GCM 或等效方式)。没有身份验证,攻击者可以在不被检测的情况下修改密文。解密结果将是损坏的数据而不是错误。
营销页面上的"AES-256"没有告诉您什么
AES-256 是必要的,但不是充分的。几个关键因素决定了加密是否真正保护您的数据:
密钥派生很重要。 256 位密钥是怎么生成的?如果它用弱 KDF 从 4 位 PIN 派生,有效安全性就只有 4 位数字(10,000 种组合),而不是 256 位。可靠的实现会使用高迭代次数的 PBKDF2,或配置了合适内存和时间参数的 Argon2。Vaultaire 使用 PBKDF2 与 HMAC-SHA512,经过 600,000 次迭代,从所选的 5x5 图案和设备盐值派生本地保险库密钥。PBKDF2 让每次猜测的成本更高,但不会把图案的熵提高到 256 位。
密钥存储很重要。 密钥存放在哪里?如果密钥以明文形式存放在 App 沙盒中,能访问文件的恶意软件就可以读取它。Apple 的 Secure Enclave 支持特定的不可导出密钥操作,而不是任意由 App 提供的 AES 密钥。对称密钥设计可能改为依赖 Keychain 和数据保护,因此文档应写明具体的 API 和保护类别,而不是只说“硬件支持”。
什么被加密很重要。有些应用加密文件内容,但保留文件名、缩略图和元数据未加密。取证检查人员可能看不到您的照片,但他们可以在文件列表中看到"vacation-beach-2025.jpg"。全面加密会单独覆盖元数据。
密钥生命周期很重要。 解密后的密钥材料会保留多久?Vaultaire 在锁定或关闭时会清除活动保险库和主密钥状态,之后需要重新解锁。保险库打开期间,对称密钥字节必然存在于 App 内存中,而 Swift 和 iOS 无法让 App 证明每个临时副本都已被覆盖。
AES-256 的实际应用:谁在使用它
| 实体 | 使用场景 | 模式 |
|---|---|---|
| 美国政府(NSA) | 机密信息 | GCM(或带单独身份验证的 CTR) |
| Apple(iCloud ADP) | iCloud 端到端加密 | GCM |
| Signal | 消息加密 | CBC(配合 HMAC 进行身份验证) |
| 银行 | 金融交易加密 | GCM |
| 1Password | 密码保险库 | GCM |
| Vaultaire | 照片和文件保险库 | GCM |
| VeraCrypt | 磁盘加密 | XTS(针对磁盘块优化) |
常见误解
“军事级加密”没有具体含义。营销页面使用这个短语是因为它听起来令人印象深刻。AES-256 被军队使用。AES-128 也是。这个短语没有告诉您模式、密钥派生、密钥存储或实际加密的数据是什么。
“256 位加密”可能不意味着 AES-256。其他密码也使用 256 位密钥(ChaCha20、Twofish、Serpent)。检查指定了哪种算法。AES-256-GCM 是当前标准。
AES-256 不能防范弱密码。如果您的密码是"1234"且密钥派生很弱,无论密码强度如何,加密实际上只有 4 位安全性。链条在最薄弱的环节处断裂。
AES-256 不保护使用中的数据。当您查看照片时,必须在内存中解密。此时,它以明文形式存在于 RAM 中。正确的实现将此窗口最小化并及时清除解密的数据。
常见问题
AES-256 代表什么?
高级加密标准(Advanced Encryption Standard),使用 256 位密钥运行。AES 是 NIST 在选定 Rijndael 设计后,于 2001 年标准化为 FIPS 197 的密码算法。256 是以位为单位的密钥长度。AES-256-GCM 这样的后缀加上了工作模式,这是独立于密码算法和密钥长度的另一项选择。
AES-256 能被破解吗?
目前没有已知攻击能通过缩减完整密钥空间来破解 AES-256。已知的最佳攻击(Bogdanov、Khovratovich 和 Rechberger 于 2011 年发表的双变换攻击)将 AES-256 从 2^256 次操作减少到 2^254.4——这在实践中是一种无计算意义的理论改进。AES-256 至今未被破解。
AES-256 能抵抗量子计算攻击吗?
基本上可以。Grover 量子算法会让有效密钥长度减半:AES-256 面对量子攻击时相当于 128 位安全性。AES-128 则会降到 64 位有效安全性,可能存在风险。针对 AES-256 的 Grover 搜索仍需约 2^128 次运算,在实践中不可行。
AES-128 和 AES-256 有什么区别?
AES-128 使用 128 位密钥(10 轮)。AES-256 使用 256 位密钥(14 轮)。两者都被认为能抵抗当前的攻击。AES-256 为未来的进步,特别是量子计算,提供了更大的裕度。由于额外的轮数,AES-256 比 AES-128 慢约 40%,但硬件加速使现代设备上的这种差异可以忽略不计。
AES-256 加密会减慢我的手机速度吗?
正常使用时感觉不到。现代 Apple 处理器通过系统加密库为 AES 提供硬件加速。但这并不意味着 App 的 AES 操作在 Secure Enclave 内运行。耗时仍取决于文件大小、设备、存储和具体实现,因此安全声明应基于实测,而不是泛泛的毫秒数字。
我如何知道应用是否真正使用 AES-256?
请查看 App 的安全文档,而不只是营销页面。留意具体的算法和模式、密钥层级、派生参数、Keychain 或 Secure Enclave 的具体用法、随机数处理、恢复路径,以及元数据是否也被加密。开源代码和独立审计能让这些说法更容易验证。
总结
AES-256 是一种广泛使用的对称加密算法,由 NIST 标准化,目前没有已知的实用攻击;即使量子计算机运行 Grover 算法,仍需约 2^128 的计算量。在评估声称使用 AES-256 加密的应用时,请超越密码本身:检查模式(GCM)、密钥派生(高迭代次数的 PBKDF2/Argon2)、密钥存储(硬件支持)以及实际加密的数据(内容 + 元数据)。
Vaultaire 使用 AES-256-GCM 加密文件内容、文件头、元数据、索引和缩略图。PBKDF2 与 HMAC-SHA512 从图案和设备级 Keychain 盐值派生本地保险库密钥;该密钥再解包用于文件加密的随机主密钥。对称运算通过 CryptoKit 在 App 进程内执行,iOS Keychain 和数据保护则在设备锁定时保护恢复状态。完整的层级结构见安全模型。