在浏览器中存储私钥的最佳方式?

Best way to store private crypto key in browser?

我想在将一些用户数据发送到服务器之前对其进行加密。也就是说,数据将在客户端使用 JavaScript.

在浏览器中加密。

我的问题是,有哪些选项可用于在客户端存储私钥(用户稍后查看数据时将用于解密数据)?

HTML5 本地存储或仅读取包含来自 JavaScript 的密钥的本地文本文件似乎有点偏离... 是否可以为此目的使用个人证书?或者还有其他选择吗?

编辑:

稍作说明,

所有需要加密的敏感数据都是在客户端机器上生成的,绝不能以明文形式保留。有问题的数据主要是用户将上传到服务器的文件,但是我们将来可能还想加密一些表单字段。

一旦加密的数据被发送到服务器,它就会以加密的形式存储,并且永远不会在 same 客户端机器以外的任何地方被解密。例如,如果用户决定下载他的文件,他将收到加密文件,这些文件将在浏览器中使用 JavaScript.

解密。

此外,Public-私钥对在同一台客户端计算机上生成对我们来说也很重要。这将仅由用户手动或在某些自动化解决方案的帮助下完成一次。

底线是,私钥或纯文本数据永远不应离开客户端的机器。

根据您的描述,文件和表单字段中的数据只能在客户端上使用。在这种情况下根本不需要使用 public-key-encryption。您应该使用像 AES 这样的对称块密码来加密这些数据并将它们发送到服务器。单个随机对称密钥将在客户端浏览器中生成并存储在 localStorage 中,可能受密码保护(例如 AES 的第二层)。 AES 密钥是 128/192/256 位长的二进制字符串,它永远不会离开客户端浏览器。

我认为 localStorage 是唯一可行的选择,因为所有现代浏览器都实现了它。

虽然可能还有其他解决方案,例如浏览器插件,甚至 custom browser