APP下载

支持多中心聚合签名的实用性拜占庭容错改进方案

2022-08-29刘文婧凌国玮

关键词:私钥视图密钥

唐 飞,刘文婧,冯 卓,凌国玮

(1.重庆邮电大学 计算机科学与技术学院,重庆 400065;2.重庆邮电大学 网络空间安全与信息法学院,重庆 400065)

0 引 言

联盟链是一类由多个组织或机构作为共识节点的区块链。在保证联盟节点数据一致性的基础上,如何提高共识效率是亟待解决的问题。在区块链环境中,一般假定节点间相互不信任,因此,共识验证过程中的密钥由谁生成、如何分发授权,也是一个重要的问题。

共识机制作为区块链的核心技术之一,主要用于节点对数据进行验证并使全网对该数据达成共识。常见的区块链共识机制有工作量证明(proof of work, PoW)[1]、权益证明(proof of stake, PoS)[2]、授权股份证明(delegated proof of stake, DPoS)[3]、实用拜占庭容错(practical Byzantine fault tolerance, PBFT)[4]等。文献[4]之后,人们提出了许多改进的共识机制,例如Zyzzyva[5]、FastBFT[6]、Raft[7-8]、DBFT[9-10]等。在PBFT共识机制中,参与共识过程的节点分为主节点与副节点2类。主节点将决策整理并签名后广播给各副节点。副节点接收到决策和签名后,对其进行验证和签名,并将自己签名的消息广播给其他所有节点。在这个过程中,节点将进行多轮验证及签名,会消耗大量的时间与算力。因此,需要提高联盟链节点达成共识过程的效率。

本文提出一个无需可信中心分布式密钥授权及高效验证的拜占庭容错共识方案。该方案可支持联盟链高效共识,各节点的密钥不再由密钥生成中心来负责管理,而是由联盟链中选举出的超级节点共同生成。每个超级节点在得到自己的密钥的同时,也为候选节点生成部分密钥,由候选节点合成自己的私钥。每个超级节点只知道候选节点的部分私钥,因此,候选节点的私钥不会被单个超级节点获取,且可以抵抗来自t-1个超级节点的合谋攻击(t是分布式密钥生成机制的门限值)。在共识过程中,副节点需要对接收到的消息进行验证,主节点需要对副节点发送的消息进行验证。利用聚合签名,参与共识的节点能将需验证消息进行聚合,进行批量验证,从而提高验证效率,进而提高共识效率。

1 预备知识

1.1 区块链

区块链本质上是一串包含了一段时间内产生的所有交易数据的数据块,用于验证信息的真实性和生成下一个区块。分布式数据库、非对称密码、智能合约等组成了区块链的主要技术。

区块链最突出的特点是去中心化。由于网络传输延迟等原因,不同节点在某段时间内收到的数据不可能完全一致。节点要判断一个记录的有效性,就需要通过共识机制来达成全网数据的一致性。不同于传统中心化的分布式系统,区块链中的共识机制可以使系统实现去中心化,也能够实现更大范围内的协同合作。区块链具有防止数据篡改和交易可追溯等特性,能够在用户匿名和追踪技术[11]等领域发挥作用。

一般说来,区块链系统[12]由6层结构组成。其中,数据层主要对区块数据进行加密;网络层负责对数据进行验证、传播;共识层包括PoW、PoS等共识机制;激励层通过相应的经济激励等方式鼓励系统中用户参与,推动区块链系统运行;合约层实现区块链系统的各类功能,需要包含智能合约以及脚本等内容;应用层将区块链中的不同应用场景表现出来。区块链基础架构如图1所示。

图1 区块链基础架构

1.2 共识机制

共识机制是使多个节点达成一致的机制,本质上来说是多个机器达成共识,目的在于在多个节点中记录相同的账本,解决复杂环境下的去中心化网络达成数据一致性的问题。共识过程的核心是主节点选取和验证后数据上链。共识过程的输入是节点数据生成时以及验证后产生的交易或数据,输出则是封装好的数据区块以及更新后的区块链。不同场景应用需求衍生出了不同的共识机制。以PBFT共识机制为例,它可以较为高效地解决在多节点参与情况下的典型分布式一致性问题,适用于点对点的区块链网络结构。

