区块链技术基础及应用
2018-06-15杨宇光
张 舒 杨宇光
(北京工业大学信息学部 北京 100124) (1005377563@qq.com)
1 区块链介绍
1.1 简 介
区块链是一种去中心化、去信任、点对点传输的共享账本技术[1-3].区块链按照交易的时间顺序,将该时间段内的交易封装到一个区块中,并与上一个生成的区块相连,区块链基于密码学基础,使用智能合约来对数据进行编程和操纵,使用私钥、公钥和地址完成相应的交易[4],并由区块上的全部节点进行记录和维护,区块上的每个用户都有权力去翻阅和查看区块链上所有的交易记录,保证了区块链数据和信息的不可篡改和不可伪造.区块链这项技术彻底改变了现有技术中心化的特点,使信息与数据减少对中央服务器的依赖,形成分布式存储.
在一定时间内,区块链系统会选择其中记账最快最好的人,让他进行进账,将该段时间的交易记录在区块中,由系统确认后,链接在当前区块的末端,该记账者便可以获得系统赋予的一定的奖励.周而复始,系统不断地选出记账人进行记账,区块链也随之逐步增长.
1.2 区块链工作原理
在一笔交易中客户端发起一个交易请求,在该交易尾部附上自己的签名并向全网广播,待网络中其他的节点确认后将这笔交易封装到区块中.该网络上的接受节点执行共识算法.例如,比特币中使用POW(proof of work)方法[5],想获得一个合理的BLOCK散列值则需经过大量的计算,当其中一个节点找到合理的BLOCK HASH,由其他节点进行验证,验证通过后由该节点将这笔交易封装到区块中,通过该过程形成永久透明并且不断延伸的区块链.
1.3 区块链技术特点
1) 去中心化与集体维护.区块链运行在分布式的网络环境下,账本并不依赖于某一特定的服务器,也不由某个第三方服务平台进行维护,而是分布地存储在网络的各个节点中.每个节点都有同样的权力与义务,每个节点都有账本的副本.同时,它们也会共同去维护交易和整个链,任一节点的损坏都不会对区块链的运行产生威胁.
2) 信任机制.区块链基于密码学,采用对称加密、非对称加密、散列算法以及数字签名等方式[6-7],使得区块链的信任机制不依赖于第三方的背书.整个区块链系统运行机制公开透明,具有拜占庭容错,可以容忍少于13的恶意节点.
3) 不可篡改性.交易记录只要被添加到区块链中便具有不可篡改性.交易进入区块链中就会被永久地存储,单个节点是无法对交易进行修改的,这是由区块链的内置机制决定的,除非可以控制超过一半的节点,目前来看这种情况是不存在的.
4) 可追溯性.通过密码学,每笔交易与它相邻的区块相链接.所以,可以对该区块之前和之后的区块进行访问具有可追溯性.
1.4 分 类
区块链被分为公有链、私有链和联盟链3类[8].
公有链:任何人可以访问区块链上的任一节点,也可以参与到区块链的挖矿,同时可以访问到区块链上的全部账本.公有链完全中心化不需借助任何的第三方平台,通过密码学技术保障整个系统的安全性.公有链的应用范围极广,比特币类似的虚拟货币都是采用公有链技术.
私有链:在一些情况下并不希望所有人都可以访问所有数据,也不希望所有人都可以进行挖矿.系统只希望一部分有权限的人可以访问所有数据.私有链只允许特定的人对链有读写权限.私有链部分中心化,如今越来越多的大型金融机构更偏重采用私有链.
联盟链:系统中的一部分被选中节点,每个节点权限完全相同,这些节点间在不需要建立互信的条件下就可以直接进行可信交易.其他所有未被选中的节点也可以参与交易,但没有记账的权限,可以对区块链上开放的API进行限定的查询.联盟链采用共识机制的信任机制,具有较高的可扩展性.
2 各区块链平台
本文中我们着重介绍比特币、以太坊和由Linux基金会宣布创立的企业级区块链解决方案Hyperledger项目.
2.1 比特币
比特币是最早应用区块链技术、并且影响最大的一项应用,用在数字货币方面.
2.1.1比特币区块结构
比特币采用Level DB来存储区块,不同于以往的关系数据库,Level DB是一种键值型的数据库,由谷歌进行维护.其中每个区块由区块头和区块体构成(如图1所示),头信息主要包括版本号、前面区块的散列值、默克尔树根、时间戳、难度值、随机数等.其中默克尔树根根据当前区块中所有交易的随机散列值产生,保证了存储在该区块交易的不可篡改性和一致性,其路径方便检验交易是否存在于区块中[9].而区块体部分则主要是用来存放交易信息.一个完整区块链节点有如下功能.钱包:随机生成私钥,通过私钥生成公钥再转换成相应地址,钱包负责构建新的交易.挖矿:具有网络和计算下一个区块的能力,将交易放到内存池中,包装成区块,系统认证后即可获得相应的奖励.完全区块链节点:记录链上发生的所有交易信息,可以快速得到UTXO结果,认证交易.网络路由:把其他节点的交易信息传送给更多的节点.
图1 区块头信息
2.1.2比特币中的交易
比特币应用区块链技术,整个系统主要是依靠一个个时间顺序构成的区块,每个区块又记录了一定时间内的一系列交易.在一笔交易中用户可以创建一个比特币钱包,通过钱包与另一方进行货币交易. 每个钱包对应一个私钥,在交易时进行签名,并附上接收方地址.网络中矿工通过不断计算来寻找下一个区块,将内存池中所有未经校验交易打包成一个区块,通过区块头计算散列值,找到符合条件的新区块就向全网广播.网络对当前区块达成共识之后,将新生成的区块链接到区块链链条的最后面.比特币包含很多网络协议,比如P2P协议、Stratum协议、挖矿协议等.作为一个新启动的节点该如何找到其他的节点呢,可以通过默认的种子服务器,或者通过已知的Bootstrap服务器,手动指定IP进入到比特币的P2P网络中.与找到的节点通过握手进行一个TCP的连接,连接成功后就可以进行后续的信息交换.
在比特币交易过程中,地址转换机制对比特币安全性起着极为重要的作用.首先会通过随机算法得到一个256 b的私钥,通过ECDSA算法得到512 b公钥,比特币用SHA-256和RIPEM实现转换,生成160 b的公钥散列,再通过Base 58编码生成一串更短的地址.其中Base 58中还包含校验码,通过校验码可以检验地址是否合法. 同样,私钥通过Base 58生成WIF格式的私钥.
2.1.3共识攻击
比特币最基本的攻击方式为51%攻击,即区块链的构成是一个依照时间顺序不可逆的过程,修改区块链中的某一区块是基本不可能的,因为如果该区块被改变,则它的后续区块也需要更改,需要很强大的计算量.然而如果攻击者具有很强大的算力,比如控制超过51%大的计算能力,可以达到强行扭转最长链,还可能造成双重支付[10].
2.1.4比特币问题
交易时间过长:在可靠情况下,一般需要至少6个确认才能对一笔交易进行确认,时间大约在0.5 h~1 h,时间过长.PoW的挖矿方式浪费计算资源,不停计算散列,浪费电力,浪费CPU.ASIC矿机的出现使得全民参与性降低:一般使用CPU和显卡挖矿的可能性极低,使比特币流通性变差.不支持复杂的脚本语言,只支持逆波兰表达式堆栈式语言.
2.2 以太坊
以太坊是一个可编程的平台,除了提供一些列预定义的操作外还可以用户自己编写操作.侠义来讲,以太坊是一系列协议的集合,它提供有一个以太坊虚拟机,可以执行任何复杂的代码,用户可以通过虚拟机使用JavaScript或者python来编写相关的应用.
以太坊包含了许多区块链的技术,但也在区块链的基础上增加了许多新的技术.比如第1个提出智能合约概念的就是以太坊.智能合约被称作是自动执行的合约、区块链合约或者数字合约[11].在这种格式下,合约被转化成一段计算机代码,在系统中被存储和复制,并由运行计算机组成的网络监督执行.通俗来说,智能合约是在计算机系统上满足一定条件时自动执行的一段代码. 以太坊还提出了token机制[12].
以太坊也采用工作量证明机制挖矿,以太坊的工作量证明机制被称为EtHAash.EtHash算法中存在一个种子,用来产生随机数,种子可以通过区块头直接计算出来.通过种子可以获得一个16 MB的伪随机缓存,轻量客户端负责存储缓存.再通过缓存可以生成1 GB的数据集,数据集由客户和矿工存储,数据集随时间线性增长.挖掘过程通过抓取数据集的随机切片将它们混合在一起.通过使用缓存重新生成所需数据集的特定片段,令仅保存缓存的低内存的轻客户端完成验证.
以太坊在区块链基础上实现的一系列改进,完善了脚本系统,使智能合约也能应用到非金融领域;平衡账目实现更加精细的账目控制.
图2 Hyperledger架构
2.3 Hyperledger
在区块链中有这样的说法,如果以比特币为代表的货币技术作为区块链1.0典型应用,那么以太坊为代表的智能合约技术代表着区块链2.0应用,实现完备的权限控制和安全保障的Hyperledger项目代表3.0技术.
Hyperledger是由Linux基金委创立的项目,于2017年7月发布1.0版本.其提供一个开源社区,目标在于提高基于区块链系统的性能和可靠性,力造一个企业级区块链解决方案,定制企业级区块链标准,为技术公司、财务公司和供应链公司等提供商业交易平台.它采用模块化设计框架,提供插件式的算法,插件式即可替换的,为用户提供身份识别服务、强大的访问控制功能以及智能合约等.
2.3.1Hyperledger构架
在Hyperledger fabric架构上,提供单独Fabric CA项目,加强身份证书的管理服务,实现自动申请和签发证书.同时也支持多通道的特性,参与方可以建立单独的通道,实现与其他通道之间的隔离,保证不同通道间彼此数据的隔离,保障了企业间的隐私性和隐秘性.Hyperledger架构做成可插拔式,用户或者组织可以编写替换的插件.并且在1.0版本后加入系统链码来实现对区块链系统的处理.
Hyperledger架构有几个主要部分构成(如图2所示),包括成员管理、区块服务、ChainCode和Event.成员管理(Membership)在Hyperledger Fabrics中是很重要的一部分,主要是一个认证过程,验证成员身份的合法性,为平台安全性提供第1层保障.中间部分即区块服务是整个区块链的核心部分.区块服务主要是负责节点之间的共识管理、账本的分布式计算、账本的存储以及各个节点间P2P协议的实现.在这部分中也会有交易的执行.ChainCode部分主要是智能合约的执行,即约定在这个区块链上真正执行的代码.在Hyperledger中区块链上的所有机制都是以事件的形式触发的,事件贯穿于各个组件中.
2.3.2Hyperledger中的交易流
下面是Hyperledger一次交易的过程(如图3所示).
1) CA是成员管理中的一部分,用来申请证书.Application端与Peer进行交互,发送Proposal(包括交易通道ID、运行的智能合约、输入参数、签名).
2) Peer端在接收Proposal后进行校验,校验Proposal签名,验证证书的合法性,属于成员管理的范畴,也会对是否满足通道规则进行校验.校验后Peer端会模拟交易的执行并对结果签名,将读写集、背书以及签名回复给Application端.
3) SDK端在接收到回复后,经过校验再次提交交易给Peer端并转发给Orders端.
4) Orders端是整个交易流中的核心部分,对交易排序进行区块构造工作.封装成区块,Orders会负责将区块广播给Peer.
5) Peer端进行最后的校验,包括签名、读写集的一致性等.完成校验,执行区块中的合法交易,更新账本状态.
图3 Hyperledger交易流图
3 区块链应用场景
区块链以其分布式、无需第三方、不可更改等技术优势,在很多领域都有广泛的应用.
3.1 区块链与数据存储
区块链是一个分布式账本,具有不可更改的特性,很适用于数据存储,可以满足用户个人对数据存储的需要.目前,有很多公司在基于区块链技术做数据存储.例如:Tieron公司致力于使用区块链构造数据存储和验证平台;Peemova公司致力于开发用于商业领域的不可更改存储系统;Filecoin公司打造共享存储系统,把挖矿和满足其他用户的存储需求结合起来.
3.2 区块链与物联网
区块链的技术优势很适合与物联网结合使用.使用分布式账本记录某个设备与其他设备、Web服务或者与用户之间的数据交换,就可以跟踪设备的历史状态.德国的Slock.it公司提出了一款基于区块链的智能锁,使用智能合约对其进行控制.用在像Airbnb这样的租房平台可以将锁连接到互联网,由于所有交易都是通过区块链的,对交易进行确认后,户主便可以决定在某段时间把房屋使用权赋给这个用户,户主可以发放一把或多把私钥.户主也可以通过平台查看锁状态,不需第三方介入.对于共享经济的今天,区块链与物联网的结合将会产生不一样的效应.
3.3 区块链与投票系统
区块链很好解决了不需第三方的信任问题,所以很适合用在投票系统.Follow my Vote:基于Grepheme平台,改变了原有的投票方式,成为世界上第1个基于区块链的、开源的、安全的在线投票系统.满足匿名性,任何人都可以发起投票.
3.4 区块链与预测平台
利用区块链全民参与性质以及智能合约可以创建新型的预测平台.Augar公司将市场预测与去中心化网络结合起来,平台上用户可以自行地发起投票事件,比如预测体育赛事等.
当然,截至目前,区块链在某些方面的技术还不够成熟.充分利用区块链的技术优势,与现有技术结合,相信未来的区块链技术可以在更多的应用领域大放异彩.
4 安全性分析
4.1 区块链自身安全性分析
区块链是一种去中心化、由多方节点共同验证交易、共同维护账本的分布式技术.
所有节点都是对等的,系统中每个节点都可以获得总账本的副本.即使部分节点遭受到恶意攻击和损坏,也不会对其他节点和整个系统造成威胁.
区块链采用散列函数、数字签名等密码学基础对交易信息的安全性进行保障,保障其不可篡改性.使用工作量证明机制来鼓励节点记录交易信息,记录的节点可以获得一定的报酬.这种竞争机制下参与的节点数目越多,区块链自身的安全性能就会越高.当然,这种机制本身也存在一定的安全隐患,51%攻击就是一个需要考虑的问题,掌握了超过全网一半以上的算力就可能会控制新区块生成,造成双重支付等问题.
4.2 区块链应用安全性分析
除了考虑区块链底层技术和协议的安全性外,其应用的安全性也需要列入我们的考虑范围内.区块链底层技术支撑和规则协议的安全性相对较高,但这并不能表示其应用方面同其他软件一样,比特币在运行过程中,同样也会存在安全漏洞并需要及时进行修复.以太坊开发的TheDao应用就曾遭受过攻击,造成了大量资金的窃取,损失严重.所以,区块链应用的安全并不是只依靠自身底层技术.在应用安全方面我们也应该加强重视.
[1]马昂, 潘晓, 吴雷, 等. 区块链技术基础及应用研究综述[J]. 信息安全研究, 2017, 3(11): 968-980
[2]赵阔, 邢永恒. 区块链技术驱动下的物联网安全研究综述[J]. 信息网络安全, 2017(5): 1-6
[3]Sidhu J. Syscoin: A peer-to-peer electronic cash system with blockchain-based services for E-business[C]Proc of
Int Conf on Computer Communication and Network. Piscataway, NJ: IEEE, 2017: 1-6
[4]Merkle R C. Protocols for public key cryptosystems[C]Proc of IEEE Symp on Security and Privacy. Piscataway, NJ: IEEE, 2014: 122-122
[6]Merkle R C. A Digital Signature Based on a Conventional Encryption Function[G]Advances in Cryptology—CRYPTO’87. Berlin: Springer, 1988: 369-378
[7]Carter J L, Wegman M N. Universal classes of hash functions (extended abstract)[J]. Journal of Computer & System Sciences, 1977, 18(2): 106-112
[8]Buterin V. On public and private blockchains[OL]. [2018-03-15]. https:blog ethereum.org20150807on-public-and-private-blockchains.2015
[9]Szydlo M. Merkle tree traversal in log space and time[G]Advances in Cryptology-EUROCRYPT 2004. Berlin: Springer, 2004: 541-554
[10]程丽辰, 刘吉强. 区块链技术及其安全问题[J]. 信息通信技术, 2017 (3): 39-45
[11]Watanabe H, Fujimura S, Nakadaira A, et al. Blockchain contract: A complete consensus using blockchain[C]Proc of IEEE Consumer Electronics. Piscataway, NJ: IEEE, 2016: 577-578
[12]Wood G. Ethereum: A secure decentralised generalised transaction ledger[OL]. [2018-03-15]. https:doi.org10.1017CB09781107415324.004