区块链及比特币的技术原理浅析

本文只针对区块链和比特币的原理进行分析,不涉及对其的金融属性的讨论,也不构成投资建议。

一、介绍

区块链是以比特币为代表的数字加密货币体系的核心支撑技术。

区块链技术的核心优势是去中心化,能够通过运用数据加密、时间戳、分布式共识和经济激励等手段,在节点无需互相信任的分布式系统中实现基于去中心化信用的点对点交易、协调与协作,从而为解决中心化机构普遍存在的高成本、低效率和数据存储不安全等问题提供了解决方案。

区块链技术起源于 2008 年由化名为 “中本聪” (Satoshi nakamoto) 的学者在密码学邮件组发表的奠基性论文《Bitcoin: a peer-to-peer electronic cash system》[1],目前尚未形成行业公认的区块链定义. 狭义来讲,,区块链是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构, 并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账 (Decentralized shared ledger), 能够安全存储简单的、有先后关系的、能在系统内验证的数据. 广义的区块链技术则是利用加密链式区块结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用自动化脚本代码 (智能合约) 来编程和操作数据的一种全新的去中心化基础架构与分布式计算范式。

区块链通过 P2P 技术进行通信。

二、P2P 技术

又称对等网络 (Peer-to-Peer) 技术,P2P 技术属于覆盖层网络 (Overlay Network) 的范畴,是相对于客户机/服务器 (C/S) 模式来说的一种网络信息交换方式。在 C/S 模式中,数据的分发采用专门的服务器,多个客户端都从此服务器获取数据。这种模式的优点是:数据的一致性容易控制,系统也容易管理。但是此种模式的缺点是:因为服务器的个数只有一个 (即便有多个也非常有限),系统容易出现单一失效点;单一服务器面对众多的客户端,由于 CPU 能力、内存大小、网络带宽的限制,可同时服务的客户端非常有限,可扩展性差。P2P 技术正是为了解决这些问题而提出来的一种对等网络结构。在 P2P 网络中,每个节点既可以从其他节点得到服务,也可以向其他节点提供服务。这样,庞大的终端资源被利用起来,一举解决了C/S模式中的两个弊端。

P2P 网络有 3 种比较流行的组织结构,被应用在不同的 P2P 应用中。

(1) DHT 结构

分布式哈希表  (DHT)[2] 是一种功能强大的工具,它的提出引起了学术界一股研究 DHT 的热潮。虽然 DHT 具有各种各样的实现方式,但是具有共同的特征,即都是一个环行拓扑结构,在这个结构里每个节点具有一个唯一的节点标识 (ID),节点 ID是一个 128 位的哈希值。每个节点都在路由表里保存了其他前驱、后继节点的 ID。通过这些路由信息,可以方便地找到其他节点。这种结构多用于文件共享和作为底层结构用于流媒体传输[3]

(2)树形结构

在这种结构中,所有的节点都被组织在一棵树中,树根只有子节点,树叶只有父节点,其他节点既有子节点也有父节点。信息的流向沿着树枝流动。最初的树形结构多用于 P2P 流媒体直播[4-5]

(3)网状结构

又叫无结构。顾名思义,这种结构中,所有的节点无规则地连在一起,没有稳定的关系,没有父子关系。网状结构[5]为 P2P 提供了最大的容忍性、动态适应性,在流媒体直播和点播应用中取得了极大的成功。当网络变得很大时,常常会引入超级节点的概念,超级节点可以和任何一种以上结构结合起来组成新的结构。

三、区块链技术

区块链 (blockchain) 是由多独立节点参与的分布式数据库系统,也可以理解为分布式账簿 (distributed ledger technology,简称 DLT) ,由这些节点共同维护.它的特点是不易篡改、很难伪造、可追溯.区块链记录所有发生交易的信息,过程高效透明,数据高度安全.凡是需要公正、公平、诚实的应用领域,都可以应用区块链技术。

区块链把数据分成不同的区块,每个区块通过特定的信息链接到上一区块的后面,前后顺连,呈现一套完整的数据.每个区块的块头 (block header) 包含前一个区块的哈希值 (previous block Hash) ,该值是对前区块的块头进行哈希函数计算 (Hash function) 而得到.区块之间都会由这样的哈希值与先前的区块环环相扣形成一个链条。

