区块链认识一、拜占庭问题

2018-12-20  本文已影响0人  fanren

引言

最近几年,区块链领域可谓是热火朝天啊。越来越多的机构开始重视并参与区块链的技术研发当中去。17年开始,区块链、比特币和加密币、ICO等概念逐渐走入公众视野,同时也引起了资本市场的广泛关注。
而区块链技术,也成为软件开发行业的热点;作为一个程序猿,我也投入了学习区块链的热潮中。
在学习区块链技术之前,要认识区块链到底是什么,里面的节点、块、挖矿等名字又有什么样的意义?
参考了henciyou的博客我对其有了一个基础的认识;

拜占庭问题

说起区块链,不得不提起一个故事--拜占庭将军问题;

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

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

在拜占庭问题中,各国最重要的事情,就是所有的将军如何达到共识,去攻占拜占庭帝国。
而达成共识并非那么简单,每个人都想独享所有的财富,还想法设法的去干掉自己的同盟,以求获取更大的利益;而这里最大的问题,就是里面可能会有叛徒。

拜占庭问题的解决

假设将军总数为m,叛徒数量为n,当m>3n+1的时候(即叛徒数量小于总数的三分之一),才能攻陷拜占庭帝国,拜占庭问题才能解决。

假设有4个将军(A、B、C、D),同时假设其中有1个叛徒。当4个将军包围了帝国,为了成功攻陷帝国,要协商一个统一的时间发起进攻;

第一种情况,假设B是叛徒

3719463-fd7304f53fcc100d.png

第二种情况,假设A是叛徒

3719463-287840ecdff72813.png

不管叛徒是哪个人,只要按照这种方法执行,结果都是没问题的。

区块链

上边拜占庭问题的解决中,有一个假设,ABCD四人之间传递的是口头消息;就会出现B欺骗CD的情况;
但如果所有的消息是书信的方式就不一样了,A在书信上写上“1点进攻”,把书信传给B,B在书信上签名表示同意,然后传给C,C再传给D。最后把签名过的书信展示给每个人。这样每个人都会知道所有人的意见了。

这种采用书面消息的方式,对算法的要求简单的多,但前提是:每个人都知道其他人的笔迹,且笔迹没办法模仿。

中本聪根据这一原理,发明了区块链
假设每个将军都有一台电脑(相当于分布式的节点);为了避免混乱,一段时间内只能有一位将军发送消息;

区块链系统一般通过工作量证明(POW)来确定谁先发言;
我们可以想象这是一个数独游戏,谁先解出来,谁就可以发送消息;这个数独的难度可以调整(增删行和列),通过调整数独的难度,来控制这个一段时间是一个确定的数字。(在比特币中,这个数字是10分钟);

当A(某个节点)发出1点进攻的消息时,其他人(其他节点)收到消息后,必须签名盖章,确认各自的身份。(比特币这里引用了非对称加密技术,为这个信息签名)。
这个过程就像A在向其他将军发起“1点进攻”的提议书,其他人收到提议书后,同意的就在上面签上自己的名字,而不会发起自己新的进攻协议(例如B发起2点进攻)。那么即使这里叛徒发起2点提议,也不会被其他人认可;
在这里,信息在经过每个人之后,都对其进行了备份,每个人(节点)都保存了相同的完整数据,义防止被叛徒篡改。

结果

每个将军分配了一台电脑,A将军第一个解出数独游戏拥有了第一个发言权,A发出1点进攻的信息,并立即广播至所有将军,所有人可以根据A的公钥来验证A的身份,确保信息的可信性,并发出自己赞成或反对的选票,在全网验证后得出结果。

于是,一个不可信的信息传递,就变成了一个分布式的可信网络,参与者都有权发表意见,并在一件事上达成一致。

拜占庭问题延伸到互联网

在互联网中,但需要与不熟悉的对手进行交易时,人们如何才能防止不会被其中的恶意破坏欺骗、迷惑从而错误决策。
在缺少可信任中央节点和可信任通道情况下,分布在网络中的各节点应如何达成共识。
这一对于拜占庭将军问题的解决方案,可以推广到任何核心问题是在分布式网络上缺乏信任的领域。

上一篇下一篇

猜你喜欢

热点阅读