我正在尝试制作基于网络的安全密码管理和共享实用程序,既可以作为学术练习,也可以完全理解并安全使用它。
我非常喜欢“主机验证”应用程序的想法,其中使用javascript在客户端进行加密/解密,只有加密信息才会离开浏览器,就像PassPack或Clipperz一样。我无法弄清楚的是Passpack如何设法允许人们共享密码。如果没有纯文本或加密密钥通过服务器传递给其他用户,我无法看到它是如何做到的,这使得该过程固有地打破了“主机证明”范式。
有人能指出我解决这个问题吗?
答案 0 :(得分:1)
创建一个有用且安全的系统至少需要克服三个主要障碍。
首先,用户必须将他的私钥输入到Web界面中。 RSA密钥通常至少1024位长,所以即使您使用相对有效的base64编码(这可能是一个糟糕的选择,因为使用的许多字符在视觉上相似),用户将不得不输入171个无意义的字符。使用键盘,这将是乏味且容易出错的。
其次,客户端运行的javascript代码来自Web服务器。您正试图通过在客户端中加密和解密来避免攻击者访问服务器上的明文密码的风险。但是,如果攻击者可以访问存储在服务器上的明文密码,他们可能还可以修改服务器发送的javascript代码。如果攻击者可以修改javascript代码,他们可以使用修改后的代码来捕获用户的秘密。
最后,运行客户端代码的硬件和软件的安全性。如果用户使用的硬件和软件受到损害(例如使用键盘记录器),则可以在那里捕获秘密。因此,为了安全起见,用户只能使用他控制的计算机。如果您只能使用您控制的计算机,那么基于Web的系统相对于传统客户端 - 服务器系统的许多优势都将被否定。
如果您可以解决这些问题,将公钥存储在服务器上作为Inerdial似乎是一个不错的选择,尽管您遇到的问题是用户无法知道服务器发送的公钥是否是真正由他们想要提供密码的人控制,而不是由攻击者控制。
Nate Lawson在his Google Tech Talk中提到了javascript加密。