解释区块链 - 工作证明如何实现去信任化的共识

比特币是区块链技术应用的经典实例,但是区块链这一技术往往很难被人们所理解。这是因为区块链技术的核心常常被一些复杂却并不重要的细节所掩盖。本文的目的就是建立对计算机专业人士毫无信息量的通识文章到含有丰富信息的高度专业化的文献的桥梁。本文的受众是对这一领域有一定基础认识但是还没有深入了解的读者。

本文讨论的主题是在分散不可信的网络下各方达成共识所需的技术,这也是比特币为代表的区块链系统做出的主要技术突破。而其他像分布式数据存储、匿名性、交易可验证性、数据混淆、可共享的账本、小额支付、高吞吐量、数字合约等技术只是加密区块链系统附带的非核心的技术,所以本文中我也不会专门解释它们。

Satoshi Nakamoto的文章中的主要创新点是利用工作证明(POW)来建立分散不可信网络中的共识并解决双倍支付问题。工作证明并不是一个新鲜的概念,但是Satoshi通过将其和一些已有的概念——加密签名,merkle链,P2P网络结合起来实现了一个可行的分布式共识系统。加密货币就是它的首个基础应用,也是一个极具创新性的应用。

为了促成区块链上的交易,我们必须要耗费大量的计算来实现工作证明,这一过程也被称为挖矿,其原因后面会进行解释。理解集成了分布式加密系统的网络中计算复杂度和去信任的共识之间的联系是一个很考验智力的难题。希望本文可以帮助到尝试去理解这一联系的人。

由于分布式去信任化共识(distributed trustless consensus)是区块链技术的主要创新,我们将从理解它是什么开始,正如词汇的组成一样,这个难题包含三个部分:(1)共识,(2)分布式和(3)去信任化。当解释完这三个部分之后,我会将它们进行组合并说明它们三个组合在一起产生的问题。在这个过程中你可以看到基于工作证明的分布式账本是如何解决这一问题的。

共识是什么?

现在假想一个人们互相谈话的场景。如果我说“请把盐递给我”,我知道我要传达的意思是我想要拿到盐瓶。当你听到这句话的时候也明白我想要什么。不过这一简单的场景中有着比想象中更多的要满足的条件。这一过程的实现隐形代表着:我知道你知道我说的话的含义并且你知道我知道你知道我说的话的含义。想象现在我到了一个方言不同的地区或者语言不同的国家,我很可能就不会像上面一样说了,并不是因为我突然不知道了这句话的含义,而是我并不能确信我们可以在这句话的意义上达成共识——我不再知道你知道我说的话的含义。

语言上的共识状态被定义为我们都说X来表达Y的意思,我们都知道我们说X来表达Y的意思,我们都知道我们都知道我们说X来表达Y的意思,如此不断循环下去。满足这一状态的知识被人们称为公共知识(common knowledge)。

对于钱来说这一状态也是十分相似的,不过这一共识不仅仅包含交易的环节,还包含着特定货币可用的社会群体的共识。比方说我通过工作或者有价值的物品收到了一笔支付款项,我不仅仅要承认我收到了钱,我还必须要足够确信每个人也承认这一点。

货币的供应应当是短缺的这一点是至关重要的。如果人们接受用青蛙来交换有用的物品——我们都会去收集青蛙。如果我们可以用画有长颈鹿的纸片来交换有用的物品那么我们都会去画长颈鹿。选择稀缺的资源作为货币的很重要的原因是它为我们这个庞大的社会系统中的每个人都提供了一个激励因素。而不稀缺的财产则不会激励人们去提供服务或生产商品。所以人们不会讲手绘的长颈鹿作为货币。这一理解对我们来说是很直观的,我们也会将这一约束施加在可以作为钱来使用的物品上。

通过上面的描述,我们现在可以把在金钱(下面简写为Cm)上的共识简化为以下几点。

我们会接受某些凭证或者过程来支付获得有价值的商品或服务如果它满足:

  1. 在价值交换和创造的含义上来讲,它的供应是稀缺的。
  2. 我认为其他的每个人都能够接受这个凭证来获得我所需的等价商品。

除此之外,我还相信

  1. 其他的每个人都坚信(1),(2),(3)中的内容。

