0

我了解 WebauthN 旨在执行身份验证,但我想使用我的 Yubikey 创建对称加密密钥来加密我的网络浏览器上的内容,而不依赖于后端服务器。

这是我的方法:

  • 在断言挑战(navigator.credentials.get({ publicKey }))期间,Yubikey 签署了一个挑战字符串,客户端发送给验证者。
  • 我提取签名的质询,使用 SHA256 对其进行哈希处理,并将其用作我的新对称加密密钥以进行 AES256 加密。
  • 只要向 Yubikey 发送相同的挑战字符串,加密密钥将始终相同。

为了能够解密网络浏览器上的内容。我必须拥有 Yubikey 和挑战字符串才能进行 2 因素身份验证。

这种方法有什么问题吗?

4

3 回答 3

2

为什么不使用Web Crypto API

此 API 专为客户端的密码操作而设计,适用于您的用例(客户端加密)。所有最近的浏览器都支持它。

请注意,您可能主要担心的是此 API 不支持硬件设备(智能卡、安全令牌...)

但是,您的 Yubikey 肯定能够生成一个安全的静态密码,您可以将其用作您将派生的用于加密/解密数据的主密钥。

于 2021-11-27T09:51:44.180 回答
1

也许您可以利用 hmac-secret 扩展(https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-client-to-authenticator-protocol-v2.0-rd-20180702.html# sctn-hmac-secret-extension)?

于 2021-11-27T19:45:48.733 回答
0

不,这是一个坏主意,原因如下:

  • RS256/ES256 不是确定性签名。因此,您每次都会获得一个新的随机签名。
  • 即使可以,也有诸如 XSS 之类的东西,而且很快就会被破坏。
  • 如上所述使用加密 API。
  • HMAC-Secret 目前是为平台保留的。您无法通过 WebAuthn API 访问它。
  • 未来会有大blobs功能,还有largeBlobsKey……不过这是一个很长的未来……
于 2021-12-02T16:42:16.373 回答