The Science of the Blockchain学习笔记(四)

前言

衷心感谢《The Science of the Blockchain》一书的作者Roger Wattenhofer。《The Science of the Blockchain》一书较为严谨地介绍了一种基础技术——容错分布式系统(faulttolerant distributed system)。

在容错分布式系统中,数据存储在多台服务器上,并且多台服务器协同完成一项计算操作。这里面,最大的问题便是如何进行协调(coordination problem)。围绕协调问题,研究人员提出了诸多算法与模型,如:区块链,一致性协议,电子合同,共识机制,电子账本,溯源系统,等。

容错分布式系统具有许多重要作用:
(1)同一份数据在多台服务器上进行备份,当一台服务器宕机或遭到黑客恶意攻击时,仍可从其它正常服务器获取或恢复数据(从另一角度出发,多中心化防止了一台服务器的腐败,message corruption一词用的很有意思)。
(2)客户端 C 1 C_1 C1 S a S_a Sa较近而离 S b S_b Sb较远,客户端 C 2 C_2 C2则相反,且 S a S_a Sa S b S_b Sb提供相同的服务。但只有一台服务器时,总有一个客户端的响应时间较长,而有多台服务器时,客户端可就近获取服务,减少响应时长。

拜占庭协议

定义4.1(拜占庭节点) 一个可以有任意行为的节点称为拜占庭节点。这里的任意行为包括:不发送任何消息,发送不同的或错误的消息给不同的节点,谎报自己的输入值,等等。

定义4.2(拜占庭协议) 在存在拜占庭节点的情况下,一个满足定义3.1的共识协议被称为拜占庭协议。假设有 f f f个拜占庭节点,若协议依旧能够正确运行,那么该协议具有 f f f级别弹性( f f f-resilient)。

有效性定义

定义4.3(任意输入有效性) 协议最终输出的共识值必须是任意节点的输入值。

由于存在拜占庭节点,故定义4.3意义不大。

定义4.4(正确输入有效性) 最终协议输出的共识值必须为正确节点的输入值。

由于很难区分拜占庭节点的行为与正确节点的行为,故定义4.4较难得以实现,接下来给出定义4.5和4.6。

定义4.5(全部相同有效性) 若所有正确节点的输入值皆为 v v v,则协议最终输出的共识值必须是否 v v v

定义4.6(中值有效性) 假设节点的输入值是有序的,为排除拜占庭异常节点,使协议最终输出的共识值为所有正确节点输入值的中值。

协议设计

原书给出算法4.9。
在这里插入图片描述
引理4.10 当节点数 n ≥ 4 n \geq 4 n4且只有1个拜占庭节点( f = 1 f=1 f=1)时,最终所有正确节点持有相同的集合 T T T

证明. 至少有3个正确节点,1个正确节点至少见过2次同一个正确节点输入值,比如节点B的值被节点A和节点C收到,节点A构造出 S u , A S_{u, A} Su,A,节点C构造出 S u , C S_{u, C} Su,C并发送给节点A,节点A见过2次节点B的值。若拜占庭节点分别向不同节点发送不同的值,该值不会被添加进集合T;若拜占庭节点至少发送过2次值 v ∗ v^* v,则 v ∗ v^* v出现在集合 T T T中。

定理4.11 算法4.9在 n ≥ 4 , f = 1 n \geq 4, f=1 n4,f=1的情况下是满足任意输入有效性的拜占庭协议。

证明. 协议满足有效性,且2轮后停止。证毕。

定理4.12 算法4.9在 n = 3 , f = 1 n = 3, f=1 n=3,f=1的情况下不是满足全部相同有效性的拜占庭协议。

证明. 再次回顾共识协议的定义,要求满足

  • 一致性:所有正确的节点决定相同的值。
  • 终止性:所有正确的节点在有限时间内终止。
  • 有效性。

假设存在3个节点 P a , P b , P c P_a, P_b, P_c Pa,Pb,Pc,其中 P a P_a Pa P b P_b Pb是正确节点,而 P c P_c Pc是拜占庭节点,考虑下图,虚线消息比实线消息更早到达。
在这里插入图片描述
节点 P a P_a Pa坚持自己的值0,而节点 P b P_b Pb坚持自己的值1(注: P a , P b P_a,P_b Pa,Pb无法分辨 P c P_c Pc是否为拜占庭节点),两者永远达不成共识,不满足定义的一致性

