在浏览器中存储私人加密密钥的最佳方式
Best way to store private crypto key in browser?
我想在将一些用户数据发送到服务器之前对其进行加密。也就是说,数据将在浏览器的客户端使用JavaScript进行加密。
我的问题是,有哪些选项可用于在客户端存储私钥(当用户稍后查看数据时,它将用于解密数据)?
HTML5本地存储或只是从JavaScript中读取包含密钥的本地文本文件似乎有点不对劲。。。是否可以将个人证书用于此目的?或者还有其他选择吗?
编辑:
轻微澄清,
所有需要加密的敏感数据都是在客户端机器上生成的,永远不应该以纯文本形式保存。有问题的数据主要是用户将上传到服务器的文件,但我们可能希望在未来也加密一些表单字段。
一旦加密的数据被发送到服务器,它就会以加密的形式存储,并且永远不会在同一客户端机器之外的任何其他地方解密。例如,如果用户决定下载回他的文件,他将收到加密的文件,这些文件将在浏览器中使用JavaScript解密。
对我们来说,在同一台客户端机器上生成公钥-私钥对也是至关重要的。这将只由用户手动或在某些自动化解决方案的帮助下完成一次。
底线是,私钥和纯文本数据都不应该离开客户端的机器。
根据您的描述,文件和表单字段中的数据只能在客户端上使用。在这种情况下根本不需要使用公钥加密。您应该使用类似AES的对称块密码来加密此数据并将其发送到服务器。单个随机对称密钥将在客户端浏览器中生成并存储在可能受密码保护的localStorage
中(例如AES的第二层)。AES密钥是128/192/256位长的二进制字符串,它永远不应该离开客户端浏览器。
我认为localStorage
是唯一可行的选择,因为它是由所有现代浏览器实现的。
不过,可能还有其他解决方案,比如浏览器插件,甚至是自定义浏览器。
- API密钥使用和检查示例
- react.js中的密钥绑定
- JS对象密钥序列
- 似乎无法使用javascript从AWS 3S中删除密钥
- 加载两个具有相同父密钥名称的json文件
- 如何获取$data.Entity的密钥
- Angular ngRepeat:重复错误(尽管没有重复的密钥)
- CryptoJS和密钥/IV长度
- 基于api密钥的NodeJS web服务
- 输入密钥和firefox提示
- React Rails应用程序中动态子项的密钥分配问题
- 正在Javascript Cookie中设置重复密钥
- 通过localStorage中的密钥获取ID
- 从密钥中获取价值.JavaScript
- Javascript对象中的跨浏览器密钥查找性能
- D3动态json密钥名称
- OAuth 2.0 OpenID连接环回和密钥斗篷
- 使用Express从您的提交中获得.gitignore API密钥的最佳实践是什么
- 在firebase中更改密钥的最佳方法是什么
- 什么'使用cryptojs的最佳选择是将密钥存储在客户端和服务器端,还是生成密钥并以某种方式传递给另一端