服务器上的密文

时间:2011-11-25 07:05:16

标签: security cryptography protocols

是否有任何协议允许2位访问者通过我的网站安全地进行通信,而我无法阅读他们的消息?

4 个答案:

答案 0 :(得分:3)

向Google询问端到端加密,例如PGP / GPG。对于基于客户端浏览器的实现,您可能需要查看GPG encryption in JavaScript

我只是用谷歌搜索它并且无法判断它是否真的安全(不会将您的私钥发送给任何人)。我只想给你一点开始。

编辑确实将客户端私钥发送到您的服务器以执行基于服务器的加密。这是你想要的。但我确信GPG的JavaScript实现是可能的,即使我不知道是否有人已经完成了它。

答案 1 :(得分:2)

是;例如,如果您的服务器是受SSL / TLS保护的通信中的链接,则会发生这种情况 参与者使用公钥加密方案来商定秘密的对称密钥;然后用于加密他们的通信。

参与者也可以使用预期接收者的公钥简单地加密他们的消息。这样,只有预期的接收者才能解密消息。这不是一个非常先进的计划,可能很脆弱。 (其中,如果窃听者可以猜测完全发送的内容,他可以使用预期收件人的公钥加密该邮件,并查看结果是否与发送的内容相匹配)。

有很多关于加密协议的文献;对于初学者来说,这是关于Key Agreement Protocols的维基百科文章。

答案 2 :(得分:2)

如果我们谈论不可能那么第二部分是S.L. Barth的答案将实现这一点,但密钥交换必须通过其他方式完成。这可以是手机或电子邮件,甚至是其他网站,但如果是通过您的网站完成,则可以使用man-in-the-middle attack。你可以告诉你的用户这样做,你实际上无法帮助他们这样做。

可能有一个javascript库可以实现GPG加密,因此您需要做的就是确保每条消息在发送到您的Web服务器之前都在浏览器中加密。您可以根据需要存储邮件,它们是加密的。只有拥有正确私钥的用户才能解密它。

SSL和TLS因为它们被各地的网站使用,很容易受到中间人攻击。我们没有听到太多关于这种攻击的原因是,中间的大多数人都是值得信赖的,所以攻击根本不会发生。最近撤销DigiNotar和其他人的CA证书正是因为伊朗政府被当作中间人并且解密他们自己公民的SSL流量而被捕。

如果您对通过好奇的系统管理员防止随意窥探感到满意,那么密钥交换也可以通过您的网站完成。

还有一点:安全很难。

即使你使用众所周知的加密技术来实现这一点,实现中存在缺陷的可能性也非常接近1.这并不意味着那些好奇的系统管理员将能够意外地读取消息,但它确实意味着一个坚定而熟练的对手能够找到方法。一旦你负担得起,你应该聘请专家重新设计或至少检查你的协议和实施。

答案 3 :(得分:0)

一般情况下,只有当用户有某种方式相互识别(或至少在一个方向上)时,才能实现用户之间的这种安全链接,而无法阅读和/或修改他们的信息。

这可能是一个共享密钥(如密码)或一个已知的公钥(或由一个已知​​的CA认证),其中另一个拥有相应的私钥。

在这个上可以构建一个安全协议(使用密钥交换,然后在两个方向上使用MAC进行对称加密),就像TLS一样。 (另一种常用于即时消息传递的方式是OTR,Off-the-Record messaging协议。)

如果没有办法确定另一个终点,你最终会采用一种允许中间人攻击的方法。没有证书的SSL / TLS,或者中间人都知道相应私钥的证书是不安全的,就像其他类似的加密方案一样。

另一个问题是你说我网站的访客。这看起来像是在JavaScript中实现客户端加密,从您的网站提供。不要这样做......如果访问者不相信你不读他们的数据,他们也不应该相信你给他们提供非恶意的JavaScript,这可能会实现你所声称的其他东西,再次允许MITM,甚至直接向您发送数据副本。

有关此问题的更多详细信息将在Javascript Cryptography Considered Harmful中进行讨论(从稍微不同的角度来看)。