以上简化的内容并不是严格的定义,但是达成解释数字金融的目的已经足够了。注意到(3)暗含着金钱的意义对于每个人来说是公共知识,而(2)要求根据(3)中的定义,将某一特定凭证作为货币是人们的公共知识。逻辑学家有时候会有这样自指正形式的论述,不过我们不需要过多关注这一点,我们还要继续讨论其他的内容。

不过在此之前我们必须意识到我们后面还会用到的一个重要的含义。金钱是什么具体的物品,特定的凭证使用的是什么并不重要,只要Cm可以换取它即可。Cm并没有告诉我们有效的金钱是什么,但它告诉了我们它不是一些物品:它不是手绘的长颈鹿。让我们记住这一点然后进入下一部分。

分布式

数字货币可以满足Cm(1)中的要求——它应当被限制供应——通过建立控制供应的中心实体即可。这是很直接的:服务器上的数据库包含着谁拥有者多少钱以及他(她)完成的交易以免人们透支他(她)的账户。现在的数字银行也是这样工作的。

在进入下一节之前我们先暂时不考虑信任问题,现在我们考虑一下使这一过程变为分布式的复杂度。分布式系统必须要满足一致性,即使用某一节点传递的信息必须能够正确地反映在其他所有的节点上。这个问题很复杂但是我们知道如何去解决它。我们要么通过牺牲时间的方式等待信息传递完整个网络(严格一致性),要么牺牲可靠性先立即确认交易,如果在其他地方遇到冲突再取消它的权利(最终一致性)。

去信任化

第三个问题也是最后一个问题是信任问题。在数字金融中,信任通过多种不同的方式来隐含地表达。你相信你的账户信息中的财产不会被机构随机扣减,这是对于安全性的信任。你相信不会随意到处签发货币的机构,这是对于发行量的信任。最后,你信任系统对于信息一致性的保证,它总是可以正常运转,这是对于正确性的信任。

如果我们说某个系统是去信任化的,这意味着什么?显然,我们必定相信我们用来促进价值交换的系统。当我们提及去信任化的系统时,意味着我们信任的程度不依赖于任何第三方机构的表现,这个第三方机构的意图可能是险恶的。这是一个奇怪的命题,我们怎么可能希望以一种我们可以依赖的方式通过一个坏中介进行交易呢?

事实证明,正如读者担心的那样,去信任化的系统也并不是一个新鲜的事物。举例来说,电子邮件并不能确保你发送的内容不被窃听。但这对于熟悉现代密码学的人来说并不是很大的问题,加密后的信息可以安全地在不可信的信道中传递,这就产生了一个去信任化的系统。

相似地,密码学解决了安全性的信任问题,因为我们可以要求交易携带加密的签名。如果系统中的每个人都可以验证签名的有效性并且拒绝不携带加密签名的交易——对于安全性的信任就达成了,这使得任何人都无法处理属于你的资产。

而剩下的两种信任则存在着严重的问题。但在我们深入剖析它之前,我们必须先综合迄今为止我们所了解的内容。

POW 区块链

数字交易是我们在Cm的意义上转移货币的过程。把我们对于金钱的共识和信任结合起来,我们可以列出数字交易过程的要求。(后面我们简写为Tx)

为了使我们的数字货币系统正常运转,交易的接受者必须确认以下内容:

  1. 该笔交易的发起者拥有被交易财产的所有权。
  2. 交易的发起者已经获得了公认的有效资金中的一种。
  3. 作为交易的结果,接受者被所有人认可具有交易中被转移的资金。
  4. 作为交易的结果,发起者不在拥有这部分资金的所有权。

用户——人或者自动化设备(比如说自动售货机)使用了一些算法来满足Tx(1)-Tx(4)中的要求。这些以自然语言描述的语句表达了用户和算法的组合状态。举例来说,算法可能包含着对交易中使用的加密签名的验证。而用户知道这一校验被通过算法正确地集成的事实和校验通过的事实组合在一起就创建了关于签名有效性的综合知识状态。相似地,只有把用户关于算法细节和操作环境的知识和算法运行的结果结合起来,Tx(1)-Tx(4)的要求才可以被满足。

