You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WebAuthN与YubiKey在浏览器生成对称加密密钥,该方案是否安全?

这个方案存在多个明确的安全隐患和可用性风险,具体问题如下:

  • 核心前提不成立:你假设相同挑战会得到相同签名,但WebAuthn默认使用的ECDSA签名依赖随机数生成,只有支持RFC6979确定性ECDSA的认证器才会输出一致的签名。不同YubiKey固件版本、不同浏览器的WebAuthn实现都可能出现同挑战不同签名的情况,最终会导致你无法解密自己的加密数据。
  • 密钥泄露风险高:签名结果会完整返回给网页的JS执行环境,只要当前页面存在XSS漏洞,攻击者不需要接触你的YubiKey就能直接拿到签名值,哈希后即可得到AES密钥,解密所有存储的加密内容。
  • 不符合WebAuthn的安全设计:WebAuthn规范要求挑战必须是一次性、高熵的随机值,用来防范重放攻击。你固定使用同一个挑战的用法会带来两个明显风险:一是如果挑战泄露,攻击者只要诱骗你对该挑战完成YubiKey授权(比如伪装成常规的登录验证请求)就能拿到密钥;二是部分浏览器或认证器会拦截重复使用的挑战,直接导致流程失败。
  • 数据易永久锁定:WebAuthn的签名是和站点RP ID(域名)强绑定的,如果后续你变更了站点域名、或者把网页保存到本地离线打开,都会因为RP ID不匹配,导致相同YubiKey和相同挑战生成的签名完全不同,你的加密数据会被永久锁定无法解密。

如果要优化这个方案,更合理的做法是使用WebAuthn的hmac-secret扩展,这个扩展的设计目标就是基于认证器生成稳定的对称密钥材料,不需要滥用签名能力,安全性和稳定性都高很多。

内容的提问来源于stack exchange,提问作者ucipass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:36:07