基于可验证秘密共享的区块链分片存储模型
2023-12-20浮宇丽任亚唯
浮宇丽,任亚唯,2+
(1.北京信息科技大学 信息管理学院,北京 100192; 2.中国科学院信息工程研究所 信息安全国家重点实验室,北京 100093)
0 引 言
区块链技术是从比特币系统中提炼出来的底层框架[1],具有去中心化、不可篡改、可以追溯、集体维护等特点[2]。
区块链本质是一个去中心化的数据库。由于区块只允许添加、不允许删除,随着交易的增加,所需的存储空间线性增长,造成了区块链存储可扩展性差问题[3]。到2022年3月16日为止比特币系统中整个区块链数据占355.69 G,而系统中共计1.1万余全节点都需存储一个数据副本,这些冗余副本占用量高达3820.89 TB,造成了存储空间的严重浪费[4-6]。部分全节点由于无法存储完整的区块链而选择成为轻节点或退出网络[7],以及在区块链应用中冗余性存储造成的空间浪费[8]等问题,对区块链的安全性和去中心化造成严重影响,制约了区块链在物联网、车联网及轻量级网络等领域的应用。
近年来,研究者们针对区块链存储可扩展性问题提出了一些解决方案,这些方案主要归纳为两大类,一类利用第三方存储系统存储区块链数据,另一类则对区块链存储模型进行优化[9]。使用第三方存储系统降低了区块链的去中心化。优化区块链存储模型的方案采用协作式存储,通过多个节点合作,每个节点存储部分账本,提高了区块链的存储可扩展性。然而这种链上协作式存储易受到恶意节点的影响,造成严重的安全问题。
本文针对上述问题提出一种区块链分片存储模型,主要贡献为:
(1)提出了一种基于可验证秘密共享的区块链分片存储模型。模型使多个节点合作存储数据区块,每个节点只需存储完整区块的一部分,且节点能够对收到的分片进行验证,提高可扩展性和安全性。
(2)本模型提高了区块链存储的可验证性。模型在每个分片生成同时计算可验证序列,并将其广播,每个节点可对分片进行验证。本模型在抵御恶意节点欺骗攻击有显著优势。
(3)节点根据区块的稳定性选择不同的安全策略。对于高稳定性区块直接分片存储,保证存储效率;对于其它区块,将区块和存储节点的身份绑定,避免恶意节点对存储系统的影响。
1 相关工作
1.1 区块链的链上存储
提高区块链存储可扩展性的研究包括链上与链下两种存储方案。链上存储方案更适合节点众多的公有链与联盟链,提高了可扩展性,但安全问题一直是这种方案需要解决的问题[10]。
贾大宇等[11]提出一种区块链存储容量可扩展性模型,将区块链中的各区块存储在一定比例节点中,而不是所有节点,减少了区块链的存储空间,降低了区块链的去中心化。
Zhang等[12]提出了一种低开销的区块链存储架构,其将原始数据转化为关键词的语义信息、将低价值数据存储到中央数据库、将区块链账本划分成多个切片。此方案降低了区块链系统的去中心化。
张国潮等[13]提出一种基于门限秘密共享的区块链分片存储模型,使用改进后的Shamir门限秘密共享方案将区块分片并存储在网络中的各个节点。此方法虽然降低了区块数据分片在存储节点的存储空间,但计算开销较大。
Kim等[14]提出一种基于局部秘密共享的分布式区块链存储模型,根据数据重要性将其分为全局共享和局部共享,局部共享可恢复码编码数据,减少存储空间,但时间开销大。
卿欣艺等[15]提出基于中国剩余定理的区块链存储扩展模型,模型将区块划分高低安全性,高安全性区块分布式存储,低安全性区块全网保存。
尹芙蓉等[16]提出一种基于纠删码的区块链分片存储系统,采用区间划分方法将区块分区,然后使用纠删码编码分布存储在系统的节点上,但这种方法不具备身份认证机制。
上述链上存储方案都是将区块链的存储可扩展性作为主要的考虑对象,而忽略了系统的可靠性,同时不能避免网络恶意节点造成的欺骗攻击等安全问题。
1.2 区块稳定性
传统存储模型中每一个区块的产生是矿工在一段时间内将交易信息打包的结果[17]。随着区块的不断产生,每个节点都会保存一份完整的区块链账本。同时每个区块的生成都与之前区块有关,任何一个区块变动都会使其后所有区块产生变化。51%共识攻击[18]主要针对了还未产生的区块。当攻击者试图更改区块数据时,攻击者需要比诚实节点更快地产生一条平行链代替区块链,攻击者是否能够成功赶超诚实链可以近似地看成赌徒破产问题[11]。
51%攻击针对的是传统区块链的Merkle树值,而改进之后的区块链结构同样需要避免此类攻击。模型需要对分片的区块进行稳定性判定,并对此区块的存储节点进行身份验证,以保证低稳定性区块分片后的不可篡改性。
假设p为诚实节点获得记账权的概率,q为攻击节点获得记账权的概率 (p+q=1), 那么攻击者在区块增加了第z块时,攻击者潜在的进展服从泊松分布[19],分布期望为
(1)
攻击者成功篡改区块数据的概率Pz为
(2)
由式(2)得,z越大则Pz越小,且随着z的增加,攻击者成功篡改区块数据的概率呈指数趋势下降,如图1所示。
图1 攻击成功的概率
随着诚实节点产生区块的增加,攻击者越来越难赶超诚实链。因此,越原始的区块中数据被篡改的可能性就越低,区块的稳定性和安全性也就越高。
Borel定律[20]定义一个事件发生的概率小于1/1050则为不可能事件。因此当区块高度z增大到一定程度后就不存在被篡改的可能。随着z的增大,区块会在链中某一位置zL达到“不可被篡改”,即为高稳定性区块。因此,在本研究中对于那些z不够大的位置的区块,使用密钥协商协议后分片存储,可对存储节点进行身份认证,避免恶意节点破坏交易过程。对于z足够大的位置的区块,可以直接使用可验证秘密共享算法[21]进行分片存储,提高区块链系统的存储效率。
2 密钥协商协议
在本文模型中,根据区块稳定性判定的结果,对于处在zL后的有被篡改可能性的区块分片,分片/广播节点需要和存储节点进行密钥协商。
密钥协商时,分片/广播节点将对各个存储节点进行身份验证,通过计算并验证节点的唯一标识符cookie完成身份认证。身份认证成功后,分片/广播节点会和各个存储节点协商密钥,接着用协商成功的密钥衍生一个传输密钥来加密需要传输的分片数据。密钥协商协议可以保证各个节点的安全性以及分片数据传输的安全性。
在协商过程中,分片/广播节点首先生成一个随机数Ni,并计算其与其中一个存储节点的唯一标识cookiei=hash(SAD,DAD,Ni,time),SAD是分片/广播节点的钱包地址(源地址),DAD是某存储节点的钱包地址(目的地址),time是时间戳。之后将
存储节点收到后需要进行响应,同样生成随机数Nr, 并计算一个cookie并发
分片/广播节点收到后就需要与存储节点通过DH算法协商一个对称密钥。首先确定p和g,p为一个素数,g为模p的一个原根,生成随机数Xi
发给存储节点。
存储节点收到后,也生成一个随机数Xr, 根据收到的参数计算Yr=gXrmodp, 将
(3)
根据第一步协商指定的认证方法,双方都能计算一个KEY=HMAC(auth,Ni|Nr),auth为认证密钥。为了验证彼此身份,需要通过KEY再衍生一个密钥用来对传输的区块数据分片进行加密传输
本矿区面积较大,各矿体分布分散,位于孔隙含水层系统内的矿体影响区域岩溶地下水流动系统与局部孔隙地下水流动系统的补、径、排路径。根据矿区地勘报告,大部分矿体位于地下水最高水位以上,极少部分矿体位于地下水水位变动带内。
KEY0=HMAC(KEY,K|cookiei|cookier|0)
(4)
接着,分片/广播节点计算HASHi, 其表达如式(5)所示,并将KEY0作为对称密码的密钥加密HASHi, 此后将结果发给存储节点进行身份认证。存储节点同样计算HASHr, 并解密收到的内容,将结果与HASHr进行比对
HASHi=HMAC(KEY,K|cookiei|cookier|SAD)
(5)
按相同方法,存储节点也发送相关计算结果到分片/广播节点进行身份验证。若此时验证都成功,则分片/广播节点就将加密分片数据发送到存储节点。
3 基于可验证秘密共享的区块链分片存储模型
传统区块链存储架构采用冗余性存储方案,即区块链网络中的每一个节点都存有完整的区块链数据。本文提出的存储模型将传统的基于Merkle树的冗余式存储结构改为分片存储结构,每个存储节点只需存储每个区块的一部分即可,其具体数据结构如图2所示。改变的主要部分为区块头的Merkle根的值以及区块体的结构。区块体结构包括交易数量、分片/广播节点地址、分片大小和门限参数 (k,n) 拼接hash后存储在区块头中。由于每一个分片数据区块的交易数量、分片/广播节点地址和门限参数是一样的,所以属于同一个原始区块的分片数据区块的hash值是一致的。
图2 区块数据存储新模型
在提出的模型中,节点主要包括分片/广播节点、存储节点、验证/恢复节点。任何节点都可以作为分片/广播节点,在某一时刻获得记账权限的节点便是此时的分片/广播节点。存储节点是本模型中存储分片数据的节点(分片/广播节点也可以是一个存储节点)。验证/恢复节点是网络中的用户在需要恢复原始数据时的节点,是存储节点的子集。
在本文模型中,分片/广播节点首先判定区块安全性,之后将该时刻的数据打包并用可验证秘密共享算法分成n片,再根据区块安全性选择相应安全策略,在协商完相关参数后将n-1个分片数据私密发送给网络中n-1个存储节点(每个存储节点存储一个分片数据)。接着利用可验证秘密共享算法中选取的随机数计算可验证参数并广播至网络中全部节点。存储节点在与分片/广播节点协商完相关参数,并接收分片/广播节点发送来的属于自己的分片数据和可验证参数后,完成验证操作并将分片数据存储。模型存储过程整体如图3所示。
图3 模型分片存储过程整体
验证/恢复节点在恢复数据时首先需要提供身份信息和需要恢复数据的标识,然后广播需要恢复数据的索引值(索引值为1表示创世区块),并验证存储节点的身份以及收到的分片数据。在验证成功后,验证/恢复节点使用拉格朗日插值法恢复原始数据。模型恢复过程的整体如图4所示。
图4 模型分片恢复过程整体
3.1 分片数据区块产生阶段
分片数据区块产生要经过以下步骤:交易数据分片、广播、分片数据区块产生、分片数据区块分发。
3.1.1 交易数据分片产生阶段
如图5为利用可验证秘密共享算法进行区块数据分片的流程。记分片/广播节点T需要分片的交易数据为D, 则在T采用可验证秘密共享算法对D进行分片的具体步骤如下:
(2)利用对称密码算法将D进行加密,再将加密后的结果转化为十进制,记为SD为转化完成后的交易数据,同时将KS转化为十进制得到a0;
(3)存在n,k∈R且k (5)T根据上述步骤确定的参数生成如下多项式 f(x)=ak-1xk-1+ak-2xk-2+…+a1x+a0 (6) (6)计算生成的交易数据分片 (xi,yi), 其满足 yi≡f(xi)modp,1≤i≤n (7) (7)T首先将交易数量、分片/广播节点地址、分片大小、门限参数(k,n)进行哈希函数计算得到一个哈希值,接着将区块大小、前一区块地址、后一区块地址、版本号、时间戳、难度值、随机数以及计算得到的哈希值封装成一个区块,并将区块数据和多项式的各个系数删除,只保留集合B。 (8)按照步骤(7)的方法,将剩余交易数据分片依次封装成分片数据区块BCi,1≤i≤n, 每个分片数据区块BCi可以直接作为数据区块上链; (9)T将生成的n个分片数据区块秘密分发给存储节点SNi(T也作为一个存储节点),即对于每一个给定的xi,SNi存储的分片数据区块为BCi。 图5 交易数据分片流程 3.1.2 广播 T利用3.1.1节步骤(3)中得到的ai计算出bi,bi∈{1,2,…,k-1},bi的计算表达式为 bi≡gaimodp (8) 然后将计算所得结果记为B,B={b1,b2,…,bk-1}, 将B广播给网络的其余n-1个节点。 存储节点SNi会在收到分片数据区块后对其进行验证,具体验证步骤如下: (1)SNi在收到分片数据区块BCi后,将区块的交易数量、分片/广播节点地址、分片大小、门限参数(k,n)进行哈希函数计算得到其哈希值,并将此哈希值与区块头中的哈希值进行比对验证; (2)如果两个哈希值比对不相等,则说明BCi不具有正确性,将其舍弃并广播一个对T的抱怨;如果两个哈希值比对相等,则说明此区块正确,再对分片数据进行验证; (3)对于分片数据(xi,yi),SNi需要验证其是否满足 (9) (4)如果 (xi,yi) 满足上述表达式,则SNi就将BCi进行存储;如果不能满足条件,则丢弃BCi并广播验证失败的信息。 数据区块恢复流程如图6所示。数据区块恢复阶段主要包括3个步骤:分片数据区块获取、验证分片数据区块以及恢复数据区块。 网络中任意用户都能作为验证/恢复节点对交易数据进行恢复。在网络中某验证/恢复节点R需要恢复交易数据时,首先要向其余的存储节点获取分片数据区块。具体为,R广播所需区块的索引值index。 其余存储节点根据收到的索引值将其存储的对应分片数据区块传输至R。 最终R收到大于或等于k个分片数据区块即可。 之后R要验证所收到的分片数据区块,验证方法采用3.2节步骤(3)所述方法。若收到的分片数据区块能够通过验证,则将其作为恢复交易数据所需分片进行恢复;否则就不能将此分片数据区块作为用于恢复的分片。通过验证的分片数据区块需要满足不少于k个。 在R得到能够用于恢复数据区块的k个分片数据区块后,利用拉格朗日插值法,将交易数据区块进行恢复。 具体步骤为,R首先按式(10)求出多项式f(x) (10) 然后获取多项式系数ak-1,ak-2,…,a1, 并将ak-1,ak-2,…,a1拼接后转化为SD, 并将a0转化为密钥KS, 最后通过对称密码算法对SD解密得到恢复的交易数据区块。 基于可验证秘密共享的区块链分片存储模型具有可验证性、抗合谋性和抗单点失效性。 密钥KS只能通过利用原始内容D计算或合法的验证/恢复节点恢复分片数据区块的方式得到。 分片/广播节点将密钥KS转化为十进制得到a0, 并作为多项式f(x) 的常数项进行计算,得到n个分片数据 (xi,yi),i∈{1,2,…,n}, 并封装为分片数据区块BCi。 在分发过程中,仅广播验证集合B和分发BCi, 而不将KS直接传输,避免了攻击者截获、篡改KS的发生。在恢复过程中,具有合法身份的验证/恢复节点通过获取其余存储节点存储的BCi, 利用拉格朗日插值法取得多项式常数项系数a0, 得到恢复的密钥KS, 同样消除了KS′被攻击者截获、篡改的可能。 模型的可验证性是指存储节点能够验证分片/广播节点分发的分片数据区块,以及验证/恢复节点能够验证存储节点返回的分片数据区块。 在分发过程的验证中,设网络中一个存储节点SNt收到了分片/广播节点T的分片数据区块BCt, 在满足对区块头部的hash值验证条件下,SNt还需要对分片数据进行验证。已知SNt已经获得T广播发送的验证集合B={b1,b2,…,bk-1} 且bt∈B, 根据式(9)对分片数据进行验证,将式(7)代入得 因此模型总可以通过验证计算检测出数据内容被篡改。 已知网络中存在m个存储节点,想通过共享各自存储的分片数据区块获得原始数据内容,m满足m 设网络的n个节点中存在c个失效节点,失效节点表示此节点存储的分片数据区块出现异常,在满足c≤n-k的条件下,不影响网络中恢复节点对原始数据的恢复。 主要分析密钥协商在受到拒绝服务攻击和中间人攻击两种主要攻击手段时的抵御能力。 (1)拒绝服务攻击 为了避免恶意攻击者通过发送大量初始请求消息耗费节点内存资源,以及连带的DH算法模幂运算占用的较大计算资源,密钥协商方法利用Cookie交换来提供一定程度的抵抗能力。当有大量请求消息发来,节点不接收这些消息,只响应一个包含其Cookie的消息。收到确认消息才更新状态,以这种方式避免恶意攻击者对节点内存资源与计算资源的损耗。 (2)中间人攻击 密钥协商过程抵御中间人攻击的方法主要是用共享密钥对双方生成的伪随机数进行加密,则中间人就不能获得协商的密钥,也无法获得协商双方的身份信息。 本文对基于可验证秘密共享的区块链分片存储模型进行了仿真实验。实验是在配置为Intel(R)Core(TM)i7-10875H CPU @ 2.30 GHz RAM 16.0 GB的PC上进行的。每个共识节点均运行搭建的区块链代码,并且共识节点建立在服务器的不同端口上。所有的节点都可以作为存储节点、分片/广播节点、验证/恢复节点。实验中大素数q=244497-1, 规定每10笔交易进行一次打包,一笔交易大小约为4 K,未分片时平均每个区块大小约为40 K。 同时,实验主要记录存储模型的时间和存储空间占用量,简化了其工作量证明,将实验涉及的几种模型POW的难度值设为2,即随机数匹配整个区块哈希值前2位为0时得到记账权。 实验分别测试了本文模型的平均区块生成时间、平均区块处理时间,以及节点所需的存储空间。在存储相同数量区块的条件下,实验比较了不同门限参数值下区块的平均生成时间、总处理时间和所需存储空间,并与基于Merkle树的传统区块链存储模型进行比较。实验测试进行10次并取平均值,实验结果见表1、表2。 在不同门限条件下,模型在区块生成时间上的差距不大,而对于分片计算和密钥协商上的时间消耗有较大影响。由表2可知协商过程的时间开销随生成区块的数量以及门限参数的大小成正比,但协商过程在总体处理时间的占比逐渐降低,例如在门限参数为(20,40)的本文模型中,生成50、100和200个区块的过程中,协商过程的时间开销分别占总体处理时间开销的19.01%、11.16%和7.85%。 表1 计算开销 表2 协商过程时间开销 实验将本文存储模型与传统模型的存储空间占用量进行了对比。在不同门限参数的条件下,每组实验生成100个区块,存储节点每存储5个区块分片就将这一时刻的完整区块链写入文件中,并记录其大小,以此衡量每个存储节点的存储空间占用量。在所有节点都正常运行且不被攻击的情况下,得到如图7所示结果。 图7 存储空间占用量对比 增大模型的门限参数需要消耗更多的时间开销,门限参数为(5,10)、(10,20)和(20,40)的本文存储模型分别比传统模型的时间开销提高了36.89%、80.74%和148.78%,但同时通过增加模型的门限能够降低存储节点的存储空间占用量,其分别比传统模型的存储占用量降低了69.66%、86.52%和93.60%,对降低存储节点的存储空间占用量具有显著效果,以此提高存储模型的可扩展性。 同时对4.1节模型可验证性进行了模拟测试。针对(10,20)区块链可验证分片存储模型中恶意节点篡改分片数据为例,分片/广播节点发送给某一存储节点的分片数据内容如图8(a)所示,而此存储节点收到的分片数据被多个恶意节点合谋改为其它数据,因此多项式系数有改变,致使存储节点的分片数据改变,篡改为如图8(b)所示的内容,在存储节点收到分片/广播节点发送的分片区块后,首先会对分片区块的头部hash值进行验证确保其正确性。通过此验证后,存储节点会再通过式(9)对分片数据进行验证,存储节点验证的计算结果应如图9(a)中所示结果一致,此时能够通过验证。而在内容已经被篡改的情况下,对y1验证的计算结果如图9(b)所示,验证失败。因此,模型能够发现恶意节点的欺骗攻击。 图9 验证结果 记哈希函数运算时间消耗为Ehash, 模运算时间消耗为Emod, 模逆运算时间消耗为Er, 多项式计算时间消耗为Ep, 对称加密开销为Ee, 解密开销为Ed。 经实验测试,一次加解密的开销约为一次hash运算的1.5倍,即Ee+Ed=1.5Ehash。 对于一个含有n个共识节点网络的基于可验证秘密共享的区块链分片存储模型,其计算开销主要在于分片数据区块的生成、分片广播、稳定性判定、协商、存储和恢复阶段。其中模运算、hash运算、模逆运算、对称加密和多项式计算为主要影响因素,同时为了提高模型整体计算效率,模运算采用位运算方法。同时将本文方法与最具有可比性的文献[11]和文献[13]进行了定量比较,记一次稳定性判定的开销为Es。 则本文模型、文献[11]所提方法以及文献[13]所提方法的性能见表3,其中n为节点数量,k为门限参数 (k,n) 中的k。 表3 性能定量对比 对于文献[13]方法,其在门限参数k>4时,时间开销大于本文的可验证分片存储模型。文献[11]中所提出的模型在存储节点较少的环境中能达到较少的时间开销,但随着环境中存储节点数量的增加,其时间开销则会大于可验证分片存储模型,并且其恢复数据存在恢复失败的可能。 同时根据分析,几种存储模型的安全属性比较见表4。 表4 安全属性对比 本文针对区块链的链上存储方案面临的安全问题,提出了基于可验证秘密共享的区块链分片存储模型。首先,该模型判定区块稳定性,对于低稳定性区块,节点在收到分片时能对分片及其发送节点身份进行认证,避免了网络恶意节点对分片和恢复过程的影响,提高了低稳定性区块的安全性。其次,模型通过节点协作式存储将区块分片存储,降低了节点的存储空间占用量。最后由理论分析与实验结果,本文提出的区块链分片存储模型在保证区块存储可扩展的前提下,能够抵御恶意节点的欺骗攻击,因而具有更高的安全性。在今后的研究中,在保证区块链分片存储系统的安全性和可扩展性的前提下,将进一步提高模型的存储效率,以扩展此模型的应用。3.2 分片数据区块存储阶段
3.3 数据区块恢复阶段
4 安全性分析
4.1 可验证性分析
4.2 抗合谋性分析
4.3 抗单点失效性
4.4 密钥协商安全分析
5 实验分析
5.1 实验环境
5.2 实验结果
5.3 性能分析
6 结束语