区块链示意图

从技术层面上看,区块链的核心要素包含以下 3 个方面:

(1) 块链结构

每一区块有时间戳;都使用前一区块的哈希加密信息;对每个交易进行验证;

(2) 多独立拷贝存储

每个节点都存储同样信息,享有同样权利;独立作业;互相怀疑,互相监督

(3) 拜占庭容错:容忍少于三分之一的节点恶意作弊或被黑客攻击,保证系统仍然能够正常工作. 要素 (1) 指出,区块链是一个“账簿”;要素 (2) 指出,区块链是一个“分布式账簿”;而要素 (3) 指出,区块链是一个 “一致性的同步分布式账簿”. 区块链可选择不同的加密方法,如 RSA、中国的国密算法、Ed25519等的签名算法.根据区块链自身特有的安全、极难篡改的特性,在金融领域外的很多应用场景中,使用签名、解签能够达到足够高的安全级别. 各个节点在独立作业的同时存储着同样的信息,并且拥有同样的权利.如果这一点不能保障的话,就不可称 为区块链.例如,若链上的某个节点有特殊的权利,甚至可以改变链上数据,这样的链就远离了区块链的真意.与 现有的分布式存储方式不同,区块链分布式账本是同步的,而不是在一个账本形成之后,再制成多个备份。

区块链的出现解决了数字货币的两大问题:双重支付问题以及拜占庭将军问题。双重支付问题是同一笔钱被使用了超过一次,是在原有的以物理实体(纸币)为基础的传统金融体系中自然可避免的问题。在区块链出现之前的数字货币,都是通过可信任的中心化第三方机构来保证,以前是银行,现在是支付宝、微信支付等。区块链技 术通过共识机制和分布式账本,不需要可信第三 方就可以解决双重支付的问题是数字货币的一大 突 破 。 拜占庭将军问题( Byzantine generals problem)是现实世界问题的模型化,适用于分布式网络的简单抽象为“在缺少可信中心节点的 情况下,分布式节点怎么达成共识建立互信的问 题”。区块链使用“工作量证明”(PoW,proof of work)及“权益证明”(proof of stake)或其他的 共识机制,再加上加密技术,使一个不可信网络变成可信的网络,所有参与者可以在某些方面达成一致,而无需信任单个节点。

区块链技术的基础架构模型如图所示. 一般说来, 区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成. 其中, 数据层封装了底层数据区块以及相关的数据加密和时间戳等技术; 网络层则包括分布式组网机制、数据传播机制和数据验证机制等; 共识层主要封装网络节点的各类共识算法; 激励层将经济因素集成到区块链技术体系中来, 主要包括经济激励的发行机制和分配机制等; 合约层主要封装各类脚本、算法和智能合约, 是区块链可编程特性的基础; 应用层则封装了区块链的各种应用场景和案例. 该模型中, 基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点。

下面将以比特币和以太坊为主要例子介绍。

数据层

狭义的区块链即是去中心化系统各节点共享的数据账本. 每个分布式节点都可以通过特定的哈希 算法和 Merkle 树数据结构, 将一段时间内接收到的 交易数据和代码封装到一个带有时间戳的数据区块 中, 并链接到当前最长的主区块链上, 形成最新的区块. 该过程涉及区块、链式结构、哈希算法、Merkle 树和时间戳等技术要素。

数据区块: 如图所示, 每个数据区块一般包 含区块头 (Header) 和区块体 (Body) 两部分. 区块头封装了当前版本号 (Version)、前一区块地址 (Prev-block)、当前区块的目标哈希值 (Bits)、当前 区块 PoW 共识过程的解随机数 (Nonce)、Merkle 根 (Merkle-root) 以及时间戳 (Timestamp) 等信息[6] . 比特币网络可以动态调整 PoW 共识过程的难度值, 最先找到正确的解随机数 Nonce 并经过全体矿工验证的矿工将会获得当前区块的记账权。区块体则包括当前区块的交易数量以及经过验证的、 区块创建过程中生成的所有交易记录.。这些记录通 过 Merkle 树的哈希过程生成唯一的 Merkle 根并记入区块头。

