Velcrypt 的工作原理:安全模型

更新于

  1. 你的图案 画在 5×5 点阵上。从不存储,从不发送到任何地方。
  2. PBKDF2-HMAC-SHA512 至少 600,000 次迭代,使用存放在 iOS 钥匙串中的每设备随机盐。
  3. 图案密钥(256 位) 只能解锁属于这个图案的保险箱。
  4. 保险箱主密钥 每个保险箱独有的随机 256 位密钥,由图案密钥保护。
  5. HKDF → 文件密钥 每个文件都有由主密钥派生的独立密钥。
  6. AES-256-GCM 通过 Apple CryptoKit 实现认证加密,文件另外启用 iOS 数据保护。
图案如何变成加密你文件的密钥。每一步都在你的 iPhone 上完成。

本页用通俗的语言说明:当你把照片、视频和文档放进 Velcrypt 后,它们会经历什么——以及保护在哪里止步。它写给那些在把私人内容交给 App 之前,想先弄清楚设计原理的人。

简要说明

Velcrypt 是一款 iPhone App,把私密文件存放在设备上的加密保险箱中。在 5×5 点阵上画出图案即可打开保险箱。这个图案不会被保存在任何地方,而是经过一个刻意放慢的密钥派生函数生成密钥,由这个密钥保护保险箱里的内容。

一切都在 iPhone 本机完成。Velcrypt 没有账户、没有服务器,也没有上传步骤,所以其他任何地方都不存在你的保险箱或密钥的副本。这是它的优势来源,也是它的主要局限:一旦忘记图案或丢失手机,保险箱就无法恢复。

从图案到密钥

图案

图案是一笔连续经过 25 个点中至少 6 个点的线,并且至少有一次方向变化。建议使用 8–12 个点的较长图案,因为每多一个点,攻击者需要尝试的可能图案数量就会成倍增加。关于各种方式的取舍,可以阅读图案锁、PIN 码和面容 ID 对比;图案锁本身如何工作,请看图案锁功能页。

使用每设备盐的 PBKDF2

画完图案后,Velcrypt 使用 PBKDF2-HMAC-SHA512、至少 600,000 次迭代,把点的顺序转换成密钥。PBKDF2 是一种密钥派生函数:一套刻意放慢、可重复的计算方法,把秘密(你的图案)变成加密密钥。慢正是它的目的。对你来说,派生一个密钥只需不到一秒;但想尝试数百万个图案的人,就得把这个代价付出数百万次。

派生过程还会混入一个盐——在你的设备上一次性生成、存放在 iOS 钥匙串中的随机值。由于盐是你这台 iPhone 独有的,即使两个人碰巧画了同一个图案,得到的密钥也完全不同,预先计算好的“常见图案 → 密钥”对照表也就毫无用处。

每个保险箱一个主密钥

每个保险箱都有自己的主密钥:创建保险箱时由系统安全随机数生成器产生的 256 个随机位。主密钥才是真正保护保险箱文件的密钥。它只以受保护(封装)的形式存储,由你的图案派生出的密钥加封。没有正确的图案,就无法解封主密钥。

这种分离很重要。主密钥是真正随机的,它的强度不取决于你的图案好不好记;同时,它也让同一部手机上的每个保险箱在密码学上彼此独立。

每个文件一个密钥

Velcrypt 使用 HKDF 从主密钥为每个文件派生单独的密钥。HKDF 是从一个强秘密派生多个独立密钥的标准函数。即使某个文件的密钥泄露,也不会暴露主密钥或其他文件的密钥。

文件如何加密

通过 Apple CryptoKit 实现 AES-256-GCM

每张照片、每段视频和每份文档都使用 AES-256-GCM 加密,采用 Apple 的 CryptoKit 框架,而不是自行编写的加密代码。AES-256-GCM 是认证加密:它既能保证内容机密,又能发现篡改。即使加密文件中只有一个位被改动,解密也会失败,而不会输出损坏或被操纵的数据。更深入的解释请看 AES-256 加密详解 和加密功能页。

iOS 数据保护作为第二层

