2014-07-08 247 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 –