Obelisk 共识算法设计动机

开发更新: 我们想出了混合使用股权证明系统阻止女巫攻击(Sybil attack)的方法。

创建节点之前你必须证明你持有这个币,比如说有10个币。你发送10个币到地址A。然后你从地址A发送10个币到地址B。然后你使用地址A的公钥签名在Oblisk区块上的消息。

另外,你可以发布地址A的公钥然后使用那个公钥签名消息。节点会在每个时间段发布一个签名,或者在一些保留的币被转移的一些区块数以内,以此来维持与其他对等节点有效的信任关系。

另外,需要销毁证明(proof of burn),即地址A发币给地址B,但是地址B没有私钥。销毁证明与不需要从头下载整个区块链以操作整个节点是冲突的,也是不可能的。

系统规定了Obelisk节点的数量上限,限制了运行Obelisk节点币持有者的能力。节点数量的上限和对币的要求使得防范防范女巫攻击多了一层。

不太清楚这如何防范女巫攻击。你只是仅仅增加了在网络中新增节点的开销,因此女巫攻击需要财力损失才能这样做?

在这个阶段只是一个想法,发现有改进的地方。每个Obelisk节点有一个公钥。我们将公钥哈希到一个地址然后在拥有这个地址的输出里面存10个币。

这没有带来开销。只是证明你拥有10个币。它证明你知道对应公钥的私钥,这个地址有10个币在里面。你仍然可以花费这些币。

我们的想法是规定了节点数量的上限。如果必须持有10个币并且总共有一亿个币,那么就将网络节点的数量限制在一千万。目前,节点数量上限从数学意义上看没有什么用处,但是是我们应该记住的一个点。

当新的Obelisk节点运行时,他会“信任”一些随机对等节点。用户也可以手动新增一些他们信任的节点(交易所或者可信的社区成员)。节点根据公钥哈希和分布式哈希表(DHT)来识别,这不同于比特币使用的 IP:Port 对。你可以到处移动你的电脑,节点的识别不依赖与他的IP地址。

我们想通过节点的随机选择使得网络更加安全。我们不希望想Ripple那样的情况,3个开发者节点控制了整个网络。然后,我们想阻止这样一种情形,某些人运行200,000个节点并试图从新用户哪里累计信任关系。通常这些女巫攻击节点也不能达成51%攻击,但是能增加攻击成本东西仍然有用。

也许,我们可以做出这样的限制,新用户只能随机的信任持币的节点。信任关系不会生效如果节点没有持币,但是他们只是不能得到新的随机用户。

信任关系的连接图应该是全连接的随机图。少数节点(受信任的社区成员,交易所,网站和组织)会有更多的信任关系,这有利于区块达成一致性的时间收敛快一点。某些节点会用来验证一致性(你选择一大堆交易所或者不同的公钥),这些节点不会影响一致性的的达成,而是“一致性预言机”,它检查你的节点是否与网络收敛。

如果两个大交易所对一个特殊的块有不同的一致性,这说明出现了问题。这意味着网络分裂或者网络被攻击。 交易所可能想暂停交易直到问题解决。

Obelisk是skycoin的分布式一致性节点?我还以为skycoind是节点…

是的。

Skycoin有自己的区块链。区块链代码在https://github.com/skycoin/skycoin/tree/develop/src/coin. 这些代码解析区块并处理未消费的输出和交易。

Skywire是守护进程并且有一个“服务架构”。他可以运行服务,比如区块链同步服务和其他的东西。网状网目前是实现在Skywire上的一个服务(虽然这可能需要修改)。

共识机制和区块链是分离的。Obelisk节点(可能会被实现为Skywire上的一个服务)有区块链。每个节点有公钥,公钥识别Obelisk节点。每个Obelisk节点有它自己的区块链(没有币在链上)。节点创建新的区块并且用他的私钥签名。Obelisk区块链用来协商一致性(决定Skycoin区块链的头块)。Obelisk使用Ben-Or进行随机一致性。每个Obelisk节点有一系列它订阅的其他节点。这些节点影响本地节点一致性和投票决定。对于非病态的网络技术,本地一致性可证明收敛于全局的一致性。