区块链的共识机制有2个显著特征,即“少数服从多数”和“节点平等”。“少数服从多数”指节点数和节点计算能力等计量;“节点平等”是指符合条件的节点可以针对决策提出自己的结果,使其他节点对此结果进行认证。以比特币为例,它采用PoW共识机制,要在比特币系统中伪造或篡改一条数据,必须控制超过51%的节点才能达成。而完成PoW共识机制运行所需要的庞大算力需求,使这种情况在节点数量足够多时发生的概率微乎其微。

1.3 双线性映射

设G1、G2是两个阶为大素数p的循环群,映射e:G1×G1→G2满足以下性质。

①双线性:对于任意a,b∈Zp,和R,S∈G1,有e(Ra,Sb)=e(R,S)ab。

②非退化性:存在R,S∈G1,使得e(R,S)≠1,这里“1”表示G2群G2的单位元。

③可计算性:存在有效算法对任意的R,S∈G1,可计算e(R,S)的值。

则称e是一个双线性映射[13]。

1.4 分布式密钥生成

分布式密钥生成(distributed key generation,DKG)技术主要以分布式方式为群体的密码系统进行密钥生成,DKG协议[14]中密码系统的公钥和私钥由这个系统中的参与者共同生成,公钥向其他参与者公开,私钥一般适用于面向无可信中心的密码系统。DKG通过多方参与,计算共享的公钥与私钥。分布式秘钥产生不依赖任何可信的第三方。在(t,n)-DKG中,t为阈值,n为参与者数量,DKG协议允许n个参与者共同产生密钥,任何数量大于等于阈值t的参与者子集都能使用该共享密钥,而任何数量少于阈值t的参与者子集都没有对该共享密钥的任何知识。

分布式密钥生成技术可以用于构造无可信中心环境下的密码算法,从而可用于支撑区块链安全应用。文献[15-16]均基于分布式密钥生成技术构造了适用于区块链的认证方案。

1.5 聚合签名

聚合签名[17]是指在多个用户对不同消息进行签名后,将这些签名通过聚合形成一个短的签名,用户只需对聚合后的短签名进行验证即可。假定系统中有n个用户,对应地,存在n个公钥、n个消息以及n个相应的签名,n个不同签名可以聚合成一个短签名σ,通过批量验证,提高签名验证的效率。聚合签名可以缩短签名长度,减少签名开销,以聚合签名为基础的无证书聚合签名[18]、基于身份的聚合签名[19]等技术获得了学者们的广泛研究。

在基于身份的密码方案[20]中,用户可以利用自己的身份信息来充当自己的公钥,这就意味着用户的公钥不再需要与数字证书进行绑定,从而减少管理资源消耗;用户可以通过自己的身份签名对多个消息同时进行验证,不再需要签名者之间进行频繁的交互活动。与现有聚合签名方案相比,该方案在减少节点间交互成本等方面有更好的表现。同时,利用身份进行聚合签名在一定程度上提高了安全性。主要步骤为系统建立、密钥生成、签名、验证、聚合签名和聚合签名验证。前4个步骤和普通基于身份的签名方案一样;最后2个步骤提供聚合功能。基于身份的聚合签名定义如下。

①系统初始化:给定一个安全参数λ∈N,算法生成系统的全局参数params。

②密钥提取:对于具有标识ID的用户,其公钥为DID,其私钥为sID,由密钥生成中心(KGC)生成。

③签名:对消息m进行签名σ。

④验证:给定一个带有用户身份认证的m的签名σ,验证其有效性,有效则输出1;否则,输出0。

⑤聚合签名:每个具有身份IDi的用户ui∈U在消息mi上提供一个签名,计算得到聚合签名。

⑥聚合验证:验证聚合签名是否有效。

从基于身份的密码方案定义不难看出,中心化体系存在过于依赖单个中心的问题,单独依赖某一中心很容易出现被第三方攻击或成为攻击方的情况。因此,以上算法不能直接用于多中心甚至无中心的区块链中。

