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

时间:2015-02-06 11:09:59

标签: javascript web-applications cryptography rsa token

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

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

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

编辑:

稍作澄清,

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

将加密数据发送到服务器后,它将以加密形式存储,除相同客户端计算机之外的其他任何位置都不会被解密。例如,如果用户决定重新下载他的文件,他将收到加密文件,这些文件将使用JavaScript在浏览器中解密。

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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