2014-07-08 244 views
-1

我知道在沒有任何服務器的情況下建立一個簡單的P2P網絡的概念。我的問題是保護網絡。網絡應該有一些管理節點。因此,有兩種節點:私有安全P2P網絡

  1. 節點與權限沒有特權
  2. 節點

第一個問題是:我可以指定某些節點比其他人更多的權利,如權限發送廣播消息?

如何保護試圖獲得特權的修改節點的網絡?

enter image description here

我在答案和資源比能幫助我真正的興趣。我理解這一點很重要,如果有任何不清楚的情況,我很樂意提供進一步的信息。

+4

我們在這裏幫助您解決具體的編程問題,而不是蓬鬆的餡餅天空設計問題。 –

+1

本網站僅針對編程問題,而不涉及與網絡配置相關的安全問題。 [幫助]提供了更多關於在這裏提出的問題類型的詳細信息。祝你好運。 –

+1

如果你必須在問題中解釋爲什麼這個問題是在話題上,那可能意味着它是無關緊要的。另外,僅僅因爲它與編程相關並不意味着它非常適合該網站。 –

回答

3

你好像丟了,我曾經在這方面做過研究,所以我會拍一些。我覺得這個問題是無關緊要的,但我傾向於將事情打開。

查看P2P網絡Chord,CAN,TapestryPastry關於P2P網絡以及僞代碼的示例。這些作品都是基於分佈式哈希表(DHTs),並且已經存在了10多年。他們中的許多人都有可以使用的開源實現。

至於「特權節點」,你的問題自相矛盾。你需要一個P2P網絡,但你也希望節點擁有比其他更多的權利。根據定義,您的網絡不再是P2P,因爲同行不再享有同樣的特權。

您的問題指向P2P網絡中的信任 - 自從引入(DHT)以來,學者們一直關注的問題。我覺得沒有找到令人滿意的答案,可以解決所有情況下的所有問題。以下是一些可以幫助您的方法:

(1)比特幣通過強制其網絡中的所有用戶執行計算密集型工作來解決惡意用戶的問題。對於任何需要僞造比特幣的成員來說,比每個人都需要更多的計算能力來證明他們比其他人做了更多的工作。

(2)根據聲望給予特權。您可以通過多種方式計算聲譽。一個簡單的例子 - 對於系統中的每個事務(發送文件,查找數據庫,完成一項工作),請求者將發送一個簽名確認(使用私鑰/公鑰)給發件人。然後,每個對等體可以將其簽名確認的累積呈現給任何其他對等體。任何積累了N確認(您確定N)的同伴具有更多權限。

(3)擁有一個提供權限的中央服務器。這是最簡單的,你可以確定什麼樣的信任對你來說意味着什麼。你正在交出。

這是枯燥的版本 - 祝你好運。

+0

第二種方法聽起來很有趣。節點確認彼此的聲譽。如果有人加入多個節點來僞造信譽會怎樣。如果虛假節點比正常節點多,則它們總是可以超過整個系統。 –

1

我猜測管理節點是不同於正常節點的,因爲能夠告訴其他節點該做什麼(以及常規節點應該服從)。
你必須給管理節點某種方式證明自己可以通過驗證由其他節點,但不是僞造由他們(如警察的ID)。我能想到的最標準的方法是使用TLS證書。
(非常),您可以創建稱爲密鑰和證書的文件對。關鍵是祕密,屬於一個身份,證書是公開的。
您創建一個CA證書,並將其分發到所有節點。
使用該CA,可以爲每個管理節點創建一個「管理節點」證書。
發出命令時,管理節點將其證書頒發給「常規」節點。使用您事先提供的CA證書的常規節點可以確保管理節點是真實的(因爲證書實際上由CA簽名),並且可以按照要求進行操作。

優點:

  • TLS/SSL被許多其他產品創造了secure tunnel,防止「人在 中間」的攻擊和 扮演
  • 有現成的函數庫和從.net到C的幾乎所有語言的TLS/SSL示例項目。
  • 有撤銷列表,用於「取消」已被盜的證書(儘管您必須找到分配這些證書的方法)
  • 證書驗證處於脫機狀態 - 一個節點,需要的不是外部資源(除了CA證書)進行驗證

缺點:

  • 由於SSL/TLS是一種廣泛使用的系統,有很多工具利用錯誤配置的/舊的客戶端/服務器
  • 在這樣的庫中發現了一些漏洞(例如「heartbleed」),所以你可能需要修補很多軟件。

該解決方案仍然需要一些嚴肅的編碼,但依靠現有的和經過驗證的系統通常要比創造自己的系統更好。

+0

公鑰密碼聽起來正在向我回答這個問題。我可以用不同的術語來描述它,例如消息和簽名。只有擁有私鑰的人(人或機器)才能創建正確簽名的新郵件,並且在信任郵件來自特權源之前,非特權節點可以驗證郵件簽名(使用預先分發的證書)。這類系統中棘手的事情是預先分發證書,如果祕密丟失或泄露會發生什麼情況。請參閱wikipedia中的PKI:http://en.wikipedia.org/wiki/Public_key_infrastructure –