本页面为机器翻译,仍在审校中。阅读英文版

安全

安全

用平实的话说明 VaultWell 如何保护你存放的内容。也包括它无法保护的部分,以及我们尚未完成的事。

从你的路径到加密文件这张图展示保险库是如何锁定的。你在蜂巢上划出的路径会经过 Argon2id 拉伸,使用 64 MiB 内存和两轮计算。结果再与手机安全硬件中保存的密钥结合:iPhone 上是 Secure Enclave,Android 上是 Android Keystore,可用时使用 StrongBox。两者共同生成保险库密钥,用来解锁保险库的主密钥。随后,各项内容以 1 MiB 为一块,用 AES-256-GCM 加密,每一块都经过认证,并且只保存在你的手机上。下方用文字写出了相同的步骤。 你的路径在蜂巢上划出八个或更多格 Argon2id64 MiB 内存两轮 (t=2) 结合只在这部手机上 保险库密钥解锁主密钥 AES-256-GCM1 MiB 分块每块都经认证 加密文件保存在你的手机上不会发送给我们 硬件密钥iPhone 上的 Secure EnclaveAndroid 上的 StrongBox(如可用) 从你的路径到加密文件这张图展示保险库是如何锁定的。你在蜂巢上划出的路径会经过 Argon2id 拉伸,使用 64 MiB 内存和两轮计算。结果再与手机安全硬件中保存的密钥结合:iPhone 上是 Secure Enclave,Android 上是 Android Keystore,可用时使用 StrongBox。两者共同生成保险库密钥,用来解锁保险库的主密钥。随后,各项内容以 1 MiB 为一块,用 AES-256-GCM 加密,每一块都经过认证,并且只保存在你的手机上。下方用文字写出了相同的步骤。 你的路径在蜂巢上划出八个或更多格 Argon2id64 MiB 内存两轮 (t=2) 结合只在这部手机上 硬件密钥iPhone 上的 Secure EnclaveAndroid 上的 StrongBox(如可用) 保险库密钥解锁主密钥 AES-256-GCM1 MiB 分块每块都经认证 加密文件保存在你的手机上不会发送给我们
每一步都在你的手机上完成。没有账户,也没有服务器。 阅读文字版步骤

我们防范谁、防范什么

VaultWell 针对的是日常的隐私威胁,也就是大多数人真正会遇到的那些。

  • 有人拿起你的手机。伴侣、亲戚、同事,或捡到手机的陌生人。没有路径,保险库就始终关着,即使他们知道你的手机密码也一样。
  • 有人逼你解锁。你可以打开一个日常保险库或胁迫保险库。屏幕上不会显示还有其他保险库存在。
  • 有人复制了 App 的文件。密钥与手机的安全硬件绑定,因此无法在高速计算机上进行猜测。
  • 有人篡改了存储的文件。每个加密片段都经过认证,因此改动会被检测出来,而不会被显示。

它并非为抵御以下攻击者而设计:已经在你手机上安装了恶意软件的人、看着你划出路径的人,或能强迫你说出所有路径的人。没有任何 App 能对此作出承诺。

加密如何运作

  1. 路径。你在蜂巢上划过的格子顺序(至少八格,不可重复)就是输入。
  2. Argon2id。该输入经 Argon2id 强化,使用 64 MiB 内存和两轮运算,因此每次猜测都要耗费实实在在的时间和内存。
  3. 硬件绑定。结果会与一个保存在 iPhone 的 Secure Enclave 或 Android Keystore(可用时为 StrongBox)中的密钥相结合。这个密钥无法导出,因此只有在你的手机上才能算出最终密钥。
  4. 主密钥。每个保险库都有一个随机的 256 位主密钥,只以经路径密钥加密的形式存储。
  5. 分块 AES-GCM。内容以 1 MiB 为一块,用 AES-256-GCM 加密。每一块都与其所属项目和位置绑定,因此一旦被交换、重排或截断就会校验失败。缩略图、项目列表和设置也都经过加密。

没有账户,也没有服务器。你的密钥从不离开你的手机,保险库中的任何内容都不会发送给我们。

隐藏保险库,以及检查者仍可能看到什么

在屏幕上,VaultWell 不会透露任何信息。锁定画面只有蜂巢。错误的路径和从未用过的路径看起来完全一样。没有保险库列表,也没有数量。每个保险库的设置文件都被填充到相同大小,因此从外部无法分辨一个保险库的选项,包括它是否为胁迫保险库。

在存储层面,我们想说得精确一些。每个保险库都存储为一个独立的加密文件夹。能够完全访问 App 原始文件的人,例如对已解锁手机进行取证提取,可以数出这些文件夹的数量,也能数出有几个保险库设置了恢复短语。他们无法打开它们,也看不到里面的内容,但可以推断出存在不止一个保险库。我们计划减少这一点,例如加入诱饵条目,有变化时会公布详情。

在屏幕上

不透露任何信息

  • 只显示蜂巢
  • 没有保险库列表,也没有数量
  • 错误的路径看起来就像从未用过的路径

在原始文件中,拥有完全访问权限时

可能被数出来的

  • 有多少个加密的保险库文件夹
  • 有多少个保险库设置了恢复短语

仍然无法读取的

  • 任何保险库里有什么
  • 哪个是胁迫保险库

胁迫保险库

当用路径打开胁迫保险库时,VaultWell 会先删除其他所有保险库的密钥文件及其恢复文件,然后移除这些保险库的文件夹。没有密钥文件,数据就无法解密。随后胁迫保险库会像其他保险库一样打开,屏幕上不显示任何提示。

  • 在手机上的抹除是永久性的,无法撤销。
  • 用恢复短语打开胁迫保险库不会抹除任何内容。
  • 存放在其他地方的备份和共享不受影响。

备份与共享

备份(.vwbackup)必须能在新手机上打开,因此无法使用旧手机的硬件。取而代之的是,每份备份都会用 Argon2id 根据你的路径(如已设置,还有短语)以及一个全新的随机盐值来锁住保险库的主密钥。项目保持与存储时完全相同的加密状态。备份的安全取决于路径或短语的强度,因此请妥善保管备份文件。

共享(.vwshare)使用一个全新的随机密钥,由单独的共享短语锁住。项目会被重新加密到其中,因此接收者永远不会得知你保险库的密钥。打开次数、到期和导出的限制由 App 执行,而不是由密码学保证,因为没有服务器。拿到短语且有心之人仍然可以复制他们看到的内容。

我们不作的声明

  • 尚未完成审计。我们计划在发布前进行一次独立安全审计,并会公布结果。
  • 并非隐形。即使使用伪装图标,App 在你的手机上仍然可见,而且取证检查可能显示存在多个保险库。
  • 在 iPhone 上无法完全防截屏。VaultWell 能防护屏幕捕获,但 iOS 不允许 App 阻止截屏;有截屏时 VaultWell 会告诉你。没有任何 App 能阻止别人对着屏幕拍照。
  • 我们无法替你恢复。如果你丢失了路径和短语,我们帮不上忙。我们从未拥有它们。

报告问题

如果你发现了安全问题,我们非常感谢你先私下告诉我们;如果你愿意,我们会注明你的贡献。联系方式将在发布前公布。