我正在考虑创建一个允许人们输入文本(使用SSL连接)的Web应用程序,并在保存到数据库之前对其进行加密。目标是让它只有用户可以解密它。
您可以让用户输入密钥及其数据,并在他们想要查看数据时再次输入密钥,而不是存储密钥。不过,这对用户来说会很痛苦。
但是,如果您将密钥存储在服务器上,则您可以访问该密钥并可能解密其数据。
我不认为没有用户每次都输入密钥或存储密钥就可以做到这一点,但有哪些方法我没有想到?就像可能只从用户知道的信息生成密钥?什么涉及饼干?
答案 0 :(得分:11)
你应该研究public key cryptography。基本思想是您可以使用只有私钥持有者才能解密的公钥来加密信息。在您的方案中,服务器将记录所有用户的公钥,并使用它们来加密信息。然后,您的用户将使用服务器永远不会看到的私钥来解密数据。
如果您正在寻找存储私钥客户端的方法,可以查看PersistJS。
答案 1 :(得分:5)
听起来你可以用PGP做点什么。如前所述,您将拥有公钥和私钥。私钥可以通过密码保护。这样你就可以将私钥存储在数据库中,因为它仍然需要使用密码才能使用它。
最大的问题是,如果用户忘记密码,他们可能会丢失该数据。您可以使用备用解密密钥(ADK)来解决这个问题。该密钥随所有内容自动加密,可以在多个人之间进行分割。
答案 2 :(得分:1)
从信息安全的角度来看,只有在用户的计算机而不是您的服务器上进行加密/解密时才会有意义(因为无法保证您不存储密钥和/或明文)。 JavaScript是不可能的,所以你需要一个客户端应用程序*。
此外,公钥加密在计算上是昂贵的。如果您有很多用户并决定在服务器上进行加密/解密,您可能需要牢记这一点。
*或Java applet,但那是90年代。 Silverlight或Flash也可能起作用。