专栏名称: 币行观察
有料、有趣、有个性的币圈老朋友在这里。我们对比特币、莱特币、以太坊等始终保持着敏锐的关注。我们的前面是一片星辰大海,一起来参与和见证时代的改变吧。
目录
相关文章推荐
低吸波段王  ·  2月13日 神行午盘 ·  17 小时前  
微同城本地便民  ·  控油去屑必囤!自带山茶花清香,清爽蓬松 ·  昨天  
微同城本地便民  ·  控油去屑必囤!自带山茶花清香,清爽蓬松 ·  昨天  
江苏警方  ·  1,000,000元保住了! ·  2 天前  
第1眼新闻  ·  事关公积金贷款冲还贷 官方答复来了→ ·  2 天前  
51好读  ›  专栏  ›  币行观察

拜占庭将军与比特币的共识机制

币行观察  · 公众号  ·  · 2018-02-01 20:06

正文

试想一个问题:A向B转账了1个BTC,在比特币系统中,可能有的节点记录了A向B转账的事情,有的节点没有记录,那到底有没有转账这回事呢?


想真正理解这个问题,我们就要理解比特币的 共识机制 ,而理解共识机制,我们可以从 1982年提出的“拜占庭将军 问题说起。



拜占庭将军


这个问题是Leslie Lamport等在论文The Byzantine Generals Problem论文提出的,部分原文如下:


We imagine that several divisions of the Byzantine army are camped outside an enemy city, each division commanded by its own general. The generals can communicate with one another only by messenger. After observing the enemy, they must decide upon a common plan of action. However, some of the generals may be traitors, trying to prevent the loyal generals from reaching agreement.


通过直译这个论文来理解这个问题还是比较困难,可以适当的补充或者添加一些说明等,来更好的解读这个问题。


设想在中世纪,拜占庭帝国拥有巨大的财富,周围邻邦垂诞已久。但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵的都会失败,同时也有可能自身被其他邻邦入侵。拜占庭帝国防御能力如此之强,至少要有一半以上邻邦同时进攻,才有可能攻破。


然而,如果其中的一个或者几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭。于是每一方都小心行事,不敢轻易相信邻国。(其实这与原文所描述有些偏差,但这样说更易于理解)


问题所在


我们这里假设有A、B、C三位将军,当A发出进攻命令时,B如果是叛徒,他可能告诉C,他收到的是“撤退”的命令。这时C收到一个“进攻”,一个“撤退“,于是C被信息迷惑,而无所适从。


如果A是叛徒。他告诉B“进攻”,告诉C“撤退”。当C告诉B,他收到“撤退”命令时,B由于收到了司令“进攻”的命令,而无法与C保持一致。


正由于上述原因,在只有三个角色的系统中,只要有一个是叛徒,即 叛徒数等于1/3,拜占庭问题便不可解


解决方案


这个问题困扰了科学家们数十年,直到区块链的出现。



现在让我们想象一下, 给每个将军配备一台电脑(相当于分布式的节点) ,降低信息流通成本,让信息在极短的时间同步到各位将军。


同时,为了避免信息混乱,一段时间内只能有一位将军发送信息。


怎么来确定哪位将军发送信息呢?区块链系统 一般通过工作量证明(POW)来确定谁先发言


我们可以想象这是一个数独游戏,哪个将军最先解出来,谁就有权先发送信息。一般,数独的行与列可以增删,通过难度的调整保证这个一段时间是一个比较确定的数值。在比特币系统上,这个数字就是10分钟,也就是说比特币平均约每10分钟产生一个区块。


当某个节点发出统一进攻或者撤退的消息后, 各个节点收到发起者的消息必须签名盖章,确认各自的身份 。比特币在这里引用现代非对称加密技术为这个信息签名。


非对称加密算法的加密和解密使用不同的两个密钥,这两个密钥就是我们经常听到的公钥和私钥。 一般公钥是公开的,用于加密。而私钥是用来解密公钥获取信息的。比如,将军A想给将军B发送消息,为防止消息泄露,将军A只需要使用B的公钥对信息加密,加密的信息只能用B私钥解密。这也是之前文章《 请妥善保管你的私钥!不然纵使资产过亿也枉然 》提到的私钥不能泄漏的原因。







请到「今天看啥」查看全文