在用户之间安全地共享客户端加密数据

时间:2013-07-21 12:18:47

标签: javascript security cryptography

我正在制作一项服务,用于存储有关给定用户的个人数据,该服务只能由作者和目标查看。我想执行加密客户端并仅在服务器上存储生成的垃圾。

互联网告诉我使用,这对单个用户的数据很有用。

问题

对于我的服务,其他用户可以输入只能由他们和目标用户查看的数据 - 如何通过客户端加密来实现这一目标?

是否有可能做到纯粹的客户端?

更新

考虑到这一点后,我怀疑它可以完全是客户端。我想出了以下可能的方法:

所有流量都使用SSL连接

  • 生成RSA个密钥,使用AES加密私钥(使用盐渍密码)
    • 在浏览器中生成的盐
  • 将密码短语盐,公钥,加密私钥存储在服务器上
  • 所有使用公钥加密的用户数据,首先通过输入密码来解密其在浏览器中的私钥,然后使用RSA私钥解密数据来解密

  • 如果用户希望与他人共享数据,请使用其他用户的公钥加密所述数据

我建议的方法是否安全

将在服务器上存储的内容示例:

+----------+---------------------+---------------+
|Public Key|Encrypted Private Key|Passphrase Salt|
+----------+---------------------+---------------+

1 个答案:

答案 0 :(得分:3)

处理OpenPGP会更容易。 OpenPGP使用公钥加密(RSA或Elgamal用于加密),因此该方案与您描述的类似,但没有重新发明轮子的麻烦。

OpenPGP实现存在于不同的语言,包括JavaScript(尽管由于各种安全漏洞导致信息泄露,使用Javascript方式很糟糕)。然而,由于相同的概念弱点,您在JavaScript中实施的RSA方案同样容易受到攻击。

OpenPGP的一个好处是用户已经熟悉OpenPGP或者可以找到大量有关它的信息(这会增加对您的解决方案的信任),并且已经拥有自己的密钥。用户还可以使用任何OpenPGP工具生成密钥并打开加密数据。

相关问题