WebCrypto API在哪里存储密钥?

den*_*dog 5 javascript cryptography webcrypto-api

我正在成功使用webcrypto API加密服务器和客户端之间的消息(假设我需要手动执行此操作)。

我的问题是我需要检查用户和服务器的密钥对是否已经存在,而不是一直生成新的密钥对。有没有办法检查它是否存在并检索它以解密服务器消息?

为了明确起见,我privateKey在浏览器上,publicKey并被发送到服务器。

我有一个nodejs服务器和普通的JS前端。

提前致谢。

ped*_*ofb 5

默认情况下,CryptoKeys不是持久性的。您需要将密钥存储在IndexedDB中,以使它们可用于下一次浏览器执行。

IndexedDB是安全的存储,可以在不暴露密钥材料的情况下存储,恢复和使用密钥

参见https://www.w3.org/TR/WebCryptoAPI/#concepts-key-storage

5.2。密钥存储

该规范未明确为CryptoKey对象提供任何新的存储机制。相反,通过允许将CryptoKey与结构化克隆算法一起使用,支持存储结构化可克隆对象的任何现有或将来的Web存储机制都可以用于存储CryptoKey对象。

在实践中,预计大多数作者将使用索引数据库API,该API允许关联存储键/值对,其中键是对应用程序有意义的某些字符串标识符,而值是CryptoKey对象。这样就可以存储和检索关键材料,而无需将该关键材料暴露给应用程序或JavaScript环境。

这里有一个完整的例子https://blog.engelke.com/2014/09/19/saving-cryptographic-keys-in-the-browser/


den*_*dog 5

解决了:

您可以使用 IndexedDB 来存储CryptoKey对象。

我尝试了普通的旧本地存储,但它不起作用。

有关更多信息,请参阅:

  • 一点补充:localStorage 不起作用,因为它只能存储字符串。`CryptoKey` 不是字符串,因此它们不能存储在 localStorage 中。 (2认同)