图案加密:绘制形状如何保护您的文件
您用手指画出一个图案。PBKDF2 把这个手势转成保险库密钥,再由它解锁另一个随机密钥,用 AES-256-GCM 保护您的文件。没有密码输入框,也没有短 PIN 码,只有您的图案和刻意分层的密钥结构。
Vaultaire 把您在 5×5 网格上画出的图形序列化,再用 PBKDF2-HMAC-SHA512、600,000 次迭代和存放在 iOS Keychain 中的设备级盐值处理。得到的 256 位结果就是保险库密钥:它加密保险库索引,并解包另一个随机主密钥,该主密钥用 AES-256-GCM 加密文件内容和元数据。
什么是图案加密?
大多数保险库 App 都靠 PIN 码或密码把关。输入四位数字,照片就出现了。听起来够安全,对吧?
问题在于:四位数 PIN 码只有 10,000 种组合,计算机一秒钟就能全部试完。六位数?一百万种组合,对现代硬件来说仍然很快。即使是八个字符的密码,如果只用小写字母,也只有约 2000 亿种可能。听起来很多,但一台普通笔记本电脑每秒就能测试数十亿次密码哈希。
图案加密的思路完全不同。您不是在输入框里打字,而是在点阵网格上画出几何图形。您画出的具体路径(触碰了哪些点、按什么顺序、形成什么形状)会成为基于密码的密钥派生函数的输入。结果不只是由界面检查:它必须能解锁经过认证的加密索引,以及索引中的随机主密钥。
这个区别很重要。在某些 App 里输入 PIN 码时,App 只检查您输入的号码对不对;对了就打开,而文件本身可能主要只靠访问控制保护。Vaultaire 则把绘制的图案输入 PBKDF2,派生出 256 位保险库密钥。该密钥必须先认证并解密保险库索引,才能解包用于文件的随机主密钥。无法识别的图案会显示为空保险库,但底层的 AES-GCM 认证仍能分辨密钥是对是错。
基于 PIN 码的访问控制就像挡在可读文件前面的一扇上锁的门。Vaultaire 的图案更像保险箱的密码组合:它派生出打开加密索引的密钥,索引再交出保护内容的另一把密钥。界面无法简单地绕过这条加密链。
分步了解工作原理
从手指触碰屏幕,到文件变得除您之外谁都无法读取,中间发生了这些事。
第 1 步:绘制图案
Vaultaire 会显示一个 5×5 的点阵网格。您画出一条连续路径,至少连接 6 个点,并至少转一次方向。App 会准确记录您经过了哪些点、按什么顺序经过。这个序列就是您的图案。
与 Android 锁屏常见的 3×3 网格不同,Vaultaire 使用 5×5 网格。这不是为了好看。二十五个点比九个点能组合出更多路径、交叉、跳点和转向。更大的理论空间有帮助,但实际安全性仍取决于您所选路径有多难预测。即使网格能表达数十亿种组合,常见字母或简单图形依然容易被猜到。
第 2 步:由图案派生保险库密钥
您绘制的图案会连同网格尺寸一起序列化,然后输入 PBKDF2 (基于密码的密钥派生函数 2),使用 HMAC-SHA512、600,000 次迭代和一个随机的设备级盐值。盐值不是秘密,它以 WhenUnlockedThisDeviceOnly 项的形式存放在 iOS Keychain 中。它让本地派生绑定到设备;它并非每个保险库各不相同,也不会给人为选择的图案增加熵。
密钥派生被刻意设计得很耗费计算。PBKDF2 对每个候选图案运行 600,000 次 HMAC-SHA512 迭代,提高了猜测攻击的成本。这并不能把低熵图案变成 256 位安全强度,攻击耗时也取决于攻击者的硬件。它的目标更具体、可以衡量:让每次猜测都比一次简单哈希更昂贵。
第 3 步:加密您的文件
首次创建保险库时,Vaultaire 会生成一个随机的 256 位主密钥。由图案派生的保险库密钥加密索引并包装该主密钥;它不直接加密每个文件。主密钥通过 AES-256-GCM 加密文件头、内容、缩略图和相关元数据。每次加密都使用新的 nonce,因此同一密钥下相同的明文不会产生相同的密文。
GCM 模式还多了一层重要保护:认证。它不只打乱您的数据,还会生成一个标签,用来发现任何篡改。加密文件哪怕只改动一位,解密也会失败。没有人能在您不知情的情况下篡改文件。
第 4 步:清除活动密钥状态
Vaultaire 锁定时,会清除活动的保险库密钥和主密钥状态,再次显示文件前需要重新解锁。保险库打开期间,这些对称密钥字节必然存在于 App 进程中,CryptoKit 才能执行 AES-GCM 操作。Vaultaire 还把恢复信息(包括图案和用短语加密的恢复信封)保存在 iOS Keychain 中一个经 AES-GCM 加密的数据库里。这与“图案和所有密钥副本都不存放在任何地方”的说法有本质区别。
背后的数学(通俗版)
不需要计算机科学学位,也能理解它为什么管用。安全性归结为三个数字:可能的图案有多少种、每次猜测要花多长时间、攻击者能猜多少次。
熵:不可预测性的度量
熵这个词听起来高深,意思其实就是“有多难猜”。抛硬币有 1 位熵(两种结果)。四位数 PIN 码约有 13 位熵(10,000 种结果)。在 5×5 网格上精心选择、连接 8 个或更多点的图案,熵可以超过 30 位,也就是超过 10 亿种可能的图案。
图案的熵决定了猜测攻击的上限。PBKDF2 无法凭空造出手势本身没有的熵,但会让测试每个候选图案的成本更高。
密钥派生:让每次猜测都付出代价
PBKDF2 对序列化后的图案运行 600,000 轮 HMAC-SHA512。估算攻击时必须用实测的单次猜测成本:如果每个完整候选正好耗时 1 毫秒,1,000,000,000 个候选需要 1,000,000 秒,单个计算单元约需 11.6 天。实测单次成本更高,时间就更长;并行硬件则会缩短时间。256 位的输出长度不会改变图案搜索空间的大小。
设备级盐值存放在 Keychain 中,其设计目的并不是保密。设备被扣押时,Keychain 和 iOS 数据保护可能让提取更困难,但密码分析必须假设拿到加密文件的检查者也可能拿到盐值。盐值能阻止跨设备的预计算,但不能替代一个强图案。
AES-256:公开且经过充分研究的标准
AES-256 是由 NIST 以 FIPS 197 发布的强标准密码算法。“256” 指的是密钥长度(以位为单位)。256 位密钥有 2256 个可能的值,多到无法暴力穷举。攻击者会转而攻击图案,这就是 Vaultaire 用 600,000 次 PBKDF2 迭代来加强它的原因。
AES-256 的安全性不依赖于算法保密。但整个系统并不只靠 AES 的密钥空间保护:实际的猜测边界来自图案的熵、PBKDF2 工作因子,以及对设备盐值和加密存储的保护。一旦正确的随机主密钥被解锁,AES-256-GCM 就提供强大的认证加密。
需要抵御哪些攻击
下面看看别人可能用哪些主要方式访问您的加密文件、Vaultaire 采取了哪些措施来提高成本,以及仍然存在哪些局限。
暴力破解:逐个尝试图案
PBKDF2 让每个候选图案都要付出 600,000 次 HMAC-SHA512 迭代的代价。这是一道有意义的防线,但不是“能撑多少年”的承诺:结果取决于图案选择、实测派生速度、并行程度,以及检查者是否拿到了设备盐值。更长、更难预测的路径很重要,因为 PBKDF2 只增加猜测成本,不会创造新的熵。
污迹攻击:从屏幕痕迹推断
在 3×3 网格上,屏幕上的污迹可以大幅缩小可能的图案范围。在 5×5 网格上,污迹只能显示哪些点被碰过,看不出顺序、方向和连接方式。组合数量急剧膨胀,这种方法就行不通了。
偷窥:在旁边看您画图案
在小小的手机屏幕上快速画出的图案,很难靠旁观记住,在 5×5 网格上更是如此。研究表明,与偷听别人念出的 PIN 码或密码相比,旁观者要复现复杂图案困难得多。
设备扣押:拿走您的手机
如果有人拿走了您的手机,在拿到所需密钥之前,Vaultaire 的文件内容和索引都仍是 AES-GCM 密文。App 不存储传统的密码校验记录,但离线验证依然可行:每个加密保险库索引的文件名包含保险库密钥的截断哈希值,而对候选密钥做 AES-GCM 认证解密也会给出成功或失败的结果。因此,设备保护和图案强度仍是威胁模型的一部分。
测试针对认证密文的猜测,并不需要单独的密码哈希。Vaultaire 的 AES-GCM 标签能给出高可信度的成功或失败结果,索引文件名则提供成本更低的初步检查。防线在于凭证的计算成本和不可预测性,加上 iOS 对本地材料的保护,而不在于没有验证手段。
选择一个强图案
加密的强度取决于您选的图案。下面教您如何花最少的力气获得最高的安全性。
强图案的特点
- 使用更多点。连接 25 个可用点中的至少 8 个。每多一个点,可能的图案数量就会成倍增加。
- 让路径交叉。折返、跳过点或出人意料地改变方向的图案,更难凭记忆或观察复现。
- 避开明显的形状。字母(L、Z、S)、简单的几何形状(正方形、三角形)和直线,都是攻击者最先尝试的。
- 用满整个网格。只停留在一个角落或沿一条边的图案,浪费了可用的熵。把路径铺开。
应当避免的做法
- 只满足最低长度的图案。 Vaultaire 要求至少 6 个点和一次转向,但满足最低要求并不代表路径难以预测。只要您能可靠记住,就多用一些网格,多转几次方向。
- 简单的几何形状。L 形、之字形或一条直对角线,相当于图案界的“password123”。
- 每次都从同一个角开始。对 Android 解锁图案的研究表明,大多数人从左上角的点开始画。攻击者也知道这一点。
最佳平衡点
连接 8–12 个点、转向好几次的图案更难被猜中,同时靠肌肉记忆您也能轻松记住。您不需要像记密码那样背它:您的手会记住这个动作,就像记住怎么签名一样。
为什么您可以放心
Vaultaire 的图案加密不只是更好看的密码键盘。手势由真正的密钥派生函数处理,并且必须解锁经过认证的加密数据。它的强度仍取决于您选的手势,所以 Vaultaire 把更大的网格和较高的 PBKDF2 工作因子结合起来,而不是把 256 位输出长度说成 256 位的人为秘密熵。
您的图案和本地保险库密钥不会发送给 Vaultaire。备份开启时(默认开启),CloudKit 记录用另一个由图案派生的备份密钥加密,加密的恢复清单则让恢复短语能够取回保险库密钥和备份密钥。Vaultaire 不持有能解密这些记录的服务商密钥,但设备和恢复凭证仍是设计中对安全至关重要的部分。
您画一个形状,这个形状保护您的文件,剩下的交给数学。
常见问题解答
如果我忘记了图案怎么办?
您创建保险库时,Vaultaire 会生成一个由九个词组成的自定义恢复句子。PBKDF2 由该句子派生出恢复密钥,用来打开装有保险库密钥的加密信封。如果图案和恢复短语您都丢了,Vaultaire 没有任何服务器端密钥可以恢复保险库。
图案真的比密码更安全吗?
在 5×5 网格上精心选择的图案,熵可以达到甚至超过一般密码。它的优势在于好用:人们选弱密码,是因为强密码难记。图案借助肌肉记忆,不用刻意背,也能自然地用上复杂的图案。
有人可以截图或记录我的图案吗?
Vaultaire 会尽力阻止对图案网格截屏,并在 iOS 报告正在录屏时作出响应。iOS 没有为任意 App 内容提供公开的安全屏幕标志,因此这些控制能减少意外截取,但不能保证挡住所有截取方式。
Vaultaire 使用什么加密算法?
Vaultaire 使用 600,000 次迭代的 PBKDF2-HMAC-SHA512,从图案和设备级 Keychain 盐值派生保险库密钥。该保险库密钥加密保险库索引,并包装随机的 256 位主密钥。AES-256-GCM 在主密钥下以认证加密保护文件内容、文件头、元数据和缩略图。
图案会存储在我的设备上吗?
Vaultaire 把恢复信息(包括图案)存放在 iOS Keychain 中一个经 AES-GCM 加密的恢复数据库里。图案不会发送给 Vaultaire,也不会存进明文文件。保险库打开时,密钥字节存在于 App 进程中;锁定会丢弃 Vaultaire 的活动密钥状态。
Vaultaire 可以访问我的加密文件吗?
Vaultaire 不运营任何会接收您的图案、恢复短语、解密密钥或可读保险库内容的服务。加密的 iCloud 备份保存在您的私有 CloudKit 数据库中。这道服务商边界无法在 App 构建、操作系统或设备被攻破时保护已打开的保险库。