区块链基本技术与开源项目汇总

区块链(Blockchain)是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。该技术方案让参与系统中的任意多个节点,把一段时间系统内全部信息交流的数据,通过密码学算法计算和记录到一个数据块(block),并且生成该数据块的指纹用于链接(chain)下个数据块和校验,系统所有参与节点来共同认定记录是否为真。

1

基本概念:P2P网络、加密算法、梅克尔树、工作量证明

区块链是很多现有技术交叉融合在一起的集成创新。因此,要了解区块链,首先要了解区块链到底集成了哪些技术。

P2P网络

P2P(Peer-to-Peer)网络是一种端到端的网络。P2P网络分为结构化(例如基于Chord的P2P网络)和非结构化的P2P网络(例如Gnutella)。比特币的区块链采用的是非结构化P2P网络,整个网络没有中心化的硬件或管理机构,任一节点既是服务端,也是客户端。

任何节点只要安装相应的客户端软件,就能接入P2P网络(例如BT软件),参与区块链的记录和验证,不超过1/3节点的损坏、退出甚至被植入恶意代码,都不会影响整个系统的运作。

传统中心化系统和P2P网络的拓扑对比图

加密算法和数字签名

加密技术分为对称、非对称和哈希(Hash)加密。

对称加密是指用同样的密钥来进行加密和解密,非对称加密是指用一个密钥对来进行加密和解密,哈希加密主要是通过对数据进行哈希运算,用固定的哈希结果值验证信息是否被篡改。

非对称加密

在非对称加密技术中,对外公开、分发出去的密钥叫做公钥,不能公开、自己留存的密钥叫做私钥。公钥加密的,对应的私钥才能解密。反之亦然。如图3所示。

非对称加密RSA算法的简化示例图

非对称加密算法有RSA、DSA和ECC等种类,区块链使用的是基于椭圆曲线加密技术的数字签名(ECDSA),具体实现是secp256k1。

ECDSA相当于是DSA和非对称加密ECC的结合。相比RSA算法,ECDSA具有计算量小、存储空间小、带宽要求低等特点。

数字签名

基于数字签名的通信机制工作原理,如图所示,发送报文时,发送方用一个哈希函数从报文文本中生成文件摘要,然后用自己的私钥对摘要进行加密,加密后的摘要将作为报文的数字签名和报文一起发送给接收方。

接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公钥来对报文附加的数字签名进行解密,如果得到的明文相同,那么接收方就能确认传输的文件并未受到篡改,是安全可信的。

数字签名的流程示意图

哈希加密

安全哈希算法(Secure Hash Algorithm,SHA)是由美国国家安全局研发,由美国国家标准与技术研究院(NIST)发布的一系列密码哈希函数,包括SHA-0、SHA-1、SHA-2和SHA-3等系列。

比特币的区块链使用的是SHA-256哈希加密算法,于2001年发布,属于SHA-2分支。由于SHA256伪随机性的特点,只要是相同的数据输入,一定会得到相同的结果,如果输入数据稍有变化,将得到一个千差万别的结果。

SHA256还是一个单向不可逆的算法,即根据一个输入数算SHA256的结果很容易,但根据SHA256的结果反算输入数几乎是不可能。除此之外,比特币还使用ripemd160算法来生成比特币钱包的地址。

哈希加密的示意图

梅克尔树

梅克尔(Merkle)树是区块链的基本组成部分。如果没有梅克尔树,区块链也是可以运转,但是要在区块头里包含所有交易记录,扩展性方面存在很大挑战。

区块链中的每个区块,由区块头和区块体构成,区块头中含有一个Merkle根节点的字段,通过对区块体中所有交易记录,以二叉树的形式迭代地两两拼接 、进行哈希操作,可以得到一个最终的哈希值,我们称之为Merkle根哈希。

Merkle根哈希相当于是对区块中所有交易记录进行了一个快照,区块中交易记录的任意改动都可以通过比较Merkle根哈希而很容易地察觉。

Merkle根哈希主要用于简单支付验证(SPV),在验证某个交易是否在区块中时,也能极大地减少网络传输成本。

Merkle树示意图

工作量证明机制

工作量证明机制,简单地说,就是一种共识机制,用来确认你是否做过一定量工作的证明。比特币的区块链主要是依托计算数学难题来衡量工作量。

