区块链技术-阿里云开发者社区

开发者社区> 安全> 正文

区块链技术

简介:

区块链简介

区块链定义

区块链可以理解为是基于区块链技术形成的公共数据库。而区块链技术是比特币的底层技术,包含现代密码学、分布式一致性协议、点对点网络通信等技术。下图是区块链技术架构,大致可以看到是这些技术通过一定的规则协议,最终形成区块链技术。 

ufWyuPvagAAAAAElFTkSuQmCC

区块链分类

以参与方分类,区块链可以分为:公共链、联盟链、私有链。

公共链

公共链就是对外公开,任何人都可以参与。公共链是真正意义上的完全区去中心化的区块链,它通过密码学保证交易不可篡改,同时利用密码学验证以及经济上的奖励,在互为陌生的网络环境中建立共识,从而形成去中心化的信用机制。比特币和以太坊都是公共链。比特币:https://bitcoin.org/;以太坊:https://www.ethereum.org/

联盟链

仅限于联盟成员参与,区块链上的读写权限、参与记账权限按联盟规则来制定。Hyperledger项目属于联盟链。Hyperledger:http://cn.hyperledger.org/

私有链

仅限私有组织使用,区块链上的读写权限、参与记账权限按私有组织规则来制定。

特点

去中心化

区块链数据的存储、传输、验证等过程均基于分布式的系统结构,整个网络中不依赖一个中心节点。公共链网络中所有参与的节点都可以具有同等的权利与义务。

可靠数据库

区块链系统中的数据库采用分布式存储,任一参与节点都可以拥有一份完整的拷贝。在比特币中,除非能控制系统中超过一半以上的算力,否则在节点上对数据库的修改都将是无效的。

安全可信

区块链技术采用非对称密码雪原理对交易进行签名,使得交易不能被伪造;同时利用哈希算法保证交易数据不能被轻易篡改,最后借助分布式系统各节点的工作量证明等共识算法形成强大的算力来抵御破坏者的攻击,保证区块链中的区块及区块内的交易数据不可篡改和不可伪造,因此具有极高的安全性。

区块链的应用

这个不多说了,简单以下图所示: 
anicCqgUIWAAAAAElFTkSuQmCC

基本概念

数据区块

在区块链技术中,数据以区块的方式永久储存。区块按时间顺序逐个先后生成并连接成链,每一个区块记录了创建期间发生的所有交易信息。区块的数据结构一般分为区块头和区块体。其中,区块头用于链接到前一个区块并且通过时间戳特性保证历史数据的完整性;区块体则包含了经过验证的、区块创建过程中产生的所有交易信息。 

8RbwLfFrEEAAAAABJRU5ErkJggg==

