书籍基本信息
中文书名:区块链基础知识25讲
英文书名:Blockchain Basics A Non-Technical Introduction in 25 Steps
作者: [英]丹尼尔·德雷舍(Daniel Drescher)
翻译: 马丹 王扶桑 张初阳
出版社: 人民邮电出版社
区块链的定义
区块链在不同的语境下,可能会有不同的含义。“区块链”可能的四种含义如下:
- 一种数据结构的名称:当“区块链”作为一种数据结构被使用时,其指代将数据整合进入一个个“区块”当中。可以把“区块”这个概念称为一本书当中的一页,而一个个区块互相之间连接起来像一个链条一般,因此称为区块链。
- 一种算法的名称:当我们把“区块链”作为一种算法来考虑时,指的是在一个完全去中心化的点对点系统中,将大量特定数据结构的数据妥善协调组织在一起的算法,类似于一种完美的民主投票方法。
- 一个完整技术方案的名称:当我们把“区块链”作为一个完整的技术方案提出来的时候,“区块链”指的就是将区块链数据结构、区块链算法、密码学以及安全技术综合在一起,来确保完全去中心化点对点系统完备性的一个完整技术方案。
- 普通应用场景下完全去中心化点对点系统的一个概括性术语:“区块链”这个术语同时可以被看作利用区块链技术方案实现完全去中心化点对点分布式账本系统的方法。在这种情况下,“区块链”指的是一个完全的去中心化系统,而不是一个完全去中心化系统的一部分。
区块链的作用
从功能性上来讲,区块链主要可用于明确所有权和转移所有权:
- 明确所有权:也就是回答构成所有权的主要问题,即:谁拥有,拥有多少,拥有什么和什么时候拥有的?
- 转移所有权:即改变所有权的当前状态,也就是回答另一个证明所有权的重要问题:谁在什么时候获得了谁的所有权?
从技术上来讲,区块链的作用是实现并维护去中心化系统的完备性,即保障:
- 数据完备性:软件系统中的数据要完整、正确且无冲突。
- 行为完备性:软件系统要可顺利运行,并且保证不存在逻辑错误。
- 安全性:软件系统只对认证用户授权有限的数据访问与使用功能。
区块链的应用
以下内容详细见文末的参考文档。
- 数字货币:如比特币,在技术上实现了无需第三方中转或仲裁,交易双方可以直接相互转账的电子现金系统。相比实体货币,数字货币具有易携带存储、低流通成本、使用便利、易于防伪和管理、打破地域限制,能更好整合等特点。
- 金融资产交易结算:如支付结算方面,在区块链分布式账本体系下,市场多个参与者共同维护并实时同步一份“总账”,短短几分钟内就可以完成现在两三天才能完成的支付、清算、结算任务,降低了跨行跨境交易的复杂性和成本。同时,区块链的底层加密技术保证了参与者无法篡改账本,确保交易记录透明安全,监管部门方便地追踪链上交易,快速定位高风险资金流向。
- 数字政务:如区块链发票。区块链的分布式技术可以让政府部门集中到一个链上,所有办事流程交付智能合约,办事人只要在一个部门通过身份认证以及电子签章,智能合约就可以自动处理并流转,顺序完成后续所有审批和签章。
- 存证防伪:如在知识产权领域,通过区块链技术的数字签名和链上存证可以对文字、图片、音频视频等进行确权。区块链可以通过哈希时间戳证明某个文件或者数字内容在特定时间的存在,加之其公开、不可篡改、可溯源等特性为司法鉴证、身份证明、产权保护、防伪溯源等提供了完美解决方案。
- 数据服务:区块链技术将大大优化现有的大数据应用,在数据流通和共享上发挥巨大作用。未来互联网、人工智能、物联网都将产生海量数据,现有中心化数据存储(计算模式)将面临巨大挑战,基于区块链技术的边缘存储(计算)有望成为未来解决方案。
区块链的实现和对应概念
软件开发从业人员应该比较熟悉,当我们为解决现实世界中的问题而进行编程时,我们首先需要对现实世界中的事物进行抽象和定义,然后实现对象能够进行的一系列操作,最后将各个对象的操作编排为特定的流程并最终实现一个特定的目的。本书关于区块链实现上的介绍,也是类似的思路。在实现区块链的过程中所要解决的任务,以及其对应的概念如下表。本文我会摘取实现区块链的各个任务所使用到的核心思想。
描述所有权
把交易历史记录作为当前所有权的证明依据:
- 区块链可维护所有交易的整个历史记录,其中的交易数据按照它们发生的顺序依次存储在区块链数据结构中。
由于交易数据包含了诸如出让所有权的账户信息,接收所有权的账户信息,以及所有权对应资产和交易的数量等信息,只要整个历史交易记录可用,就可以重建每个账户的所有权信息。因此,完整的历史交易记录足以明确所有权。
保护所有权
通过数字签名进行交易签名和交易验证:
- 由于哈希值可以被认为是一种数字指纹,因此它们对于每笔交易数据都是唯一的
- 非对称加密中用私钥生成的加密文档只能使用公钥来解密,两个密钥的联系是独一无二的,因此,使用特定公钥成功地解密加密文档可以证明它是用相应的私钥创建的
这两个概念结合在一起就可用于创建可以唯一追溯到一个特定的交易数据的数字签名。由此证明创建数字签名的私钥的所有者确实赞同交易数据中的内容。换句话说,基于数字签名,可以证明:
- 你**“同意”**这笔交易
- 你同意**“这笔”**交易
存储交易数据
存储交易数据,其核心就在于如何定义“区块链数据结构”。和所有的“链表”结构类似,在区块链数据结构中,一个区块(节点)的定义也包含两部分:
- 区块头:前一个区块头的哈希引用、哈希难题的难度等级、时间戳(开始解决哈希难题的时间)、解决哈希难题的随机数、包含交易数据的默克尔树的根
- 区块体:以默克尔树形式保存的交易数据
一个区块链数据结构的大致图形化示例如下:
上图中,区块链用于描述交易的信息如下:
- 原所有权拥有者账户的标识符。
- 交易目标账户的标识符。
- 要交易的资产数量。
- 交易完成的时间。
- 支付给系统的费用。
- 证明原所有权拥有者的确同意进行交易。
准备分配账本
准备分配账本,要解决的是,如何保证区块链在证明所有权时是可靠的。答案就在于使区块链的历史记录不可变,即仅允许向区块链新增记录,但不允许修改历史记录。而区块链保证历史交易记录不可变的主要原理,就在于让改变历史交易记录的成本变得极高。极高的成本就会阻止人们去改变它。可通过一下3点实现上述目标:
- 以一种对的方式存储历史交易记录,并让对任何历史交易记录的更改都变得十分醒目且引人注意。
- 强制加入修改历史交易记录需重新编写大部分历史交易记录的要求。
- 使更改历史交易记录的计算成本变得极高。
分配账本
分配账本,就是要让由区块链数据结构所承载的交易数据在分布式点对点系统中流转。由于分布式点对点系统中的各个节点是通过网络进行数据传输的,这就可能导致信息丢失、信息被重复发送或者信息传输的顺序被打乱等问题。区块链通过以下方式解决上述问题:
- 信息以与人们传播八卦相类似的方式进行传递。每个接收到新信息的节点会把信息传递给与其沟通的对等节点,而这些对等节点会以同样的方式来处理这些信息。这样就能确保最终每个节点都接收到信息。
- 由于这些信息可以通过数字指纹或者哈希值来识别,节点就能轻松识别收到的信息是否存在重复。
- 交易数据和区块头包含时间戳,因此节点就能基于时间戳对信息进行排序。
添加新交易
区块链算法负责管理节点处理新交易和区块的方式:
- 为了确保唯一有效的交易被添加到系统中,所有节点都需要承担监督者的职责。既奖励其他对等节点添加有效交易,又需发现对等节点添加的无效交易。因此,系统中的所有节点都有动机来正确地处理交易,同时监督并指出其他节点的错误。
- 区块链算法最重要的作用之一,就是它不仅能确保交易数据和区块的有效性,还能确保所有节点的工作节奏保持一致。这种一致的工作节奏是确保所有区块包含同样交易数据的关键。然而,这种工作节奏不是通过中央机构来控制的,因为这样就违背了分布式系统的基本原则。保持工作节奏的秘诀是,只要节点收到包含验证信息的新区块,其就能切换到评估阶段;只要评估阶段完成,节点就能切换到验证新交易数据和创建新区块的阶段。
决定哪一个账本代表事实
核心思想: 有越多的独立见证人能够证明同一件事,这件事就越有可能是真实的。
区块链的设计思路是让所有节点都能独立地参与投票,从而就选择哪一个版本的历史交易记录达成一个集体共识。
区块链通过哈希难题将投票权与计算能力结合在一起,故任何试图控制大多数投票权的尝试,实际上意味着要收集整个点对点系统中大部分的计算能力。区块链达成共识的可靠性依赖于这样一种假设,即没有一个人或组织能够获得或控制整个系统中的大部分计算能力。
区块链依赖的核心技术
区块链的实现会依赖一些技术或算法,这里仅选取一些有代表性的技术/算法做简要说明。
哈希
想象有这样一个“丰巢”快递柜:
- 首先,它的每个柜子能够存放的内容是数据,而且不限制被存放数据的大小和类型
- 其次,它的柜子个数是无限多的,也就是不论给它多少个数据,它都能够放得下
- 再次,不论你往柜子里存放什么数据,它都会给你返回一个“取件码”(这个取件码的长度是固定的),而且只要放进柜子里的数据是一样的,那么它返回的“取件码”也将会是同一个;而一旦放进柜子里的内容有任何不一样,那么它返回的“取件码”也必将不同(而且不可预测)
- 最后,这个柜子只支持单向操作,也就是只能往柜子里存放数据,但是不能基于“取件码”获取数据
区块链所用到的哈希相关的技术如下:
- 哈希算法:哈希算法即相当于上面的“丰巢”快递柜实现的功能(实际哈希算法不会存储数据,只是基于数据生成“取件码”)。哈希算法可以作为一个很小的计算机程序来看待,无论输入数据的大小及类型如何,它都能将输入数据转换成固定长度的输出。哈希算法在任何时候都只能接受单条数据的输入,并依靠输入数据创建哈希值。
- 哈希引用:上述例子中的“取件码”就相当于对数据的一个哈希引用,如前面区块链数据结构示意图,交易1的数据可以由哈希算法生成Hash1,交易2的数据也可以由哈希算法生成Hash2,再将Hash1和Hash2结合并由哈希算法生成Hash12……如果交易1的数据被篡改,那么必将导致Hash1的变化,进而导致Hash12、Hash1234的变化,以及整个区块的数据无效,最终导致整个区块链数据结构也就无效了
- 哈希难题:针对要放入“丰巢”快递柜的数据,现在要找这样一个随机数,让要放入的数据和这个随机数一起生成的哈希值满足某个特定的条件,比如生成的哈希值必须以3个0开头,上述找随机数的过程即为解哈希难题。哈希难题的难度通常使用哈希值中必须包含多少个0表示。解哈希难题与知识和算法无关,只能依靠算力不断尝试求解。
非对称加密
非对称加密的核心是对数据的加密和解密会涉及两个秘钥,一般称之为公钥和私钥,公钥是公开的,私钥是非公开的。但是对同一份数据的加密和解密,必须要分别使用公钥和私钥,即不能使用一个秘钥对数据先加密,然后又用同一个秘钥对数据进行解密。因此加解密过程只能以下两种方式二选一:
- 先通过公钥加密,然后通过私钥解密:相当于邮箱功能,即任何人只要知道收件人的邮箱地址(相当于拥有公钥),都可以向收件人发送邮件,但是只有收件人能登录邮箱(相当于使用私钥)查看邮件内容
- 先通过私钥加密,再通过公钥解密:相当于网站公告栏,即只有网站管理员能够登录管理员账号(相当于使用私钥)编辑公告内容,但是所有进入网站(相当于拥有公钥)的人都可以查看公告栏的内容
区块链算法
区块链算法负责管理分布式点对点系统的节点处理新交易和区块的方式,其核心是通过设置严格的校验规则、奖惩机制和竞争控制,不仅保障交易数据和区块有效,而且能够确保所有节点的工作节奏保持协调一致。
分布式共识
分布式共识是纯粹的分布式点对点系统中成员在集体决策问题中达成的一个协议,用于解决在网络中发生了两个可能会产生冲突的交易的时候,决定保留哪个交易,以及舍弃哪个交易。区块链通常根据创建交易所需的计算量来选择选择历史交易记录,从而可能会有两个标准:
- 最长链标准,每个节点独立地选择包含最多区块的链作为权威链。
- 最重链标准,每个节点独立地选择累积难度最高的链作为权威链。
区块链的局限性与应对措施
区块链是一个完全分布式的点对点系统,允许所有人查看历史交易记录,并添加新的交易记录到节点共同维护的账本中。开放性以及没有中央控制机构是这一系统的特征。这一系统中,节点作为独立见证人来解决确权的问题。然而,开放性以及中央控制和协调机构的缺失同时也会造成一些不必要的影响,从而限制该系统的应用。区块链最主要的技术缺陷包括以下几点。
- 缺乏隐私:所有交易细节,比如货物数量以及转账金额、涉及的账户,还有转账时间等信息,所有人都能查得到
- 安全模式:私钥是证明所有权的唯一工具。只要某账户的私钥被故意泄露,那么这个独立账户的安全性就无法得到保障。
- 延展性的限制:要增加新的交易数据,就需要解哈希难题,这会有较高成本,因而在高处理速度、高延展性以及高吞吐量环境中应用有比较大的阻碍
- 高成本:解答哈希难题或确保工作量证明算法正常运行都需要极高的计算成本
- 隐藏的中心化属性:那些拥有必要金融资源的人会投资专业的硬件用于解决哈希难题,从而对系统做出贡献,最终取得奖励,并最终垄断系统
- 缺乏灵活性: 由于区块链的不可更改性,会使得连开发区块链的人也很难修复漏洞或对区块链协议进行调整。
- 临界值:区块链防操纵的特点,以及共同维护历史交易记录的可信性都基于这样一个假设,即系统中的大多数算力都是由诚实节点控制的。但现实是可能出现51%攻击
解决透明度与隐私的冲突导致了以下两种区块链的出现:
- 向所有用户或节点授予读取权限以及创建新区块权限的公有链。
- 向预先选定的一组用户或节点授予有限读取权限以及创建新区块权限的私有链。
解决安全性与速度的冲突导致了以下两种类型区块链的出现:
- 向所有人授予写入权限的无须许可的区块链。每个用户或节点都可以验证交易,并向区块链上添加新区块。
- 仅向预先选定,并通过适应过程被确定为可信任的一组数量有限的节点或用户授予写入权限的许可类区块链。
读后感
区块链的概念已经出现十多年了,市面上也已经有非常多关于区块链相关的书籍,但是个人也只是最近两年才开始了解区块链相关的知识。在本书的“内容提要”部分,作者已经指明——“这本书弥合了关于区块链的纯技术类书籍和纯商业类书籍之间存在的空白,通过解释构成区块链的基础技术概念以及这一技术在相关业务领域中的应用来让读者真正了解区块链。”个人感觉,这本书对有编程基础的人作为了解区块链的入门书籍还是不错。
这本书是年前就已经读完了的,也是最近才想要输出读书笔记,但是直到整理读书笔记的大纲时,才发现很多知识自己仍然是模棱两可,于是又快速翻看了一下对应的章节,才大致梳理出以上的一个脉络。真正是读书容易,可是想要读完之后输出就没那么简单了。才疏学浅,以上内容若有不当之处,还望海涵。
参考文档:
- 《区块链技术的五大应用场景》: http://www.cac.gov.cn/2019-11/06/c_1574572443976601.htm?ivk_sa=1024320u