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 对其进行哈希处理,并将其用作 AES256 加密的新对称加密密钥。
- 只要向 Yubikey 发送相同的挑战字符串,加密密钥将始终相同。
为了能够在网络浏览器上解密内容。我必须拥有 Yubikey 和 2 因素身份验证的挑战字符串。
这种做法有什么问题吗?
你为什么不使用 Web Crypto API?
此 API 专为客户端的密码操作而设计,适用于您的用例(客户端加密)。是supported by all recent browsers.
请注意,您可能主要担心的是 此 API 不支持硬件设备(智能卡、安全令牌...).
但是,您的 Yubikey 肯定能够 generating a secured static password you can use as a master key you will derive 到 encrypt/decrypt 您的数据。
也许您可以利用 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)?
没有。由于以下原因,这是一个坏主意:
- RS256/ES256 不是确定性签名。所以你每次都会得到一个新的随机签名。
- 即使可以,也有 XSS 之类的东西,很快就会被破解。
- 如上所述使用加密 API。
- HMAC-Secret 目前是为平台保留的。您无法通过 WebAuthn API.
访问它
- 未来会有大blobs功能,还有largeBlobsKey...但是这是一个很长的未来...
我知道 WebauthN 旨在执行身份验证,但我想使用我的 Yubikey 创建对称加密密钥来加密我的 Web 浏览器上的内容 而不 依赖后端服务器。
这是我的方法:
- 在断言挑战 (
navigator.credentials.get({ publicKey })
) 期间,Yubikey 对客户端发送给身份验证器的挑战字符串进行签名。 - 我提取已签名的质询,用 SHA256 对其进行哈希处理,并将其用作 AES256 加密的新对称加密密钥。
- 只要向 Yubikey 发送相同的挑战字符串,加密密钥将始终相同。
为了能够在网络浏览器上解密内容。我必须拥有 Yubikey 和 2 因素身份验证的挑战字符串。
这种做法有什么问题吗?
你为什么不使用 Web Crypto API?
此 API 专为客户端的密码操作而设计,适用于您的用例(客户端加密)。是supported by all recent browsers.
请注意,您可能主要担心的是 此 API 不支持硬件设备(智能卡、安全令牌...).
但是,您的 Yubikey 肯定能够 generating a secured static password you can use as a master key you will derive 到 encrypt/decrypt 您的数据。
也许您可以利用 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)?
没有。由于以下原因,这是一个坏主意:
- RS256/ES256 不是确定性签名。所以你每次都会得到一个新的随机签名。
- 即使可以,也有 XSS 之类的东西,很快就会被破解。
- 如上所述使用加密 API。
- HMAC-Secret 目前是为平台保留的。您无法通过 WebAuthn API. 访问它
- 未来会有大blobs功能,还有largeBlobsKey...但是这是一个很长的未来...