2 支持多中心聚合签名的实用性拜占庭容错改进方案

本方案中所涉及的节点关系如图2所示。

图2 节点间关系示意图

联盟链服务器随机选择一个素数λ作为安全参数,公开系统公共参数params。

params={G1,G2,p,g,e,Ppub,H,H1,t,n}

(1)

主节点的初始超时时间设置为Tblock,副节点的初始超时时间设置为2v+1Tblock;Tblock表示区块周期,v表示当前视图编号。

2.1 分布式密钥生成

接收系统发送公共参数后,联盟链服务器中的弱中心生成多项式,根据该多项式计算其自身的私钥、公钥,并广播。各个弱中心验证接收到的秘密值的有效性,若无效,则要求错误的弱中心重新发送秘密值;若有效,则通过任意多个秘密值份额恢复出联合生成的随机秘密值。

步骤1(弱中心初始化):弱中心Pi选择一个t-1次多项式

(2)

步骤2(节点密钥生成):节点在进入共识时需要向弱中心申请部分密钥来生成其私钥。节点id从第i个弱中心申请部分密钥pskid,i=H(id)yi后,可以通过验证等式e(pskid,i,e)=e(H(id),Bi)是否成立进而验证其有效性。如果部分密钥无效,候选节点可以公开部分密钥请求其他弱中心认证;否则,节点最后自己合成自己的私钥skid。

(3)

2.2 主节点选择

设置编号为(h-v)modn的弱中心为本轮共识的主节点,其他弱中心设置为副节点。其中,h为区块高度,v为当前视图编号,n为弱中心数目。

当出块条件满足后,主节点向其他副节点发送提案请求,在经过主节点的超时时间后,按照共识策略从内存池中选取交易,取哈希打包为提案请求并广播,发起新一轮共识。同时将主节点的超时时间设置为(2(v+1)-k(v))Tblock。副节点在超时时间范围内未能广播则进入视图更改。

2.3 共识过程

其他副节点验证主节点发送的提案请求合法性,以及是否符合本地共识状态。若验证通过,则广播提案响应信息。副节点收到其他副节点发送的提案响应信息后,利用基于身份的聚合签名算法验证消息合法性。同时,将副节点的超时时间延长,并更新本地共识状态。对于交易消息包含的交易哈希,从内存池或未确认的交易中获取相应交易,并添加至共识模块。若未在超时前接收到主节点发出的提案请求,则进入视图更改。

2.4 提 交

每个已收集齐提案请求交易信息的超级节点,在超时时间范围前收集到至少M个超级节点的提交信息,包括验证消息的合法性以及是否符合本地共识状态。这些信息若通过验证,则将本节点的超时时间延长和生成,并广播新块;若出现错误,则广播警告信息,并将超时时间设置为2Tblock,返回主节点选择步骤。

2.5 视图更改

首先,将主节点的超时时间设置为2v+2Tblock,令视图递增编号k=1,vk=v+k。副节点向其他副节点发出第vk个视图更改请求。其次,广播视图更改请求信息,并检查已收到的视图更改请求数目。若收到超过三分之二超级节点发出的视图更改请求,即更改视图达成共识,则改变本地视图,初始化本地共识信息,并根据新的视图编号确认下一轮共识的主节点。最后,如果在超过超时时间后,节点间仍然没有就视图更改达成共识,则令k=k+1并返回视图更改步骤。

3 改进PBFT方案的安全性与效率分析

3.1 安全性分析

在拜占庭容错类共识机制中,一方面,系统中的节点在互不信任的情况下共同完成共识运行,节点公钥与私钥的生成是否值得信任尤为重要;另一方面,在PBFT共识机制中,节点间进行验证与签名的过程就需要使用密钥。然而,密钥的生成却完全依赖于第三方,共识过程中节点间的交互效率也并不令人满意。