取得记账权的矿工将当前区块链接 到前一区块, 形成最新的区块主链. 各个区块依次环环相接, 形成从创世区块到当前区块的一条最长主链, 从而记录了区块链数据的完整历史, 能够提供区块链数据的溯源和定位功能, 任意数据都可以通过此链式结构顺藤摸瓜、追本溯源. 需要说明的是, 如果短时间内有两个矿工同时 “挖出” 两个新的区块 加以链接的话, 区块主链可能会出现暂时的 “分叉” 现象, 其解决方法是约定矿工总是选择延长累计工作量证明最大的区块链. 因此, 当主链分叉后, 后续 区块的矿工将通过计算和比较, 将其区块链接到当 前累计工作量证明最大化的备选链上, 形成更长的 新主链, 从而解决分叉问题[7]

区块链技术要求获得记账权的节点必须在当前数据区块头中加盖时间戳, 表明区块数据的写入时间. 因此, 主链上各区块是按照时间顺序依次排列的. 时间戳技术本身并不复杂, 但其在区块链技术中的应用是具有重要意义的创新. 时间戳可以作为区块数据的存在性证明 (Proof of existence),有助于形成不可篡改和不可伪造的区块链数据库,
从而为区块链应用于公证、知识产权注册等时间敏感的领域奠定了基础. 更为重要的是, 时间戳为未来基于区块链的互联网和大数据增加了时间维度, 使得通过区块数据和时间戳来重现历史成为可能。

区块链通常并不直接保存原始数据或交易记录, 而是保存其哈希函数值, 即将原始数据编码为特定长度的由数字和字母组成的字符串后记入区块链. 哈希函数 (也称散列函数) 具有诸多优良特点, 因而特别适合用于存储区块链数据. 例如, 通过哈希输出几乎不能反推输入值 (单向性), 不同长度输入的哈希过程消耗大约相同的时间 (定时性) 且产生固定长度的输出 (定长性), 即使输入仅相差一个字节也会产生显著不同的输出值 (随机性) 等. 比特币区块链通常采用双 SHA256 哈希函数, 即将任意长度的原始数据经过两次 SHA256 哈希运算后转换为长度为 256 位 (32 字节) 的二进制数字来统一存储和识别. 除上述特点外, SHA256 算法还具有巨大的散列空间 (2256) 和抗碰撞 (避免不同输入值产生相同哈希值) 等特性, 可满足比特币的任何相关标记需要而不会出现冲突。

Merkle 树是区块链的重要数据结构, 其作用是快速归纳和校验区块数据的存在性
和完整性. 如图 3 所示, Merkle 树通常包含区块体的底层 (交易) 数据库, 区块头的根哈希值 (即 Merkle 根) 以及所有沿底层区块数据到根哈希的分支. Merkle 树运算过程一般是将区块体的数据进行分组哈希, 并将生成的新哈希值插入到 Merkle 树中, 如此递归直到只剩最后一个根哈希值并记为区块头的 Merkle 根. 最常见的 Merkle 树是比特币采用的二叉 Merkle 树, 其每个哈希节点总是包含两个相邻的数据块或其哈希值
, 其他变种则包括以太坊的 Merkle patricia tree 等。 Merkle 树有诸多优点: 首先是极大地提高了区块链的运行效率和可扩展性, 使得区块头只需包含根哈希值而不必封装所有底层数据, 这使得哈希运算可以高效地运行在智能手机甚至物联网设备上; 其次是 Merkle 树可支持 “简化支付验证”。

一个没有下载完整区块链数据的客户端可以通过向其它节点索要从交易哈希值沿 Merkle 树上溯至区块头根哈希处的哈希序列来确认交易的准确性。

非对称加密是为满足安全性需求和所有权验证需求而集成到区块链中的加密技术,
常见算法包括 RSA、Elgamal、Rabin、D-H、ECC (即椭圆曲线加密算法) 等. 非对称加密通常在加密和解密过程中使用两个非对称的密码, 分别称为公钥和私钥. 非对称密钥对具有两个特点, 首先是用其中一个密钥 (公钥或私钥) 加密信息后, 只有另一个对应的密钥才能解开; 其次是公钥可向其他人公开、私钥则保密, 其他人无法通过该公钥推算出相应的私钥. 非对称加密技术在区块链的应用场景主要包括信息加密、数字签名和登录认证等, 其中信息加密场景主要是由信息发送者 (记为 A) 使用接受者 (记为 B) 的公钥对信息加密后再发送给 B, B 利用自己的私钥对信息解密. 比特币交易的加密即属于此场景; 数字签名场景则是由发送者 A 采用自己的私钥加密信息后发送给 B, B 使用 A 的公钥对信息解密、从而可确保信息是由 A 发送的; 登录认证场景则是由客户端使用私钥加密登录信息后发送给服务器, 后者接收后采用该客户端的公钥解密并认证登录信息。

