Cap 是如何工作的?
顺带一提,本页介绍 Cap 的 SHA-256 与 instrumentation(浏览器环境检测)质询的工作原理,内容偏技术细节,不涉及 RSW 时间锁。更宏观的概览见有效性页面。
- Cap 初始化时,会自动在浏览器中为验证组件注册一个自定义元素
- 验证组件创建一个 shadow DOM,并把所有必要的元素追加进去
请求质询
当需要求解时,验证组件向服务端发送请求。服务端会返回一个令牌、待求解质询的配置,以及可选的压缩过的 instrumentation 数据。
随后验证组件使用固定的种子(即质询令牌)和服务端提供的配置生成多个质询。如果提供了 instrumentation 数据,则会解压并在沙箱化的 iframe 中执行求解。
计算解
验证组件使用 Rust 编写的 WASM 和 Web Worker 并行求解质询:
- 每个 worker 通过重复以下步骤来寻找有效的 nonce:
- 将盐与不同的 nonce 值组合
- 计算该组合的 SHA-256 哈希
- 检查所得哈希是否以目标前缀开头
- WASM 不断递增 nonce,直到找到匹配的哈希
- 每个 worker 通过重复以下步骤来寻找有效的 nonce:
如果存在 instrumentation 质询,则将其解压并执行。
用解兑换令牌
- 找到有效解后,验证组件把结果发回服务端进行校验。
- 服务端也用同样的令牌和配置生成相同的质询,并核验验证组件提交的解。
- 校验成功后,服务端兑换该解并签发一个令牌,用于为请求鉴权。