众所周知,如果从事金融交易的每一个人都使用相同的算法(协议),那么可以保证其他人对交易的看法——通过协议规定。因此,在Tx中提及的任何对其他人观点的保证都是建立在使用相同协议的基础上。

这一条件显然是有意义的,所有人使用相同的协议也是确保Cm(2)——一个人花费金钱的能力自然产生的条件。所以,避免系统被不怀好意的人所操控必须通过公共协议的约束来实现。

比特币方案

到目前为止,除了对交易产生的效果的公共理解的断言之外,我们还没有讨论任何与交易的概念相关的内容。在集中式的系统中,交易就是对中央数据库的更改。由于集中式的系统涉及了信任问题,Tx(1)-Tx(4)必须通过中央服务器的报告信息和对于中央服务器汇报的信息的正确性和一致性的信任结合来实现。

但是在去信任化的系统中,事情会变得复杂一些。在刚开始的时候,单一个体无法依靠任何其他单独实体的报告。加密货币的开发者甚至保持着更严格的观点——单一个体不能相信任意数量实体做出的报告。原因很简单:我们假定怀有恶意的人创建任何数量的实体的代价是微乎其微的,这意味着面对它们反馈的含有冲突的信息时,做出决策相信谁的报告是几乎不可能的。(我不认为这个前提是无可非议的,但是这就是区块链的基础,所以它就在这里)

单一个体无法相信任何人的报告就产生了一个结果就是每一方必须亲自检验。这就产生了一个概念,即交易发起时,接受者必须亲自查看历史的交易信息来确保交易发起方通过合法的方式获得了这笔财产并具有这笔财产的所有权。这反过来要求我们按照分享账本的方式来实现,即完全公开所有的历史交易信息。

从这里开始,事情就变得有意思了。我之前不是说过不可以相信任何实体的报告吗?如果是这样的话,我从服务器上下载的账本呢?它会不会提供给我一个被篡改的版本呢?

答案可以分为两部分。

首先制作一个完全自洽的总账是非常困难的。一个完全自洽的账本需要账户拥有者们签名加密的所有交易信息,要通过这种方式来扣减其他人的财产几乎是不可能的。

但是制作多个自洽的分账并不是很困难。举例来说,只要你拥有了某人的秘钥,那么你可以通过简单修改账本的最后几条来创建一个伪造的账本。

由此,第二部分的答案必须给出我们在遇到多个不同但是完全自洽的账本时应当怎么做。在密码学术语中它被称作双倍支付问题。之所以叫做这个名字是因为恶意的用户可以发送两个不同的账本给两个不同的用户,甚至更糟——整个网络会首先接受其中一个账本,然后再接受另一个,最终也只会接受一个账本,而另一个会被否决丢弃。

工作证明

最终Satoshi的文章中提出的解决方案解决了这个问题。要解释它,我们首先要接受一个假设,即互联网是终究是连接在一起的,即公共账本的每个状态最终都会被所有人观测到。换言之,在长的时间段中藏匿信息是不可能的。

接下来,我们指出,在假设两个状态都是完全自洽的情况下,冲突状态之间的选择并不是通过两个状态的先验好坏来决定的,好的状态和坏的状态的区别仅仅取决于共识,即我们会一直同意某一个状态是好的,而另一个是坏的,这样我们就解决了这一问题。

不过还有一点要注意的,即按Cm(2),我们要求网络中建立的共识要在未来得到保持。如果我们在冲突的交易中选取好的一个的策略不能够得到保持,那么有人就可以向网络提交一个账本状态,这个账本的状态指示他是这个交易的发起者并且从接收方获得收益,然后再向网络提交一个“更好”的状态来否决之前的交易。

所以我们需要这样的场景:一旦我们看到了一个账本的状态并把它当做好的来接收,那么我们必须确信在以后我们不可能创建一个比它更好的。这就是工作证明应用的地方,工作证明为账本增加了人为的计算复杂度,相应地公共的协议要求我们在任何两种冲突的状态中选择最难产生的一个。我们还要保证在账本中增加交易记录的困难程度。