每个区块,当选定一定数量的交易记录之后,填充版本号、时间戳、难度值,生成相应的Merkle根哈希。很容易看到,这些数值在选定交易记录以后,都是确定的,唯一能够改变的就只有随机数(Nonce)这个值。

系统根据难度值,要求计算整个区块头的两次SHA256算法,得到的哈希结果要小于一个阈值。根据前面描述的SHA256算法的伪随机性,只有通过不断地尝试和枚举,才能找到相应的随机数,证明自己的工作量。

图7 工作量证明机制示意图

除了工作量证明机制(PoW)这类共识机制之外,还有股权证明机制(PoS)、授权股权证明机制(DPoS)、拜占庭容错机制(BFT)、实用拜占庭容错机制(PBFT)这些在不可信环境下的共识机制以及要求在可信环境下的共识机制,例如PaxOS和Raft。

共识机制的简单对比表

2

区块链的开源项目

BitCoin

BitCoin是最早、也是现网运行区块链最成功的一个开源项目,核心技术框架采用C++开发,共识算法采用PoW,每秒交易量(TPS)为不多于7笔,开源许可协议为MIT。

官方编程语言:C++

开源许可协议:MIT

开源项目地址:https://github.com/bitcoin/bitcoin

Ethereum

以太坊(Ethereum)是一个支持图灵完备脚本运行的区块链开发平台,基于智能合约,降低用户搭建DApp应用的门槛。目前以太坊正式运行的版本是1.0,采用的是POW共识算法,公网TPS是25笔,未来将采用类POS的Casper算法,区块链的确认速度将得到大幅提升。在规划的2.0版本中,TPS有望可以达到2000TPS。

官方编程语言:Go

开源许可协议:GPLv3

开源项目地址:https://github.com/ethereum

Hyperledger Fabric

Hyperledger Fabric是IBM开源的区块链项目,开发环境可以适配多种环境(virtualbox虚拟机、自建网络和IBM的BlueMix),支持Docker,共识算法插件化,注重角色的权限控制和企业级的安全机制。主要开发语言是Go语言,支持JavaScript、Java和Python等语言,交易频率TPS最高能够达到100K。其子项目Iroha助力区块链移动应用程序的开发,值得关注和进一步跟踪。

官方编程语言:Go

开源许可协议:Apache 2.0

开源项目地址:https://github.com/hyperledger/fabric

OpenChain

OpenChain 是区块链技术公司Coinprism的开源工具,目标是大型企业和金融机构,基于一种独特的分布式账本技术,帮助用户部署自己定制的区块链,减少用户的交易成本和结算时间。

官方编程语言:C#

开源许可协议:Apache 2.0

开源项目地址:https://github.com/openchain

BitShares

比特股(BitShares)提供的BitUSD等锚定资产,是虚拟币历史上的一个最重要变革之一,消除了虚拟货币估值波动大的问题。比特股创新地提出了DPoS共识算法,核心技术框架采用C++语言开发,既适用于公有链,也适合于联盟链。在比特股2.0中,交易频率TPS最高能够达到100K。

官方编程语言:C++

开源许可协议:MIT

开源项目地址:http://github.com/bitshares

Ripple

瑞波(Ripple)是世界上第一个开放的支付网络,也是目前最成功的区块链技术公司。其核心产品Ripple协议本质上是一个实时结算系统,通过引入新的共识机制RPCA,只要特殊节点投票,就能在很短时间内完成交易的验证和确认。

官方编程语言:C++

开源许可协议:ISC

开源项目地址:https://github.com/ripple/rippled

Tendermint

美国公司Tendermint推出的Tendermint是第一个实施分片技术的公共区块链。Tendermint主核心负责管理所有区块链分区,支持比特币分区和以太坊分区,具有很大的灵活性,共识引擎通过Tendermint套接字协议(TMSP)与应用程序进行连接,不依赖于某一特定的编程语言,所以开发人员可以使用任意一种编程语言来编写智能合约。

官方编程语言:Go

开源许可协议:Apache2.0

开源项目地址:https://github.com/tendermint/tendermint

Corda

Corda是R3CEV于2016年12月初开源的区块链平台,采用一种类区块链的分布式账本,基于产业标准工具,通过创新智能合约和数据处理,为金融服务设计一种新型分布式的分类帐平台。

官方编程语言:Go

开源许可协议:Apache2.0

开源项目地址: https://www.corda.net/

具体对比图如表2所示。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180209A140IF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券