在 Velcrypt 自身加密之上,保险箱文件在写入时还会启用 iOS 数据保护的完全保护级别。在这一级别下,iOS 用一个只在 iPhone 解锁时才可用的密钥加密这些文件。手机锁定时,连操作系统本身也无法读取它们。这一层由 Apple 提供,独立于 Velcrypt 的密钥,因此攻击者需要同时突破两层。

为什么未知图案会打开空保险箱

大多数 App 会把你的密码与某个存储的值进行比对——哈希、校验值或“正确答案”——然后提示密码错误。Velcrypt 刻意不这样做。

没有保险箱列表,也没有任何存储的值能确认某个图案是否“正确”。你画出图案后,Velcrypt 会派生密钥并尝试打开属于它的保险箱。如果没有匹配的保险箱,App 就会为这个图案打开一个新的空保险箱。对拿着手机的人来说,从未用过的图案和真实但为空的保险箱看起来完全一样。

这就为你提供了合理推诿:你可以可信地说“没有别的东西了”,因为 App 里没有任何东西能证明相反的情况。你可以设置一个放普通照片的诱饵保险箱,再用另一个保险箱存放真正私密的内容。隐藏保险箱页面以及我们关于诱饵保险箱和合理推诿的指南有更详细的介绍。

一个实际的副作用:如果你记错了图案中的一个点,你会进入一个空保险箱,而不是看到错误提示。这是有意设计,不是 bug。

锁定与 App 切换器

Velcrypt 进入后台后会在你设置的延迟时间后自动锁定。锁定时,保险箱密钥会从内存中清除,需要重新画出图案。保险箱内容在 iOS 的 App 切换器中也会被隐藏,别人扫一眼最近使用的 App,也看不到私密照片的缩略图。相关设置请看自动锁定。

Velcrypt 刻意不提供面容 ID 或触控 ID 解锁。脸和手指可能在你不同意的情况下被使用——比如你睡着时,或者在压力之下。图案只存在于你的记忆中。

不联网、无需账户、不备份

Velcrypt 完全离线运行。不需要注册、不需要邮箱地址,没有服务器,不上传保险箱内容,也不对你存放的内容收集任何分析数据。离线、无需账户页面列出了这在实际中意味着什么。

在首个版本中,保险箱数据还不包含在 iCloud 和电脑(访达)备份中。这样你的加密文件不会出现在 Apple 的服务器上,也不会出现在你同步过的任何电脑上,但这也带来一个实实在在的后果:如果 iPhone 丢失、损坏或被抹掉,保险箱也会随之消失。加密备份选项已在计划中,暂无日期。

威胁模型一览

威胁是否防护?说明
有人翻看你的“照片”图库是导入后从“照片”(包括“最近删除”)中删除的项目只存在于 Velcrypt 中。
有人拿起你已解锁的手机并打开 Velcrypt是他们需要你的图案;错误的图案只会显示一个空保险箱。
有人试图证明你还有更多保险箱基本可以没有保险箱列表,没有“图案错误”提示;App 中不显示保险箱数量。
已锁定的 iPhone 被盗是iOS 数据保护加上 Velcrypt 自身的 AES-256-GCM 加密。
从提取的文件中暴力破解图案被拖慢PBKDF2 至少 600,000 次迭代并使用每设备盐;图案越长越重要。
云账户被入侵是保险箱数据不上传,首个版本中也不包含在 iCloud 备份中。
篡改加密文件可检测AES-256-GCM 的认证机制会拒绝被修改的数据。
有人偷看你画图案否见下文。
恶意软件或越狱设备否见下文。
忘记图案或丢失手机否无法恢复。

Velcrypt 无法防护的情况

