使用浏览器端解密的服务器端公钥加密

时间:2015-01-20 16:48:27

标签: encryption browser cryptography public-key-encryption

我的应用程序要求在静态存储时加密某些字段,并允许用户通过输入密码来在浏览器中本地解密它们。但是,这些加密字段不会由经过身份验证的用户自己输入数据库,而是由向用户提供私人信息的其他人提交。

如果我将密码存储在数据库中以加密新提交,那么有权访问数据库的任何人都可以轻松解密加密信息。因此,我认为我需要在数据库中存储公钥,使用公钥加密传入信息,然后将加密信息提供给用户,并让他在浏览器中使用密码解密。 (因此,在服务器端,我们永远不会解密任何东西。)

我已经查看了像ursa这样的库,但问题是用户必须保存他的私钥。 (正确吗?)有什么方法可以用相对较短的密码而不是长私钥来做到这一点吗?

1 个答案:

答案 0 :(得分:1)

您可以使用类似JSBN的内容在客户端上生成公钥 - 私钥对,并在密码加密模式下使用CryptoJS来使用AES加密私钥。然后将加密的私钥和明文公钥发布到服务器并添加到数据库中。

下次用户使用他/她的公钥加密信息时,您将加密信息和加密私钥发送到客户端/浏览器。用户可以再次输入密码来解密私钥,然后在第二阶段解密有效负载。

请注意,这不是绝对安全的,因为未加密的流量(例如,没有TLS)将使攻击者能够扩展html / js以包含数据窃取脚本。此外,系统的开发人员也可以随时添加这样的脚本而不管TLS是什么。