安全性
保证安全性即是保证每个将军的对同样的行动序列号都有一致的行动。例如,假设序列号3的内容是「进攻」,安全性保证:不会有任何将军的序列号3内容为「撤退」。
安全性与安全门坎f有关,若将军总数为3f+1,则最多能够容许f个叛徒,因此所有预备/执行都必须取得2f+1个将军同意。如此若要使同一个序列号产生两个分歧的行动,则至少需要有1个好将军同时同意两个分歧的内容,这与好将军的假设矛盾。
三阶段流程也与安全性有关。为什么不是两阶段而是三阶段?设想一个只有两阶段投票的情境:假设将军2于收集到「已预备证明」后便直接执行序列号6的行动「进攻」,但将军3、将军4由于信使延误的关系而发起视域变换,因此将军2也被迫跟着进行变换。
由于将军3、将军4并未收到序列号6的行动,也因此序列号6的内容不会被重新执行,新主导者会将序列号6指派给下一个行动「撤退」,结果将军2将会执行同为序列号6「进攻」与「撤退」,违反了安全性。
因此第三阶段—「执行阶段」(Commit Phase)是必要的,唯有在将军2确保将军3、将军4都收集了序列号6的「已预备证明」并回传「执行」信息的情况下才能执行序列号6的内容。如此就算发生视域变换,也能保证序列号6不再被重复指派不同内容,安全性因此获得保证。
活跃性
保证活跃性即是保证行动不会因为停顿的主导者而中断,而这仰赖于视域变换的运作。为了避开FLP原理的限制,PBFT使用弱同步假设(Weak Synchrony),即假设网络延迟的增长速度慢于每次超时增加的缓冲时间。如果在视域变换的过程中超时,则各将军再发起一次变换,并延长等待时间至2T/3T/4T…以此类推,直到等待时间可以容忍信使的延迟。在最坏的情况下,就算碰到连续f个叛徒,也能保证其活跃性。
点击关注币海启行微信公众号,了解更多