拜占庭将军问题与比特币
拜占庭将军问题(Byzantine Generals Problem),是由美国计算机科学家,图灵奖得主莱斯利·兰波特(Leslie Lamport),在其1982年发表的同名论文中提出的——分布式对等网络通信容错问题。
兰波特为了形象的说明计算机领域中,分布式系统一致性问题,编了这样的一个故事,大概如下:
拜占庭帝国想要进攻一个无比强大的敌人,派出了10个将军分别领导10支军队去包围这个敌人。这10支军队必须分开驻扎,没有一个统一的(中心化的)领导下达命令。而这个敌人十分的强大,可以同时抵抗5支拜占庭军队的袭击。拜占庭军队里的任何一支,想要单独进攻的话,都毫无胜算。除非至少超过一半(即6支及以上的军队)同时进攻,才能打败敌人。军队分散在敌人的四周,依靠通信兵来相互传递消息:商量“要不要进攻”和“什么时候进攻”。
那么问题来了,如果将军里有叛徒,那么这个叛徒将军可能发送错误消息。比如:告诉其中4只军队要进攻,然后告诉另外5只军队不进攻,然后只有4只军队同时进攻,吃了败仗。剩下5只军队,也无法战胜这个强大的敌人。最后拜占庭军队战败。
在这种状态下,拜占庭将军们,能不能找到一种分布式的协议,让他们能够远程协商,保证多于6支军队在同时发起进攻?从而打赢这场仗?
这个问题和比特币有什么关系呢?
比特币作为一个点对点、分布式数字货币系统,其中的各个节点(计算机)相当于故事中的将军,其记录的区块信息是否真实,能否确保信息传递的一致性,就和故事中要解决的问题基本一致了。
比特币系统是如何解决呢——工作量证明机制(PoW)和非对称加密。
对等的节点中,谁都可以发送信息,但是一个时间段内,应该只由一个节点传播信息,如何做到呢?比特币系统为发送信息加入了成本——“工作量”。节点必须完成一定的哈希计算,找到一个特定的随机数,才能传播消息(记账)。这个计算的过程,就叫挖矿。
对等的节点(每个将军),没有一个权威的中心来保证相互之间的信息的可信度,如何能保证发送的信息就是真实的节点所发送的呢?这则是由非对称加密技术来解决。
非对称加密算法的加密和解密使用不同的两个密钥,“公开密钥”(公钥)和“私有密钥”(私钥)。公钥和私钥一般成对出现,如果消息使用公钥加密,那么需要该公钥对应的私钥才能解密;同样,如果消息使用私钥加密,那么需要该私钥对应的公钥才能解密。
非对称加密的作用是:保护消息内容,并且让消息接收方确定发送方的身份。
工作量证明和非对称加密,使一个不可信分布式网络变成了一个可信的网络,使所有参与者达成一致。
拜占庭将军问题的区块链解决方案,可以推广到任何需要建立信任的分布式网络上。比如域名、投票等等。
参考:
The Byzantine Generals Problem
《区块链:从数字货币到信用社会》长铗等