网络层

区块链的分布式网络系统,主要是点对点机制、数据传输和验证机制。本质上是一个 P2P 网络,点对点意味着不需要中心化服务器来操控这个系统,网络中所有资源和服务都是分配在各个节点手中。在区块链网络上,需要节点间共同维护这个系统,当某一节点创造出新的区块后,就会通过广播形式告知其它节点,收到信息的节点会对该区块进行验证,然后再去创造新的区块。这样就能够使每个节点既能够产生信息,又能够接收信息。分布式算法以及加密签名等都在网络层中实现,区块链上的各个节点通过这种方式来保持联系,共同维护整个区块链账本,比较熟知的有闪电网络、雷电网络等第二层支付协议。

比特币系统的交易数据传播协议包括如下步骤[1]

  • 比特币交易节点将新生成的交易数据向全网 所有节点进行广播;
  • 每个节点都将收集到的交易数据存储到一个 区块中;
  • 每个节点基于自身算力在区块中找到一个具 有足够难度的工作量证明;
  • 当节点找到区块的工作量证明后, 就向全网 所有节点广播此区块;
  • 仅当包含在区块中的所有交易都是有效的且 之前未存在过的, 其他节点才认同该区块的有效性;
  • 其他节点接受该数据区块, 并在该区块的末 尾制造新的区块以延长该链条, 而将被接受区块的 随机哈希值视为先于新区块的随机哈希值. 需要说明的是, 如果交易节点是与其他节点无连接的新节点, 比特币系统通常会将一组长期稳定 运行的 “种子节点” 推荐给新节点建立连接, 或者推荐至少一个节点连接到新节点。此外, 交易数据广播时, 并不需要全部节点均接收到, 而是只要足够多的节点做出响应即可整合进入区块账本中. 未接收到特定交易数据的节点则可向邻近节点请求下载该缺失的交易数据。

共识层

共识层主要包括共识算法机制。也就是在全网形成一个统一的、所有节点一致认可的规则,以此来维护和更新区块链系统这个总账本。让高度分散的节点在去中心化的区块链网络中达成高效的共识,是区块链的核心技术之一,也是区块链社区的治理机制。目前为止有比特币的工作量证明(PoW)、以太坊的权益证明(PoS)、EOS 的委托权益证明(DPoS)、PoW 和 PoS 结合、燃烧证明、重要性证明等十几种共识机制。

激励层

在区块链中,激励层主要包括激励机制和分配机制。一般来讲,激励层是指在区块链中挖矿的奖励,通过奖励部分数字资产来激励矿工去验证交易信息,从而维护挖矿活动以及账本更新持续进行。另外,还会制定一些相关制度,奖惩分明,激励记账节点,惩罚恶意节点。在比特币的共识机制中,规定多劳多得,谁能够第一个找到正确的哈希值谁就可以得到一定数量的比特币奖励;而以太坊的工作量证明机制则是规定持币年龄越久,获得奖励的概率越大。但是,激励层一般只有公链才具备,因为公有链必须依赖全网节点共同维护数据,所以有这样一套激励机制,才能够使全网节点参与区块链系统的建设维护,进而保证区块链系统的安全性和可靠性。

合约层

合约层主要包括各种脚本、代码、智能合约和算法,是区块链可编程的基础。平时我们说的“智能合约”就属于这一层级。智能合约原理是通过将代码嵌入系统中,设置约束条件,而不要第三方做背书,即可实现实时可操作。把代码写到合约里,就可以自定义约束条件,不需要第三方信任背书,到时间立即实时操作。当然除了智能合约,是区块链作为信任机器的重要层级,还有一些别的脚本代码、侧链应用等等。

应用层

