✨ 要点🔬 技术摘要
想象一下,你有一个数字保险箱(“库”),用来存放你最重要的秘密,比如密码或私人笔记。通常,要打开这个保险箱,你需要一把主钥匙(密码)。但如果通过你的脸、指纹或物理安全密钥就能打开它呢?而且,如果黑客即使偷走了你保险箱的内容副本,如果没有你特定的生物识别密钥,他们仍然无法读取其中的任何一个字,那会怎样?
Ian Pinto 的这篇论文描述了一种构建这种超安全数字保险箱的新方法,适用于 Web 浏览器。它结合了几个高科技概念,构建了一个“零知识”(zero-knowledge)系统——这意味着服务器或存储系统对里面的内容一无所知,甚至连打开它的密钥也不知道。
以下是其工作原理的拆解,分为几个简单的部分:
1. 魔法密钥:WebAuthn PRF
把你的通行密钥(passkey,即你用来登录的那个工具)不仅看作是一个“是/否”的门卫,而是一个秘密配方生成器 。
旧方式: 你证明了你是你,然后系统说“访问允许”。
新方式 (PRF): 当你证明了身份时,你的设备会在内部秘密运行一个复杂的数学配方(称为伪随机函数或 PRF),并使用一个特殊的“盐”(随机成分)。这个配方会产生一个独特的、高质量的“秘密酱汁”(一个 32 字节的代码),只有你的特定设备知道如何制作。
关键点: 这个秘密酱汁是在你的设备安全芯片内创建的。它永远不会离开设备,也不会保存在硬盘上。它只存在于一瞬间,足够长的时间来解锁你的保险箱,然后立即被清除干净。
2. 锁具:包裹库密钥
你的保险箱有一个主密钥(我们称之为 Key K ),它实际上负责锁定数据。
系统将来自通行密钥的那个转瞬即逝的“秘密酱汁”用于将 Key K 包裹在一个数字信封(加密)中。
一旦被包裹,Key K 就会被锁在这个信封里。系统将这个信封保存到你的浏览器存储(IndexedDB)中。
至关重要的一点: 系统绝不会 保存秘密酱汁或未被包裹的 Key K 。它只保存这个被锁定的信封。如果黑客窃取了存储内容,他们拿到的只是一个没有钥匙的锁着的盒子。
3. 安全屋:IndexedDB 存储
该论文提议了一种在浏览器存储(IndexedDB,类似于数字文件柜)中组织这些数据的特定方式。
文件系统: 系统创建了三个特定的文件夹:
保险箱 (The Vaults): 存放被锁定的信封(被包裹的密钥)的地方。
凭据 (The Credentials): 你的通行密钥列表及其“序列号”(以确保没有人使用伪造的密钥副本)。
元数据 (The Meta): 应用的通用笔记。
零知识保证: 论文认为,由于存储中仅包含被锁定的信封和公开的元数据,因此窃取了整个文件柜的窃贼无法重建密钥。他们会被困在那个只有锁着的盒子而没有钥匙的状态。
4. 备份计划:“密码回退机制”
如果你的浏览器不支持这种高级的“秘密酱汁”功能(例如在某些安卓平板电脑上)该怎么办?
系统有一个名为 pw-v1 的备份计划。它不使用通行密钥的秘密酱汁,而是使用基于你输入的传统密码的非常缓慢且沉重的数学难题(scrypt)。
这虽然更慢、更不方便,但它能确保即使在没有这种高级硬件功能的情况下,你仍能打开你的保险箱。这就像是在生物识别扫描仪旁边安装了一个物理钥匙孔。
5. 安全检查:防止重放攻击
论文强调了一个“重放检查”。
想象一下,一名窃贼记录了你的“解锁”信号,并试图在稍后播放该信号以打开保险箱。
系统维护着一个计数器(类似于汽车的里程表)。每次你解锁保险箱时,计数器就会增加。如果系统看到一个带有旧计数器数值的信号,它就知道这是一个录制信号并会拒绝它。
注: 论文承认这并非对所有设备都完美适用(某些同步的通行密钥不会更新计数器),但它增加了一层防御。
6. 本论文“没有”做的事情
作者非常谨慎地说明了该系统没有 防御的内容:
它不能防御你电脑上的病毒。 如果黑客已经在你的浏览器内部监视你输入,他们可以在你使用密钥时将其窃取。这个系统只保护“静止状态”下的数据(即数据躺在存储中时)。
它不能防御“侧信道”泄露。 如果应用在锁定前对数据进行了压缩,或者如果锁定的盒子大小会根据你的密码长度而变化,那么聪明的黑客可能会通过测量盒子的大小来猜测其中的内容。论文警告开发者要对数据进行填充(padding)(使所有盒子大小一致),以防止这种情况。
总结
这篇论文提供了一个蓝图,用于构建一个基于 Web 的密码库,该库在数学上被证明 是无法被阅读的,除非拥有你特定的物理通行密钥。它利用你的通行密钥生成一个临时的、一次性的代码来锁定你的数据,确保该代码永远不会被保存,并组织存储方式,使得即使数据库被整体窃取,也只会得到锁定的盒子。这是一个“零知识”系统,存储提供商(或黑客)对你的秘密一无所知。
技术摘要:基于 WebAuthn PRF 的保险库密钥封装与零知识 PWA 存储架构
问题陈述 本文解决了在渐进式 Web 应用(PWA)中实现稳健的零知识凭据保险库所面临的挑战。虽然 WebAuthn 和通行密钥(passkeys)提供了强大的公钥认证,但它们传统上并不向 Web 应用程序暴露高熵对称密钥,用于加密用户数据。现有的解决方案通常依赖于服务端信任或主密码,这可能容易受到离线攻击的影响,或者需要复杂的信任模型。具体问题在于:如何利用 WebAuthn PRF(伪随机函数)扩展,从通行密钥凭据中安全地导出对称加密密钥,封装保险库密钥,并将生成的状态存储在浏览器存储(IndexedDB)中,使得持久化数据在没有身份验证器进行实时认证仪式的情况下,无法泄露任何关于用户秘密的信息。
方法论 所提议的架构结合了 WebAuthn PRF 扩展、对称密码学以及精心设计的 IndexedDB 存储模式。
密钥封装方案:
注册(Enrollment): 在注册期间,应用程序使用一个唯一的、随机的 32 字节盐值(salt),请求身份验证器提供一个 32 字节的 PRF 输出。该输出作为 HKDF-SHA256 的输入密钥材料(IKM)。
导出(Derivation): HKDF 使用冻结且带有版本标识的领域分离标签("webauthn-prf-zktv vault key wrap v1")以及空盐值,来导出不可提取的 AES-256-GCM 封装密钥(K w K_w K w )。
加密(Encryption): 保险库密钥(K v K_v K v )使用 K w K_w K w 和一个新的 96 位随机数(nonce)进行加密。
存储(Storage): 仅持久化存储生成的 WrappedSecretRecord。该记录包含方案标识符(prf-v1)、密文、随机数和 PRF 盐值。至关重要的是,PRF 输出和导出的封装密钥永远不会被存储;它们在完成使用后立即在内存中归零(zeroized)。
回退机制(Fallback): 对于不支持 PRF 的客户端(例如 Android WebView),提供了一种 pw-v1 方案。该方案使用来自用户密码的内存硬化 scrypt 导出(具有固定的高成本参数)代替 PRF,同时保持相同的记录结构。
解封装与验证:
重放保护(Replay Protection): 解封装过程包含一个强制性的重放验证步骤。应用程序会重新评估带有存储盐值的 PRF,并验证客户端数据(挑战值、来源)以及签名计数器。计数器必须严格递增(除非其为零,这是同步通行密钥的已知行为),以防止重放攻击。
错误处理: 系统设计为具有通用的失败模式。解密失败(由于错误的密钥或篡改)会抛出通用的 DecryptError,该错误不会区分是由于错误的密钥还是数据损坏引起的,从而防止侧信道泄露。
存储架构 (IndexedDB):
该库(webauthn-prf-zktv)定义了一个包含三个对象存储(object stores)的模式:vaults、credentials 和 meta。
vaults 存储使用复合主键 [vaultId, scheme],允许单个保险库同时持有 prf-v1 记录和 pw-v1 回退记录。
credentials 存储持有非敏感元数据,包括最后一次验证的签名计数器和 PRF 盐值,但绝不持有密钥本身。
该模式在每次加载时都会强制执行结构不变性(例如 nonce 长度、盐值大小),以确保数据完整性。
核心贡献 本文形式化地提供了一个开源实现,涵盖以下内容:
基于 PRF 的保险库密钥封装方案: 一种利用 WebAuthn PRF 输出作为根信任来导出对称封装密钥的方法,并利用具有严格领域分离的 HKDF。
零知识 IndexedDB 模式: 一种存储模式,其持久化的状态不包含可重计算的密钥输入。存储数据的安全性完全依赖于身份验证器内部密钥的机密性。
webauthn-prf-zktv 库: 一个可重用的、类型化的 TypeScript 库,它封装了密码学逻辑、存储管理以及迁移路径(包括针对旧版 TrustVault-PWA 记录的一次性适配器)。
客户端重放验证: 将签名计数器检查和挑战/来源验证直接集成到保险库解锁算法中,这是通用 PRF 辅助库经常忽略的功能。
结果与评估 本文从三个维度对架构进行了评估:
安全性: 零知识论证指出,如果没有身份验证器,存储的密文在计算上是无用的。该方案依赖于身份验证器 PRF 的伪随机性、HKDF-SHA256 的安全性以及 AES-256-GCM 的 IND-CPA/INT-CTXT 安全性。论文指出,虽然对称层是后量子安全的(AES-256),但非对称认证层在面对量子攻击时仍然脆弱,尽管这不会损害存储的保险库密钥的机密性。
性能: 解锁延迟主要受限于身份验证器所需的身份验证手势。密码学操作(HKDF 导出和 32 字节载荷的 AES-GCM 解密)的开销可以忽略不计。密码回退方案(scrypt)被有意设计得非常昂贵,以阻吓离线攻击,但这可能会在低端移动设备上造成延迟。
可用性与鲁棒性: 系统通过 pw-v1 回退机制支持平滑降级(针对不支持的客户端)。系统采用“尽力而为”的方法处理克隆凭据检测(处理同步通行密钥的零计数器边缘情况),并确保部分失败(例如计数器更新期间的崩溃)不会导致用户永久锁定,在这些边缘情况下优先考虑可用性而非严格的重放保护。
意义与主张 本文声称提供了一个形式化的、生产就绪的模式,用于在现代通行密钥技术下实现 Web 应用中的零知识存储。其意义在于:
移除服务端信任: 它将机密性边界完全转移到了客户端,确保即使服务器或同步备份遭到破坏,只要身份验证器未被破解,用户的秘密依然安全。
模式标准化: 通过定义冻结的 v1 格式和特定的领域分离标签,防止了因算法变更导致的记录静默失效,并为未来的版本(例如 prf-v2)提供了清晰的迁移路径。
整体安全性: 它在应用层指导中明确解决了非密码学泄露向量(如预加密压缩和记录大小相关性),承认如果应用层泄露元数据,则仅靠存储层本身无法保证零知识。
作者强调,该库是一个工具,旨在帮助开发者采用这些模式,而无需重新推导实现安全客户端保险库所需的复杂密钥卫生(key-hygiene)和存储规范。
每周获取最佳 computer science 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。