2012-07-27 69 views
2

好吧,为了好玩,我编写了Java中的messenger程序。好玩吗? :)点对点聊天安全选项?

我想创建一个在两台PC之间工作的Messenger,不必咨询任何人,只需输入您希望与之聊天的IP。后来我会实现一个用户名系统,在那里你联系服务器来查找他们的IP。

我得到了AES和RSA的完美工作,然后我意识到当您进行公共私钥交换时,中间人攻击是可能的。这有点让我很生气......

除了使用CA或者有服务器交换用户名和/或公共私钥信息之外,是否有解决中间人攻击的方案?

有没有这样的程序,我可以看看?

谢谢你们!

请注意:目标是在没有服务器的情况下进行安全的点对点通信。也没有像中间人那样的漏洞。

+0

为什么你不能在https上使用自签名证书? – thatidiotguy 2012-07-27 17:36:32

+0

我可以也不会成为一个问题......但这会如何帮助我? – Zeveso 2012-07-27 17:39:20

+0

哦,我看到,B/C,那么你将不得不包括证书与程序,允许有人下载证书。 – thatidiotguy 2012-07-27 18:12:32

回答

1

基本上你要求太多。如果您正确使用公钥,公钥是安全的。如果你做了一个听起来不安全的“公共私人密钥交换”。私钥永远不会离开它们生成的主机。

公钥是公共的,只是字节。这是一对数字!没有其他信息。所以在这里你需要选择:

  1. 有一个值得信赖第三方与公钥与身份相关联的共享服务器。这就是所谓的CA :)
  2. 以其他安全方式交换公钥。示例:在自己的Facebook个人资料上发帖(使用HTTPS浏览它!),与其他人会面等。

您可能想了解PGP和Web of Trust的工作原理。通过WOT,您可以通过社交网络进行非常好的安全P2P聊天。基本上,您仍然可以永远不会通过输入IP地址首次加入P2P聊天,但是在完成初始工作后,您可以获得一个好的结果。

首先,获取某人的公钥:遇见他/她。那时,你可以认证那个派对,他可以认证你而不会受到攻击。

阶段2在于建立信任链。我将以社交网络的形式解释这一点。你是派对A,你遇见派对B,你彼此认识。B知道C,D,E,后来遇到F不知道的F。

问B谁是他的朋友(并获得他们的公钥),你知道C,D和E,你可以联系他们到那时。告诉B你知道F,他可以联系他们。

您可能想告诉F关于您通过A知道的C,D和E。这非常敏感,因为如果不加区别地重复该过程,坏人可以轻松地进入网络。如果您将信任限制在“朋友的朋友”或某种程度的间接知识上,则可以平衡安全性。

我建议你这样,因为你告诉你这样做是为了好玩,而你并不处于业务场景!

+0

我知道只有公钥被发送。说错了,我的不好。然而,对WOT并不完全了解。总是知道它,但从来没有真正检查过它......结果我忘了。谢谢,这看起来像一个可能的解决方案! +1 – Zeveso 2012-07-27 20:07:51

+0

我希望你能理解社交网络理念的WOT原则:当你认识某人时,你“信任”他。你相信谁会信任你认识的人? :) – 2012-07-28 12:46:20

+0

雅,我其实有一个问题。我以为你可以用私钥输入密码...正确吗?似乎他们在java.security.KeyPairGenerator中没有选择。我知道如何签名,但不知道如何在生成密码时输入PrivateKey的密码。另外,让我确定我有正确的想法。在您生成私钥并与某人会面后...验证它是带指纹的密钥......您签署了每个其他密钥。尽管如此,你知道其他同名的人没有签名吗?非常感谢! :) - 回答问题:你相信他们是他们自称的人。 – Zeveso 2012-07-28 14:36:14

1

你需要OTR。 http://www.cypherpunks.ca/otr/

我会帮你测试它一旦稳定。现在一直有相同的想法。

+0

我不明白OTR会为我提供什么,而不是“真实消息”?这是我正在努力解决的当前问题,我所做的一切。我把它放在git上,你可以在这里查看:https://github.com/gemurdock/SecureMessenger - 我的电子邮件是在github上 – Zeveso 2012-07-27 17:56:22

+0

以及有一个lib。据我了解,您可以使用SMP(社会主义百万计协议)安全地交换密钥。我可能是错的,虽然... – Shark 2012-07-29 03:31:59

2

你必须选择:CA或共享密钥。没有其他办法。因为否则你怎么能认证对方?当然你可以用ssl,pgp,password,OTR协议或许多其他的包装它,但这只是一个抽象层。如果你肯定不想要CA,那么你必须选择共同的秘密。正如@Shark所说,OTR显示了一个好方向 - 你问问题,其他方面的反应和你的回应是否正确另一方是认证

+0

答案并不妨碍中间的人提问,但非常有帮助...谢谢。没有看到在OTR中,但+1 – Zeveso 2012-07-27 20:09:00

+0

答案是用于身份验证。当身份验证后,您可以轻松建立安全通信。例如使用diffie-hellman – piotrek 2012-07-27 21:11:30