顾名思义,应用层实际就是我们通常说的区块链各种应用场景和案例,类似于电脑操作系统上的应用程序、互联网浏览器上的门户网站、电子商城或手机移动端的APP等,现在的“区块链+”就是所谓的应用层。目前市面上已落地的区块链应用基本都是搭建在以太坊和EOS等公链上的各类应用,以博彩和游戏类应用为主。这个层面包括未来区块链应用落地的各个方面。

现存问题

安全问题

安全性威胁是区块链迄今为止所面临的最重要的问题. 其中, 基于 PoW 共识过程的区块链主要面临的是 51 % 攻击问题, 即节点通过掌握全网超过 51 % 的算力就有能力成功篡改和伪造区块链数据.以比特币为例, 据统计中国大型矿池的算力已占全网总算力的 60 % 以上, 理论上这些矿池可以通过合作实施 51 % 攻击, 从而实现比特币的双重支付。

虽然实际系统中为掌握全网 51 % 算力所需的成本投入远超成功实施攻击后的收益, 但 51 % 攻击的安全性威胁始终存在. 基于 PoS 共识过程在一定程度上解决了 51 % 攻击问题, 但同时也引入了区块分叉时的 N@S (Nothing at stake) 攻击问题. 研究者已已经提出通过构造同时依赖高算力和高内存的 PoW共识算法来部分解决 51 % 攻击问题, 更为安全和有效的共识机制尚有待于更加深入的研究和设计。

区块链使用的非对称加密上也是有可能被破解的,尤其是等量子计算机面世后就会更加危险。

区块链的隐私保护也存在安全性风险. 区块链系统内各节点并非完全匿名, 而是通过类似电子邮件地址的地址标识 (例如比特币公钥地址) 来实现数据传输. 虽然地址标识并未直接与真实世界的人物身份相关联, 但区块链数据是完全公开透明的。

效率及资源问题

区块链效率也是制约其应用的重要因素. 首先是区块膨胀问题: 区块链要求系统内每个节点保存一份数据备份, 这对于日益增长的海量数据存储来说是极为困难的。

PoW 共识过程高度依赖区块链网络节点贡献的算力, 这些算力主要用于解决 SHA256 哈希和随机数搜索, 除此之外并不产生任何实际社会价值, 因而一般意义上认为这些算力资源是被 “浪费” 掉了,换句话来说我们真的不能用这些算力做点有意义的事情吗?

参考文献

[1] NAKAMOTO S. Bitcoin: a peer-to-peer electronic cash system [EB/OL]. https://bitcoin.org/bitcoi n.pdf.

[2] STOICA I, MORRIS R, KARGER D, et al. Chord: a scalable peer-to-peer lookup service for Internet applications [C]// Proceedings of the International Conference of the Special Interest Group on Data Communication (SIGCOMM'01), Aug 27-31,2001, San Diego, CA, USA. New York, NY, USA: ACM Press, 2001:149-160.

[3] HEFEEDA M, HABIB A, BOTEV B, et al. PROMISE: Peer-to-peer media streaming using CollectCast [C]// Proceedings of the 11th ACM International Conference on Multimedia, Nov 2-8, Berkeley, CA, USA. New York, NY, USA:ACM Press, 2003:45-54.

[4] BANERJEE S, BHATTACHARJEE B, KOMMAREDDY C. Scalable application layer multicast [C]// Proceedings of the International Conference of the Special Interest Group on Data Communication (SIGCOMM'02), Aug 19-23,2002, Pittsburgh, PA, USA. New York, NY,USA: ACM Press,2002, 205-217.

[5] TRAN D A, HUA K A, DO T T. ZIGZAG: An efficient peer-to-peer scheme for media streaming [C]// Proceedings of the 21st Annual Joint Conference of the IEEE Computer and Communications Societies (INFOCOM '03): Vol 2, Mar 30-Apr 3,2003, San Francisco, CA, USA. New York, NY, USA:IEEE, 2003:1283-1292.

[6] Bitcoin Sourcecode [Online], available: https://github.com/ bitcoin/bitcoin/, January 18, 2016.

[7] Antonopoulos A M. Mastering Bitcoin: Unlocking Digital Cryptocurrencies. USA: O0Reilly Media Inc., 2014.

[8] Eisenberg E, Gale D. Consensus of subjective probabilities: the pari-mutuel method. The Annals of Mathematical Statistics, 1959, 30(1): 165−168