拜占庭帝国将军问题
拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都。拜占庭拥有着无与伦比的财富以及强大的军事力量。它的周围环绕着其他10个城邦,这些城邦也很富饶,但和拜占庭相比就微不足道了。所以,这些城邦都在觊觎拜占庭的财富,并希望侵略并占领它。
但问题是,拜占庭的城防坚固厚实,没有任何一个城邦能够成功攻入侵占以掠夺拜占庭的财富。并且,一旦失败就会全军覆没,自身也会被其他城邦吞并。只有当一半以上的相邻城邦同时进攻才能攻破拜占庭,获得财富。
也就是说,如果六个或者更多的相邻城邦一起进攻,他们就会成功并侵占获得拜占庭的财富。然而,如果其中有一个或者更多的城邦在进攻时背叛,不进行出兵攻击,也就导致只有五支或者更少的军队在同时进攻,那么所有的进攻军队都会被歼灭。
同时,所有的城邦只能靠骑兵之间传递战略信息。当然,每个城邦都可以在任意时间派出任意数量的骑兵前往不同的城邦传递战略信息。
所以该问题就成了:如何拥有叛徒的干扰下,所有的城邦能够共同进退,不受叛徒的影响,共同进攻或者撤退。
解决方式
我们可以假定每个城邦都向其他9个城邦派出骑兵发送信息,信息内容可以指定为:
1、城邦的信息,即各自城邦的识别信息
2、具体攻击时间点
3、进攻意向(进攻还是撤退)
然后所有的城邦共同规定:按照多数意愿的战略进行。
即,叛徒是少数的,叛徒会故意反向选择战略,但是大部分的忠诚的城邦都会选择按照多数的战略进行行动,这样无论是进攻还是撤退,所有的忠诚城邦信息可以达成一致。
并且,我们可以从进攻意向的选择上来推断出叛徒的城邦(可以假设持反对意见的城邦即为叛徒)。
问题处理
上述的解决方案存在一些问题:
1、如何防止伪造问题,每一份信息都可以被叛徒伪造,信息可以故意伪造,骑兵也可以被收买。
2、信息量问题,一旦城邦的数量增多,10个城邦一共交换信息需要90次,数据交换信息呈指数式增长。
比特币(Bitcoin)
现实网络中,我们可以将每个网络接口的终端视为节点,而如何处理去中心化的节点上的信任问题,由此我们来探讨比特币的机制原理。
比特币是一个 去中心化的 分布式存储的 公有链数字货币支付交易系统
去中心化(Decentralization)
既然是去中心化,那么什么是中心化?去中心化是由“Decentralization”翻译过来的,实际上,该单词实际意义是:分权制、权力分散制的意思。
没有核心节点作为权力控制中心的权力系统,可以称之为去中心化,任意节点拥有同样的权力,这样的节点组合的结构可以称之为去中心化。
去中心化,另一方面,可以由节点推选出来的权力节点,也可以称之为去中心化,因为权力是所有节点间接控制的。
分布式存储系统(Distributed File System)
区块链的本质即为分布式存储系统,因为是去中心化的,所以所有的数据需要每个节点都保存一份。
你可以理解为:比特币是一种货币,发生交易会产生账单,那么谁来管理这个账单,实际上每个人都拥有一份账单,所以数据是不会被篡改的。这是去中心化的存储方式,解决数据的信任,被攻击篡改问题。
比特币机制分析
回到拜占庭帝国将军问题,比特币中的节点,相当于那些觊觎拜占庭帝国财富的城邦,而这些节点需要共同来决定或者说认可一些事情。
认可的事情,无非就是支付信息的确认,归于数字货币本身归属的问题,因为比特币是去中心化的分布式的支付系统。当一笔交易发生,我们如何保证该交易获得所有节点的认可,并且记录到公有链的区块当中去呢?
首先,我们要知道比特币的工作原理:
1、不同的节点可以进行比特币交易,同时,交易会产生交易信息,即:交易的账单
2、我们需要有节点将一段时间的所有的交易信息(账单)进行整理,记录到一块新的区块内
3、当某个节点整理好一个区块之后,可以公布新的区块
4、其他的节点对新公布的区块进行确认,对照交易信息,确认之后,将该区块保存到自身的区块链尾端
这样,周而复始,每个节点的权力、意义都是一样的。并且,所有的历史的数据因为分布式存储,都是不可被篡改并且值得信任的。让我们来看看区块链的比特币是如何解决上述遗留的问题:
(1)如何确保每一笔账单的有效性(拜占庭帝国将军问题中的伪造问题)?
比特币通过使用公钥和私钥来解决伪造问题,比特币的每个节点都拥有一个公钥和私钥,用来确保能够证明 “他不是我,而我是我” 问题。
(2)如何控制数据的处理根据用户呈指数式增长(拜占庭帝国将军问题中信息量问题)?
如果大量的节点都在发布新的区块,显然势必会造成网络拥堵、节点处理变慢。通过工作量证明机制,比特币规定,要发布一个新的区块,必须回答出一道计算机问题,该问题的难度被设定为当前所以节点算力总和约需要10分钟左右。即所谓的比特币的挖矿。
另外我们还有一些其他问题需要考虑:
(3)如何确保自己的这一笔交易不会因为网络延迟而错过最新的区块?
如果许多人几乎在同时添加了区块,网络选出其中一个 这就成为全长且最信任的链子。这些没被选择的链子上的交易将重新被放入池中,将被添加到之后的区块上。
(4)如果没有人记账,整理区块(账单)如何处理?
既然发布区块有那么难的计算题要算,那要是没有人愿意去算,去发布新的区块,那可如何是好?比特币系统有一个奖励机制:每次当你率先添加区块到区块链中,就有比特币会凭空添加到你的账号中,并且该交易是被认可的。比特币原始设定为2100万个,并且,每到21万区块时,当添加新的区块时,产生的币数量会减少一半。
(5)哪天比特币全部挖(奖励)完了,那又有什么机制可以吸引节点进行区块整理?
很简单,例如:当前区块交易的1%用于支付节点整理区块奖励(1%只是打个比方)。
(6)如何知道自己的资源(货币)足够用于产生新的支付?
如何防止,一个节点同一时间内,将同一笔资产转移给不同的节点?在比特币系统中内置了检查,会自动检查你以前的交易,以确保你有足够的比特币可用于支付新的交易账单。
以上是个人对比特币机制以及比特币所解决的拜占庭帝国将军问题进行梳理,欢迎指正和提问探讨。
时间:2020/6/23 15:52:29 我能看到访问人数的增加,我知道有人在阅读这篇文章