我正在尝试制作一个基于web的安全密码管理和共享实用程序,这既是一种学术练习,也是为了充分理解和感觉使用它是安全的。
我真的很喜欢‘防主机’应用程序的想法,加密/解密是在客户端使用javascript完成的,只有加密的信息才会离开浏览器,就像PassPack或Clipperz一样。我不明白的是Passpack是如何让人们共享密码的。我不明白如果不通过服务器将明文或加密密钥传输给其他用户,如何才能做到这一点,这使得该过程本身就打破了“防主机”的范例。
有谁能告诉我解决这个问题的方法吗?
发布于 2012-02-23 07:20:31
要创建这样一个既有用又安全的系统,您至少需要克服三个主要障碍。
首先,用户必须在web界面中输入他的私钥。RSA密钥通常至少有1024位长,所以即使您使用相对有效的base64编码(这可能是一个糟糕的选择,因为使用的许多字符在视觉上都是相似的),用户也必须输入171个无意义的字符。有了键盘,这将是乏味和容易出错的。
其次,客户端运行的javascript代码来自web服务器。您试图通过在客户端进行加密和解密来避免攻击者访问服务器上的明文密码的风险。但是,如果攻击者可以访问存储在服务器上的明文密码,他们可能还可以修改服务器发送的javascript代码。如果攻击者可以修改javascript代码,他们就可以使用修改后的代码来获取用户的秘密。
最后,还有运行客户端代码的硬件和软件的安全性。如果用户使用的硬件和软件被攻破(例如,使用键盘记录器),则可以在那里捕获秘密。因此,为了安全起见,用户将只能使用他控制的计算机。如果您只能使用自己控制的计算机,则基于web的系统相对于传统的客户端-服务器系统的许多优势将被否定。
如果你能解决这些问题,在服务器上以Inerdial的形式存储公钥似乎是一个不错的选择,尽管这样就会出现这样的问题:用户无法知道服务器发送的公钥是否真的由他们想要提供密码的人控制,而不是由攻击者控制。
Nate Lawson提到了his Google Tech Talk中的javascript密码术。
https://stackoverflow.com/questions/9401786
复制相似问题