好的,为了好玩,我正在使用Java编写信使程序。有趣吗? :)
我想创建一个在两台PC之间工作的信使,不需要咨询其他人,只需输入您想要聊天的IP即可。稍后我将实现一个用户名系统,您可以在其中联系服务器以查找其IP。
我完成了AES和RSA工作,然后我意识到当你进行公共私钥交换时,中间人攻击是可能的。这有点让我生气......
除了使用CA或让服务器交换用户名和/或公共私钥信息之外,中间攻击的人是否有任何解决方案?
是否有任何类似的程序我可以查看?
谢谢你们!
请注意:目标是在没有服务器的情况下进行安全的对等通信。也没有像中间人这样的漏洞。
答案 0 :(得分:2)
您必须选择:CA或共享密钥。没有其他办法。因为否则如何验证对方?当然你可以用ssl,pgp,密码,OTR协议或许多其他包装它,但这只是一个抽象层。如果你当然不想要CA那么你必须选择共同的秘密。正如@Shark所说,OTR显示了一个很好的方向 - 你问问题,其他方面的反应和你如果反应是正确的另一方是经过认证的
答案 1 :(得分:1)
一旦稳定,我会帮你测试一下。一段时间以来一直有同样的想法。
答案 2 :(得分:1)
基本上你要求的太多了。如果正确使用公钥,则公钥是安全的。如果你做一个听起来不安全的“公共私钥交换”。私钥永远不会离开它们生成的主机。
公钥是公共的,只是字节。这是一对数字!!没有其他信息。所以,您需要选择:
您可能想了解PGP和Web Of Trust的工作原理。使用WOT,您可以以社交网络方式进行非常好的安全P2P聊天。基本上,你仍然可以通过输入IP地址来第一次加入P2P聊天,但是在你做了初步的工作后你就可以得到一个好的结果。
首先,获取某人的公钥:与他/她见面。届时,您可以对该方进行身份验证,并且可以对您进行身份验证,而不会受到攻击。
第2阶段包括建立信任链。我将用社交网络术语解释这一点。你是甲方,你遇到了乙方。你们彼此认识。 B知道C,D,E,后来你遇到了B不知道的F.
问B谁是他的朋友(并获得他们的公钥),你就会知道C,D和E,然后你可以联系他们。告诉B你知道F,他可以联系他们。
你可能想通过A告诉F你知道的C,D和E.这是非常敏感的,因为如果不加思索地重复这个过程,坏人就可以很容易地进入网络。如果您将信任限制在“朋友的朋友”或一定程度的间接知识,您可以平衡安全。
我以这种方式提议你,因为你告诉过你这样做很有趣而且你不是在商业场景中!!