2012-07-27 42 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