AmberHush

AmberHush 如何保护你的照片

安全说法只有能被核实才有意义。这一页写明 AmberHush 加密了什么、钥匙在谁手里、保护到哪里为止,以及没有这个 App 时怎么把照片拿回来。

加密了什么

保险箱里的一切都存成 BGE v3 文件:照片、视频、实况照片的两部分、缩略图、相册名称、收藏,以及记录拍摄时间、位置和文件名的目录。每个文件都有自己随机生成的 AES-256-GCM 密钥,用来加密内容,也能发现内容是否被改动;这个密钥再用保险箱的 RSA-4096 公钥加密。

磁盘上不长期存放任何明文文件。放入时边读边加密,解密后的照片只在你查看时存在于内存里。只有两处短暂的例外:

  • 受限于 iOS 系统机制,实况照片的视频部分只能以临时文件形式提供。它会写入受保护的暂存目录,约 3 秒后封存并立即彻底删除。
  • 分享照片时,解密的副本交给系统分享面板,面板关闭就删除。

拿到这些文件副本的人仍然能看到:加密文件的数量和大小、每个文件带密钥编号的 BGE 文件头,以及备份的时间和总大小。

钥匙在谁手里

能解开保险箱的只有它的私钥,AmberHush 从不把它发到任何地方。在你的 iPhone 上,私钥以加密形式保存,有两种方式:

主密码模式面容 ID 模式
私钥由什么保护你的主密码,按 BGE 密码模式的规定用 PBKDF2 加固不少于 128 位的随机主密码,只存在这台 iPhone 的钥匙串里,不同步到 iCloud
平时解锁可以打开面容 ID,只认现在录入的面容面容 ID
iPhone 锁屏密码永远不接受作为后备方式接受

另外还有两种找回方式,都由你自己保管:

  • 恢复码:你自己保存的 28 个字符。它能重设忘记的主密码,也能在别的 iPhone 上打开你的备份。
  • 密钥文件:导出的私钥,用你设置的导出密码保护。

开发者不持有上述任何凭据。如果主密码与恢复码全部遗失,且未导出密钥文件,任何人都无法恢复你的照片。

安全相机

相机不需要私钥。每张照片拍下的那一刻就用保险箱的公钥加密,所以相机可以从锁屏或控制中心打开,不用先解锁保险箱。借用相机的人可以直接拍照存入,但无法查看保险箱中已有的任何照片。

照片封存前只在内存里;视频边录边以 1 MB 为单位加密。拍下的内容在下次解锁时经过校验,放进图库。

私密空间

每个私密空间有自己的密钥,用它自己的密码保护。主密码、面容 ID 和锁屏密码都不能打开、列出或删除它。它的名字存在它自己里面,所以只有打开后才会显示。

私密空间是“看不到”,而不是密码学意义上的“隐藏”:检查这些文件的人能看出存在加密的私密空间,只是看不到里面有什么。

备份

备份就是把加密文件和一份加密的文件清单,复制到你选的文件夹。整个过程不解密任何东西,每个文件写完后都会读回来核对。之后可以随时校验整份备份,或者在 App 里打开浏览。

备份只增不删:从保险箱里删掉的照片,仍会留在已经包含它的备份里。要彻底删除,也要删掉或替换这些备份。

包含在 iPhone 备份中默认关闭。打开后,加密的保险箱会成为 iPhone 备份的一部分,存进 iCloud 或电脑。

能防住什么

  • 拿到或捡到你的 iPhone、但没有你主密码的人(面容 ID 模式下,是不知道你锁屏密码的人)。
  • 复制了 App 文件、iPhone 备份或 AmberHush 备份的人:他们只拿到加密数据,只能离线猜你的主密码,所以请设一个足够强的主密码。面容 ID 模式的随机密码让猜测不可行。
  • 存放你备份的网盘或硬盘:它们只能看到加密文件。
  • AmberHush 不在了:格式公开规范,免费工具即可解密。

防不住什么

  • 面容 ID 模式下,知道你锁屏密码的人。
  • 受到他人胁迫解锁,或设备处于解锁状态时被他人直接操作。
  • 用另一台设备拍下你的屏幕。
  • 完全控制了 iOS 的恶意软件或攻击者。
  • 你自己分享或导出的副本。
  • iOS 的 App 隐私报告会记录 AmberHush 使用相机和麦克风的时间,但看不到拍了什么。
  • 所有找回凭据全部丢失:同时遗失主密码、恢复码和密钥文件,保险箱将无法打开。

AmberHush 还没有经过独立的安全审计。文件格式是公开的,任何人都可以检查它的设计。

不用 AmberHush 解密

每个文件都是标准的 BGE v3,见公开的格式规范。有备份和任意一种凭据,就能用免费的 bge 命令行工具(macOS 和 Linux)解开。App 里 设置 › 帮助 的“App 不在了怎么办”有同样的步骤,并附上你保险箱的密钥编号。

  1. 安装 bge:brew install --cask dotbge/tap/bge,或从 dotbge.com 下载。
  2. 从备份中取出私钥:
    • 用主密码:bge decrypt identity.password.bge -p,然后输入主密码。
    • 用恢复码:bge decrypt recovery.private.bge -p,按原样输入恢复码,再用得到的恢复私钥打开 identity.recovery.bge。
    • 用密钥文件:bge decrypt identity.private.bge -p,然后输入导出密码。
  3. 用私钥解密照片:bge decrypt <照片>.bge -k key.pem。哪个文件是哪张照片,写在备份的文件清单里(manifest.json 的 “list” 指向它),用同样的方法解开即可。

什么时候联网

AmberHush 没有服务器。它只在以下情况联网:

  • 购买或恢复 AmberHush Pro 时,连接 App Store;
  • 打开“地图与地点名称”后,用 Apple 地图显示照片的拍摄地点;
  • 你选的备份位置,例如 iCloud 云盘,由 iOS 负责上传。

详见隐私政策。