区块链系统一般是去中心或多中心化的系统。如果用于处理区块链数据的密码算法是中心化的[8,10],那么,在基于区块链的应用系统中,谁来扮演密码算法中证书颁发中心或密钥生成中心的角色将是一个与区块链相矛盾的问题。本文提出的共识机制改进方案中,超级节点的密钥生成采用了DKG技术。利用DKG技术来生成节点的公钥与私钥,可以避免密钥生成中心权限过高,更能够使节点不再受到第三方的影响,从而提高区块链网络的去中心化特性。本文通过基于身份的聚合签名算法在节点间进行验证与签名,DKG算法利用节点身份生成密钥,这样就使得共识过程中节点可以对其收到的消息进行批量验证与签名,一定程度上提高了共识过程的效率。同时,DKG基于身份生成的密钥在节点验证与签名的过程中,也确保了一定的安全性。

3.2 效率分析

为了比较PBFT共识机制和本文改进共识算法的效率,本小节通过仿真测试各共识算法的运行时间。在实验中设置节点最初数量为4,逐步添加节点数量,记录一定节点数量规模下对1 000条交易提案进行共识所消耗的时间。为简化分析,本次测试忽略了恶意节点对数据信息传播的影响。

利用基于Java的密码库(java pairing-based cryptography, JPBC)[22],可以度量签名及验证相关操作的运行时间。本实验考虑4种控制了签名和验证算法开销的操作。用Tpar表示双线性计算时间,Tmtp表示映射到点的哈希计算时间,Tmul表示群元素乘法运算时间,Texp表示群元素的指数运算时间。实验测试平台为HUAWEI MetaBook 14,处理器为Intel i7-8565 U,主频为1.8 GHz,内存为8 GB,运行环境为Windows 10。得到如下结果:Tpar=21.982 7 ms,Tmtp=50.755 9 ms,Tmul=0.243 2 ms和Texp=27.388 ms。

在本文实验条件下,PBFT和本文方案的效率对比如表1所示。

表1 PBFT与本文方案的效率对比

以Ubuntu 18.04为运行环境,用Docker容器模拟节点,Postman作为测试工具,测试吞吐量(tps)。分别在4、8、12和16个节点下,以1 000条交易量为例,在tps方面进行对比,结果如图3所示。

从图3可以看出本文方案验证的高效率。与PBFT共识机制相比,本文方案对相同数量的交易提案进行共识完成时tps比较小。这是由于在提案共识的过程中,节点与节点之间不再需要进行多次交互,节点在收到其他节点发送的数据后,利用基于身份的聚合签名算法验证消息合法性,对消息进行批量验证及签名,然后主节点将通过验证的信息进行提交,由节点进行数据同步,完成共识过程。而PBFT共识机制中,节点之间的每一次数据确认,都需要进行点对点交互,才能确认节点间是否对提案达成了共识。从实验结果可以得出,当节点数量逐步增加时,PBFT共识机制对提案进行共识所需时间也更多。随着节点数量增多,聚合验证的优势将更加明显,可有效降低节点本地验证的计算开销,从而提高共识效率。因此,本文方案效率整体优于PBFT共识机制。

图3 共识机制效率分析结果

4 结 论

本文提出了一种基于多中心聚合签名的拜占庭容错共识机制。首先,通过DKG算法来生成节点的密钥,使节点密钥的生成不再依赖第三方,保证区块链网络的安全性;其次,在节点共识阶段,通过基于身份的聚合签名算法,提高节点的验证效率,进而提升了共识达成的效率;最后,对提出的共识机制改进方案进行了安全性与效率分析。与PBFT共识机制相比,本文提出的共识机制具有更高的安全性能和交互效率。

猜你喜欢

私钥视图密钥
清扫机器人避障系统区块链私钥分片存储方法
比特币的安全性到底有多高
幻中邂逅之金色密钥
幻中邂逅之金色密钥
Spatially defined single-cell transcriptional profiling characterizes diverse chondrocyte subtypes and nucleus pulposus progenitors in human intervertebral discs
密码系统中密钥的状态与保护*
TPM 2.0密钥迁移协议研究
一种基于虚拟私钥的OpenSSL与CSP交互方案
视图
Y—20重型运输机多视图