我目前正在开发一个安全性很高的项目,我在选择满足客户需求的技术解决方案时遇到了一些问题。
首先,让我向您解释客户的需求。
对于我客户的网站,用户需要在某个时刻生成私钥和公钥客户端(gui:浏览器)然后将公钥发送到服务器并在本地保存私钥( crypted 由用户选择的密码)。私钥需要保存,因为它在进程的第二部分使用一次(用户需要输入密码才能解密),一旦使用,我们就可以处理私钥。
我必须补充一点,客户要求向后兼容IE7。
第一个技术选择:Java Applet
我们查找的第一件事是使用Java Applet,生成密钥就好了,但是我们在Safari Mac OSX上遇到问题,sunt是沙箱,用户需要执行复杂的操作来禁用沙箱mod。我们的客户不希望这样,因为它不是用户友好的。
第二个解决方案:在Cookie中保存加密的私钥
我们保留了java applet,但它不会在磁盘上保存任何内容,它只用于执行加密操作。我们从applet传递了一个加密的私钥到javascript以保存在cookie中。我们做得很好,我们可以从cookie存储中检索加密的私钥,并将其传递给applet进行解密(弹出窗口请求用户输入密码)。
问题 我们知道在cookie中保存加密的私钥在技术上是可行的,但问题是:它是否安全,我们在浏览器的cookie存储区中保存该私钥会带来什么样的风险?
如果你们中的一个人可以帮助我,那将对我有所帮助!
干杯
答案 0 :(得分:0)
每个请求都会发送Cookie。这真的很糟糕,因为您希望私钥不会尽可能地通过网络发送。
假设您无法拥有本地存储(IE7),我知道在客户端存储信息的唯一方法就是使用Cookie。我要说:尽可能使用本地存储,当您不能时,将私钥存储在服务器端。至少,你会发送一次。它很糟糕,但不是真的很糟糕......
或许您可以将cookie存储在您再也不会使用的专用子域中,但是为了读取cookie,即使在客户端使用javascript,您也需要在该子域的页面上,这意味着发送每当你想使用它时,再次通过网络密钥。
据我所知。
答案 1 :(得分:0)
主要问题是cookie仅适用于您发送到服务器的内容。它们不用于存储,您不应该在任何地方发送私钥。
Cookie可能会被XSS窃取(假设您的网站中存在XSS漏洞),然后攻击者可以尝试对其进行解密。
在规模很大的事情上你可以做得更糟。假设您的加密是可靠的,私钥可能是安全的,但最大的问题是您不应该使用这样的cookie。使用Web存储可能是一个更好的解决方案。
答案 2 :(得分:0)
我说保存私钥是一个非常好的选择,因为出于安全原因他们不应该保存敏感信息,我们的同事已经告诉其他原因了。 同样重要的是要注意用户可以在任何给定时间清除所有cookie或者完全禁用它。 小程序将更好地满足您的客户要求,并允许您例如提示用户使用私钥保存密钥库文件,此类文件旨在保存此类信息。
答案 3 :(得分:0)
您可以使用localstorage然后只为IE7部署localstorage polyfill