挖矿是一个生成工作证明的过程,它的工作方式是所有的矿工竞争去寻找一个数字,当这个数字被添加到交易块当中时,这个交易块hash产生的代码会包含某些罕见的属性。根据这个过程中使用的hash函数的密码学特征我们可以知道找到这样一个数字是困难的,但是一旦发现以后进行校验是很容易的。为了使账本还是自洽的,我们要求每一个区块都包含这个罕见的数字,其寻找的困难程度根据参与的网络的大小来控制。(通过hash率来描述)

这确保了我们一旦观察到了账本的有效状态,其中的交易在一定年限之后就不可能被否决,因为要产生比我们看到的更长的账本要求恶意实体拥有可以与现有网络中所有实体竞争的计算力。由此,对于这些交易有效性的共识可以得到保持。

与采矿相关的最后一个注意点是理解有限货币的供应是如何产生的——即货币是如何发行的。比特币协议会为每个区块分配预设数量的新发货币,这些货币会给首先找到正确的工作证明进行装配的矿工。这部分货币加上后面的交易税一起来激励矿工工作来为整个网络建立共识并保持网络的规模以免其成本变得昂贵。这就是这一过程被称为挖矿的原因——因为它是与“挖掘“新的比特币的过程并行的。

结论

当新的加密货币的解决方案提出时,读者可以基于上面的解释自问这个新的解决方案是如何实现分布式去信任化的共识的。同样,在考虑使用基于工作证明的系统时,读者应当意识到只有在需要无可置疑的共识时,工作证明才是有用的,否则这将是一种昂贵而又没有必要的资源浪费。

现在也有一些不借助区块链的方案努力去实现分布式去信任化的共识,Iota就是一个例子。此外还有所谓的联盟区块链,它采用了去中心化的加密金融中的一些想法来促进主流金融实体之间的交易。虽然现在还不清楚他们将使用什么具体的方案,但是通过上面的解释可以看出在这样的系统中工作证明是一个完全不需要的功能,因为它们不需要以去信任化的方式运行。

在当前所有关于密码技术的炒作环境下,我希望这篇文章可以帮助你探索这个领域中更复杂和多样的地方。

本文的版权归 ArrayZoneYour 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏区块链大本营

以太坊核心开发者Karl Floersch:像黑客帝国那样学习加密经济学!

1373
来自专栏区块链大本营

用百万笔每秒,表示区块链性能?错!

1523
来自专栏安智客

《华为区块链白皮书》中提到的TEE!

一个很有意思的情况是,我们通常认为要获得安全性需要牺牲性能,可是在区块链领域来说,性能的体现可以通过安全性的提升获得增强。

1521

更好地构建:区块链用例的简单指南

根据德勤最近的 在过去两年中创建的26,000个区块链项目中,92%已经死亡。

4288
来自专栏数字资产交易系统

2018年专业区块链技术研发公司详述数字资产交易平台开发技术

2017年是区块链元年,2018年将是区块链应用元年。数字货币与区块链技术经历了曲折的从概念到实践的坎坷之路后,应用落地的时机逐渐成熟,区块链技术的优势将于20...

1412
来自专栏区块链大本营

ACM Queue 顶级论文:厘清关于区块链、比特币的所有误区

48311
来自专栏智能计算时代

区块链101:区块链能做什么?

在过去的30年里,金融机构资助了无数行业的崩溃;他们对革命技术能对静态的现任者做些什么有个想法。 因此,为了保持领先地位,银行在建立研发实验室、建立测试中心和与...

3494

更好地构建:区块链用例的简单指南

根据德勤最近的一项研究显示,在过去两年中创建的26,000个区块链项目中,92%已经失败。

3325
来自专栏区块链技术指北

「Fundamental challenges with public blockchains」解读

本文由币乎社区(bihu.com)内容支持计划奖励。 这是「区块链技术指北」的第 14 篇文章。 如果对我感兴趣,想和我交流,我的微信号:Wentasy,加我时...

3307
来自专栏区块链大本营

这篇在medium上获得5万点赞的文章,值得区块链小白耐心读一读

不知道你有没有感觉到,如今的区块链,已经在大妈大爷这股强大催化剂的作用下,被出神入化地抬上了绝对的高度:

712

扫码关注云+社区