分布式协议与算法实战
韩健
腾讯资深工程师
23193 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 31 讲
分布式协议与算法实战
15
15
1.0x
00:00/00:00
登录|注册

加餐 | 拜占庭将军问题:如何基于签名消息实现作战计划的一致性?

课堂思考
内容小结
如何实现作战计划的一致性?
什么是签名消息?
拜占庭将军问题:如何基于签名消息实现作战计划的一致性

该思维导图由 AI 生成,仅供参考

你好,我是韩健。
01 讲中,为了不啰嗦,让你举一反三地学习,我对签名消息型拜占庭问题之解,没有详细展开,而是聚焦在最核心的点“签名约束了叛徒的作恶行为”,但从留言来看,很多同学在理解签名和如何实现作战一致性上,还是遇到了问题。比如不理解如何实现作战计划的一致性。
另外,考虑到签名消息是一些常用的拜占庭容错算法(比如 PBFT)的实现基础,很重要,所以这节课我会对签名消息型拜占庭问题之解进行补充。在今天的内容中,除了具体讲解如何基于签名消息实现作战计划的一致性之外,我还会说一说什么是签名消息。希望在帮你掌握签名消息型拜占庭问题之解的同时,还帮你吃透相关的基础知识。
当然,在学完 01 讲之后,相信你已经明白了,签名消息拜占庭问题之解,之所以能够容忍任意数量的叛徒,关键就在于通过消息的签名,约束了叛徒的作恶行为,也就是说,任何篡改和伪造忠将的消息的行为,都会被发现。
既然签名消息这么重要,那么什么是签名消息呢?

什么是签名消息?