每个节点投票产生链上的下一个区块。节点提议下一个区块并且节点对后继者进行投票。投票发布给Obelisk区块链区块的每个节点中。你的节点随机投票在替代方案中,每隔一段时间就投一次票。一旦40%的对等节点(你订阅的节点)已经达成共识,你就转向那个候选者。网络可以一次在多个分支上进行投票,这不需要慢下来等待达成共识。分叉的链随着时间被修剪成单一的链。两个或三个块的分裂是正常的,但几次之后确认恢复的块的概率以指数级减小为零。如果一个交易已经在所有候选链上执行,那么本质上是执行了的,即使是特定的共识链还没有决定。

这个是二分的Ben-Or,并且Skycoin会使用一些更高级的东西,那会非常快速并且有多个后继块可以从一致性集合中选择出来。随机化对避免网络 的子图陷入僵持很重要。投票过程是一种“退火”形式。节点只会通过本地信息独立地到达全局共识。

共识过程发生是公开的。一个节点发布区块,并使用私钥签名,区块被复制到他们之间的对等节点链的订阅者。然后“共识的预言机”,他们用来验证共识,但不影响共识结果。所以你可能选择几个交易所的公钥和一些可信的社区成员来检测是否有问题。这通常用来检测网络分裂。这也可以防止攻击,黑客控制你的路由器,控制你能连接到的对等节点。

如果某个节点出现在网络中并尝试让网络接受不同的链(51%攻击,回退交易),它通常会被忽略。大多数51%的攻击需要恶意节点行为,这些行为会被自动检测出来并导致订阅节点从信列表单中移除恶意节点。 最简单的51%攻击策略易于检测和从以数学的确定性上证明,它试图恢复交易,因为它需要回溯区块达成共识的决定。它需要发布具有相同序列号的两个签名的区块,所以我们只是自动的禁掉对节点的恶意行为。

我们试图消除最后可能的51%的攻击,在这种攻击中当一个子网节点离线(网络分裂攻击),然后以不同的块状共识状态重新加入网络,并试图强制这个网络回退交易。 大多数这些攻击都会失败,因为子网没有足够的影响力。

这中攻击还是很难成功的的。 万一有一个成功的51%攻击,一个解决方案是冻结网络,让每个节点/用户单独选择哪条链是合法的并让人们手动禁止攻击节点。 共识预言机允许每个节点以很高的概率知道状态是否同步,是否达成全局共识,或者它们是否是分裂网络子图的一部分。我们认为可能让每个节点以很高的概率知道本地信息的正确性,无论节点在共识决定中是否离线,然后忽略离线然后又突然出现的节点并试图强制一个链在网络上分叉。

在比特币中,如果你有大多数的哈希算力,只要你想,你就可以回退交易。

在Skycoin中,要回退交易:

  • 你必须控制大量的节点
  • 你所控制的节点必须在网络中具有“有影响力”并被网络拓扑信任
  • 你的节点需要展现出极端明目张胆的病态攻击行为却没有被检测到,因为这种检测将导致你失去攻击网络的信任关系。
  • 你的节点需要处于病态的攻击拓扑中,而不需要被检测到(很明显大多数僵尸节点将被很少的人信任)
  • 你必须能够获得获得你控制的节点串通一起导致一次成功的攻击(这不是很直接)
  • 如果攻击成功,您必须防止网络手动回退攻击(这将非常困难如果由于这个攻击人们丢了硬或钱 )

为了证明51%的攻击是被求证了的,你必须写下你的假设然后创建一个简单的数学模型,然后证明在这种条件下哪些事件可能发生,哪些事件不可能发生。 一旦您知道有可能的攻击条件,你试图消除他们,如果你不能消除它们,你会使他们尽可能的困难。你增加攻击者的成本,并减少一个特定攻击成功的概率。 那么你可以减少收益和激励攻击。

这种共识过程简并且容易建模,但不能直观的看到它。 最终会有一个可以把玩的JavaScript网站用一个动画来展示达成共识的过程。

 

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页