拜占庭问题
在战争之中,n个将军们包围了一群敌人,并且希望统一行动来攻打敌人保证作战胜利。如果将军们分散进行作战,即没有进行统一的指挥,那么更可能被敌人歼灭。为了保证统一行动,将军们希望通过投票的方式进行决策。如果有多数人决定在某一个时间点进行行动,则将军们将会在此确定的时间统一进攻。
一个将军将会首先对其他各个将军发出信息为“攻打”或者“不攻打”,进而各个将军之间为了保证信息的准确性,将会互相之间进行验证(在此看来更多的是为了保证首发信息将军不为叛徒)。
但是由于相互距离较远,则只能通过派信使进行传递的方式进行操作。由于不能当面进行表决,并且信使们的速度不确定,所以可能出现延迟的情况。不考虑信使中途发生意外的情况。
但是在将军们之中,已经知道有
f
f
f个将军是叛徒,他们希望干扰将军们活动的一致性。于是他们在进行投票时候,可能会进行以下两种决策:
1、保持沉默(即不派信使传递信息,伪装成非叛徒节点,使得决策被推迟)。
2、传递错误信息(即投票表示不进攻,使得在局面上出现不进攻的人数占据大多数,无法进行此次统一进攻活动)。
则对于将军人数n,和叛徒个数f,应当满足什么样的数学关系式,则当前局面下将军们可以统一行动歼灭敌人。
经过论证,n和f满足关系为
n
>
=
3
⋅
f
+
1
n>=3·f+1
n>=3⋅f+1,论证如下:
1、保证决策不会被无限推迟,即能够在
n
−
f
n-f
n−f步之内做出决定。
n
−
f
n-f
n−f步指能够通过收到的前
n
−
f
n-f
n−f个信息做出决定。举出一个例子,若当前有4个节点,只有一个叛徒,此时某个将军收到的决策为两票同意一票反对,若最后一个未作出决策的将军为叛徒,但是其他将军由于无法确定他是否为叛徒,并且缺少最后一个将军的决策,此时的决策无定论。则决策陷入无限等待之中。
2、保证此时的决策已经有忠诚将军决策数目大于叛徒将军决策数目,则
n
−
f
−
f
>
f
n-f-f>f
n−f−f>f,则可以得出
n
>
3
⋅
f
n>3·f
n>3⋅f,即
n
>
=
3
⋅
f
+
1
n>=3·f+1
n>=3⋅f+1。
将此问题迁移到区块链上面
我们将进攻类比为区块链中某一个密钥的认同表决。
此密钥是指,某个矿工得到的对于算力证明的答案。在该矿工得到该密钥之后,需要将此密钥发送给所有矿工进行验证,由于此挖矿问题具有易于验证,难以计算的特性。则验证过程相比挖矿过程具有更少的算力消耗。此时将矿工类比为将军,矿工中有恶意矿工,他们希望发动一些恶意交易,或者阻止正常交易的进行。
则对于此验证问题,近似于一次投票表决。仍然需要满足上述拜占庭问题的要求才能使得交易正常进行。由于分布式系统具有延时的情况发生,则可以类比为信使传递信息,拜占庭问题对于此问题具有良好的类比特性。
在区块链的情况之中,由于现实原因,恶意节点的数目不可能过于多,即其数量超过总数量的一半的可能性极低。由于算力的相对弱势,使得区块链的恶意节点无法通过“运气”劫持一部分节点进而破坏区块链的安全性,因为接下来发展的过程中,由于占据算力优势的仍然是忠诚节点。忠诚节点修改恶意节点的可能性随着交易数目的上升,逐渐趋近收敛于1。则此时恶意节点的最优策略是保持沉默,即延迟此交易的发生。
而区块链采取了类似将军们的互相之间通信的方式保证透明性(即
P
B
F
T
PBFT
PBFT共识算法)。但是此算法类似于生成一个完全图,其复杂度为O(
n
2
n^2
n2)。并且只有在恶意节点数目f满足
n
>
=
3
⋅
f
+
1
n>=3·f+1
n>=3⋅f+1的时候才有效。
有
S
B
F
T
SBFT
SBFT算法为了降低其复杂度,增加了一个决策桌节点,类似于每个人做出决策之后通过一个盲盒放入该决策桌节点之上,形成了一个星型结构。此种决策方式虽然将复杂度降低到O(
n
n
n),但是这种做法将区块链去中心化的特性削弱了。
由此看来,区块链在完全去中心化特性下的安全性需要极大的算力成本,在削减算力之下的区块链又失去了一部分的去中心化特性。
那么就需要从别的地方做努力了。