区块链日记3 —— 比特币与拜占庭将军问题
网上关于比特币和拜占庭将军问题的文章真的挺多的,但是我觉得自己写出来的才是真正理解了的。由于本人知识浅薄,在学习了网上一些大佬的文章后借鉴并加上自己的理解写出的这篇日记,文末会注明参考的文章
拜占庭将军问题(Byzantine Generals Problem),主要由莱斯利·兰伯特(Leslie Lamport)提出的一个故事模型,用来描述分布式系统一致性问题(Distributed Consensus),故事大致是这样的:
拜占庭帝国想去攻打一个强大的敌人,为此派出了10支军队去发动包围进攻,此敌人可以抵挡拜占庭5支军队的同时攻击,也就说拜占庭必须在同一时间让至少6支军队同时进攻。而由于是包围进攻,这些军队互相相隔甚远,相互间只能靠通信兵骑马传达各自的进攻意向和进攻时间,令众将军困扰的是,怎样确定收到的消息不是来叛徒的干扰消息以及统一进攻时间。
这个问题不考虑通信兵是否被拦截或者无法传达消息的情况,也就是假定消息传递的信道没有问题(Lamport 已经证明了在消息可能丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的)。
首先不考虑有叛徒的情况,假如军队A发出消息说“明天早上8点发动进攻”,那么其他所有军队都将收到这条通知,而由于消息的延迟性,这时B也说“今晚3点杀敌人个措手不及”,C又说“我看明天中午12点进攻不错”,那么10支军队都将收到这3条不同的消息,而每个消息都有不同的支持者,那么如何统一呢?
另外如果有叛徒,叛徒可能会传达错误的消息,或者向不同的军队发布不同的消息来制造混乱。
【区块链日记3 —— 比特币与拜占庭将军问题】要处理这些复杂的情况并不是所有将军一起坐下来喝点酒聊两句就能解决的,这里面的几个问题:
- 通信兵传递消息的延迟性(现在互联网可以轻松解决这个问题)
- 不能确定收到消息是否是原始消息(消息未加密且可篡改)
- 不知道哪条是叛徒发的消息,消息不可溯源
- 多条不同的消息同时存在,行动如何统一
比特币是如何解决的呢:
比特币在系统中巧妙的增加了消息发送的成本——“工作量证明”(POW - proof of work)。即在10分钟内所有想发送消息的人必须先做一道数学题,只有第一个计算出的人才可以像所有人广播消息,并且在消息中加上自己的专属加密签名,以及当前时间的时间戳来保证消息不能被更改,其他人收到消息根据签名可以验证消息的来源,并且保证了同一时间段内不会有多条消息难以选择。如果叛徒在中间散布多条不同的消息,则可以追溯到哪个是叛徒,而且叛徒不能修改消息的内容,除非叛徒能贿赂成功超过一半的将军,这种可能性几乎0。这样在同一段时间内,所有将军只会收到由最先做出数学题的将军发出的一条进攻消息,并且可以通过加密签名去验证消息的正确性,即使有背叛,只要超过半数则也达成共识,从而在没有中心化的情况下达成一致性。
那么这道数学题是怎样保证所有人的公平性呢?
这个数学题的用哈希算法来实现只能用穷举法来一一碰撞得出,也就是答案随机,能不能算出来全屏运气和穷举的速度(算力)。在这个世界上,随机才是真正的公平,而计算过程中做的计算就是“工作量”,表示你付出了多少。但是为什么大家愿意费心去算个随机数呢,中本聪的对于工作量证明的激励制度是,第一个计算出数学题的旷工可以获得者10分钟内所有交易的手续费以及打包一个区块的12.5个btc奖励
签名则是现代的一种加密技术 — 非对称加密,这种技术对信息的加密和解密采用两种不同的钥匙,公钥和私钥,是成对出现的。简单说私钥是身份的唯一证明自己留着,公钥发给大家用来证明自己。发送消息时用私钥进行加密后,对方收到加密后的消息,只能用你给的公钥进行解密,这就是验证身份的过程。别人回复你的消息时,用公钥进行加密,同样你可以用私钥进行解密来获取内容。所以非对称加密保护了消息内容, 并且能让消息接收方确定发送方的身份。
由此,一个不可信的分布式网络变成了一个可信的网络,所有的参与者可以在某件事在达成一致。
之前和朋友聊起区块链,她坚定的认为区块链就是个伪命题,并反问我怎么解决比特币挖矿消耗的巨额电力成本呢,我一时不知道怎么回答。在认真学习之后,我想说:这些成本相对于建立起的信任是值得的,而挖矿是维护比特币网络可靠性的最好办法。
学习英语也很重要噢,不然怎么无障碍阅读白皮书呢?
今日单词:
block chain:区块链文章参考:“白话区块链”公众号(hellobtc),百度百科,看完这篇,拜占庭将军问题就再也不糊涂了
distribute: 分发;分散;分布
consensus:共识
protocol:协议
communication:通信,交流
signature:签名
proof:证明;证据
attack:攻击
trust:信任
resolve:解决
推荐阅读
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 2019年12月24日
- 2019.4.18感恩日记
- 画解算法(1.|画解算法:1. 两数之和)
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 亲子日记第186篇,2018、7、26、星期四、晴
- 2019.4.2咖啡冥想日记
- 亲子日记(287)2019.4.27.
- 「#1-颜龙武」区块链的价值是什么()
- leetcode|leetcode 92. 反转链表 II