基于改进拜占庭容错算法的区块链气象数据共享系统
2022-06-14夏凯文颜超冯径段超凡
夏凯文, 颜超,2*, 冯径, 段超凡
(1.国防科技大学气象海洋学院, 长沙 410005; 2. 南京工业大学浦江学院基础部, 南京 211112)
在气象大数据背景下,随着地面观测、探空、雷达、国内外专业气象网站以及企业自主设立气象站等气象资料种类及数量的增长,加快推动气象部门、民营企业等机构和个人的气象数据资源的汇聚联通、共建共享,消除气象数据孤岛,成为气象大数据发展的重要方向[1-2]。
针对某一具体区域或站点数据的获取较为困难,对气象数据的可靠性、易获取性具有较高要求。因此,建立一个气象数据共享平台是解决上述需求的重要途径。当前气象数据共享的主要方式基于集中式的云平台进行处理[3],实现共享数据的存储、传递和应用。但缺乏可靠性和可跟踪性,且需要借助强大的中央服务器。区块链技术具有去中心化、可靠数据库、去信任、交易匿名性以及不可篡改等特性[4],可实现在不完全信任的环境下,不依靠数据中心,实现节点间的气象数据共享。当前基于区块链的数据共享已经应用于众多场合。如第五代移动通信技术(5th generation mobile communication technology,5G)无人机数据共享[5]、工业物联网数据共享[6]、产品质量溯源[7]以及医疗数据共享[8]等。
针对区块链数据共享存储系统,国内外学者在各领域给出了较为成熟的解决方案。Liu等[9]基于区块链,提出了一种高效的数据收集和安全共享方案,结合以太坊区块链和深度强化学习(deep reinforcement learning,DRL)创建一个可靠和安全的环境,其中DRL用于优化收集的数据量,使其满足最优要求,区块链技术用来保证数据共享的可靠性和安全性。Wang等[10]研究了分布式存储系统的数据存储与共享方案,提出了将分布式存储网络(distributed storage network,DSN)、以太坊和区块链加密技术相结合的数据共享架构。Dinh等[11]基于区块链技术和DSN提出了一个新型电子医疗数据共享框架,并使用智能合约设计了一个可靠的访问控制机制,以实现不同患者和医疗供应商之间安全的电子医疗数据共享。通过DSN将共享的数据转化成哈希值,然后将哈希值存储在区块链上,从而避免了大量共享数据的链上存储。但是DSN网络要想稳定运行,需要用户贡献存储空间和网络带宽,如果没有恰当的奖励机制,那么巨大的资源开销很难维持网络的持久运行[12]。基于联盟链的场景,谭海波等[13]提出由数字档案馆、联盟区块链、公有区块链、去中心化存储网络、系统服务构成的数据档案保护和共享方法。蒋宇娜等[14]提出基于区块链技术的去中心化物联网数据共享和存储方案,将系统框架分为智能合约[15]、区块链网络、分布式账本和物联网设备。
然而,基于区块链技术实现气象数据共享,面临的问题包括:种类繁多、体量庞大的气象共享数据存储;高效的区块链共识机制;气象数据共享与获取方法。针对上述问题,现通过引入去中心化存储网络,“汇聚”区块链网络中节点的存储空间,提出基于存储算力的共识机制。通过改进拜占庭容错算法,提出一种基于共享度的改进拜占庭容错算法。通过引入“共享币”作为区块链气象数据共享系统的数据流通手段,用于激励系统的数据共享,可通过“共享币”获取其他用户或机构所共享的气象数据。针对气象数据共享场景,基于星际文件系统(interplanetary file system,IPFS)和Ethereum设计气象数据共享智能合约,并进行实验和测试。
1 系统模型
1.1 区块链气象数据共享系统框架
提出的区块链气象数据共享系统(blockchain meteorological data sharing system, BMDSS)框图如图1所示,BMDSS由共享节点、区块链共识网络、去中心化应用(decentralized applications, DApp)、去中心化存储网络(DSN)和分布式账本等构成。
图1 区块链气象数据共享系统框图Fig.1 Blockchain meteorological data sharing system block diagram
1.1.1 共享节点
共享节点(shared node, SN)是BMDSS的核心组成部分,为BMDSS提供共享气象数据及存储空间,是BMDSS中的交易实体。共享节点由参与共享气象数据或提供存储空间的各类用户,包括个人、自建站、科研机构、商业公司等组成。
SN由节点公钥(public key of the nodes, PB)、节点私钥(private key of the nodes, PV)、共享度(sharing degree, SD)、节点类型(node types, NT),共享币余额(sharing coin balance, BAL)、节点行为(node action, NA)6个属性构成,SNi可用六元组表示为
SNi=〈PBi,PVi,SDi,NTi,BALi,NAi〉
(1)
BMDSS中节点行为包括气象数据共享及获取、存储空间共享、参与区块共识、节点间交易。其中共享节点包括共识节点和验证节点。PBi、PVi、SDi、NTi、BALi、NAi分别为第i个共享节点的节点公钥、节点私钥、共享度、节点类型、共享币余额和节点行为。对这两类节点做出如下说明。
(1) 共识节点。属于共享节点;参与BMDSS中节点行为的合法性验证,并向验证节点广播节点行为,进行二次验证。
(2) 验证节点。属于共享节点;用于节点行为进行二次验证。
1.1.2 区块链共识网络
区块链共识网络(blockchain consensus network,BCN)由共识节点和验证节点组成,在共识机制的约束下,验证BMDSS中所有节点行为的合法性。
1.1.3 去中心化应用
去中心化应用(DApp)其本身不存储任何数据和交易信息,以接口的形式为共享节点提供智能合约和DSN的接口调用。
1.1.4 去中心化存储网络
去中心化存储网络(DSN)聚集共享节点的存储空间,用于对共享的气象数据进行存储,并生成唯一的哈希地址。SN可通过智能合约获取DSN生成的哈希地址,实现对气象数据的检索。
1.1.5 分布式账本
分布式账本由所有共享节点共同参与维护,用于记录节点间的交互日志。
BMDSS数据流如图2所示。
图2 BMDSS数据流Fig.2 BMDSS data flow
1.2 智能合约架构
智能合约是一个可编程的业务规则制定平台,当预先设定的条件被触发时,智能合约会自动执行处理流程[16]。由于智能合约具有可编程性、不可篡改性和一致性等特点,通过智能合约实现气象数据共享与获取、节点间的数据交易、节点的奖惩以及共享和验证节点的选举。BMDSS包含的智能合约架构如图3所示,其中包括气象数据存储合约(meteorological data storage contract, MDSC)、共享节点交易合约(shared node trading contracts, SNTC)、节点身份选举合约(node identity election contract, NIEC)、共享存储证明合约(Sharing storage certificate contract, SSCC)以及节点奖惩机制合约(node reward penalty contract, NRPC)。
各合约功能分述如下。
(1)气象数据存储合约。MDSC用于对SN的气象数据共享请求[Req(SNshare)]、气象数据获取请求[Req(SNget)]的合法性进行验证,并在DSN中建立气象数据索引列表。Req(SNshare)返回共享的气象数据存储的哈希地址和“共享币”奖励,Req(SNget)返回获取的气象数据的哈希地址和消费的“共享币”。
(2)共享节点交易合约。SNTC用于对交易发起方的交易请求[Req(SNTx)]和交易接收方的反馈信息[FB(SNTx)]进行验证,借助Merkle树验证交易发起方账户余额和“共享币”来源的合法性,并返回交易结果(true or false)。
(3)节点身份选举合约。NIEC用于选举参与共识机制的共识节点和验证节点。NIEC在固定的周期中执行一次,使得参与共识机制的节点不产生于某些固定的节点中,以保证BMDSS的去中心化程度。
(4)共享存储证明合约。SSCC用于检查SN的共享存储空间是否持续存储共享数据,借鉴Filecoin中的复制证明和时空证明,保证SSCC的可靠性,以用于防御恶意节点的女巫攻击、外包攻击和生成攻击[17]。
(5)节点奖惩机制合约。NRPC定义了BMDSS中的奖惩机制。SN的节点行为中气象数据共享及获取,节点间交易以“共享币”作为激励机制,不参与奖惩机制。节点的其他行为的奖惩如表1所示。
图3 BMDSS的智能合约架构Fig.3 The smart contract architecture of BMDSS
表1 节点行为奖惩Table 1 Node behavior rewards and punishments
1.3 共识机制
在BMDSS的开放数据处理与融合方式中,少数的恶意节点倾向于通过伪造数据、谎报存储容量等方式加入BMDSS,进而获取不当利益。由于区块链中每个节点都是对等的,因此BDMSS中不存在与传统网络中的中心化数据库。为了能在决策权分散的无中心化区块链系统中快速、高效地针对节点行为的合法性达成一致,通过在BMDSS中建立完善的共识机制,保证系统的规范化运转。目前区块链中的共识机制可分为五类[18],包括选举类共识,如RAFT;能力证明类共识,如目前主流的共识机制有比特币和以太坊采用的工作量证明机制(proof of work,PoW)、EOS采用的权益证明机制(proof of stake,PoS);随机类共识;约定类共识以及混合类共识。考虑到共享数据的存储需求,借鉴传统的PoW和PoS共识机制,提出基于存储算力的共识机制(proof of stored computing power,Posp)。
定义1出块周期(Tblock)表示每隔一个固定时间周期,BDMSS将该时间周期内系统中节点的所有行为进行封装,并生成一个区块。
(2)
为了激励存储算力较小的节点积极性,将第t个出块周期中最大存储算力记为max(SPt),对应节点记为SNmax(SPt)。该出块周期结束后,SNmax(SPt)分配50%的出块奖励(即共享币)。将剩余的节点按存储算力大小,依式(3)分配第t个出块周期的50%出块奖励。
(3)
2 基于共享度的改进拜占庭容错算法
2.1 基于共享度的节点选举
BMDSS对共享节点的共享气象数据、存储空间等行为给予一定的共享币奖励,为了规范BMDSS中的节点行为规范,防范恶意节点谋取不当利益以及系统中可能存在的故障节点,提出基于共享度的改进拜占庭容错算法(sharing degree practical Byzantine-fault tolerance,SD-PBFT),解决存在恶意节点情况下的共识达成问题。
定义2选举周期(Tvote)至BMDSS中每隔固定时间进行共识节点和盐城节点的选举,两个选举的是渐渐个为选举周期,其中有
(4)
定义3共享度(sharing degree,SD)是第t个选举周期中对单个共享节点的气象数据共享情况和存储算力综合度量。共享度越高,表示节点参与数据共享越活跃。其中共享数据情况用共享节点的气象数据共享率(sharing rate, SR)衡量,即
(5)
(6)
λ1+λ2=1
(7)
此外,为激励共享节点参与维护区块链,共识节点和验证节点每成功参与一次验证都将得到一定数量的“共享币”奖励。为最大化收益,BDMSS中的共享节点会尽可能提高共享度,以增大成为共识节点或验证节点的概率。
2.2 算法设计
SD-PBFT的智能合约架构如图4所示。设共识节点的总数量为Ncon,其中恶意节点的数量为fcon,Ncon>3fcon;设共识节点的总数量为Ncon,Nver为验证节点数量,恶意节点的数量为fver,Ncon>3fver。
(1)请求阶段。智能合约向共识节点发送验证请求
(2)准备阶段。共识节点对验证请求中的消息请求进行验证,若请求非法,则丢弃;否则向验证节点广播准备请求
,其中signcon(m)为共识节点对m的签名。(3)提交阶段。验证节点首先判断是否收到至少收到2fcon+1个编号为num的准备请求,若满足,则对准备请求中的消息请求进行验证。若请求非法,则丢弃;否则向共识节点广播提交请求
,其中signver(m)为验证节点对m的签名。 (4)响应阶段。共享节点首先判断是否至少收到2fver+1个编号为num的提交请求,若满足,则对提交请求中的消息请求进行验证,并向智能合约验证通过信息
;否则验证失败。 图4 BMDSS的智能合约架构Fig.4 The smart contract architecture of BMDSS
(5)统计阶段。智能合约收到fcon+1个来自不同共识节点的相同结果后,将该结果作为最终结果。
具体算法如算法1。
算法1: SD-PBFTINPUT:Ncon,Nver,mOUTPUT:True or FalseFunction Node_vote(Ncon,Nver): Initialize SDt={SDt1,SDt2,…,SDtn} for i in SDt: if t = 1 do SDti=λ1SPti+λ2SRti if t != 1 do SDti=αSDt-1i+λ1SPti+λ2SRti if θ1≤SDti do Ncon.append(SDti) if θ2≤SDti≤θ1 do Nver.append(SDti) return Ncon,NverBegin: Ncon,Nver = Node_vote(Ncon,Nver) REQ_Flag = Constract. send(
) to Ncon if REQ_Flag do PRE_Flag =Ncon.send( ) to Nver if PRE_Flag do COM_Flag =Nver. send() to Ncon if COM_Flag do REP_Flag =Ncon. send( ) to Constract if REP _Flag do calculate(result) if result > fcon+1 do return true else: return falseEnd 2.3 算法性能分析
在基于共享度的改进拜占庭容错算法中,算法的执行主要依靠于共识节点和验证节点完成,通过帕累托分布函数来描述共享节点的共享度。帕累托分布是意大利经济学家维弗雷多·帕累托在19世纪末提出的,用于描述20%的人占有80%的社会财富的财富分配情况。考虑到BDMSS中的共享度主要集中在共识节点和验证节点中,即存在大量共享度低的节点和少量共享度高的节点,可通过帕累托分布来描述共识节点和验证节点的分布情况。设共享节点的共享度集合为SD=(SD1,SD2,…,SDn}。其中n=Ncon+Nver,Ncon为共识节点数量,Nver为验证节点数量。SDi服从参数ζ和min{SDi}的帕累托分布,其概率分布为
(8)
式(8)中:x≥min{SDi},k>0。
概率密度分布函数为
(9)
由式(9)可知,当共享节点Ni充当共识节点时,有θ1≤SDi;当共享节点充当验证节点时,有θ2≤SDi≤θ1。综上,共享节点成为共识节点的概率Pcon为
(10)
共享节点成为验证节点的概率为
= Pr(X>θ2)-Pr(X>θ1)
(11)
式(11)中:θ2>θ1>min{SDi};参数k越大,共享节点中成为共识节点和验证节点的概率越小。
共享节点和验证节点的数量分别为
Ncon=[nPcon]
(12)
Nver=[nPver]
(13)
式中:[nPcon]、[nPver]分别为nPcon和nPver的整数部分。
将依据帕累托分布所得到的Ncon、Nver对基于共享度的改进拜占庭算法的时延、通信带宽开销和网络吞吐量做出分析。
(1)时延。由图4可知,算法执行的时延主要包含两个方面,即共享节点和验证节点间的数据传输时延和区块的验证时延。设节点之间的基础网络时延为τd,节点间的网络时延扰动范围Δτ,SN处理一个字节信息所需时间的集合为T={t1,t2,…,ti}。算法执行的总时延τtotal为
(14)
式(14)中:Sblock为区块的字节数。
(2)吞吐量。BDMSS中的吞吐量是指每秒完成的交易数,其计算公式为
(15)
式(15)中:TPS为吞吐量;Stx为交易的大小;tblock为区块达成共识的时间,其中tblock=Tblock。
(3)通信带宽开销。基于共享度的改进拜占庭算法中的通信开销发生在共识节点和验证节点的选举和区块验证两个过程中。在一个选举周期中通信带宽开销BW可表示为
(16)
3 系统方法设计
所设计的BDMSS旨在塑造一个开放式的气象数据共享平台,BDMSS的气象数据共享与获取、节点间的数据交易的方法实现流程如下。
3.1 气象数据共享与获取方法设计
气象数据共享与获取方法基于智能合约、DSN以及混合加密机制实现安全可靠的气象数据共享,使节点可以安全高效地实现数据获取。
为了便于描述,设共享节点A(SNA)需要将存有的气象数据共享至BMDSS中,共享节点B(SNB)需要获取节点A共享的气象数据。
3.1.1 气象数据共享方法步骤
(17)
(18)
步骤4MDSC通知DSN开辟满足MeteData存储的空间,并向SNA发送气象数据上传指令。同时调用NRPC,给予SNA一定数量的“共享币”作为奖励。
步骤5SNA将MeteData上传至DNS成功后,DNS返回MeteData唯一对应的哈希地址,并通过PBA进行加密,将加密后的数据地址返回至SNA,即
HashAdd=DSN(MeteData)
(19)
HashAddRSA=RSA(HashAdd,PBA)
(20)
上述步骤中RSA为非对称加密算法加密过程;RSA为非对称加密算法解密过程, DSN为MeteData的哈希地址生成过程;HashAdd为MeteData的哈希地址,HashAddRSA为加密后的哈希地址。采用比特币中使用的椭圆曲线加密法。
3.1.2 气象数据获取方法步骤
(21)
(22)
步骤4MDSC通过DSN获取DigestMeteData的哈希地址,并经过PBB进行加密后,将加密后的哈希地址返回至SNB,即
HashAddRSA=RSA(HashAdd,PBB)
(23)
步骤5SNB通过私钥PVB解密后,获取哈希地址,可通过获取的哈希地址下载查看数据,即
HashAdd=DSA(HashAddRSA,PVB)
(24)
3.2 气象数据交易方法设计
考虑到部分节点拥有某些专有数据,这类数据不会被公开共享至DSN中,其他节点可通过交易的方式获取数据。气象数据交易方法步骤如下。
步骤1SNA将专有数据的基本信息(格式、名称、范围等)通过SNTC发布至DSN的索引列表中,供BMDSS中其他节点进行检索。
HashAdd=DSN[RSA(MeteData,PBB)]
(25)
(26)
步骤4SNB使用PVB解密后,得到数据哈希地址,SNB可通过数据哈希地址下载查看数据,即
(27)
步骤5SNTC将SNB本次交易所需的“共享币”转至SNA中,同时SNB中扣除对应数量的“共享币”,交易结束。
4 实验结果
首先仿真分析了SD-PBFT的性能,其中包括时延、通信带宽开销和网络吞吐量,并与PBFT算法进行了对比;其次,针对区块链气象数据共享系统,基于以太坊平台,并结合IPFS进行气象数据共享,BMDSS进行初步实现与测试。
4.1 算法仿真结果
为了分析SD-PBFT算法的各项指标,在基于Intel(R) Xeon(R) W-2104 CPU @3.20 Hz,16 GB RAM计算机中实现了SD-PBFT和PBFT算法,并进行了相应的测试。系统仿真参数如表2所示。
图5展示了在k=1、k=2、k=3下,在共享节点个数分别为10、50、100、1 000、5 000、10 000时,SD-PBFT算法共识节点和验证节点的个数。
表2 系统仿真参数Table 2 System simulation parameters
图5 不同共享节点和k值下共识节点和验证节点的数量Fig.5 Number of consensus nodes and validation nodes with different shared nodes and k values
首先,对SD-PBFT算法对带宽开销进行测试。取k=1,当共享节点的数量逐渐增加至10 000时,带宽开销达到0.26×106KB。如图7所示,随着共享节点数量的增加,带宽开销保持着较小曲率的指数增长。同时,图7展示了SD-PBFT与PBFT的对比效果,在共享节点个数为0~1 500时,SD-PBFT与PBFT算法的带宽开销较为接近,这是因为SD-PBFT选举共识节点和验证节点时,系统需要承担一定的开销。然而,随着共享节点数量的增加,PBFT的带宽开销呈现出指数级的增长,而SD-PBFT还未明显出现指数增长的趋势。在共享节点数量为10 000时,PBFT的带宽开销达到2.5×106KB,远远高于SD-PBFT的0.26×106KB。综上,在共享节点数量较多时,SD-PBFT表现出更好的性能,具备更低的带宽开销。
其次,对比了不同交易数量下SD-PBFT和PBFT的吞吐量。如图7所示,随着交易数量由0增加至10 000,SD-PBFT和PBFT的吞吐量均呈现线性增长;当交易数量小于4 000时,SD-PBFT和PBFT保持接近;然而,随着交易数量大于4 000时,SD-PBFT的吞吐量明显高于PBFT。当交易数量为10 000时,SD-PBFT的吞吐量为1 534笔/s,PBFT的吞吐量为1 426笔/s,SD-PBFT的吞吐量相对于PBFT提升7.5%。
最后,分析对比了不同交易数量下SD-PBFT和PBFT的时延。如图8所示,随着交易数量的增加,SD-PBFT的时延增长的趋势由快减缓。当交易数量大于3 000时,SD-PBFT时延低于PBFT;当交易数为10 000时,SD-PBFT的时延为8 973 ms,PBFT的时延为10 358 ms,SD-PBFT的时延相对于PBFT降低13.3%。
综上,交易数量为10 000时,SD-PBFT和PBFT的性能分析如表3所示。
图6 SD-PBFT和PBFT算法带宽开销Fig.6 SD-PBFT and PBFT algorithm bandwidth overhead
图7 SD-PBFT和PBFT算法吞吐量Fig.7 SD-PBFT and PBFT algorithm throughput
图8 SD-PBFT和PBFT算法时延Fig.8 SD-PBFT and PBFT algorithm delay
表3 SD-PBFT和PBFT性能分析Table 3 SD-PBFT and PBFT performance analysis
4.2 BMDSS实现
BMDSS系统基于IPFS和Ethereum进行实现,并基于Truffle框架完成web端程序的开发。其中Truffle是针对基于以太坊的Solidity语言的一套开发框架,其本身基于JavaScript。将环境部署至本地的Ubuntu18.04虚拟机中。具体界面如图9所示。其中包括文件上传、文件Hash值获取、文件浏览地址(IPFS地址)获取等功能。
BMDSS通过两个用户节点(节点1和节点2)演示气象数据共享功能,所共享的数据为2020年4月10日0:00的某国家级地面站逐小时观探测资料(以下简称观探测资料)。节点1和节点2的节点信息如表4所示。
节点1通过智能合约发布共享的观探测资料至区块链网络中,通过共识机制完成认证后,将观探测资料存储至IPFS中,并返回该资料所对应的哈希值QmRv6wwRKv9kUtHCxoEXc3mbLJNc458bBycpBE VVHg13Z。节点2可通过查询节点1所上传的观探测资料,获取资料的哈希值,并通过连接(http://IP/ipfs/资料的哈希值)获取观探测资料内容。获取的结果如图10所示。
图9 BMDSS系统界面Fig.9 BMDSS system interface
表4 用户节点基本信息Table 4 User node basic information
图10 节点2所获取节点1上传的观探测资料Fig.10 The observation detection data uploaded by Node 1 obtained by Node 2
5 结论
针对所提出的区块链气象数据共享系统提出了基于共享度的共识机制和改进拜占庭容错算法,并设计了气象数据共享与获取方法和交易方法。在仿真实验中,所提出的SD-PBFT在交易数量为10 000时,相对于PBFT吞吐量提升7.5%,时延降低13.3%,且拥有更小的带宽开销。最后,结合IPFS和Ethereum初步设计共享系统,并进行演示和测试。在未来工作中,将就区块链气象数据共享系统开展进一步深入研究。