[html] view plain copy
  1. //这段代码摘自比特币源代码中区块头的定义  
  2. /** Nodes collect new transactions into a block, hash them into a hash tree,  
  3.  * and scan through nonce values to make the block's hash satisfy proof-of-work  
  4.  * requirements.  When they solve the proof-of-work, they broadcast the block  
  5.  * to everyone and the block is added to the block chain.  The first transaction  
  6.  * in the block is a special one that creates a new coin owned by the creator  
  7.  * of the block.  
  8.  */  
  9.  class CBlockHeader  
  10. {  
  11. public:  
  12.     // header  
  13.     int32_t nVersion;  
  14.     uint256 hashPrevBlock;  
  15.     uint256 hashMerkleRoot;  
  16.     uint32_t nTime;  
  17.     uint32_t nBits;  
  18.     uint32_t nNonce;  
  19.     .......  


挖矿

区块在挖矿过程中产生。挖矿,实际上就是穷举随机数算法,找到一个随机数Nonce使得计算出来的哈希值满足一定的条件,以获得该区块的记账权,同时获取系统给的一定数量的比特币奖励。

哈希函数、Merkle树

参考另一篇博文:http://blog.csdn.net/s_lisheng/article/details/77937202

双重支付(double-spending)

双重支付问题又称为“双花”问题,即利用货币的数字特性用“同一笔钱”完成两次或多次支付。这个问题引申出来的就是如何保证每一笔数字现金都只会被花掉一次,避免重复支出。比特币运行的底层技术区块链技术很大程度上就是在解决这个问题以及“拜占庭将军问题”。这里只简述相关概念。

在传统的金融和货币体系中,由于金钱货币是物理实体,具有客观唯一存在的属性,所以可以避免双重支付的情况。但在其他的电子货币系统中,则需要可信的第三方管理机构提供保证。区块链技术则在去中心化的系统中不借助任何第三方机构而只通过分布式节点之间的相互验证和共识机制,有效地解决了双重支付问题,在信息传输的同时完成了价值转移。

P2P网络

P2P网络技术是区块链系统连接各对等节点的组网技术,不同于中心化网络模式,P2P网络中各节点的计算机地位平等,每个节点有相同的网络权力,不存在中心化的服务器。所有节点间通过特定的软件协议共享部分计算资源、软件或者信息内容。在比特币出现之前,P2P网络计算技术已被广泛用于开发各种应用,如即时通讯软件、文件共享和下载软件、网络视频播放软件、计算资源共享软件等。P2P网络技术是构成区块链技术架构的核心技术之一。 

EgAAAAASUVORK5CYII=

加密算法

非对称加密算法是指使用公私钥对数据存储和传输进行加密和解密。公钥可公开发布,用于发送方加密要发送的信息,私钥用于接收方解密接收到的加密内容。常用的非对称加密算法有RSA和ECC。非对称加密算法的过程如下图所示。区块链正是使用非对称加密的公私钥对来构建节点间信任的。 

VOb4xukAADIkFcAADLkFQCADHkFACBDXgEAyJBXA

以比特币为例,在⽐特币系统中,我们⽤公钥加密创建⼀个密钥对,⽤于控制⽐特币的获取。密钥对包括⼀个私钥,和由其衍⽣出的唯⼀的公钥。公钥⽤于接收⽐特币,⽽私钥⽤于⽐特币⽀付时的交易签名。公钥和私钥之间的数学关系,使得私钥可⽤于⽣成特定消息的签名。此签名可以在不泄露私钥的同时对公钥进⾏验证。⽀付⽐特币时, ⽐特币的当前所有者需要在交易中提交其公钥和签名(每次交易的签名都不同,但均从同⼀个私钥⽣成)。⽐特币⽹络中的所有⼈都可以通过所提交的公钥和签名进⾏验证,并确认该交易是否有效,即确认⽀付者在该时刻对所交易的⽐特币拥有所有权。 

H4XAABOiFsAAGqIWwAAaohbAABqiFsAAGqIWwAAa

数字签名(Digital Signature)

基本概念

  1. 目的:保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。
  2. 实现过程:数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
  3. 数字签名是个加密的过程,数字签名验证是个解密的过程。
  4. 数字签名是非对称密钥加密技术与数字摘要技术的应用。

基本原理

首先要了解什么叫非对称加密和消息摘要。 
1. 非对称加密 
在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密。同时,一般一个密钥加密,另一个密钥就可以解密。 
因为公钥是公开的,如果用来解密,那么就很容易被不必要的人解密消息。因此,私钥也可以认为是个人身份的证明。 
如果通信双方需要互发消息,那么应该建立两套非对称加密的机制(即两对公私钥密钥对),发消息的一方使用对方的公钥进行加密,接收消息的一方使用自己的私钥解密。 
2.消息摘要 
消息摘要可以将消息哈希转换成一个固定符长度的值唯一的字串。值唯一的意思是不同的消息转换的摘要是不同的,并且能够确保唯一。该过程不可逆,即不能通过摘要反推明文。 
利用这一特性,可以验证消息的完整性。

3.数字签名 
假设现在有通信双方A和B,两者之间使用两套非对称加密机制。 
现在A向B发消息。

H9Z0JAWPOpxlgAAAABJRU5ErkJggg==
那么,如果在发送过程中,有人修改了里面密文消息,B拿到的密文,解密之后得到明文,并非A所发送的,信息不正确。 
要解决两个问题:1. A的身份认证 2. A发送的消息完整性 那么就要用到上面所讲的基础知识。 
数字签名的过程如下图:

3dzNId+YdcxAAAAAElFTkSuQmCC
简单解释: 
A:将明文进行摘要运算后得到摘要(消息完整性),再将摘要用A的私钥加密(身份认证),得到数字签名,将密文和数字签名一块发给B。 
B:收到A的消息后,先将密文用自己的私钥解密,得到明文。将数字签名用A的公钥进行解密后,得到正确的摘要(解密成功说明A的身份被认证了)。 
对明文进行摘要运算,得到实际收到的说明消息没有被篡改(消息完整性)。

区块链运作的核心技术

区块链的链接

区块链是由一个个区块组成的链,每个区块分为区块头和区块体两部分。区块主体只负责记录前一段时间内的所有交易信息,区块链的大部分功能都由区块都实现。 

P1xw5kQy1TrVAAAAAElFTkSuQmCC

共识机制

区块链是分布式的,如何在没有中心控制的情况下,在互相没有信息基础的个体之间就交易的合法性等达成共识?这里就需要共识机制去解决。区块链的共识机制目前主要有4类:PoW、PoS、DPoS、分布式一致性算法。

这里只简要概述,详见:http://blog.csdn.net/s_lisheng/article/details/78022645

PoW

PoW,比特币中采用的就是这个,矿工通过把网络尚未记录的现有交易打包到一个区块,然后不断遍历尝试来寻找一个随机数Nonce,使得新区块加上随机数的哈希值满足一定的难度条件。找到满足条件的随机数,就确定了区块链最新的一个区块,获得了区块链的本轮记账权。矿工把满足难度条件的区块在网络中广播出去,全网其他节点在验证该区块满足挖矿难度条件,同时区块里的交易数据符合协议规范后,将各自把该区块链接到自己版本的区块链上,从而在全网形成对当前网络状态的共识。

  • 优点:完全去中心化,节点自由进出,避免了建立和维护中心化信用机构的成本。只有网络破坏者的算力不超过网络总算力的50%,网络的交易状态就能达成一致。
  • 缺点:目前比特币挖矿造成了大量的资源浪费;挖矿的激励机制也造成了矿池算力的高度集中,背离了去中心化的初衷。更大的问题是PoW机制的共识达成的周期较长,每秒最多做7笔交易,不适合商业应用。

PoS

PoS权益证明,要求节点提供拥有一定数量的代币证明来获得竞争区块链记账权的一种分布式共识机制。如果单纯依靠代币余额来决定记账者必然使得富有者胜出,导致记账权的中心化,降低共识的公正性,因此不同的PoS机制在权益证明的基础上,采用不同的方式来增加记账权的随机性来避免中心化。例如点点币PoS机制中,拥有最长链龄的比特币获得记账权的几率就越大。

  • 优点:在一定程度上缩短了共识达成的时间,降低了PoW机制的资源浪费。
  • 缺点:破坏者对网络攻击的成本低,网络安全性有待验证。另外拥有代币数量大的节点获得记账权的几率更大会使得网络的共识受少数富裕账户支配,从而失去公正性。

DPoS

与PoS的主要区别在于节点选举若干代理人,由代理人验证和记账。

  • 优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。
  • 缺点:有可能不适用于完全去中心化的场景。在网络节点数少的场景,选举的见证人的代表性不强。

分布式一致性算法

分布式一致性算法是基于传统的分布式一致性技术。其中有分为解决拜占庭将军问题的拜占庭容错算法,如PBFT。另外解决非拜占庭问题的分布式一致性算法(Paxos、Raft),该类算法目前是联盟链和私有链场景中的常用的共识机制。

  • 优点:实现秒级的快速共识机制,保证一致性。
  • 缺点:去中心化程度不如公有链上的共识机制;更适合多方参与的多中心商业模式。

解锁脚本

脚本是区块链上实现自动验证、自动执行合约的重要技术。脚本类似一套规则,它约束着接收方怎样才能花掉这个输出上锁定的资产。交易和合法性验证也依赖于脚本。锁定脚本和解锁脚本。

锁定脚本是在输出交易上加上的条件,通过一段脚本语言来实现,位于交易的输出。解锁脚本只有满足锁定脚本要求的条件,才能花掉这个脚本上对应的资产,位于交易的输入。解释脚本是通过类似编程领域里的“虚拟机”,它分布式运行在区块链网络里的每一个节点。

比特币中的脚本机制相对简单,以太坊深入增强了脚本机制,发展成了支持脚本的一套图灵完备语言,该脚本语言通过“虚拟机”执行,可以说,以太坊实现了一个支持图灵完备脚本语言的区块链平台。

交易规则

区块链的交易就是构成区块的基本单位,也是区块链负责记录的实际有效内容。一个区块交易可以是一次转账,也可以是智能合约的部署等其他事务。就比特币而言,交易即指一次支付转账。其交易规则如下:

  • 交易的输入和输出不能为空。
  • 对交易的每个输入,如果其对应的UTXO输出能在当前交易池中找到,则拒绝该交易。因为当前交易池是未被记录在区块链中的交易,而交易的每个输入,应该来自确认的UTXO。如果在当前交易池中找到,那就是双花交易。
  • 交易中的每个输入,其对应的输出必须是UTXO。
  • 每个输入的解锁脚本必须和相应输出的锁定脚本共同验证交易的合规性。

对于以太坊来说,交易还可能是智能合约的部署。交易规则就确定了符合一定语法的规则的合约才能被部署在区块链上。

交易优先级

区块链交易的优先级由区块链协议规则决定。对于比特币而言,交易被区块包含的优先次序由交易广播到网络上的时间和交易额的大小决定。随着交易广播到网络上的时间的增长,交易的链龄增加,交易的优先级就被提高,最终会被区块包含。对于以太坊而言,交易的优先级还与交易的发布者愿意支付的交易费用有关,发布者愿意支付的交易费用越高,交易被包含进区块的优先级就越高。

Merkle证明

比特币的Merkle树