繁体   English   中英

WebauthN 和 Yubikey 在浏览器中生成对称加密密钥。 这个黑客安全吗?

[英]WebauthN and Yubikey to generate keys for symmetric encryption in a browser. Is this hack secure?

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

这是我的方法:

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

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

这种方法有什么问题吗?

为什么不使用Web 加密 API

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

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

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

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

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

您可以(错误)使用公钥请求有效负载的user.id参数,即此处示例中的user object: Web Authentication API

  1. 使用Web Crypto API生成对称密钥
  2. 然后将该密钥用作navigator.credentials.create({ user: {id: YOUR_KEY } })中的 user.id 将密钥存储在身份验证器中
  3. 将返回的密钥 id/rawId 存储在应用程序的某处

要检索密钥,您可以通过提供 rawId 使用navigator.credentials.get({ publicKey })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM