Cryptile

Cryptile 安全架构:逐层说明

更新于

Cryptile 用 AES-256-GCM 加密每个文件、缩略图和索引,所用密钥由你画的图案在手机上生成。没有账户,没有服务器,开发者从不保管密钥。

在 App Store 获取 Cryptile

简明概要请看安全页面。

我需要知道什么?

  • 你的图案是所有密钥的来源。 没有它,就没有任何可读的内容被存储。
  • 大小和保险库数量被模糊处理。 文件经过填充,诱饵槽位隐藏了保险库的数量。
  • 你可以自己核查。 加密核心已公开供审计(源代码可查看),附有威胁模型和测试向量:github.com/jasonbrelsford/cryptile-core。

图案如何变成密钥?

  1. 图案被记录为网格尺寸,后面依次跟着你触碰的格点。
  2. 它与一个 32 字节的设备秘密混合,这个秘密保存在 iPhone 钥匙串中,只属于这台设备。
  3. 对它运行 600,000 次 PBKDF2-HMAC-SHA512。每一次猜测都要付出同样多的计算量。
  4. HKDF-SHA256 把结果拆分为一个查找密钥和一个封装密钥。
  5. 查找密钥决定保险库索引文件的名字。封装密钥用来打开它。

索引中存放着保险库随机生成的 256 位主密钥。HKDF 由它为文件、缩略图和索引分别派生子密钥。没有任何密钥被用于两种用途。

文件如何加密?

小项目,比如缩略图和索引,用 AES-256-GCM 和一个随机 nonce 整体封装。

大文件使用 STREAM 结构,按 1 MB 分块。每个块都有自己的 nonce,并记录自己的位置以及是否为最后一块。截断、重新排序或替换块都会导致解密失败。

GCM 还会认证每个文件头,所以被改动的文件会被拒绝,而不是被显示出来。

大小和保险库数量如何隐藏?

每个小数据块和每个文件的最后一块,都被填充到 64 KiB 的整数倍。复制文件的人只能看到大致大小,而不是准确大小。

没有保险库列表。应用始终保留至少 8 个形似索引的槽位,有真有假,并在每次写入时重新生成诱饵槽位。一个不对应任何槽位的图案会打开一个空保险库。

恢复如何运作?

每个保险库都有一个 9 个单词的恢复短语,相当于 96 位随机性。它打开保险库的一份独立恢复副本,这份副本用由恢复短语生成的密钥封装。

iCloud 备份按原样镜像加密后的文件。默认情况下备份中不含设备秘密,所以单凭备份无法用来猜测图案。

哪些被加密,哪些没有?

被加密的:照片、视频、文件、备忘录、缩略图、名称、文件夹、收藏、识别出的文字和照片位置。记录诱饵和免费方案计数的小文件用设备密钥封装。

Cryptile 不加密的:

  • 设置。 自动锁定时间、排序方式和备份开关不包含任何秘密。
  • 等待添加的共享项目。 在你打开保险库之前,它们受 iOS 文件保护。
  • 容器的总大小和写入时间。 10 GB 的保险库看起来不会像 10 MB。
  • 你导出的任何内容。 存到“照片”或“文件”的副本在保险库之外。

这能防范什么?

  • 没有你的钥匙串却复制了应用文件的人。 他们拿到的是密文,也无法尝试图案。
  • Apple,或 Apple 发生的数据泄露。 iCloud 中存放的是密文,没有密钥。
  • 篡改。 被改动或重新排序的数据无法解密。
  • 我们。 我们不运行服务器,也不保管密钥,所以无法重置访问权限。

这不能防范什么?

  • 短图案。 图案比口令更弱。如果有人拿到你的文件和钥匙串,4×4 网格上的 6 格图案用 GPU 几分钟就能破解。请使用 8 个或更多格点。
  • 已解锁手机上的恶意软件。 保险库打开时读取内存的代码,任何应用都无能为力。
  • 看着你画图案的人。 请在没人能看到你的手的地方画。
  • 同时丢失手机和恢复短语。 保险库就无法找回。没有重置功能。

Plus 中的紧急图案会销毁设备秘密,因此在恢复之前,手机上的任何保险库都无法打开。

在 App Store 获取 Cryptile