每种安全工具都有局限,在依赖 Velcrypt 之前,你应该了解它的局限。

  • 偷看。 如果有人当面或通过摄像头看到你画图案,他们就能打开那个保险箱。请在别人看不到的地方画,并考虑使用看起来不像简单字母或形状的图案。
  • 被迫解锁。 Velcrypt 无法阻止别人强迫你画出图案。诱饵保险箱会有所帮助;胁迫图案(即将推出,Premium)计划用于打开一个指定的保险箱,并悄悄移除其他保险箱的访问权限。
  • 保险箱打开时把手机交给别人。 保险箱解锁期间,拿着手机的任何人都能看到你看到的内容。把手机递给别人之前请先锁定。
  • 被入侵或越狱的设备以及恶意软件。 在被入侵的设备上,能读取屏幕、记录触摸或检查 App 内存的软件可以绕过任何 App 层面的加密。
  • 截屏或对屏幕拍照。 Velcrypt 无法阻止另一台相机拍摄你的屏幕。
  • 其他地方的副本。 导入会复制照片;原件会一直留在“照片”中,直到你删除它,删除后还会在“最近删除”中保留约 30 天。副本也可能存在于 iCloud 照片、聊天 App、电子邮件或别人的手机上。请按照导入后删除原图操作。
  • 丢失手机或忘记图案。 两者都意味着数据无法找回。没有恢复短语,也无法重置。请看忘记保险箱图案怎么办。
  • 被发现正在使用 Velcrypt。 App 图标是可见的,取证工具可能看出 Velcrypt 存有加密数据以及大致数据量。Velcrypt 不声称能隐藏这一点——它只隐藏保险箱的数量和内容。
  • 弱图案或容易猜到的图案。 短图案,或形状像 L、Z、正方形的图案,都更容易被猜中。可以用图案强度检测工具测试一个相似的形状——切勿输入你真实的图案。

独立审查

Velcrypt 依赖经过广泛研究的标准构件和 Apple 自己的加密库,而不是自创算法。即便如此,好的设计不等于经过验证的设计。Velcrypt 尚未经过独立审计。我们欢迎外部安全审查,如果有审查进行,我们会在这里公布结果。

术语表

  • AES-256-GCM 是一种对称加密模式,使用 256 位密钥并对数据进行认证,因此任何篡改都会在解密时被发现。
  • PBKDF2(基于密码的密钥派生函数 2)是一项标准,通过多次重复哈希函数,把密码或图案之类的秘密变成密钥,从而让猜测变慢。
  • 盐是在密钥派生之前与你的秘密组合的随机值,使同一个图案在不同设备上产生不同的密钥。
  • HKDF(基于 HMAC 的密钥派生函数)是从一个强密钥派生多个独立密钥的标准方法。
  • 主密钥是属于某个保险箱的随机 256 位密钥,保护该保险箱中所有文件的密钥。
  • 合理推诿是指 App 中没有任何东西能证明还存在其他保险箱,因此你可以可信地只展示一个保险箱,而不暴露其他保险箱。

常见问题

Velcrypt 能看到或恢复我的照片吗?

不能。Velcrypt 没有服务器、没有账户系统,也没有你的密钥副本。你的图案从不被存储,所以 Velcrypt 的任何人都无法打开、重置或恢复保险箱。

在 Velcrypt 中画错图案会怎样?

Velcrypt 从未见过的图案只会打开一个新的空保险箱。不会有错误提示,也没有任何信息告诉对方是否还存在其他保险箱。

Velcrypt 的加密和 iPhone 自带的加密一样吗?

不一样,它是在此基础上的额外一层。iOS 本身已加密设备,Velcrypt 也为其文件启用了最严格的 iOS 数据保护级别,但它还会用由保险箱图案派生的独立 AES-256-GCM 密钥加密每个文件,因此仅仅解锁手机并不能打开保险箱。

Velcrypt 经过独立审计了吗?

还没有。Velcrypt 基于 Apple 的 CryptoKit 和经过充分研究的标准算法构建,我们欢迎独立安全审查,但到目前为止尚未进行。

Velcrypt 能隐藏我在使用加密保险箱这件事吗?

不能完全隐藏。App 在主屏幕上可见,拥有取证工具的人可能看出 Velcrypt 存有加密数据以及大致的数据量。Velcrypt 隐藏的是你有多少个保险箱以及里面有什么。

Well Encrypted. Truly Private.

画出图案,打开私密保险箱。你的照片、视频和文档都加密保存在你的 iPhone 上,无需账户,不经过云端。

即将登陆 App Store

即将推出 iPhone 版(iOS 17 或更高版本)。提供免费版,可选 Premium 高级版。