拜占庭容错问题 书面协议

拜占庭容错问题 书面协议(SM(m)算法)

司令官发送一个签名的命令给他的每个副官。然后,每个副官添加他的签名到命令上,并发送给其他副官,收到命令的副官再添加他的签名发送给其他副官…

书面协议相比口头协议,实际说的是在这个多人的将军模型中加了了个隐含条件:

  • 将军们能够使用签名技术,签名不可伪造,一旦篡改即可发现。
  • 同时任何人都可以验证签名的可靠性。

书面协议相比口头协议,所有的消息都是有记录的,解决了追根溯源的问题。

此算法不管将军总数n和叛徒数量m,只要采用该算法,忠诚的将军总能达到一致

(a)忠诚将军的签名是不能伪造的,内容修改可检测。(即 即使是叛徒也要原封不动的签了名将消息转发出去

(b)任何人都可以识别将军的签名,叛徒可以伪造叛徒司令的签名。(后半句是论文中的后半部分规定的)

初始化:

  • 将军发出命令{A;0}给所有副官。
  • 每个副官初始化自己的命令集合Vi为空集。

消息传递:

  • 将军向所有副官发送命令{A;0}。(A是命令进攻,0代表身份)
  • 副官1收到命令{A;0},将其命令集合Vi设为{A;0},并将消息{A:0:1}发送给其他副官。
  • 副官2收到消息{A:0:1},将其命令集合Vi设为{A;0;1;2},并将消息{A:0:1:2}发送给其他副官。
  • 副官3是叛徒,忽略命令A。

最终决策:

  • 当副官1和副官2不再收到新的消息时,他们使用选择函数choice(Vi)来确定最终的命令。
  • 由于副官1和副官2的命令集合相同{A;0;1;2},他们选择命令A作为最终决策。

我们定义choice(V)函数来决定各个副官的选择,这个函数可以有非常多种形式,他只要满足了以下两个条件:

(1)如果集合V只包含了一个元素v,那么choice(V)=v

(2)choice(o)=RETREAT,其中o是空集

任何满足了这两个条件的函数都可以作为choice(),例如取平均值就可以, 们只需要根据具体情形定义choice()即可,这个非重点

为什么说当k<m(k代表副官发送消息数,m代表叛徒数)的时候才会发送呢,这是因为每条信息只需要被复制m+1就可以了(这里将 将军署名的时候也算是一次签名,可以发现每签名1次就是一个复制),超过m就没必要了。即只需要复制m+1此所有的忠臣就可以达成一致。

自己理解(如果忠诚的将军收到的命令只被m个叛徒将军签署,那么忠诚的将军将无法确定命令的真实性,因为叛徒将军可能会签署不同的命令,并欺骗忠诚的将军。

如果忠诚的将军收到的命令被少于m + 1个忠诚将军签署,那么叛徒将军可以通过控制签署的命令来操纵忠诚的将军的决策。这可能导致忠诚的将军之间的不一致和混乱。)

拜占庭容错问题书面协议根据自己理解已详细解释,有误请指正

实用拜占庭协议PBFT (详解见下次

利用了Hash函数、数字签名算法、消息验证码,它是第一个工作在异步网络上的拜占庭容错协议,且复杂度只有O(n^2)

PBFT 需要经过三个轮次来完成共识过程:预准备、准备和提交。每个轮次都涉及节点之间的消息传递和确认。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值