签名消息指的就是带有数字签名的消息,你可以这么理解“数字签名”:类似在纸质合同上进行签名来确认合同内容和证明身份。
在这里我想说的是,数字签名既可以证实内容的完整性,又可以确认内容的来源,实现不可抵赖性(Non-Repudiation)。既然签名消息优点那么多,那么如何实现签名消息呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了拜占庭将军问题中的签名消息解决方案,重点讨论了如何基于签名消息实现作战计划的一致性。文章首先解释了数字签名的重要性,指出其能确保消息的完整性和来源,实现不可抵赖性。通过Bob和Alice的故事,说明了如何使用非对称加密算法和哈希算法来实现签名消息。文章强调了数字签名约束了叛将们的作恶行为,使得他们无法篡改或伪造忠将的消息。然后详细介绍了如何实现作战计划的一致性,通过多轮协商和签名消息的约束,保证忠将们能够达成一致的作战计划。最后,强调了签名消息的拜占庭问题之解对后续拜占庭容错算法的影响和启发。整体来说,本文深入浅出地介绍了签名消息在拜占庭将军问题中的重要性和应用,为读者提供了清晰的技术解决方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式协议与算法实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(41)

  • 最新
  • 精选
  • 安排
    除了第一、二轮的指挥官外,剩余的 2 位将军将分别作为指挥官,在上一轮收到的作战指令上,加上自己的签名,并转发给其他将军。 第一二轮不是所有人都当过指挥官了吗?为什么还会有剩余的两位将军呢?

    作者回复: 加一颗星:),执行多少轮,不是由“是否当过指挥官”决定的,而是叛将数m决定的,也就是m个叛将,需要执行m +1轮。另外,论文中的“指挥官”和“副官”,是辅助大家理解的。

    2020-03-25
    12
    21
  • 羽翼1982
    每位副官,将从指挥官处收到的新的作战指令(也就与之前收的作战指令不同),按照顺序(比如按照首字母字典排序)放到一个盒子里。 ---------------------------------- 这个排序的方法感觉不是说的很清楚,是按照命令本省的字面量(进攻 / 撤退这两个文字)的字典序进行排序吗? 在上面的2忠2叛问题中,1名武将会收到 1+2+2=5条消息,这些消息如何排序,麻烦用例子说明的清晰些

    作者回复: 加一颗星:),问题1,是的;问题2,需要排序的是指令,而不是消息。可以这么理解,最终所有忠诚的将军都会收到完全相同的作战指令集合,如果把这些指令按照一定的顺序进行排序,再约定执行某个位置的指令,就能保证忠将们执行一致的作战指令了。

    2020-03-25
    5
    10
  • Geek_8af153
    在楚发起的两忠两叛案例中,苏秦的盒子的第一个指令不是进攻吗?为什么变成撤退了?

    作者回复: 盒子的指令要排序的,比如字典排序,因为C在J前面,所以,“撤退”排在了“进攻”前面。

    2020-03-26
    3
    9
  • dakingkong
    实际操作时,不知道判将的数目,怎么判断是否迭代了m+1轮

    作者回复: 加一颗星:),从将军总数来反推,n个将军,能容忍(n - 2)个叛将。需要我们注意的是,这个算法是“早期经典”算法,比较理论化,很难在实际场景中落地,在实际场景中一般使用PBFT等算法。

    2020-07-15
    3
    7
  • Geek_8c4282
    老师图10没有看懂,每个将军发送其他两人的指令为什么不一致呢,我的理解是每个将军,当然除了叛将外,忠将发送的指令都是一致的,是不是画错了?

    作者回复: 加一颗星:),因为在第三轮作战信息协商中,苏秦、齐、燕分别作为指挥官,将接收到的作战信息,附加上自己的签名,并转发给另外一位,而他们接收到的消息可能是不同的,比如,齐需要将来自“楚、燕”的作战指令“撤退”转发给苏秦,需要将来自“楚、苏秦”的作战指令“进攻”转发给燕。

    2020-10-30
    5
  • Geek_201736
    你好,下面内容是我个人的理解,不知道是否正确。 图9中苏秦指向齐的箭头应为:“进攻:楚、苏秦”而非“进攻:苏秦、楚” 图10中苏秦指向齐的箭头应为:“进攻:楚、燕、苏秦”而非“进攻:苏秦、楚、燕” 图10下面文字结论:“最终,苏秦和齐收到的作战信息都是‘撤退、进攻’”,事实上,仔细看图,发现第三轮的作战协商,苏秦收到的作战信息为: {撤退:楚、燕、齐;撤退:楚、齐、燕} 齐收到的作战信息为:{进攻:楚、苏秦,燕;进攻:楚、燕、苏秦}。 而苏秦和齐发出的指令倒是“进攻”和“撤退“都包含。 看了你下面的回复,是针对指令进行排序,收到的指令无法排出来“撤退、进攻”序列。请指明。如果再进行第四轮协商,苏秦都将收到“进攻”,而齐都将收到“撤退”,而且苏秦发出的指令都是”撤退“,而齐发出的指令都是进攻。 另外因为非对称密钥的特性,考虑一旦指令传递链条中有忠将的私钥进行过加密,则这条指令不能再被篡改或伪造,因此指令后跟随的信息传递链条的顺序应该很重要,不可以擅自更改顺序。是不是这样描述会更准确些。 由于geekbang这边,您如果不精选留言,我看不到这条留言,因此重发了一下,盼回复解惑,多谢。

    作者回复: 加一颗星:),赞,思考很细致,1. 在图中没有对将军顺序在显示上做特别区分;2. 是对所有接收到指令进行排序,而不是只对一轮接收到的指令进行排序;3. 是的,消息的多轮传递链条,确保了所有忠将能最终接收到相同的指令集合。

    2020-09-21
    1
  • XxxxxxxMr
    假设 数据丢失 某个忠将的盒子里面只有一条数据,另外忠将的盒子有多条数据 ,按照之前的约定 (取盒子里面第二条指令)如何达到统一的作战计划。

    作者回复: 加一颗星:),不会出现这种情况,忠将们是忠诚的,他们之前的通讯是能确保正常的。

    2020-11-10
  • Simon
    叛徒楚先发送作战信息的情况下,在第三轮中,齐为何会向苏发撤退,向燕发进攻?

    作者回复: 加一颗星:),因为在第三轮作战信息协商中,苏秦、齐、燕分别作为指挥官,将接收到的作战信息,附加上自己的签名,并转发给另外一位。也就是说,齐将来自“楚、燕”的作战指令“撤退”转发给苏秦,将来自“楚、苏秦”的作战指令“进攻”转发给燕。

    2020-10-30
  • 每天都要加油
    对于通过签名问题来解决拜占庭将军问题的时候,目标是保证忠将行动的一致性,对于有m个将军的情况,能够容忍m-2个叛徒, 需要进行m+1轮次的信息交换来保证忠将行动的一致性。签名问题能够保证叛将发送错误的消息,能够保证叛徒无法改变忠将之间的通信。

    作者回复: 加一颗星:),略微补充下,3个m的含义不同,“m”和“m - 2”中的m,表示将军数;“m+1”中的m,表示叛将数。

    2020-09-15
  • Mars
    请问下老师,由于第二轮燕发送了背叛消息,直觉上感觉最后大家收到的排过序的指令不应该完全一致,会导致最后的决策也不一致。想问下能解释下指令序列是如何最后完全一致的嘛?

    作者回复: 加一颗星:),算法是能保证的,可以推导体验下。

    2020-09-04
收起评论
显示
设置
留言
41
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部