区块链的技术探索
因为数字的无处不在让决策者越来越担心他们的业务能否蓬勃发展并适应新兴趋势和消费习惯的转变,所以必须充分理解新技术。事实上,区块链是一种新的使能因素,在为贵公司考虑创新战略时,必须正确理解这一点。
首先,有不同类型的区块链,但其背后的总体思想是相同的。主要是,他们旨在解决愿意在数字世界交换价值的陌生人之间的信任问题。其次,尽管我们可以区分几种区块链,如公共或半私有基础架构(更多信息请参见第 9 章、基础架构和基于云的解决方案),但它们都集成了类似的组件。
在本章中,我们将探索网络如何增强区块链,哈希如何保护交易和信息的安全,如何管理数字身份,以及博弈论和经济学如何促进负责任的行为。我们还将研究区块链给出答案的原始问题,并最终发现可以实施哪种共识协议来实现网络内的大规模协调。每个组成部分将被描述为一个单独的工具,但当我们将它们组合在一起时,我们将采用一个整体的观点。因此,当单独阅读时,一个部分可能看起来不清楚,但是在本章结束时,您应该能够理解整个基础结构的功能以及共同构成区块链的每个功能的作用。
在本章中,我们将讨论以下主题:
- 用网络搞活区块链
- 密码术和散列函数
- 数据结构
- 管理数字身份
- 拜占庭将军的问题
- 激励机制
- 达成共识
没有网络,没有区块链
区块链最重要的组成部分是网络——是社区赋予了它力量。社区的作用是确保真相被正确地记录在共享数据库中。
下图是区块链图层的概述:
为了更好地理解这一点,我们来看一个比喻性的例子。
网络中的真相
想象一下下周末罗杰·费德勒和拉斐尔·纳达尔之间的美国公开赛决赛。作为罗杰·费德勒的忠实粉丝,爱丽丝确信他会赢得这场比赛,她在赌博网站 Betwin 上下注 10 美元。另一方面,经验丰富的赌徒鲍勃认为拉斐尔·纳达尔会赢。Bob 决定在 Betwin 平台上下注 10 美元,赌 Rafael Nadal 获胜。
因为 Betwin 是一家私营公司,其目标是实现利润最大化。为此,公司可以告诉爱丽丝拉斐尔·纳达尔赢得了比赛,并告诉鲍勃罗杰·费德勒赢得了比赛。以这种方式,Betwin 可以持有两个赌注,而不必向 Alice 或 Bob 付款。
为什么这种方法对 Betwin 来说是荒谬的?
显而易见的解释是,爱丽丝和鲍勃不仅相信贝特温知道比赛结果。他们会查看新闻稿,看看网络新闻,或者问问他们的朋友。而且除非 Betwin 能让媒体,互联网新闻,爱丽丝和鲍勃的朋友宣布最适合他们的结果,否则他们的方法是行不通的。简而言之,爱丽丝和鲍勃不仅仅信任一个第三方,而是依靠网络来了解真相。在没有证据证明 Betwin 控制网络之前,Alice 和 Bob 将永远知道真相。
在区块链中,大多数社区同意为真实的信息被记录在所有成员共享的数据库中。
添加到数据库中的信息也要与以前已经登记的信息进行核对。在我们的例子中,诺瓦克·德约科维奇不能赢得美国公开赛决赛,因为数据库中有信息表明他已经输掉了前一轮。
让我们接下来看看区块链网络中的各种关键角色。
网络中的参与者
再说一次,网络是区块链的一个非常重要的特征——它必须足够分散,以确保大多数人不被单一实体控制。它必须足够多样化,以便大多数人能够代表真理。为了实现分散化和异构化,数据必须分布在整个社区中。它应该分发给任何想要无条件或无障碍参与的人,形成一个相互交流的计算机网络。
区块链的网络层也称为对等网络。
在集中式系统中,电话或计算机等设备通过一个实体拥有的中央服务器访问信息。在由对等网络支持的分散式系统中,包括服务器在内的所有设备相互独立地进行交互和通信。这些设备被称为节点。每个节点可以与任何其他节点共享信息,而不依赖于中央服务器。这种网络的例子是臭名昭著的文件共享应用,BitTorrent,uTorrent 和 eMule,使用户能够下载和共享数据。当您是对等网络的参与者时,您既充当通过其他节点检索的文件的提供者,也充当其消费者。这些是在区块链实现权力下放的网络。任何实体都不是数据的所有者,也没有读取或修改数据库的专有权利。
Napster 的故事揭示了中央集权制度的弱点,尤其是在控制方面。Napster 是一个音乐文件共享应用程序,在唱片公司投诉侵犯版权的长期法律诉讼后,于 2001 年被关闭。尽管 Napster 在一个对等网络上工作,但它集中维护一个所有用户和文件的目录。这种配置允许美国地方法院在禁令发布后停止 Napster 的活动。如果应用程序依赖于一个真正分散的对等网络,其中目录由每个节点存储,则可能不会发生这种情况。
在区块链中,网络的参与者有几种角色:
- 用户:他们利用运行在区块链之上的应用程序。他们不拥有来自区块链任何数据;他们只使用服务。
- 节点:这些电脑将数据库存储在内存中,让任何人都可以查看交易或信息的历史。
- 矿工:这些计算机运行软件,使区块和交易生效。
在某些区块链,比如支撑比特币的那个,任何人都可以成为矿工、节点或者仅仅是用户。这些类型的区块链被称为公共的(或无许可的),与私有的(或有许可的)区块链相反,在私有的(或有许可的)中,角色是为每个参与者预先定义的。我们将在接下来的章节中进一步探讨这些差异。
我们不会从技术上描述这些节点是如何连接的,但我们会记住,在分布式系统中(最终,这就是区块链),计算机相互通信以有效地交换信息。计算机的地理位置和功率是在使计算机相互通信时要考虑的变量。
每个节点(和每个挖掘器)都持有区块链的一个完全相同的副本。如果新的挖掘器和节点想要成为该网络的一部分,则它们将整个历史下载到它们所连接的对等体。一个区块链的大小可能相当消耗内存:在写这本书的时候,如果你想成为比特币区块链的一个节点,你必须下载一个 223 GB 的文件。
矿工的责任是完成以下工作:
- 用新事务构造一个新块。
- 找到数学问题的正确答案(随机数)以验证该块。
- 把它传遍网络,让每个人都看到和检查。
为了让区块链继续发展,事务需要连续发生,并由挖掘者在将块添加到链之前计算结果散列,以块为单位进行编译。
但矿商如何确保建议的区块不包括虚假交易?他们如何将它添加到链中?
密码系统
我们在第一章讨论了加密和散列函数,我们定义了它是什么:
这是一个数学函数,已知输出,几乎不可能找到正确的输入。但是知道了函数的输入,就很容易找到正确的输出。这之所以成为可能,是因为哈希函数对于相同的输入总是返回相同的输出。
哈希是数学函数的结果,数学函数是应用于生成输出的输入的变换。 Y = f(x) 是一个数学函数,其中 x 是输入, Y 是输出。
在数学术语中,我们有以下内容:
“知道 Y,要找到 x 几乎是不可能的,但是知道 x,要找到 Y 就非常容易了”
哈希函数对于确保区块链上的信息和交易安全至关重要。
我们已经在第一章、区块链基础知识和村庄贝塔图中看到了散列函数的基本属性:
- 它是确定性的,意味着对于相同的输入,它总是相同的输出。
- 它有一个定义的范围,这意味着任何大小的输入都可以注入到函数中,但它将始终是相同长度的输出。换句话说,不管输入的长度如何,函数总是会返回固定数量的字符(在第一章、区块链基础知识和村庄 Beta 的图解中,输出长度一直是 64 个字符,因为我们使用了散列函数 SHA-256)。
但是这些属性不足以保护交易或信息。区块链中使用的哈希函数还有其他加密属性:
- 它是变化敏感的,意味着如果输入的一个字符被修改,输出将完全不同。
- 它是不可逆的,意味着不可能有效地确定给定输出的输入,就像挂锁不应该被破译一样。
- 它是防碰撞的。当两个不同的输入生成相同的输出时,哈希函数中就会发生冲突。因为输入可以有任何长度,但是输出是固定长度的,很明显,会有冲突。换句话说,对于无限数量的输入,有有限数量的可能输出。抗冲突性意味着使用智能算法或策略不可能找到相同输出的两个不同输入,而只能通过尝试每种可能性。这就是我们所说的蛮力。
对于这一部分,您需要记住的是,输入的哈希值可以用作该输入的引用。哈希值是输入数据的数字指纹,输入数据可以是文档、交易或任何类型的信息。我们可以将任何文件注入散列函数,并使用散列值来引用它,从而惟一地标识文档、事务或信息。
理解数据结构
区块链也可以定义为包含链接在一起的数据的一系列块。有两种类型的数据:
- 处理
- 块信息(也称为元数据)
事务部分是通过收集某段时间内发生的所有事务并将其收集到块中来构建的。如果我给你发一个比特币,这个交易会是交易部分的一部分。三个领域始终处于活跃状态:
- 收件人
- 发件人
- 金额
当我使用比特币区块链向您发送一个比特币时,交易组成如下:
- 收件人是你的账户(你的比特币地址)。
- 寄件人是我的账户(我的比特币地址)。
- 金额为 1 比特币。
比特币地址的一个例子是3QSuhbsJUZJRgYX965CwMHgsdaU8KuTg4H
。
一旦块中填充了所有事务,就用适当的函数对该块进行散列(即,发生挖掘过程),这将返回该块的散列值,从而返回该块中包含的所有事务的散列值。如果该块的一个事务在之后被修改,散列将发生显著变化(变化敏感属性),并且该块将不再安全。
请注意,根据区块链的不同,块的验证跨度和事务数量也会有所不同。对于比特币,大约每 10 分钟验证一个区块,包含截至 2019 年 6 月在 1500 左右波动的几个交易。这个时间段是根据块的大小限制来定义的,即它可以在一个块中处理的事务的数量。重要的是交易的规模,而不是交易量。这就是为什么比特币有平均 1500 笔交易的区块限制——因为它有时可以处理更多的交易,有时则更少。如果一个事务中有几个发送方或几个接收方,事务会变得更加复杂。客观地说,比特币区块链处理 1 MB 的块,而比特币现金区块链处理 8 MB 的块。
比特币现金由比特币社区的一部分于 2017 年 8 月创建,旨在通过扩展块大小来克服比特币的可扩展性问题。就像比特币一样,是加密货币,是区块链。
现在让我们看一下块信息部分,也称为元数据。这些信息指的是块本身,而不是交易。如果我们回想一下第一章、《区块链基础知识》和《贝塔村》插图的例子,它们指的是以下内容:
- 之前的哈希
- 时间戳
- 现在
- 杂烩
前一个哈希是验证前一个块时找到的参考号。对于区块链的第一块,它是 0 或网络同意的任何值。请记住,散列是什么允许块链接在一起,因此使整个链防篡改。为此,每个块都包含前一个块的散列。
时间戳是网络验证该块的时间和日期。
nonce 是在解决数学问题以验证块时要查找的变量。当挖掘器接收到新的事务时,它们会运行一个复杂的数学问题来找到返回正确散列的适当 nonce。
一旦找到散列,就对事务进行验证,并将块存储在数据库中。
总之,块是在定义的时间跨度内发生的所有事务的容器,这些事务被散列以返回所有这些事务的数字指纹。下图是网络矿工所遵循的挖掘过程:
当构建一个块时,挖掘器使用前一个块的散列、所有事务的散列和时间戳来触发挖掘过程。当其中一个挖掘者找到返回有效散列(通常是以预定义数量的零开始的数字)的正确现时时,挖掘过程结束,该散列被绑定到该块并将作为下一个块的先前散列。
创建身份
大多数情况下,要使用在线服务,您必须在提供服务的组织中创建一个帐户。如果您想要使用社交媒体应用程序或创建银行帐户,您需要提供您的个人信息,以便组织授予您访问权限。这是集中式模型:身份在一个中央组织的服务器上存储和管理。这完全不符合区块链的概念,即促进权力下放,在没有中央实体的情况下实现大规模协调。
那么,我们如何在这样的生态系统中创造不受任何第三方控制的身份呢?
使用区块链保护身份
在区块链中,必须准确确定发送数字值的人和接收数字值的人。
多亏了非对称加密,密码学让我们能够做到这一点。当向某人发送消息或资金时,非对称和对称方法基本上都通过加密来实现安全性,并且用于以分散的方式管理身份。在解释什么是非对称加密(在大多数区块链中使用)之前,我们应该解释什么是对称加密。
使用对称方法,每个人只有一个密钥来加密或解密特定的消息。如果我想给你发消息你好,我会按照这个过程:
- 我对消息 Hello 进行加密,比如说,它变成了 Jrmmp。
- 我把我的加密密钥发给你。
- 你用我的密钥解密信息。
密钥是通过一种算法生成的,该算法允许拥有密钥的人对消息进行加密和解密。
但是使用这种加密方法存在一个重要的风险。由于您需要将您的密钥发送给收件人,以允许他/她阅读您的消息(该过程称为握手),因此恶意的人可能会截获该密钥,然后使用它来解密您的消息。
另一方面,非对称加密克服了这个问题。使用这种方法,有两个密钥,一个公钥和一个私钥,而不是一个密钥。公钥是传达给任何人谁想要给你发送消息或数字价值。而私钥,恰恰相反,你知道,也只有你知道。这件事不应该向任何人透露。
如果我想向您发送消息 Hello ,我们将遵循以下流程:
- 我取回你的公钥。
- 我用你的公钥加密消息 Hello 并发送给你。
- 您使用您的私钥解密消息。
如果黑客截获了我发送给你的加密信息,他/她将无法解密,因为他/她没有私钥,而私钥是唯一允许解密信息的密钥。简而言之,公钥用于加密消息,私钥用于解密消息。
对于非对称加密的密钥对——私钥/公钥,需要记住两个原则;它们与我们看到的哈希函数相同:
- 一个私钥在被散列时总是给出相同的公钥。
- 知道了公钥,就不可能找到私钥(除非用蛮力:通过尝试很多私钥)。
强力破解一个单字符密码相对简单——64 种组合(A,b…A,B…1,2…)。但当涉及到私钥长度为 51 个字符的比特币区块链时,其概率达到了 64^51 可能性。破解比特币区块链上的私钥需要数年时间。
这种非对称加密允许您对任何类型的信息、消息或交易进行数字签名。否则,你如何在数字世界中证明你是特定信息的作者或特定账户的所有者?
用私钥加密用于证明真实性。如果你用你自己的私钥加密你的消息,那么任何人都可以用你的公钥解密它,这就证明了你是消息的始发者,因为它只能用你的私钥加密。
在这种情况下,您的公钥就是您的数字身份,因为它标识了您在数字世界中所做的声明和信息。私钥是一种密码,用来证明你拥有你的公钥,也就是你的数字身份。
这就是我们实现分散身份管理的方式。通常,公钥指的是帐户的地址。另外,你不必将你的真实身份与你的数字身份联系起来。仅仅通过生成一个新的密钥对,你就可以得到一个新的数字身份。请记住,这并不能为您提供完全匿名,因为与您的数字身份一起发送的一些信息或声明可能会将您与您的真实身份联系在一起。这就是为什么比特币区块链不是完全匿名的,而是假名的。
拜占庭将军的问题
在接下来的章节中,我们将开始讨论更多面向业务的话题。在那之前,我应该向你们提供一些关于区块链的来龙去脉,并回到一切开始的地方,拜占庭将军的问题。
拜占庭将军问题是计算机科学的一个现实类比,1982 年,美国著名科学家、图灵奖获得者莱斯利·兰波特(Leslie Lamport)表达并部分回答了这个问题,他提出了以下问题:在存在叛徒或错误的情况下,你如何达成共识?翻译成计算机科学世界,意思是:在一个分布式系统中,当一些计算机可能出现故障或给出相互矛盾的信息时,你如何达成共识?这就是这个问题被称为拜占庭将军问题的原因。
下图说明了拜占庭将军的问题:
资料来源:L.Lamport,R.Shostak 和 M.Pease,《拜占庭将军的问题》,《美国计算机学会程序设计语言和系统汇刊》,第 4 卷,第 3 期,1982 年 7 月
解释——包围一座城市的多名拜占庭将军必须协调他们的攻击来占领这座城市。为了协调他们自己,他们使用信使来相互指示他们做出了哪个决定:进攻还是撤退。由于这种情况发生在战争环境下,一些将军可能是叛徒,一些信使可能在传递消息时被捕或死亡。
如果我们拿区块链做一个比较,将军就是矿工,使者就是他们之间的沟通纽带。一些研究人员得出结论,如果三分之一或更多的人是叛徒,将军们就无法就战略达成一致。
那么区块链是如何解决这个问题的呢?
区块链引入了一种工具来使共识发挥作用:激励措施。区块链通常包括对批准交易的矿商的激励。在第一章、区块链基础知识和村庄 Beta 版插图中,验证交易的村民获得 5 个村庄金币的奖励。
在区块链,这是达成共识的方式:
- 所有的矿工开始建造他们当地的街区。
- 一个随机挖掘器解决了该块的数学问题。
- 随机矿工将他/她的块发送给其他矿工。
- 其他矿工收到随机矿工的块。
- 其他挖掘器检查随机挖掘器找到的结果是否正确,以及先前的散列是否指向先前块的散列。
- 如果它是有效的,他们取消他们正在建立的块,并把随机矿工发送的新块添加到他们的区块链的副本中。
- 随机的矿工会得到奖励。
- 然后,重复该过程。
如果一个不诚实的矿工解决了数学问题,并在其块中加入了一个无效的事务,其他矿工会拒绝它,因为它包含一个无效的事务(哈希将完全不同)。这个矿工将不得不放弃他/她的区块,因此,将无法获得任何奖励。让我们更详细地看看激励是如何起作用的。
提供激励
基本上,激励措施确保矿工继续负责任地为网络工作(换句话说,一致认可正确的交易)。矿工们的工作得到了区块链背后的加密货币的回报。通过实施奖励,鼓励人们加入社区并成为矿工,从而为扩大网络做出贡献。矿工越多,网络就越大,交易就越安全,因为区块链被一方或个人控制的可能性就越小。
请注意,回报通常会随着时间的推移呈指数下降,因为在享受网络效应和吸引更多矿工之前,区块链通常会从少数矿工开始。作为矿工尽早加入区块链可以确保你获得更多的加密货币,即使它在开始时并不值钱。但是,随着越来越多的矿工加入这个网络,以及越来越多的用户使用这项服务,加密货币本身开始受到重视,因此也有了价值。以这种方式,随着更多成员加入网络,矿工的奖励通常按照预定算法随时间下降。以比特币为例,最初的块奖励是 50 比特币,计划每 21 万块减半。截至 2019 年 6 月,批量奖励为 12.5 BTC,总供应量为 2100 万 BTC,最后一个单位应于 2140 年分配。作为决策者,重要的是要记住激励是区块链的重要组成部分,因为它回答了以下问题:矿工继续验证网络中发生的交易的利益是什么?换句话说,验证器在注册中心保持真实性的动机是什么?
了解共识协议机制
如前所述,对于矿工来说,验证一个块,因此,交易,他们必须解决一个数学问题。要解决它,需要一种特定的资源。在比特币中,资源就是计算能力。矿工的计算能力越强,他/她解决数学问题的速度就越快,因此他/她完成一个区块的速度就越快,他/她就越有可能获得比特币作为奖励。这个挖掘过程被称为工作证明,是比特币所固有的。这是比特币区块链的所有矿工都应该遵守的协议,以证明他们已经为验证交易做了适当的工作。这确保了选择过程,其中每个挖掘器使用计算能力来找到正确的随机数,该随机数将返回以预定义数量的零开始的散列。当然,并不是所有的矿工都有相同的计算能力,所以它不是相当随机的。
机器的计算能力是以每秒钟的猜测次数来衡量的。
与计算能力较低的单独计算机相比,最强大的矿工将有更多的机会解决问题。然而,即使一个人拥有整个网络 10%的计算能力,剩下的 90%由成千上万的其他矿工提供,他仍然有十分之一的机会找到正确答案。这就是随机性如何确保没有人能够控制块的有效性,从而控制区块链的有效性。这也意味着,如果一个矿工或一个矿工组织控制了网络 51%或更多的计算能力,他们将在 51%的情况下首先解决问题。换句话说,在 51%的情况下,他们可以按照自己的意愿确认或修改交易。
工作证明协议背后有一个重要的问题,作为决策者,您应该知道,这是一个非常消耗能量的过程,会影响其可持续性问题。由于找到块的正确散列需要巨大的计算能力,并且由于网络中有许多矿工,用于验证比特币区块链上的交易的电力消耗已经成为全世界关注的问题,以至于它已经超过了瑞士(https://www.bbc.com/news/technology-48853230)的电力消耗。下图显示了截至 2019 年 6 月比特币的能源消耗情况:
来源:https://digiconomist.net
当然,其他协议可以取代耗能的工作证明。其中最著名的是区块链以太坊正在实施的股权证明。但更多的在下一章,第三章,以太坊和智能合约。
摘要
总而言之,区块链是几个工具的组合,它们一起提供交换数字值和断言真相的基础设施,而不需要中央实体。
正如本章所讨论的,区块链由用户、节点和挖掘器组成,它们分别发送/接收、存储和验证事务。在这种配置中使用密码术(更具体地说是散列函数)来创建引用任何种类的数字信息的输出(散列),例如引用一批交易。块将这些事务聚集在一起,并包括与块本身相关联的元数据,例如以前的散列、时间戳和随机数。公钥和私钥提供了一种在数字世界,尤其是在网络中有效管理身份的方法。在区块链中,还有一种激励机制,其中底层加密货币被用作奖励,以激励矿工为公共利益而工作,并在整个区块链保持确保真相。最后,一个共识协议的到来使矿工能够连续和正确地验证交易。
至此,您有望理解区块链是如何工作的,以及它结合了哪些内在原则来确保安全性、透明性和不变性。到目前为止,我们已经介绍了最重要的特征。您对它们的理解越好,就越容易理解区块链面临的主要社会和经济挑战,并最终帮助您确定区块链与特定用例的相关性。
在下一章,我们将学习以太坊和智能合约。