The Science of the Blockchain笔记(四)

认证的协定

上一篇:The Science of the Blockchain笔记(三)

  拜占庭节点能就它们的输入和接收到的消息撒谎。能检测出某些谎言并具有限制拜占庭节点的能力吗?也许可以使用签名来证实消息的真实性。

利用认证的协定

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
证明.
  假定主节点p不是拜占庭节点,并且其输入为1,那么p在第一轮广播 value(1)p ,这将触发所有好节点将决策值设为1。如果p的输入是0,那么不存在签名的消息 value(1)p ,因此无节点可以将决策值设为1。
  如果主节点p是拜占庭节点,那么需要所有好节点判定为相同的决策值,否则算法就不正确。假定节点P在第i轮(i < f + 1)说服一个好节点v其值为1。由此可知v接收到i个签名的消息 value(1)u 。 然后,v将广播i + 1个签名的消息value(1)u (算法第10行),这将触发所有好节点也判定决策值为1。如果p是在第f + 1轮才说服某个节点v,则v必须接收f + 1个签名的消息。由于至多f个节点是拜占庭节点,至少存在一个好节点u在第i <f + 1轮中已判断决策值为1,并发布了消息value(1)u。这就又回到了前面的情形中。

分析.

  • 该算法仅花费f + 1轮,效率是最优的。
  • 实际上,主节点通常是好节点。如果这样,那么算法5.3仅需两轮!

Zyzzyva算法

在这里插入图片描述
当没有拜占庭节点存在:
在这里插入图片描述
分析.

  • 由于客户端接收到3f+ 1个一致的响应,所以所有正确的副本都必然处于同一状态。
  • 完成命令c仅需要三个通信回合。

考虑到拜占庭节点的存在:
在这里插入图片描述
分析.

  • 如果有副本宕机,一个客户端u将接收到少于 3f+1 条一致的相应消息。客户端u只能假设如果所有正确副本最终将命令c附加到它们的本地历史hr,那么客户端u只能假设命令c是完成的。

当主节点为拜占庭节点:
在这里插入图片描述
  例如,如果客户端u接收到两条由主节点签名的消息Response(a,OR)r,但其中包含的OR并不一致。那么客户端u能够证明主节点行为不当。客户端u通过向所有副本广播一条 (IHatePrimary)r消息来通告这个不当行为,同时也启动了一个视图改变( View Change) 。
在这里插入图片描述
分析.

  • 拜占庭主节点(Faulty Primary)可以通过不发出Ordered Request消息(算法5.8第4行)来降低Zyzzyva的速度,并重复进入到算法5.12。
  • 仍然存在优化的空间。例如,一个副本可能已知道客户端请求的命令。在该情形中,它可以作出回答而不询问主节点。进一步地,主节点可能己知道副本请求的消息OR。此时,它将旧的OR消息发送给发出请求的副本。

视图改变

在这里插入图片描述
视图改变协商阶段:
在这里插入图片描述
分析.

  • 集合H中的f + 1个 (IHatePrimary)r消息证明至少一个好副本发起了视图改变。该证明被广播到所有副本来确保一旦第一个好副本在当前视图中停止活动,所有其他副本都将跟随。
  • 在Zyzzyva中,拜占庭主节点在视图改变后开始充当常规副本。 实践中,所有机器最终都损坏并且很少在此之后修复自身。作为替代,可以考虑采用不在前一视图中的新副本来替换拜占庭主节点。

视图改变执行阶段:
在这里插入图片描述
分析.

  • 直至SI之前的命令被包括到新的历史hnew中。
  • 如果最后提交证书SI之后至少f + 1个副本共享一致的历史, 那么之后的命令也将被包括进去。
  • 即使f+1个正确副本一致地报告最后的提交证书Sl之后的命令c,客户端也可能不认为c是己完成的,因为发到该客户端的某条响应被丢失了。这样的命令被包括到新的历史hnew中。 当客户端重新尝试执行c时,副本将能够利用该客户端的请求中包括的时间戳标识出同一命令c,从而避免重复执行该命令。

视图恢复阶段(包含于视图改变执行阶段):
在这里插入图片描述
分析.

  • 命令c可以仅在Sl之后在算法5.8中完成。因此,3f + 1个副本向c发送了 Response(a,OR)r 消息。C包括2f + 1个副本的本地历史,在这2f+1个副本中至多f个副本是拜占庭节点。于是,c及其历史可以在C中的至少f + 1个本地历史中发现。

猜你喜欢

转载自blog.csdn.net/weixin_43255133/article/details/84346548
今日推荐