区块链原理及核心技术
Posted Sunny_范
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链原理及核心技术相关的知识,希望对你有一定的参考价值。
文章目录
注:本文参考学习中国计算机学报2021第1期中的论文《区块链原理及核心技术》(蔡晓晴、邓尧、张亮、史久琛、陈全、郑文立、刘志强、龙宇、王堃、李超、过敏意著)
前言
每一秒,微信就要处理1.4万笔转账,能转账的前提是微信知道你有多少钱,而这些钱放在人民银行的专户里记账,而你也相信微信和银行体系背后的无数员工不会搞错你的余额。因此,人民银行就是微信交易中可信任的第三方。但是如果没有了这些可信任的第三方,在一个完全匿名化的网络中,你怎么给我转钱?
2009年,一位叫中本聪的神秘人用9页的论文解决了这个问题,那也就是——区块链。
在没有了可信任的第三方之后,最大的问题就是我们每一个人之间都无法互相信任。因此,在区块链的世界中,转账就得发广播,目的是让区块链网络中的每一个人都知道每一笔钱的来龙去脉。比如说,有一天,小明要给老王转账100元。于是小明和老王就广播对大家说,小明账户减少100元,老王账户增加100元。那么大家收到信息之后,就检查自己手中的账本,看小明是否真的有100元,如果没有那么本次转账就无效,如果有,那么就生成新的一笔交易并且记录到账本上。而这个账本也就是区块。可以拟定一天的账本为一个区块,那么将很多天的账本连接起来,也就是很多区块连接起来,即形成了区块链。在这个广播的过程中,大家会通过电子签名来辨认这个广播的消息是谁发出的。
由于区块链网络是除去了第三方的点对点网络,因此网络中的每一个节点都是平等的,那么每一个节点都可以记账。也就是说,如果网络中每个人都可以记账,那每个人账本中包含的交易和交易顺序可能都不一样,并且还有可能有人去记假账,这就很难得到一个大家都认可的账本。为了解决这个问题,为了让所有人都能够得到一份大家共同认可的账本,就有了——共识机制。那么中本聪的方法就是做题,也就是工作量证明。工作量证明的本质就是穷举。你的设备算力越强,那么算出答案的可能性就越高,为了做到这一点,需要用到哈希加密。以SHA256算法为例,任何一串字符串用它加密之后都能得到一串独一无二的二进制数,而源输入只要有一点改动,那么哈希加密后的结果都会完全不同。
对于一个账本中的部分信息,也就是一个区块中的部分信息,我们对其做SHA256算法,那么就能够得到一串独一无二的二进制数,而区块链网络中规定不断修改区块中的随机数,然后对区块中的部分信息做SHA156算法知道得到一个前n个数为0的哈希值(今天比特币网络中n大概为76),这个哈希值为符合要求的哈希值。而只要你算出来这个哈希值,那么就会广播到网络中,其他人能够瞬间验证你有没有算对,如果对了就可以把这个区块挂到区块链上,而第一个将区块挂到区块链上的人就要活得系统给的一笔奖励,这个过程叫做挖矿。而区块链发生改变,就会广播到网络中所有的节点,那么所有人收到这个信息,大家就有了一份相同并且实时更新的账本了。
如果两个人同时完成了计算,打包出了一个新区块,那么大家该认可谁的区块链呢?由于每个人在本地都有一条区块链,也就是账本,而计算出的新区块是先链接到本地的区块链上然后将区块链广播到网络节点中,如果有多个人同时广播出去,那么,谁广播出去的区块链长,网络中的其他人就认可这条区块链。
那么如何防止记假账呢?首先,对于比特币网络中的每个节点,都有一份电子签名。因为有电子签名,记账人就不能伪造别人给自己转账,又因为历史账本的存在,因此也就不能凭空变一笔钱出来。而为了防止账本被篡改,每一个新加入的区块都需要在这个区块头里面记录上一个区块计算出来的哈希值,通过这种方式将所有区块连接起来一直到第一个创世区块。如果修改了任意一个区块里的任何一个字符,都会改变这个区块的哈希值,让下一个区块的哈希指针失效,那么又要需要下一个区块里面存的上一个区块的哈希值,以此类推,一直到修改到最后一个区块。这是非常麻烦的,所以记账人想造假几乎是做不到的。
总体而言,区块链技术是以数据库作为数据存储载体,以P2P网络作为通信载体,依赖密码学确定所有权和保障隐私,依赖分布式系统共识框架保障一致性,旨在构建价值交换系统的技术。
一、运作机制
1.1 比特币系统运作机制
1.1.1 比特币核心数据结构——账本
比特币中的账本是一种可以对账验证的账本。比特币账本中的交易、区块、区块链(这里表示一种数据结构)分别对应于物理占账本的一条记录、包含多个记录的一页、包含多页记录的完整账本。
(1)交易:每一条交易需要记录交易的输入、输出地址以及转让的数目。比特币中交易的输入来源于未被使用的交易输出(Unspent Transaction Output,UTXO),不等同与余额。UTXO本身不能被拆分,但是可以通过调整输入输出完成交易,比如如果UTXO小于目标值,那么可以添加多个UTXO作为输入;如果UTXO大于目标值,就可以添加自己的地址作为找零输出。价值的转移就是通过UTXO的变化完成的。UTXO的生产和使用是由密码学中的数字签名保障的。产生UTXO即产生交易输出时,要使用锁定脚本将比特币锁定到指定账户地址中;产生交易输出及使用UTXO时需要使用有正确签名的解锁脚本才能够解锁比特币。
(2)区块:由区块头和许多条交易记录组成。区块头包括了父区块的哈希值、时间戳、Merkle树根(用于有效总结区块中所有交易的数据结构)和区块高度等。区块的哈希值能够唯一标识区块。各个区块之间通过区块头中的哈希指针链接成为一个完整的账本,也就是区块链。
1.1.2 比特币运作机制
比特币的运作机制就是完成记账的过程。比特币采用分布式系统实现去中心化,将记账权下放到分布式系统中的节点中,具体每笔交易由哪个节点记到账本上并不确定,需要各个节点参与竞争争取。各节点只有诚实遵守规则付出代价才会得到系统的奖励,这个过程叫做挖矿,各个节点被称为矿工。
分布式系统中如何保障数据一致性?这也是由系统中的共识算法决定的。共识算法中最长链规则,使得各个节点在接收到新区块的数据时,必须停止当前的挖矿工作并立刻对新区块进行验证。
比特币中构建的分布式系统是一个松散的系统,系统中的节点以P2P网络连接通信,并且系统中的节点无需身份验证,因此系统中的节点可以自由参与或退出。
整个比特币系统的运作机制可以描述为:首先由客户端发起一笔交易,将该交易发送到比特币网络中任意节点。节点在收到交易后验证交易是否正确,如果验证不通过,节点将拒绝该交易,并向发送者返回交易被拒绝的消息。如果验证通过,节点将收到的交易放入自己的交易池中,并向网络中继续传播。各节点从各自交易池中打包交易,并通过加入随机数进行计算。最先计算出符合要求的哈希值的节点打包的区块有效,即该节点获取了所打包交易的记账权。之后该节点将自己通过计算得到的区块广播到区块链网络中,其他节点接收到新区块后,会立即验证该区块的正确性,验证成功后将新区块连接到自己的链中,同时删除自己交易池中已经被打包的交易记录,再重新开始新一轮的生产区块过程。
1.2 区块链系统运作机制
1.2.1 区块链核心数据结构
1.2.1.1 链式结构
在链式结构中,除了第一个区块和最后一个区块以外,其他区块都只有一个前驱区块和一个后继区块。区块中的数据记录可以根据不同的应用场景设计不同的字段。如比特币中的数据记录——交易,一般需要包括输入、输出、时间戳。如果链中记录的是医疗、物联网数据,则可以为不同时间点需要上链的数据。除此之外,区块链中还记录了Merkle树根值,还有用于表名区块身份的信息(如ID、哈希值等)以及该区块被合理生成的证明。区块被合理生成的证明是指矿工参与公式竞争记账权付出代价的证明,不同共识算法矿工需要提交不同的证明信息。在比特币中,是矿工多次尝试找到满足某一条件的随机数。
1.2.1.2 树状结构
在树状结构中,创世区块为根区块,只有后继区块而没有前驱区块。其余区块可能有很多个后继区块,有一个父前驱,可能有多个叔前驱。
1.2.2 区块链系统角色
区块链中分为参与节点和维护节点。参与节点为使用系统的客户端节点,用于与用户交互。维护节点就是维护系统数据记录的节点,该类节点用于验证用户请求、创建区块、生成区块链和保存区块链,是核心角色。但是节点通过P2P网络连接,因此系统中各类节点之间地位平等,节点功能可选。
1.2.3 区块链运作机制
区块链运作包括以下几个步骤:客户端发起请求、各节点将用户请求在网络中扩散、网络中参与记录的节点验证请求数据、各节点根据共识算法完成用户请求并将请求打包生成区块、节点将新区块广播、非区块生成节点验证新区块并更新原有区块链。
二、核心技术
2.1 区块链密码学
区块链对密码学的直接需求体现在:确定所属权、保护数据隐私。数字签名技术可用于确定所属权。数字签名中用户将私钥保存在自己手中,将公钥分发到网络节点上。用户使用私钥生成签名,其余节点可以使用公钥验证签名。相反,如果没有私钥,用户是无法伪造签名的。而又由于账本数据公开透明,如果信息使用明文上链,那么用户隐私就难以保障,所以使用密码学中的工具如非对称加密、环签名等可以对交易进行一些匿名化处理。
2.1.1 Merkle树
哈希函数是将任意长度的消息映射成一个较短的输出定长消息的函数。哈希函数保障已有数据的不可篡改性。Merkle树是一种用哈希函数建立的二叉树结构,其底层的叶子节点是数据块,每个非叶节点的内容等于其子节点串联起来后的哈希值,以此类推,最终得到一个Merkle树根。在区块链中,每个数据块都是一笔交易,得到的Merkle树根保存在区块头中。
2.1.2 数字签名
数字签名包括密钥生成、签名、验证签名三个过程。在区块链中,公钥是账户地址,一个人可以拥有多个公钥,每个公钥均为与用户真实身份无关的随机数字,他人无法通过公钥推导出用户的真实身份,从而保障了用户隐私。一个被验证通过的<消息,签名>对能够保证:该消息是该公钥的发送者发送的——消息源身份认证;该消息没有被任何人篡改过——消息内容的完整性;该公钥的所有者无法否认他发送过该消息——消息内容不可否认性。
数字签名的具体算法:
- 密钥生成:通过算法生成公钥vk和私钥sk,公钥对所有人公开,私钥由签名者自己秘密保存
- 签名算法:签名者利用私钥sk生成对消息M的签名,然后把<消息,签名>对公布出去
- 验证算法:所有人都可以利用签名者的公钥vk对该<消息,签名>进行验证,验证结果为通过或者不通过
2.2 区块链共识机制
区块链系统通过对见证人身份进行重新选择,使得见证人不再固定于一个中心化身份的实体,而是由多个节点参与见证、监督和决策。系统中涉及的数据记录由这些节点进行维护和生成,从而实现了去中心化。区块链是在物理和逻辑上都广为分布的多个节点组成的分布式系统,而分布式系统的共识主要取决于三个因素:节点可靠性、节点立场和网络通信状况。
2.2.1 区块链共识框架
区块链系统的核心是区块链账本数据的维护。因此,共识的过程是各节点验证及更新账本的过程,共识的结果是系统对外提供一份统一的账本。共识算法层包括:节点选取算法(POW、POS、POC等)、区块生成算法、区块选取协议(最长链原则)。
记账节点选取算法POW:区块链中的POW算法为选取一个随机数同区块链中的数据做哈希运算得到一个符合要求的目标值,想要得到这个目标值,就要对随机数进行穷举来实现,最先求得目标值的节点获得记账权,其余节点仅需要将各参数带入即可验证正确性。节点数可扩展,参与过程无需身份验证,但是浪费算力资源,效率较低。
区块选取算法:在链式结构中,主要包括最长链原则和激励原则。最长链原则将网络中最长的链视为正确的链条,要求矿工一直在最长链上挖矿。矿工在接收一个新区块时,必须停止当前挖矿过程,验证新区块是否有效,否则无法保证自己始终在最长链上工作。激励原则中,最先按规则生成区块的矿工将获得系统奖励。但由于网络中的通信时延,链式区块链系统中可能会出现分叉情况,为了避免分叉造成的不确定性,一般系统在生成新区块B后,再等待6~7个区块后才可确认B的有效性,区块等待的数目是按照概率算的。随着链条的长度增长,链条被更长链替代的难度越大。
2.3 区块链网络
区块链中使用了基于互联网的P2P网络架构。网络中每个参与节点贡献一部分计算能力、存储能力和网络连接能力。通过网络,这些能力作为共享资源可被其他对等节点直接访问,访问过程中不需要再经过中间实体,所以每个节点既是资源和服务的使用者,又是整个资源和服务的提供者。整个网络中没有特殊地位的节点,每个节点都可对任意对等节点做出相应,提供资源。
区块链中的节点通过监听能够采集到网络拓扑信息和网络传播信息,对信息进行分析从而得到网络大小和地理信息、节点稳定性、交易、区块传播分析。
三、区块链前沿热点
3.1 区块链隐私保护
区块链使用数字签名保障用户隐私权,尽管无法直接从公钥地址反推出用户的私钥,但是由于区块链历史数据全网可见,基于这些公开的数据能够分析出用户相关隐私信息,在一定程度上破坏了用户数据隐私性。比特币系统中的匿名性是通过假名的方式表现得,并不是真正的匿名性,尽管没有对应到个人的真实信息,但是在有了足够的用户额外信息之后,基于大数据的分析或其他有针对性的攻击,假匿名性的系统无法提供承诺保障。针对这个问题,主流方案有:混币技术、环签名、零知识证明。
混币技术:通过多个标准交易中多地址合作,切断每笔交易的输入输出之间的联系。最简单的是通过在系统中增加一些可信机构来完成零钱兑换等,减少了用户隐私暴露的几率。显然,这种方式,运营商可能会窃取资金、追踪货币或者遭遇倒闭等情况。
环签名:使用一次性地址来掩盖真实地址,使得发送者无法从接收者地址中推导出接收者的源地址,从而实现了不可链接。在交易时,发送方需要根据自己的一次性 地址的私钥来算出一个Key Image并将其作为签名的一部分发出去,这里的签名使用环签名来实现不可追踪性。这样做的好处是交易的检验者可以确定这笔交易来自公钥环上的某个私钥的所有者,且该私钥所有者仅能使用该私钥一次。
3.2 针对区块链网络的攻击方式
区块链网络的攻击方式中,大多并不是对于区块链共识算法本身进行攻击,而是通过破坏区块链架构平衡或通过网络延迟等其他因素进行攻击。攻击者在网络中造成各个矿工节点的存储数据产生差异,并通过某些方式让网络中的其他诚实矿工认证自己做出的恶意行为是正确的。区块链网络现有的防范攻击方式,大多使用矿工攻击的收益和矿工付出代价之间进行权衡,让恶意矿工对于区块链网络攻击所付出的代价要高于攻击付出的收益。
双花攻击:由于在电子货币系统中,电子货币是易复制的,攻击者可以将同一份电子货币发送给多个其他接收者,即一笔电子货币进行了多次使用。
自私攻击:恶意节点优先于诚实节点挖出区块,但恶意节点不选择立即将挖掘到的区块广播到区块链网络中,当诚实节点在原有链上挖出新区块时,恶意节点突然释放之前所保留的区块,增加链的长度,使得区块链网络出现分叉,根据最长链原则,诚实节点挖出的区块无效,既浪费了大量的算力资源,同时,由于自私链成为了最长链,诚实节点最终也会在自私链上进行挖矿,严重破坏了区块链系统原有结构。
扣块攻击:矿池是多矿工共同挖矿的一种形式,矿池根据每个矿工付出的计算能力,来按比例分配矿池的挖矿奖励。扣块攻击的主要思想是加入矿池的恶意节点不发布其成功挖出的区块,但是共享同一矿池中其他矿工挖出区块的奖励,从而减少了矿池的预期收益。在这种攻击方式中,虽然恶意矿工不会得到任何额外的收益,但是可以破坏矿池的收益
Eclipse攻击:在Eclipse攻击发起时,攻击者使用虚假节点的连接尝试向区块链网络中的某个正常节点不断发送来更新路由表的信息,被攻击节点的路由表会充满虚假节点的连接建立,从而影响自己的正常网络通信行为。
3.3 区块链拓展架构
单链拓展:拓展方式有两种,一种是以比特币区块链为核心,对于一些特殊类型(不适用于区块链)的交易则由它支付中心处理或者在线下执行,这种方式叫做链下拓展;另一种是提升区块链本身的性能使其有能力处理所有类型的交易,这种方式叫做链上拓展。区块链的可拓展性可以通过事务吞吐量(区块链能处理事务的最大效率)和延迟(确认一个事务已经包含在区块链上的时间)来衡量。想要提高链上可拓展性,可从这两个方面入手。链下拓展的主要思想就是取长补短,区块链的吞吐量有限,那么我们就可以试图将交易记账的操作转移,从而减少区块链记账的压力,一个是离线交易,一个是合并交易后上链。
跨链拓展:随着区块链技术不断成熟,促使越来越多的行业开始着手应用这一热门技术。但是目前成熟的区块链社区往往是针对一个特定的行业,这就给区块链的互通性带来了挑战。在此背景之下,跨链技术就成为了区块链向外拓展和连接的重要桥梁。公证人机制就是在两个互不信任的链之间引入第三方中介来传递信息,在不同账本之间完成跨链交易的转换过程。
四、区块链应用
4.1 区块链1.0——数字货币
在区块链1.0时代,主要的应用对象为货币,实现的常用功能为货币转移、汇兑和支付。其架构如下:
4.2 区块链2.0——智能合约
区块链构建了一个分布式的数据库,这个数据库的真实性由网络中的众多节点进行维护,每个节点对每条记录都有决定权。如果记录的内容是各用户间来往的交易,则这个数据库就是一个账本,这就实现了比特币系统的功能。如果记录内容为更复杂的约定或事件,则此数据库能发挥更大的作用,帮助监督更复杂的逻辑实现。在区块链中,该过程可以抽象为数据的可信记录和可信执行,其中可信的特性由共识机制保障。在密码货币中,记录为链上的交易历史数据,执行过程为利用堆栈运行加解密脚本,链上记录通常为固定格式,且可视为常量。如果能够扩展上链数据(如代码)并允许更加复杂的执行操作(循环判断等),则区块链能够处理蕴含复杂逻辑的交易过程。如果将生活中的交易过程抽象建模,并以代码形式在区块链中记录、执行,可以实现诸如公证、产权证明等。
区块链2.0以以太坊为代表实现了更为复杂的分布式合约记录——智能合约。合约记录在区块链中,一旦满足了合约的触发条件,预定义的代码逻辑能够自主执行,执行后的结果上链不可更改。智能合约使得受复杂条件限制的价值转移成为可能。多方用户参与智能合约创建后,将合约发布到区块链中,触发预设条件后,合约代码自动执行,并将执行后合约状态打包进区块。
很多区块链网络使用的智能合约功能类似于自动售货机。智能合约与自动售货机类比:如果你向自动售货机(类比分类账本)转入比特币或其他加密货币,一旦输入满足智能合约代码要求,它会自动执行双方约定的义务。义务以“if then”形式写入代码,例如,“如果A完成任务1,那么,来自于B的付款会转给A。”通过这样的协议,智能合约允许各种资产交易,每个合约被复制和存储在分布式账本中。这样,所有信息都不能被篡改或破坏,数据加密确保参与者之间的完全匿名。
以太坊平台:目前,以太坊是一个较为成熟的智能合约平台,其核心改进是以太坊虚拟机。以太坊中的分布式账本除了要记录交易数据还要记录全局账户的总状态。在以太坊中,有两种类型的账户,分别为外部账户和合约账户。外部账簿记录账户余额等信息,合约账户主要用于记录合约代码。交易对外部账户的影响通常是账户余额的变化,交易对合约账户的影响通常表现在代码执行。无论哪种状态的变化,都需要通过矿工挖矿来记录。合约账户的变化也就是合约代码的运行需要矿工节点在各自的以太坊虚拟机上来验证。合约代码的运行需要花费一定的代价,这样防止账户恶意消耗平台资源,一旦合约账户中资金不足矿工就停止代码执行。
4.2 区块链3.0——拓展的发展领域
金融业:区块链技术可以创建更直接的支付流,可以在国内甚至跨国时间超低费率的瞬时支付。一些研究者基于区块链技术建立自己的购物系统架构及采用电子货币进行薪酬支付,为区块链未来发展提供更加宽广的思路。
物联网:物联网可以理解为一种通过传感器等装置将物理世界的事物连接成可以相互通信的网络,优势在于可以实现高力度的信息收集,目前被广泛应用于生活的各个领域,但随着人们对个人隐私的逐渐重视,初代物联网产品的安全性已经无法满足需求。而区块链正好是由不可信的匿名节点组成的去中心化分布式网络,特性刚好可以弥补物联网在安全方面的缺陷。
虽然目前区块链的发展有了长足进步,但是仍然面临很多的问题:技术漏洞、交易吞吐量小、大量数据存储问题、隐私安全性、跨链协议、法律法规不规范等。对于区块链的安全性、算法性能和可扩展性的探索还远远不够,需要更多的理论支持论证,区块链技术的潜力还有待我们继续开发。
区块链技术核心概念与原理
第一章 区块链技术入门
- 无中心化 :没有管理员 无需添加额外审核
- 分布式数据库
- 能耗大,非常浪费资源
- 同样的原始信息用同一个哈希函数总能得到相同的摘要信息
- 原始信息任何微小的变化都会哈希出面目全非的 摘要信息
- 从摘要信息无法逆向推算出原始信息
- 区块与Hash是一一对应的,每个区块的Hash都是针对 区块头 计算的
- 对交易进行hash得到交易的摘要
- 用私钥对摘要进行签名
- 对原始信息进行Hash计算 得到摘要信息
- 交易的节点 分发给 周围的节点,让周围的节点一起验证信息 ,整个广播循环操作
- 相邻节点收到广播后,验证通过后,再次与之相邻的节点进行广播,进行验证操作。
- 一段时间内 只可以有一个人可以记账成功 (10分钟左右)
-
通过解决密码学难题(即工作量证明)竞争获得唯一记账权
- 其他节点 复制记账结果
-
使用一个常量 除以/难度系数 = 目标值 ; target = targetMax / difficulty。只有小于目标值饿Hash才是有效值 (难度系数越调越高目标值越来越小,导致采矿越来越难)
- 难度系数动态调节机制; 即是如果每两周调节一次,发现生成速度比法定速度快10%则难度系数增加10% ,反之亦然
- 收集广播中还没有被记录账本的交易
- 交易的有效性验证
- 添加一笔给自己转账的交易(挖矿奖励12.5btc)
- 比特币P2P网络
- 区块结构Merkle树
- 比特币UTXO及交易脚本(未发费的交易输出)
- 比特币白皮书
以上是关于区块链原理及核心技术的主要内容,如果未能解决你的问题,请参考以下文章
[技术发展-5]:《区块链与加快推动区块链技术和产业创新发展》
布比并行快速的多链分片技术特性及实现原理 | 商用区块链BubiChain详解