0

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

互联网告诉我使用 ,这对于单个用户的数据来说效果很好。

问题

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

是否有可能在纯粹的客户端做到这一点?

更新

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

所有流量都使用 SSL 连接

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

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

我建议的方法安全吗?

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

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

1 回答 1

3

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

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

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

于 2013-07-21T13:43:08.817 回答