2012-07-16 69 views
4

用户通过Rails应用程序向其他用户发送消息并发布私人信息。用于Rails应用程序的客户端数据加密/解密

目标是保护消息,因此系统管理员和数据库泄漏都不会损害数据。使用收件人密钥的Javascript客户端加密,加密数据存储在数据库中,并在收件人一方解密。密钥不存储在系统中。

有意义吗?有解决方案吗? 非常感谢!

更新:我的意思是非对称密码学。每个用户有两个密钥:一个公开用于加密,一个用于解密。并为应用程序本身提供密码。用户使用他的密码登录,创建一条消息,该消息是使用收件人公钥(存储在系统中)加密的客户端并保存在数据库中的。收件人使用他的密码登录,然后输入他的私钥解码消息。解密也是客户端,私钥不会发送到服务器。

+0

唯一的问题我看到:如果密钥未存储在系统中,客户端如何保持它们?本地存储?然后我无法从两台计算机(甚至浏览器)登录系统。只需一个简单的密码?它有被强迫的危险。 ... – 2012-07-16 11:41:29

+0

@JoachimSauer I ment非对称密码学。公钥可以存储在系统中,因为它不能用于解密。问题更新 – Elder 2012-07-16 13:45:26

+0

仍然,*客户*将如何获得(或保留)私钥?它仍然需要它来解密数据。 – 2012-07-16 13:53:18

回答

2

当然。使用这个http://crypto.stanford.edu/sjcl/。 尤其是看演示http://bitwiseshiftleft.github.com/sjcl/demo/

有一点要记住,你不存储密钥的唯一方法是让用户对从密码派生它们(这不应该是他们使用你的网站的一个)。这很好,并且是上面的库。但是,如果他们忘记密码,没有帮助他们,

+0

谢谢,但这不是我要找的。 AES是一种对称算法,我正在寻找一种非对称算法,如RSA。 – Elder 2012-07-16 21:25:06

+1

啊,错过了。有一个支持不对称加密的分支https://github.com/bitwiseshiftleft/sjcl/commits/ecc。一般来说,有一堆javascript加密库,但是它们中的任何一个都不知道他们在做什么。 – imichaelmiers 2012-07-17 01:22:34

+0

感谢您的链接! – Elder 2012-07-17 07:58:14

1

在客户端,您可以使用openpgp.js。使用lib创建密钥,签名,加密/解密等非常容易。