2012-02-22 66 views
2

我试图做一个基于网络的安全密码管理和共享工具,既作为学术练习,也充分理解和使用它感到安全。如何使用“主机验证”模式共享信息?

我真的很喜欢'主机验证'应用程序的想法,在客户端使用JavaScript完成加密/解密,并且只有加密信息才会离开浏览器,就像PassPack或Clipperz一样。我无法弄清楚Passpack如何设法让人们共享密码。如果没有纯文本或加密密钥通过服务器传输给其他用户,我看不出它是如何完成的,这使得这个过程本质上破坏了“主机验证”范式。

任何人都可以指向我的解决方案吗?

+0

如果您可以在服务器上以明文方式存储密码,则可以让每个客户端向您发送加密密钥的公共部分,并传输用该加密密钥加密的密码。如果没有共享者和接收者进行真正的密钥交换,我不确定你能做得更好。 – millimoose 2012-02-22 19:47:18

+0

不是一个真正的编程问题,但我不是100%确定这是否是[crypto](http://crypto.stackexchange.com/)的东西,所以我会放弃它。建议你尝试加密和其他论坛。 – 2012-02-22 21:26:24

+0

啊,我不知道加密。感谢您的建议,我一定会在那里发帖。我同意加密可能并不完全正确,因为这实际上是一个架构问题,但它值得一试。 – Travis 2012-02-22 22:10:41

回答

1

至少有三个主要障碍需要克服,以创建一个既有用又安全的系统。

首先,用户必须将他的私钥输入到Web界面。 RSA密钥的长度通常至少为1024位,所以即使使用相对高效的base64编码(由于许多字符在视觉上相似,这可能是一个不好的选择),用户将不得不输入171个无意义的字符。用键盘,这将是乏味和容易出错的。

其次,客户端运行的JavaScript代码来自Web服务器。您试图避免攻击者通过在客户端进行加密和解密来访问服务器上明文密码的风险。但是,如果攻击者可以访问存储在服务器上的明文密码,他们可能也有能力修改服务器发送的JavaScript代码。如果攻击者可以修改javascript代码,他们可以使用修改后的代码来捕获用户的秘密。

最后,运行客户端代码的硬件和软件是安全的。如果用户使用的硬件和软件受到损害(例如使用键盘记录器),那么可以在那里捕获机密。所以为了安全起见,用户只能使用他控制的电脑。如果您只能使用您控制的计算机,则基于Web的系统在传统客户机 - 服务器系统上的许多优点将被否定。

如果你可以解决这些问题,将公钥作为Inerdial存储在服务器上似乎是一个不错的选择,但是你会遇到问题,即用户无法知道服务器发送的公钥实际上由他们想要提供密码的人控制,而不是由攻击者控制。

Nate Lawson在his Google Tech Talk提到javascript加密。

+0

我愿意尝试修复或解决这些问题(屏幕上的键盘等)。但是我已经意识到Javascript的其他一些缺点。对于在Adobe Flex/Air中执行客户端代码,您有什么想法?在Flex方面,我并不是很强大,但它似乎适合编译的客户端代码,可以在传输/下载时进行验证。 – Travis 2012-02-23 15:04:10

+0

我不明白为什么它会比通过HTTPS的Javascript更可验证。 – 2012-02-23 15:19:02

+0

@SamuelEdwinWard:这是一个可以校验的单个对象,JavaScript可以在网站上的任何位置*。 – 2012-08-15 13:55:19