Things I learnt about passkeys when building passkeybot
5 months ago
- #security
- #authentication
- #passkeys
- 苹果设备中的安全飞地处理器(SEP)能安全创建和存储密钥,需通过生物识别/密码进行验证
- 用户存在性(UP)与用户验证(UV)的区别:UP只需点击按钮,UV需重新验证生物识别/密码
- 认证器是存储密钥对并签署质询的硬件/软件,浏览器会统一不同认证器的API接口
- 凭证认证可证明创建通行密钥的硬件,但可能被用于设备追踪,苹果默认禁用此功能
- 通行密钥仅用于身份验证而非通用签名,质询数据需包含至少16字节的随机数
- 被篡改的JS代码可能诱骗用户签署虚假质询,因为认证器不会显示被签署的具体内容
- Chrome的即时调解机制可让用户快速登录通行密钥账户,系统会根据密钥数量返回不同响应
- 相关源请求(RORs)允许域名定义其他可创建通行密钥的域,但该功能不支持HTTP协议及iOS18/火狐浏览器
- 通行密钥可存储在邻近设备上,通过蓝牙进行签名而无需传输密钥本身
- Signal API的设计暗示可能无需确认即可删除通行密钥,以避免数据泄露风险
- user.id和userHandle实现多通行密钥映射到同一账户,这对浏览器界面分组至关重要
- crypto.subtle.generateKey创建不可导出的密钥,可防止私钥提取但允许签名操作
- PKCE(代码交换证明密钥)使用动态密钥保护令牌安全,是OAuth协议后期加入的安全补丁
- 数字凭证API可访问操作系统钱包中的证件信息,实现凭证验证而无需共享原始数据