硬件安全密钥不用存记录?SLIP-0022 凭证标识的加密打包格式 图 1
硬件安全密钥不用存记录?SLIP-0022 凭证标识的加密打包格式 · 图 1

注册记录放在谁手里

Passkey 与硬件安全密钥的日常体验是”注册一次、以后只按一次”,背后的机制可先读Passkey钱包安全吗?和助记词区别。这里有个常被忽略的工程问题:设备替你在成千上万个网站各注册了一把密钥,注册关系记在哪?最省事的路子是设备干脆不记——注册时设备把全部凭证数据加密成一串叫 credential ID 的东西,交给网站保管;下次登录网站把这串原样送回,设备解密取回内部数据再验签。这种”近乎无状态”的做法此前没有统一格式,各家自拼。SLIP-0022 由 Kozlik、Rusnak 与 Vejpustek 在 2019 年 7 月 19 日提出,官方状态 Final,给 HD 钱包类设备(从一颗主秘密派生一切密钥的形态)定义了这串东西的拆装规则,也兼容旧的 U2F key handle。

硬件安全密钥不用存记录?SLIP-0022 凭证标识的加密打包格式 图 2
硬件安全密钥不用存记录?SLIP-0022 凭证标识的加密打包格式 · 图 2

四段式外壳

一条 SLIP-0022 credential ID 是长度在三十三到六万五千五百三十五字节之间的字节串,由四段拼接:四字节版本、十二字节初始向量、变长加密凭证数据、十六字节认证标签。版本段的取值即格式身份证——FIDO2 用字节序列 f1 d0 02 00,U2F 用 f1 d0 01 01;初始向量每个新凭证随机生成,供 Chacha20Poly1305 流加密使用;最后十六字节的 Poly1305 认证标签承担完整性校验:设备只承认能用自己的加密密钥解开并通过认证校验的标识串。这层设计正是”无状态”的安全底座——网站篡改或伪造一串 credential ID,解密当场失败,设备无须保留任何黑名单。加密密钥本身对同一版本、同一主秘密的全部凭证复用,由 SLIP-0021 对称密钥派生法从主秘密导出。

CBOR 字典里的九个字段

解密出来的凭证数据是一张 CBOR 字典(major type 5,定长编码,且必须按 FIDO CTAP v2.0 规范第 6 节的 canonical 形式),键是整数。必选项在 FIDO2 场景有三件:键 1 的 rpId(依赖方标识,即注册请求里 rp 的 id)、键 3 的 userId、键 6 的 creationTime(用于按注册时间排序凭证的任意可排序值)。可选项覆盖 rpName、userName、userDisplayName、hmacSecret 布尔位(默认 false)与 useSignCount 布尔位(FIDO2 默认 false,U2F 不出现)——后者决定签名计数器策略:置 false 时该凭证所有断言的计数值恒为零,置 true 时每次成功认证计数递增。算法两项按条件必选:键 9 algorithm 与键 10 curve,缺省即 COSE 标识 -7 的 ES256 加曲线 1 的 P-256。字典内容与注册请求参数一一对应,因此规范把它们逐键映射回了 authenticatorMakeCredential 的字段。

从认证标签反推密钥路径

解密归解密,签名密钥另有派生轨道。credential 密钥对用 SLIP-0010 体系从主秘密派生,路径由认证标签切出的四个四字节值 A、B、C、D 组成:各自按大端读成 32 位整数、把最高位置起,拼成 m/10022’/version’/A’/B’/C’/D’——其中 version 就是 credential ID 前四字节按大端读出的整数,FIDO2 情形即 0xf1d00200。这个安排让”同一条 credential ID 唯一钉死一条派生路径”:设备收到任何一条合法标识,不查表就能重算出对应私钥,密钥候选空间与注册数量无关,恢复出厂后只要主秘密还在,整台设备的全部凭证密钥都能重新算出来。 hmac-secret 扩展用到的 CredRandom 则回到 SLIP-0021 对称轨道按凭证派生,两条轨道互不越界。

与 SLIP-0013 的分工

顺带澄清一句易混点:同为 SatoshiLabs 系的用硬件钱包登录网站是什么原理?SLIP-0013 服务身份与签名登录拆解(SLIP-0013)处理的是”用钱包派生密钥登录网站”的认证场景,凭据身份是网站 URI 加索引;SLIP-0022 处理的则是 FIDO2 协议里设备回传给网站保管的那段不透明字节,二者可在同一台设备上共存但互不相关——前者用户可凭种子心算复现身份密钥,后者依赖带版本与认证标签的密文外壳。

用户视角的意义与边界

对用户来说,这套格式的实际意义有三层。第一,它让”换设备恢复”有了确定性答案:只要主秘密恢复,历史上注册过的 passkey 都能凭各网站的 credential ID 重新解开,无须逐站重注册。第二,它提醒你网站确实保管了你的注册数据——这份托管是格式设计的一部分,不是隐私事故,但网站也因此能把该标识用作稳定追踪值。第三,看到某硬件产品宣称”passkey 可迁移可备份”时,可以追问它用的是哪种格式与恢复路径:是 SLIP-0022 这类种子派生,还是厂商云的加密包——后者的可恢复性取决于厂商而不是你的助记词。最后说明:SLIP-0022 只规范标识符格式,不担保任何交易、资产或账户安全;本文不构成投资与产品购买建议,涉及协议细节以 FIDO 联盟与 satoshilabs 仓库当前文本为准。