用大白话讲清 AES-256 加密
几乎每个 App 都说自己用 AES-256。真正要紧的问题是:密钥放在哪里。
简要回答
AES 是 NIST 发布的加密标准,AES-256 是使用 256 位密钥的版本,可能的组合多到根本无法逐一尝试。GCM 是使用 AES 的一种模式,还能检测篡改。正因为算法如此强大,一个 App 真正的安全性取决于密钥管理:谁持有密钥、密钥存放在哪里、用什么解锁。
要点
- AES-256:NIST 标准,128 位分组,256 位密钥。
- GCM 增加了完整性校验:被篡改的数据无法解密。
- 强大的加密算法配上保管不善的密钥,什么也保护不了。
AES 是什么
AES,即高级加密标准(Advanced Encryption Standard),是美国国家标准与技术研究院(NIST)于 2000 年选定、在 FIPS 197 中规定的一种分组密码。它用一把秘密密钥,以 128 位为一组对数据进行变换。该标准定义了三个版本:AES-128、AES-192 和 AES-256,数字代表密钥的位数。
它无处不在,你的 iPhone 里也有:设置密码就会开启数据保护,用 256 位 AES 加密 iPhone 上的数据。
为什么 256 位绰绰有余
一把 256 位的密钥有 2²⁵⁶ 种可能的取值。把它们全部试一遍,不是电脑够不够快的问题,而是远远超出了任何实际可行的范围。正因如此,针对设计良好的系统的真实攻击,都是绕过加密算法而不是正面突破:目标是密钥、解锁密钥的密码,或者数据处于解密状态的时候。
GCM 增加了什么
单靠加密算法能隐藏数据,却无法告诉你数据是否被人改过。GCM,即伽罗瓦/计数器模式(Galois/Counter Mode),由 NIST 在 SP 800-38D 中规定,是一种认证加密:它在生成加密数据的同时还生成一个标签,如果数据或标签被篡改,解密就会失败,而不是返回损坏或被操纵的内容。
GCM 有一条严格的规则:每次加密开始时使用的值(称为 nonce 或 IV),在同一把密钥下绝不能重复。严谨的实现每次都会生成一个新的值。
密钥管理才是真正的问题
“AES-256”告诉你这把锁很结实,却没告诉你钥匙放在哪里。下面这些问题,更能说明一个 App 的情况:
- 谁持有密钥?如果公司能通过邮件重置你的访问权限,那么它自己,或者任何入侵它的人,都能接触到你的数据。
- 密钥存放在哪里?与数据存放在一起、或由一个短 PIN 码推导出来的密钥,就成了薄弱环节。
- 用什么解锁?由设备安全硬件和一个只有你知道的秘密共同保护的密钥,要难攻破得多。
- 如果你忘了秘密怎么办?诚实的答案是一把由你自己保管的恢复密钥,而不是一张客服工单。
每个文件
各自的 AES-256-GCM 密钥
保险箱密钥
封装每个文件密钥
Secure Enclave
由你的图案打开
Latent 如何运用它
Latent 用各自独立的 AES-256-GCM 密钥加密每个文件。这些密钥由保险箱密钥封装,而保险箱密钥又由你 iPhone 的 Secure Enclave 中的一把密钥保护,并由你的图案或密码解锁。保险箱锁定时,密钥会从内存中抹除。没有其他人持有副本:九个单词的恢复短语是唯一的备用钥匙,而且只有你拥有它。