今天写一个能够一文读懂区块链的文章,以后谁再问我区块链是什么东西,我就把这篇文章发给他。
————————
个人技术公众号:解决方案工程师
欢迎同领域的朋友关注、相互交流。
————————
区块链技术概念于 2008 年在中本聪关于比特币的白皮书中提出。区块链与比
特币有着密切的关系,区块链是比特币的技术支撑,保证加密货币系统的正常运行,比特币是区块链的应用实现,扩大了区块链的知名度并促进其发展。
一、区块链的结构
区块链可以理解为一串加密的,互相关联的链式数据块。每个数据块中包含了比特币交易信息,用于验证交易的合法性和有效性。
上图为区块链构成模型,一个区块包含区块头和区块体两部分。区块头存储了区块的验证信息,包括版本号、时间戳、目标哈希、随机数、父块哈希和Merkle 根,各字段功能如下表所示。区块头浓缩了区块链的数据信息,并可唯一标识出该区块在链中的位置,用于追溯和查找。
区块体中存储完整的交易数据,通过递归计算,以 Merkle 树的形式汇聚,最
终形成一个 Merkle 根。Merkle 树的结构不仅提高了区块链的扩展性还保证了查找的高效性,N 个叶子节点的 Merkle 树最长查找路径长度为 lb(N),这种高效在大规模物联网中体现的异常明显。此外,区块体中还有用于限制区块大小的交易计数器,最大限度地利用网络带宽的同时也保障了区块链网络信息同步的高效性。
相邻区块通过哈希指针连接。哈希指针用于保护交易记录的完整性,在共识节点的本地视图中指定相邻块的排序,把哈希指针的数据字段保存在块的数据结
构中。指向块的哈希指针是该块中的连接数据字段的哈希码。当前块的哈希码被存储在该块的头部。每个区块都包含着父块的哈希值(创世区块除外),再加上时间戳信息,形成了区块链的链式数据结构,保证了数据的真实性和不可篡改性。
当同一时间挖出 2 个符合要求的区块时,即“分叉”情况,主链会等待下一区块
诞生,新区块会挑选最长的那条支链附着。“分叉”发生的概率很小,且只是暂时的,最终的区块链一定是唯一的最长链。
区块链采用广播的方式在 P2P 网络中公布新的区块。当网络中一个节点计算出符合要求的目标难度値时,首先会被广播到相邻节点,待验证通过后会继续向其他邻节点广播,直到网络中不少于 51%的节点授权则认为交易得到认证。若在此过程中交易信息不合理(账户余额不足或信息错误),则不会通过验证,节点将废弃该数据也不会再向其他节点转播。若验证通过后,区块链会决策出新区块的记账权,并广播全网实现同步。
二、数据加密
数据加密和身份验证是任何网络系统须提供的两项最重要的安全服务,一般来说,这两种服务可以使用公钥加密(非对称加密)作为安全框架。区块链网络
中的每个节点都生成一对私钥和公钥。
私钥由用户秘密保存用来加密/解密消息,私钥与数字签名函数相关联,该函数是将任意长度的输入消息输出为固定长度的签名字符串。
而公钥与验证函数相关联,该验证函数以相同的消息和该消息的公认签名作为输入。当签名函数使用相应的私钥和输入消息生成签名时,验证函数仅返回 true。
目前较为流行的非对称加密技术有 RSA、Diffie-Hellman 公钥加密算法、椭圆曲线加密算法(ECC),相比之下,由于椭圆曲线加密算法在提供相同安全等级系数的同时,密钥更小,加密解密过程更快,因此,区块链使用椭圆曲线签名算法(ECDSA)非对称加密技术实现数据认证(即签名和验证)和数据保密(即加密和解密)。
公钥加密具体过程如下图所示,众包场景下,工人使用其私钥对感测数据进行数字签名,每个拥有工人公钥的用户都可以对工人进行身份验证。数据加密也有类似的程序,工人使用任务发布者的公钥加密已签名的感知数据,只有发布者或其他拥有发布者私钥信息的用户才能解密数据。
三、共识算法
不同于传统的集中式授权体系结构,区块链是一个去中心化、共享的、可靠的分布式网络架构,由组成 P2P 网络的参与者管理,利用共识算法就交易顺序和合法性达成一致。共识算法指对等实体根据预先定义的协议来约束区块链网络中不可信节点,包括区块挖掘、验证、植入等工作。每个节点都在本地保留交易帐副本,这使得交易数据公开透明并且可以抵抗由单一故障点引发的系统故障,以此维护区块链的正常运行,避免 P2P 网络中发生拜占庭问题。目前,广泛使用的共识算法是 PoW 和 PoS。
工作量证明(Proof-of-Work, PoW 共识算法) 是最早的应用于比特币系统的共识算法,该共识协议的核心思想是通过引入矿工的算力竞争来保证分布式网络中共识的可靠性和数据的安全性。PoW 共识算法需要穷尽地查询加密哈希函数,以获得从候选块生成的部分原像,其候选块的哈希码满足预定义条件:给定可调节硬度条件参数 h,矿工搜索解决方案字符串 nonce,使得对于基于候选块数据组装的给定字符串 x 和 nonce 级联的哈希码(即目标块头 bh)小于难度系数目标值 D(h)。在比特币中,只有寻找出符合要求 nonce 的矿工才可以拥有当前区块的记账权并获得相应数额的酬劳。由于哈希操作的高复杂性,拥有更多计算资源的节点倾向于有更高的获胜概率。
因此,高计算功率和高能耗的要求成为低计算能力,低功耗物联网设备的一个挑战。除此之外,在频繁的小额支付中还存在交易费。在比特币系统中,交易
额越高,矿工验证此交易得到的回报,即手续费越高。因此,矿工更愿意去认证交易额较大的交易,而小额支付的交易则会迟迟得不到认证,这无疑为物联网系统中的用户增加了经济负担。更严重的是低交易处理能力,例如,比特币系统每秒处理 7 个交易。此外,高认证时延(比特币系统每个区块 60 分钟才能得到认证),同样不能满足呈指数增长的物联网用户对交易数据的实时要求。因此,尽管 PoW 可扩展性很好,但不适用于物联网系统。
权益证明(Proof-of-Stake, PoS 共识算法) 是为了解决 PoW 的高能耗缺陷而提出的替代方案。与依赖算力资源的 PoW 算法不同的是,Po S 算法使用币龄避免高计算复杂度的哈希运算。
币龄等于资产的价值乘以交易的生存时间。生存时间为最近一次交易时间到现在的交易时间。币龄类似 PoW 算法的算力,拥有更高币龄的节点有更大的概率赢得新区块的记账权,同时获胜者的币龄将被消耗(重置为零)。
由于获胜的概率直接受到币龄的影响,所以 PoS 共识算法对富有的矿工有利。除了比 PoW 节约能源之外,PoS 共识算法还可以在一定程度上保护网络,防止内部恶意的攻击。
成功的攻击需要用户拥有较高的权益,但是,系统中拥有高权益的用户更愿意维护网络的安全。因为一旦网络受到恶意攻击,拥有高权益的用户将会损失更多。但是,如果单个用户控制了系统的大部分股份,则可能由于权利集中而引发垄断。垄断者可能潜在地选择做一些恶意活动,比如双重支付或拒绝服务。
此外,Po S 中也存在一些 PoW 所具有的缺陷,例如,交易费,低 TPS(以太坊每秒处理 20 到 30 个交易)和较高的认证时延(以太坊中为 3 分钟)。
因此,Po S 共识算法并不是建立智能的分布式物联网系统的最佳选择。目前采用 Po S 共识算法的应用有以太坊,Peercoin和 Nxt。
概念验证(Proof-of- Concepts,PoW 共识算法) 根据 P2P 网络中节点的算力来计量节点的投票权或可信度。所有节点的 PoW 过程将共同模拟可公开验证的随机函数,用来选择区块提议的领导者。基于这样的设计范例,PoW 可以推广到 PoX 的框架中。使用 PoX,节点需要非交互式地证明超出 PoW 哈希值的可测量资源的权限。遵循非交互式零知识证明(Zero-Knowledge Proof,ZKP)的生成计算验证范例,可以将 PoX 过程抽象为三个阶段。
(1) 初始化(随机种子或密钥的生成器):初始化阶段根据 PoX 规范为证明者和验证者提供在后续阶段中运行的必要信息。典型的非交互式 ZKP 系统(例如 zk-SNARK)必须查询可信的第三方密钥/随机种子生成协议,用来为证明者和验证者产生公共参考字符串。
(2) 执行(挑战和证明生成器):对于非交互式 ZKP,执行阶段要求证明者根据公共参考字符串生成随机挑战,该挑战构成独立不可妥协的计算问题,同时生成相应的证据。
(3) 验证:在验证阶段,验证者检查证明的正确性,仅基于证明者发布的信息
确定。
典型的基于 PoX 的共识算法有 Proof of exercise,Proof of retrievability,Proof of space等。PoX 方案可以被视为对基于 PoW 的 Nakamoto 协议的扩展,旨在实现两个主要的设计目标,即激励有用的资源提供和改善共识性能。 随着区块链技术的兴起,许多新的共识算法也应需而生,这些机制在能耗、可扩展性和吞吐量方面都有了一定的提高,如:Proof of activity , Proof of burn, Bitcoin-NG。
四、智能合约
智能合约是 Nick Szabo 于 1994 年提出的一系列自执行、可信赖的计算机编码程序。智能合约的主要组成部分包括地址、价值、功能和状态。当工人提交交易到智能合约地址时,网络中的所有节点将根据交易值和全局状态执行程序,实现相应的用户身份管理、任务分发和数据评估等功能。这样,智能合约就可以代替可信的第三方来验证交易对手之间的合约。
在众包中,可以设计智能合约并将其嵌入区块链系统以简化工作流程。用户通过向唯一的地址发送激活交易来触发智能合约的执行,在区块链上实现相应的
功能。一旦交易有效地触发智能合约,它将在区块链网络中的节点上自动运行。执行结果将由其他节点验证,有效的结果将作为区块内容存储,以供将来参考和审核。因此,智能合约可以起到协调者的作用,不仅有助于系统实现自动化执行,而且可以使其做出有效的决策。
除了方便性和准确性之外,智能合约还可以提高众包系统的安全水平。交易数据用数字签名加密,并由网络中的所有权益持有人审查,合约的任何改变都将
得到充分的监测、核实和确认。因此,潜在的恶意攻击和意外错误可以大大减少。
因此,将智能合约整合到众包中,尤其是用于无线物联网中的小额支付交易,并实现交易的自动化处理是很必要的。
五、系统设计
区块链网络是一个强大的分布式主干框架,其独特的去中心共识算法特性可用于平坦、开放的接入网络进行分散化数据处理和自组织数据驱动。区块链网络
框架,如下图所示。
从系统设计的角度来看,区块链网络可以从下到上抽象为四个实现级别:(1) 数据和网络组织的协议;(2) 分布式共识的协议;(3) 基于分布式虚拟机(Virtual Machine,VM)的自组织框架(例如:智能合约);(4) 人机界面的实现。
1. 数据和网络组织层
(1) 数据组织协议:交易是区块链的原子数据结构,由一组用户或智能合约创建,以指示令牌从发送者转移到指定接收者,记录着资产数据的变更。数字签名的交易记录被打包到称为“块”的加密防篡改数据结构中;然后按照时间顺序通过哈希指针连接成“块链”(线性,非线性);最后存储到本地分类账副本。
(2) 加密功能:提供了许多成分的加密功能,如非对称加密,同态加密,Merkle树,哈希函数,零知识证明(Zero-Knowledge Proof,ZKP)等,以在区块链网络中形成独特且安全的节点标识。
(3) 网络协议:区块链网络中的数据传输通常基于以 HTTP 为基础的远程过程
调用(RPC)协议实现,其中消息按照 JSON 协议进行序列化。网络协议的主要目标是在节点之间引入随机拓扑,提供 P2P 网络组织的手段,即对等/路由发现和维护以及 P2P 链路上的加密数据传输/同步,有效地传播信息以使区块链副本同步。
(4) 节点类型:根据启用功能,节点可以分类为轻量级节点,全节点和共识节
点。所有节点都需要启用路由功能以进行消息验证/传播和连接维护。轻量级节点(如钱包)仅将每个块的头部保留在其本地存储器中。全节点在本地存储规范区块链的完整和最新副本。与轻量级节点比,全节点能在没有外部引用情况下自动验证交易。共识节点实现了共识参与的功能,发布新的块并影响区块链的状态。
共识节点可以采用完整或轻量级存储。
2. 共识层
共识层为连接 P2P 上的可靠数据同步提供核心功能,以维护整个网络中区块
链数据的原创性,一致性和顺序。 在有权限访问网络中,区块链网络通常采用拜占庭容错(Byzantine Fault Tolerance,BFT)共识协议,如:Paxos,PBFT,Ripple等共识协议。有权限共识协议依赖于半集中式共识框架和更高的消息传递开销来提供即时共识,并以此换来高交易处理能力。
在开放访问网络中,概率拜占庭协议是基于包括密码零知识证明和激励机制设计在内的技术组合实现的,如 PoX。无权限共识协议更适合于区块链网络,其对节点的同步和行为的控制具有较为松散的特点。在有限延迟和多数诚实节点情况下,无权限共识协议以较低的处理效率为代价更好地提供了对可伸缩性的支持。
3. 全局 VM 层
作为较低层协议和应用程序之间的互操作层,VM 层将必要的 API 公开给应用程序层。当启用 VM 的功能时,允许网络中的节点以自主可执行程序的形式部署到智能合约的区块链上。在分布式 VM 层上实现智能合约,可以保证共识协议的稳健性。
4. 应用层
应用层提供最终用户可见的界面,如分布式应用程序,加密货币和区块链浏览器,具体应用如:众包、智能家居、智能电网、车辆通讯等。
综上所述,区块链技术的出现打破了原来集中式授权管理系统的经营模式,带了全新的技术方案,基于区块链的系统一般都具有下表所示的优势。