在浏览器中存储私人加密密钥的最佳方式

Best way to store private crypto key in browser?

本文关键字:密钥 最佳 方式 加密 浏览器 存储      更新时间:2023-09-26

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

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

HTML5本地存储或只是从JavaScript中读取包含密钥的本地文本文件似乎有点不对劲。。。是否可以将个人证书用于此目的?或者还有其他选择吗?

编辑:

轻微澄清,

所有需要加密的敏感数据都是在客户端机器上生成的,永远不应该以纯文本形式保存。有问题的数据主要是用户将上传到服务器的文件,但我们可能希望在未来也加密一些表单字段。

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

对我们来说,在同一台客户端机器上生成公钥-私钥对也是至关重要的。这将只由用户手动或在某些自动化解决方案的帮助下完成一次。

底线是,私钥和纯文本数据都不应该离开客户端的机器。

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

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

不过,可能还有其他解决方案,比如浏览器插件,甚至是自定义浏览器。