Page 236 - 《软件学报》2025年第7期
P. 236

张孝 等: 区块链测试基准综述                                                                 3157


                 存在着耗费大量资源的问题. 2011         年, 一位名为   Quantum Mechanic 的网友在  Bitcointalk  论坛首次提出了权益证
                 明  (proof of stake, PoS) 机制  (https://en.bitcoin.it/wiki/ProofofStake). PoS  是  PoW  的变种, 通过引入币龄这一概念,
                 在一定程度上解决       PoW  耗费大量算力的问题. 各个分布式节点的币龄越大, 获得记账权的可能性就越大. PoS                       不
                 再需要投入巨量资源来求解无实际意义的数学难题, 但币龄决定记账权也在一定程度上削弱了区块链去中心化特
                 质. 目前以太坊系统已经从        PoW  全面转向   PoS.
                    另一类重要的共识协议称为           BFT (Byzantine fault tolerance) 协议. 此类协议的特点是一般不需要竞争记账权,
                 但是区块发布之后, 所有节点要通过多轮投票来决定是否接受. 与                     PoX  不同的是, 区块一经上链就不会被分叉.
                 BFT  协议的核心思想来源于       Paxos 协议  [56] , 通过多轮投票的方式达成共识. Paxos 采用简单多数的方式来确定投
                 票结果, 也不考虑故意作恶的情况, 因此不能容忍拜占庭类错误. 尽管如此, Paxos 仍然是分布式系统的经典协议,
                 由  Paxos 衍生出很多协议, 如    Raft [57] , 仍然被广泛用于分布式数据库系统、DNS        等应用中. 值得一提的是, 不少区
                 块链系统出于对性能和安全的综合考虑也采用                Raft [57] . 1999 年, Castro 等人  [58] 提出了实用拜占庭容错  (PBFT) 算法,
                 通过调整投票确认机制以及引入            View Change 实现了容忍不超过     (N–1)/3  的拜占庭节点, 其中, N   为全部节点数.
                 PBFT  是目前许可链主流的共识协议.

                 2.1.4    智能合约
                    智能合约由跨领域学者         Nick Szabo [59] 在  1996  年提出, 含义是“一种可以实现合同条款的计算机程序”, 其执行
                 过程可以不依赖于任何中间媒介. 智能合约的概念被提出之后, 技术层面无法实现不依赖第三方的执行合约程序,
                 因此一直未能真正地落地. 直到区块链技术的出现, 提供了一个去中心的分布式执行环境, 满足了智能合约的要
                 求, 才使得此项技术得以真正地实现.
                    在区块链社区, 通常认为智能合约是运行在区块链系统之上的一段计算机代码, 由共识机制确保代码的正确
                 执行  [60] . 但多方参与的计算机程序, 在实际中往往意味着多方共同遵守的协议或规范, 仍然是广义“合约”的范畴.
                 目前, 智能合约没有统一的编程语言和运行模型. 比特币的智能合约采用了简单的脚本语言, 表达能力受限. 以太
                 坊智能合约采用了图灵完备          Solidity  语言. 在  Hyperledger Fabric 中将智能合约称为链码  (chaincode), 对区块链的
                 读写操作都需要经过链码来完成. 无论采用哪种语言, 智能合约都可视为一个运行在区块链平台上的状态机. 智能
                 合约实现好合约内容, 当用户部署或调用交易时修改智能合约的值和状态, 智能合约生成区块, 对链上数据进行修
                 改, 链上数据的修改会更新智能合约的世界状态. 而所有外部的数据源都应当来自可信的预言机                              (oracle machine).

                 2.1.5    区块链安全威胁
                    根据被攻击的模块, 可以将区块链安全威胁分为攻击网络、攻击共识以及攻击智能合约这                               3  类, 可能造成系
                 统性能下降甚至崩溃、链分叉、网络分区以及用户财产损失                      [61,62] . 测试基准主要考虑针对网络或共识层面的攻
                 击. 针对智能合约代码漏洞的攻击, 比如算数溢出、可重入漏洞等                    [63,64] , 通常采用漏洞扫描工具来检测, 因此并不
                 包含在测试基准中.
                    常见针对网络的攻击主要包括            DNS  劫持  (DNS hijack) [65] 、日蚀攻击  (eclipse attack) [66] 和  DDoS  攻击  (DDoS
                 attack) [67,68] 等.
                    (1) DNS  劫持: 新的节点加入区块链网络时, 依赖特定的            DNS  服务来发现已有的成员节点, 从而与区块链网
                 络其他节点取得联系. 如果        DNS  服务器被劫持, 新的节点可能得到错误的成员节点地址, 也就不能正常参与共识.
                    (2) 日蚀攻击: 如果一个节点      A  的邻居全部为恶意节点, 这些恶意节点可以屏蔽               A  与网络其他节点的通信. 这
                 样对于网络中其他节点来说, 节点           A  也就成为拜占庭节点. 日蚀攻击可以增大区块链网络中拜占庭节点的比例,
                 降低系统性能, 甚至造成系统崩溃.
                    (3) DDoS  攻击: 即分布式拒绝服务攻击, 这是常见的网络攻击方式. 通过利用合理的请求消耗节点资源, 使得
                 节点不能对外正常服务        (比如参与共识). 针对区块链网络的          DDoS  攻击可能造成系统性能下降.
                    常见针对共识的攻击主要包括女巫攻击               (sybil attack)  [69,70] 、自私挖矿  (selfish mining)  [71] 、分叉攻击  (fork
                 attack) [72,73] 和提案延迟  [74] 等. 其中, 前  3  类攻击主要是针对公有链.
                    (1) 女巫攻击: 攻击者通过创建或控制多个账户来操纵共识协议的结果.
   231   232   233   234   235   236   237   238   239   240   241