什么是零知识加密?简单指南
零知识加密意味着提供商无法访问您的数据。
零知识加密是一种以服务商为边界的架构:服务方不持有解密所存用户内容所需的密钥。标准云加密由服务商掌控内容密钥,而客户端加密可以把这一能力留在用户设备上。法律请求、数据泄露或内部人员仍可能暴露服务商留存的密文、账户记录、流量数据或其他元数据。NIST 的密钥管理指南把密钥保管视为访问控制的核心,但客户端 App、操作系统和已解锁的设备仍在信任边界之内。
零知识加密的工作原理
最简单的类比:酒店保险箱,只有您设置密码,酒店永远不知道它。如果您忘记密码,酒店无法为您打开保险箱。这不是设计上的缺陷。这就是设计。
从技术上讲,零知识加密通过三个步骤工作:
设备上的密钥派生。 用户提供凭证,例如密码、口令或图案。基于密码的密钥派生函数把它与盐值结合,在用户设备上生成密钥。分层清晰的设计会用这个密钥解锁一个随机的内容加密密钥,而不是直接用人设的凭证加密每个文件。
传输前加密。所有数据在离开设备进行云存储或备份之前,都使用派生密钥在设备上加密。加密输出(密文)是被上传的内容。
服务商收不到明文内容密钥。 内容密钥在使用时必须存在于客户端内存中,也可以存放在本地或远程的经过认证的加密信封内。服务商可以存储密文和经过包装的密钥,而不留存打开它们所需的用户秘密。账户、流量、记录大小和时间等元数据仍可能可见。
关键约束:如果用户丢失所有有效凭证和恢复途径,加密内容将无法访问。恢复机制仍可存在,但必须说明其密钥由谁保管。如果只靠电子邮件重置就能恢复可读内容,而不需要旧设备批准、恢复短语、恢复密钥或同等的用户自持秘密,那么服务商就保留了一条通往明文的实际路径。
零知识加密与其他类型的加密
「加密」这个词出现在几乎每个云服务的营销材料中。各类型之间的差异是实质性的。
| 类型 | 密钥持有者 | 提供商可以读取数据 | 能否在提供商泄露后存活 | 示例 |
|---|---|---|---|---|
| 无加密 | 不适用 | 是 | 否 | Dropbox(标准版) |
| 传输中加密(TLS) | 提供商 | 是(在其服务器上静态存储) | 否 | Google Photos |
| 服务器端静态加密 | 提供商 | 是(他们持有解密密钥) | 部分(取决于泄露范围) | iCloud(标准) |
| 平台端到端加密 | 客户端设备和账户恢复系统 | 无法通过正常服务路径 | 取决于客户端、恢复机制和元数据暴露 | 开启“高级数据保护”的 iCloud |
| 服务商不可见的客户端加密 | 客户端和用户控制的恢复路径 | 服务商不持有明文内容密钥 | 内容可保持加密;元数据和密文仍可能泄露 | 加密保险库和备份系统 |
「静态加密」和「零知识加密」之间的区别是最常被混淆的。有了静态加密,提供商使用他们控制的密钥在其服务器上加密您的数据。这防止了服务器硬件的物理盗窃。它不防止提供商读取您的数据、针对数据和密钥的政府传票或内部威胁。提供商拥有解密能力。
采用服务商不可见的客户端加密时,公开记录的协议不会把明文内容密钥交给服务方。所存密文对该服务商来说仍然不透明,但客户端软件、恢复途径、账户元数据和软件分发渠道仍需要信任和审查。
为什么零知识加密重要
数据泄露每年暴露数十亿条记录
身份盗窃资源中心报告称,2023 年美国发生了 3,205 起数据泄露事件,影响约 3.53 亿人。当服务商持有内容密钥时,一次泄露就可能同时暴露所存数据和解密这些数据的途径。服务商不可见的加密把两者分开:服务器被攻破仍可能暴露密文和元数据,但不会暴露服务商持有的明文内容密钥。凭证被猜中和客户端被攻破则是另外的风险。
法律强制是真实的威胁
服务商可能被要求披露其留存的数据。在服务商不可见的设计下,由于服务商不持有明文内容密钥,能交出的只有密文,以及现有的账户、流量、计费或服务元数据。对方能否获取用户凭证、攻破客户端或强制披露,是另一个问题。Apple 在 iOS 16.2 中推出“高级数据保护”,作为 iCloud 数据端到端加密的可选扩展。
「信任我们」不是安全架构
服务器端加密依赖服务商控制的密钥和策略。服务商不可见的加密改变了密钥保管方式,使公开记录的服务路径拿不到明文内容密钥。这是更强的架构边界,但它的效果仍取决于正确的客户端代码、经过认证的软件分发、可靠的恢复设计、安全的设备以及符合规范的实现。
密码学背后的 NIST 标准
AES-GCM 由美国国家标准与技术研究院在 SP 800-38D(2007)中标准化。AES 本身是由 NIST 在 2001 年通过公开竞赛选出的。AES-256 指的是 256 位密钥。对均匀随机的密钥做穷举搜索在计算上不可行,但即使密钥派生函数输出 256 位,人设的密码或图案提供的熵也可能少得多。
GCM(Galois/Counter Mode)添加了认证加密,意味着解密过程检测对密文的任何篡改。如果加密数据的单个位被改变,解密会失败而不是产生损坏的输出。这防止攻击者在未被检测的情况下操纵加密数据。
PBKDF2(基于密码的密钥导出函数2),在中指定 RFC 8018,通过重复的伪随机函数调用将人类提供的凭证转换为固定长度的密钥材料。更多的迭代会增加每次猜测的成本。它们不会向可预测的图案或密码添加熵,因此凭证选择和离线验证仍然很重要。
Vaultaire 如何实现服务商与密钥分离
Vaultaire 是一款适用于 iPhone 的客户端加密保险库。在常被宣传为“零知识”的产品语境下,它有据可查的说法更窄:Wraxle 收不到明文保险库内容,也收不到解密所需的密钥。下面逐层说明实现方式和剩余的信任边界。
密钥推导。 用户在 25 个点组成的 5x5 网格上绘制图案。PBKDF2-HMAC-SHA512 将该序列与一个设备级 Keychain 盐值结合,迭代 600,000 次,得到 256 位保险库密钥。保险库密钥认证加密索引,并包装另一个随机的 256 位主密钥。包括图案在内的恢复信息存放在经 AES-GCM 加密的 Keychain 数据库中,而不是明文文件或 Vaultaire 账户里。
文件加密。 每个导入的文件都用随机主密钥以 AES-256-GCM 加密。CryptoKit 用新的随机 nonce 创建经过认证的密封盒,流式格式则为每个有序数据块派生唯一的 nonce。
元数据加密。 文件名、MIME 类型、日期、索引记录和缩略图数据同样受 AES-256-GCM 保护。Vaultaire 不对保险库元数据使用 ChaCha20。
密钥管理。 Vaultaire 把设备盐值和加密恢复数据库存为普通的 iOS Keychain 通用密码项,访问级别为 WhenUnlockedThisDeviceOnly。由图案派生的保险库密钥和随机主密钥通过 CryptoKit 在 App 内存中处理。锁定会丢弃活动密钥状态,但 Swift 和 iOS 无法保证每个临时副本都被覆盖。
保险库发现。 正常界面不显示保险库列表。存储格式为每个保险库保留一个存储目录。因此,能访问 App 容器的人可以数出保险库数量,但目录名不会透露图案、名称或明文内容。请参阅完整的 安全架构 和 图案加密说明。
如何判断应用是否使用真正的零知识加密
从三个快速测试开始,然后验证已发布的架构:
忘记密码测试。 如果只靠电子邮件重置就能恢复可读数据,请问清楚是服务商持有的哪种机制恢复了有效的内容密钥。用户自持的恢复短语、旧设备批准和服务商控制的重置是不同的设计。
新设备测试。 如果新设备恢复出了可读内容,请弄清是哪个秘密或受信任设备授权了它。仅凭账户登录就能恢复,说明存在服务商控制的恢复路径;恢复短语加上加密备份记录,则能让服务商与密钥保持分离。
账户测试。 电子邮件地址或电话号码会把身份与服务元数据关联起来,但仅凭这一点不能证明服务商能解密内容。请检查密钥层次结构、恢复设计、客户端代码或审计、元数据策略,以及经过认证的密文是否允许离线验证凭证。
这些测试只是筛选手段,不是安全证明。一份严谨的规范应当写明内容密钥、解锁密钥、盐值、派生参数、认证加密格式、nonce 规则、恢复信封、本地秘密存储、云端元数据,以及明文密钥在哪些环节存在。独立审查比产品标签更有说服力。
常见问题
零知识加密与端到端加密相同吗?
它们有重叠,但不完全相同。端到端加密(E2EE)意味着数据在发送方设备上加密,仅在接收方设备上解密。零知识加密意味着提供商无法访问数据。如果提供商在某时点生成或访问过密钥,即使端到端加密,服务也可能不是零知识的。零知识加密是更严格的标准。
如果我在零知识加密下丢失了密码会怎样?
如果所有有效凭证和恢复信封都丢失,您的数据将永久无法访问。服务商控制的重置或主密钥会削弱服务商边界,因此恢复必须另行设计。 Vaultaire 会生成一个由九个词组成的自定义恢复短语,由它派生的恢复密钥可以打开加密的保险库密钥信封。该短语并不重新生成或编码密钥,在新设备上恢复还需要对应的加密 CloudKit 记录。
执法机构可以访问零知识加密数据吗?
服务商可能被要求披露所存的密文,以及其留存的账户、流量、计费或服务元数据。只要服务商不持有明文内容密钥,就无法通过正常服务路径解密内容。设备漏洞利用、凭证获取、恢复副本和强制披露是另外的途径,其合法性和有效性因司法管辖区和具体情况而异。
零知识加密比普通加密慢吗?
AES-256-GCM 的性能与谁持有密钥无关。基于密码的密钥派生会增加解锁时的计算量,耗时取决于算法、迭代次数、设备和实现。App 应在受支持的硬件上测量这一成本,在响应速度与每次离线猜测的代价之间取得平衡。
零知识是否意味着应用完全不收集任何数据?
未必。该术语涉及提供商的内容密钥边界,而不是每个数据流。App 仍可以处理账户数据、分析、崩溃报告、IP 地址、记录大小、时间或其他服务元数据。Vaultaire 不需要身份账户。其 App 分析和崩溃诊断默认启用,可以通过“设置”中的“匿名共享错误”关闭。记录的事件策略不包括保险库内容、图案、短语和解密密钥; 隐私政策描述了当前的收集和保留规则。
零知识加密与 Apple 的高级数据保护相比如何?
Apple 在 iOS 16.2 中推出的“高级数据保护”(ADP)把端到端加密扩展到更多 iCloud 类别,并采用 Apple 账户恢复模型。Vaultaire 在设备上加密保险库内容,不需要 Vaultaire 身份账户;默认开启的 iCloud 备份以及同步和共享,都使用存放在用户 Apple 账户中的客户端加密 CloudKit 记录。Vaultaire 还提供按图案隔离的保险库访问;其存储和恢复局限写在可否认性文档和胁迫模式页面中。
摘要
零知识加密最好理解为一种“服务商与密钥分离”的声明:服务方不持有解密所存内容所需的明文密钥。这比使用服务商控制密钥的服务器端加密更强,但并不意味着密钥只存在于内存中、元数据会消失,或者任何客户端和设备被攻破的情况都能防住。请根据产品的密钥层次结构、恢复设计、实现和独立审查来判断它。