定理4.13 n n n个节点组成的网络,若其中存在 f ≥ n / 3 f \geq n/3 fn/3个拜占庭节点,那么不存在拜占庭协议。

证明. 考虑极端情况, n / 3 n/3 n/3个正确节点输入值为0, n / 3 n/3 n/3个正确节点输入值为1, n / 3 n/3 n/3个拜占庭节点分别向2组节点发送不同的值。

国王算法

原书伪代码晦涩难懂,接下来给出伪代码注释和例子。
在这里插入图片描述
参考上图课件,对原书伪代码进行注释
在这里插入图片描述
举一个例子解释上述算法步骤:

在这里插入图片描述
红色节点为拜占庭节点,蓝色节点为正确节点。

  • 在第1轮里,所有节点广播自己的值,各正确节点得到的消息分别为(0,0,1,1)、(0,1,1,1)和(0,0,1,1)。
  • 在第2轮里,由于节点3的value(1)出现了 3 ≥ 4 − 1 3 \geq 4-1 341次,故节点3提起议案propose(1);此时,假设拜占庭节点向不同节点广播不同的议案值,企图让节点0保持值0;由于节点2和节点3收到propose(1)的次数为 2 > 1 2 > 1 2>1,节点2和节点3将自己的值设置为1,而节点0不做更改;
  • 在第3轮里,假设拜占庭节点为国王节点,它向不同节点广播不同的值,节点0收到的propose(0)的次数为 1 < 4 − 1 1 < 4-1 1<41,故将值设置为1;而节点1收到的propose(1)的次数为 2 < 4 − 1 2 < 4-1 2<41,故将值设置为0。

在这里插入图片描述
下一个阶段操作类似。

引理 4.15 算法4.14满足全部相同有效性。

证明. 若所有正确节点一开始都是值 v v v,那么所有正确节点必然都提起议案propose(v),所有正确节点收到propose(v)的次数至少为 n − f n -f nf(注:故障节点属于拜占庭节点而非正确节点),所有正确节点最终选择值 v v v而不理会国王节点的广播值。

引理4.16 n > 3 f n > 3f n>3f时,如果一个正确节点提起议案propose(x),那么不会有其它正确节点提起议案propose(y),其中 y ≠ x y \neq x y=x

证明. (反证法)假设正确节点A提出propose(x),正确节点B提出propose(y),观察算法第4行,节点A和节点B分别收到了 n − f n-f nf次x和 n − f n-f nf次y,考虑极端情况这里面各自混有 f f f个拜占庭节点信息,那么对于节点A至少有 n − 2 f n-2f n2f个正确节点提出x,对于节点B至少有 n − 2 f n-2f n2f个正确节点提出y,总有至少有 2 ( n − 2 f ) + f = 2 n − 3 f 2(n-2f) + f = 2n-3f 2(n2f)+f=2n3f个节点。因 n > 3 f n > 3f n>3f,有 2 n − 3 f > n + n − 3 f > n 2n - 3f > n + n - 3f > n 2n3f>n+n3f>n个节点,产生矛盾,假设不成立。

引理4.17 至少有一个阶段的国王节点是正确节点。

证明. 总共有 f + 1 f+1 f+1个阶段,而每一轮的国王节点都不同,总共只有 f f f个拜占庭节点,证毕。

引理4.18 在一个以正确节点为国王节点的阶段里,若 n > 3 f n > 3f n>3f,当国王节点广播值 v v v后,所有正确节点最终不会再改变它们的值。

证明. 分2种情况:
情况1. 所有正确节点都将值设置为国王节点的值 v v v,此时所有正确节点都具有相同的值。由引理4.15可知,不再改变值。
情况2. 有一个正确节点没有选择国王节点的值 v v v,记该节点的值为 x ′ x' x,意味着它收到至少 n − f > f n-f > f nf>f个propose(x’),即至少有 n − 2 f n-2f n2f个正确节点向它提起过议案propose(x’),可进一步推出,所有正确节点皆收到过至少 n − 2 f n-2f n2f个propose(x’),而因为 n > 3 f n>3f n>3f,故有 n − 2 f > f n-2f>f n2f>f。换句话说,所有正确节点都将自己的值设置为 x : = x ′ x := x' x:=x,包括国王节点 x : = x ′ = v x := x' = v x:=x=v,由引理4.15可知,不再改变值。(注:由引理4.16可知,不可能有另一个正确节点坚持 x ′ ′ x'' x而拒绝 v v v,过程中只有一个次数大于 f f f的propose)

