【问题标题】:How could you encrypt user data so only they can decrypt it?你怎么能加密用户数据,只有他们才能解密呢?
【发布时间】:2009-03-30 02:06:22
【问题描述】:

我正在考虑创建一个 Web 应用程序,它可以让人们输入文本(使用 SSL 连接),并且在保存到数据库之前会对其进行加密。目标是拥有它,以便只有用户才能解密它。

您可以让用户连同他们的数据一起输入密钥,并在他们想要查看数据时再次输入,而不是存储密钥。不过,这对用户来说会有点痛苦。

但是,如果您将密钥存储在服务器上,您就可以访问它并可能解密他们的数据。

如果不让用户每次都输入密钥或存储密钥,我认为不可能做到这一点,但是有什么我没有想到的方法吗?就像可能从只有用户知道的信息中生成密钥一样?涉及 cookie 的东西?

【问题讨论】:

标签: security cryptography


【解决方案1】:

您应该查看public key cryptography。基本思想是,您可以使用只有私钥持有者才能解密的公钥来加密信息。在您的场景中,服务器将记录所有用户的公钥,并使用它们来加密信息。然后您的用户将使用他们的私钥(服务器永远不会看到)来解密数据。

如果您正在寻找一种在客户端存储私钥的方法,您可以查看PersistJS

【讨论】:

    【解决方案2】:

    听起来你可以使用 PGP 做一些事情。正如前一篇文章所提到的,您将拥有一个公钥和私钥。私钥可以通过密码来保护。这样您就可以将私钥潜在地存储在数据库中,因为它仍然需要密码才能使用它。

    最大的问题是,如果用户忘记了该密码,他们可能会丢失该数据。您可以通过使用备用解密密钥 (ADK) 来解决这个问题。该密钥会自动与所有内容一起加密,并且可以在多个人之间拆分。

    【讨论】:

      【解决方案3】:

      从信息安全的角度来看,只有在用户的计算机而不是您的服务器上完成加密/解密时,这才有意义(因为无法保证您没有存储密钥和/或明文)。 JavaScript 是不可能的,因此您需要一个客户端应用程序*。

      此外,公钥加密的计算成本很高。如果您有很多用户并决定在服务器上进行加密/解密,您可能需要记住这一点。

      * 或 Java 小程序,但那是 90 年代。 Silverlight 或 Flash 也可能会起作用。

      【讨论】:

      • JS 不是不可能的。只要数据量不大,JS就可以了。下面是 JS 中的 RSA 示例:ohdave.com/rsa 我的浏览器在页面上大约 10ms 加密和大约 70ms 解密。现在,这只是一个句子,但对于基本使用来说似乎足够快。
      • 无论如何,您只使用公钥加密来加密/解密随机生成的对称加密(例如AES)密钥。
      • @Chocos:正确。除非你的明文很短。但公钥密码学仍然很昂贵。
      猜你喜欢
      • 2013-05-24
      • 1970-01-01
      • 2022-01-16
      • 2017-01-27
      • 2016-05-17
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多