定理4.9 算法4.14是满足任意输入有效性的拜占庭协议。

证明. 引理4.18易推定理4.19,算法在 3 ( f + 1 ) 3(f+1) 3(f+1)轮(即f+1个阶段)后停止。

至于中值有效性请自行扩展阅读原书提供的15年文章。

David Stolz and Roger Wattenhofer. Byzantine Agreement with Median Validity. In 19th International Conference on Priniciples of Distributed Systems (OPODIS), Rennes, France, 2015.

算法4.14是同步模型,注意是同步。(到这,算法4.14其实已经蛮实用的了,异步拜占庭算法对输入值域有限制。)

“轮”数最小下界

定理4.20 若存在 f f f个崩溃节点,一个同步共识算法至少需要 f + 1 f+1 f+1轮来达成共识以判定网络中所有节点的最小输入值。

证明. 假设绩点 u 1 u_1 u1持有最小输入值 x x x,在第1轮 u 1 u_1 u1只来得及将 x x x告知它的邻居节点 u 2 u_2 u2便崩溃,在第2轮 u 2 u_2 u2只来得及将 x x x告知它的邻居节点 u 3 u_3 u3便崩溃,以此类推,直到第 f f f轮仅有节点 u f + 1 u_{f+1} uf+1知道 x x x值, u f + 1 u_{f+1} uf+1起码需要多1轮告知剩余节点 x x x值的存在。

异步拜占庭协议

在阅读异步拜占庭协议之前可以先复习一下Ben-Or协议,算法的输入有 x ∈ { 0 , 1 } x \in \{0, 1\} x{0,1}要求。
在这里插入图片描述
引理4.22 假设 n > 9 f n > 9f n>9f,如果一个正确节点在算法第10行选择了值 x x x,那么其它正确节点不会在算法第10行选择 y ≠ x y \neq x y=x

证明. (反证法)假设在算法第10行,正确节点A选择了0,而正确节点B选择了1。那么意味着至少有 n − 5 f n - 5f n5f个正确节点提出议案propose(0, r),至少有 n − 5 f n - 5f n5f个正确节点提出议案propose(1, r),加上 f f f个拜占庭节点,总共有 2 ( n − 5 f ) + f = 2 n − 9 f = n + n − 9 f > n 2(n-5f) + f = 2n - 9f = n + n - 9f > n 2(n5f)+f=2n9f=n+n9f>n个节点,导致矛盾,故假设不成立。

定理4.23 f < n / 9 f < n / 9 f<n/9时,算法4.21是满足正确输入有效性的拜占庭协议。

证明. 首先,由于最多只有 f f f个拜占庭节点,算法第6行等待 n − f n-f nf个议案是没有问题的。

下面证明有效性。如果所有正确节点都持有相同输入值 x x x,则所有正确节点都会提出议案值propose(x),每个节点都会收到至少 n − 2 f n - 2f n2f个议案propose(x),在第1轮结束,满足全部相同有效性。若正确节点持有不同输入值0和1,则算法又满足正确输入有效性。

接下来证明一致性。记 u u u为第一个决定值x(即算法第8行)的节点,且 u u u从节点集合 S u S_u Su(大小为 n − f n-f nf)处接收到消息(算法第6行)。由于处于异步模式,另一个节点 v v v可能从节点集合 S v S_v Sv(大小为 n − f n-f nf)处接收到消息。两个集合 S u S_u Su S v S_v Sv最多只有 f f f个元素的发送者不同,看下图,假设有 k k k个元素发送者不同,总共有 n − f + k ≤ n n - f + k \leq n nf+kn个节点,即 k ≤ f k \leq f kf。对于发送者相同的元素,里面可能有 f f f个来自拜占庭节点。当 u u u来到算法第7行收到至少 n − 2 f n-2f n2f个propose(x)时, v v v收到至少 n − 4 f n-4f n4f个propose(x),即去掉 f f f个不同发送者的元素,再去掉 f f f个可能撒谎的拜占庭节点, S u S_u Su S v S_v Sv至少有 n − 4 f n-4f n4f个相同的propose(x)。根据算法第9行,所有正确节点都会变成 x i : = x x_i := x xi:=x

最后证明终止性。接下来只要推断 u u u出现的可能性,算法第12行是随机选择,请复习Ben-Or的终止轮数分析。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值