区块链结构化存储控制方法与流程

文档序号:16887805发布日期:2019-02-15 22:47阅读:324来源:国知局
区块链结构化存储控制方法与流程

本发明涉及区块链,特别涉及一种区块链结构化存储控制方法。



背景技术:

区块链是利用链式数据结构来核实与存储数据的分布式基础架构。由于区块链网络能够通过算法实现节点间相互核实,分布式记账方式无需依赖中央服务器即可实现安全的身份认证。每个新产生的区块严格按照时间线顺序推进,试图入侵篡改区块链内数据信息的行为容易被追溯。因此,区块链技术在身份认证领域得到了日益广泛的应用。然而,现有技术中的区块链随着数据体量越来越大,如果每一次身份认证都要经过所有认证节点的核实,明显会导致延迟和吞吐量较低;而将所有身份认证数据汇总起来使得账本的数据量几何级增长,如果由单个认证节点维护,显然也会导致整个区块链系统的存储成本较高。



技术实现要素:

为解决上述现有技术所存在的问题,本发明提出了一种区块链结构化存储控制方法,包括:

将多个联盟组成联盟区块链,联盟中的多个认证节点所组成的区块链存储虚拟令牌的身份认证内容;为每个联盟动态地确定授权节点集,用于对虚拟令牌的唯一性进行核实。

优选地,所述联盟具有唯一的身份标识,请求认证双方可通过不同联盟发起认证请求,并可在任一的联盟上传输虚拟令牌,所述虚拟令牌全局唯一。

优选地,将所述认证请求描述为:

tr=(src,des,vc_id,key,tr_id);

其中vc_id为所述虚拟令牌vc的全网唯一标识,src表示虚拟令牌发出方;des表示虚拟令牌接收方;key表示请求认证双方私钥;tr_id表示认证请求的全网唯一认证请求id;

所述认证请求tr具有三种状态:

s(tr)={未确定,未生效,生效};

通过核实身份认证内容满足唯一性,将身份的状态由未确定转为生效;通过核实身份认证内容不满足唯一性,身份的状态由未确定转为未生效。

优选地,所述授权节点集随时间动态变化,每个联盟的授权节点集从全网其他联盟的认证节点中投票产生。

优选地,所述从全网其他联盟的认证节点中投票产生每个联盟的授权节点集的操作由的当前联盟的代理所发起,所述代理从当前联盟的内部区块链投票选出,并负责与其他联盟的代理通信。

优选地,所有联盟的授权节点集从全网节点中随机选择一组节点作为入账节点集;授权节点集所包含的确认节点将满足唯一性的身份认证的散列索引发送给入账节点集;入账节点集更新全局联盟区块。

优选地,为所述授权节点集和入账节点集设置有效期。

本发明相比现有技术,具有以下优点:

本发明提出了一种区块链结构化存储控制方法,通过构建多层次区块链结构实现了区块容量可扩展,并减轻了身份认证过程导致的延迟增加问题,保证了每次身份认证在整个区块链系统中的唯一性。

附图说明

图1是根据本发明实施例的区块链结构化存储控制方法的流程图。

具体实施方式

下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。

本发明的一方面提供了一种区块链结构化存储控制方法。图1是根据本发明实施例的区块链结构化存储控制方法流程图。

本发明构建多层次的联盟区块链,参与方为多个联盟,联盟具有唯一的身份标识,每个联盟由多个认证节点组成,各个联盟的区块链存储虚拟令牌的内部身份认证内容;虚拟令牌全局唯一,可在任意联盟被传输;请求认证双方可通过不同联盟发起认证请求,并可在任一的联盟上传输虚拟令牌。各联盟维护内部的区块链,所有联盟集体维护全局联盟链;每个联盟的授权节点集核实虚拟令牌的唯一性,保证虚拟令牌在不同的联盟中均满足唯一性。通过为每个联盟构建动态的授权节点集,分区核实虚拟令牌唯一性,提高系统吞吐量;授权节点集随时间动态变化,防止联盟相互勾结篡改数据。

全局联盟链存储有可靠的令牌散列索引,每个联盟的区块链存储内部认证节点的认证数据。联盟的内部区块链投票选出一个认证节点,称为该联盟的代理,代理负责与其他联盟的代理通信;从全网其他联盟的认证节点中投票产生当前联盟的授权节点集。

所有联盟的授权节点集从全网节点中随机选择一组节点作为入账节点集;联盟的初始授权节点集由联盟的代理从全网节点中投票产生,入账节点集由所有联盟的初始节点集从全网节点中投票产生。联盟的代理将块头文件数据广播给联盟的授权节点集;联盟的授权节点集核实身份认证是否满足唯一性;

联盟的确认节点将满足唯一性的身份认证的散列索引发送给入账节点集;入账节点集更新全局联盟区块。

所述虚拟令牌vc通过vc_id全网唯一标识。所述认证请求描述为tr=(src,des,vc_id,key,tr_id),src表示虚拟令牌发出方;des表示虚拟令牌接收方;key表示请求认证双方私钥;tr_id表示认证请求id,认证请求id全网唯一。认证结果具有三种状态s(tr)={未确定,未生效,生效}。通过核实身份认证内容满足唯一性,身份的状态由未确定转为生效;通过核实身份认证内容不满足唯一性,身份的状态由未确定转为未生效。生效的认证tr即满足唯一性的身份认证。所述联盟ai∈{p1,…,pn},n表示区块链网络中联盟的数量。

联盟ai表示区块链网络中不同的参与方利用公钥地址进行标识,并保存其他联盟的身份标识。每个联盟包含多个认证节点anij,j≤ni,anij表示联盟ai的第j个认证节点,ni表示联盟ai的认证节点数量。认证节点之间通过异步消息机制进行通信。根据不同的需求对钱包设置不同的角色,包括:入账节点un、确认节点vn、普通认证节点on。入账节点负责维护全局联盟链;确认节点负责核实身份认证是否满足唯一性;入账节点与确认节点均维护内部的区块链以及核实身份认证是否满足组织内的统一性。普通认证节点仅仅发起认证请求、维护内部的区块链以及核实身份认证是否满足组织内的统一性。认证节点通过公钥地址进行标识。

联盟ai的所有认证节点anij存储联盟ai的私钥,利用联盟ai的私钥及认证节点的私钥对区块进行签名。联盟ai的授权节点集vngi由确认节点组成,核实联盟ai的认证是否满足唯一性;联盟ai的授权节点集随时间动态变化,当前授权节点集从全网节点中随机选择一组节点作为联盟ai的下一有效期确认节点集。入账节点集ungi由入账节点组成,当前入账节点集由每个单位有效期所有联盟的授权节点集的主节点从全网中随机选择一组节点组成,并随时间动态变化。

举例而言,假设全网由联盟a1,a2,a3三个联盟组成,每个联盟分别包含7个认证节点。经过投票选出认证节点a11,a21,a31作为每个联盟相应的代理。则a11负责从其他联盟a2,a3的认证节点中投票产生联盟a1的授权节点集vng1,假设初始vng1节点集为a22,a35。a21负责从联盟a1,a3的认证节点中投票产生联盟a2的授权节点集vng2,假设初始vng2节点集为a12,a34。a31负责从联盟a1,a2的认证节点中投票产生联盟a3的授权节点集vng3,假设初始vng3节点集为a15,a24。所有上述授权节点集a22,a35,a12,a34,a15,a24从全网节点中随机选择一组节点作为入账节点集,假设为a23,a37,a15。即节点a22,a35不仅用于确定入账节点集,还监控联盟a1的认证是否满足唯一性,并将核实通过的认证请求id的状态修改为生效,然后发送至入账节点集a23,a37,a15。同理,节点a12,a34监控联盟a2的认证是否满足唯一性,节点a15,a24监控联盟a3的认证是否满足唯一性,将核实通过的认证请求id的状态修改为生效,然后发送至入账节点集a23,a37,a15。该入账节点集用于构造全局联盟区块。

基于本发明的区块链结构,假设某一联盟a3试图篡改自身的认证数据以及相关区块,该区块若要生效,需将篡改后的全局联盟区块链中的区块发送给所有认证节点(即a31,…,a37)进行核实;且该联盟需将改动区块之后的所有全局联盟链区块一并改动;同时需改动所有其他联盟(a1和a2共14个节点)的认证区块链,如此高的代价使得恶意修改的数据几乎难以生效。

联盟内部区块链通过联盟子区块链接而成,联盟区块存储内部的认证数据和块头文件;块头文件存储本区块内所有认证的tr_id、认证方列表、vc_id;全局联盟区块则将不同联盟区块链链接起来,构成全局联盟链。全局联盟区块只存储满足唯一性的生效认证,格式如下:gb=<exp_id,pb_id,nb_id,trset>,其中pb_id表示联盟内部区块链的标识,nb_id表示pb_id上的联盟区块的散列索引值,trset表示可信认证的tr_id集合,包括对应的虚拟令牌vc_id,exp_id表示当前所属的期限序号,当新的联盟加入时,根据exp_id快速获取当前以及新的授权节点集、入账节点集。

授权节点集针对每个联盟ai构建,授权节点集利用块头文件数据核实身份认证是否满足唯一性,联盟所属的认证节点通过共识算法维护内部的区块链,联盟ai的授权节点集将不存在唯一性问题的认证的tr_id发送至入账节点集;只有认证的tr_id被入账节点集写入到全局联盟链中,该认证才被认定为可信认证。

优选地,授权节点集存在一个有效期。在授权节点集生成过程中,当前授权节点集在有效期到达之前为联盟ai构建下一有效期的授权节点集。具体地,为保证联盟ai的初始授权节点集中至少存在一半以上的可靠节点,联盟ai的代理从全网中随机选出m个确认节点作为联盟ai的初始授权节点集,m>3n/4。在每个联盟中选择一个确认节点作为联盟ai授权节点集的候选节点;将选择结果发送给其他m-1个确认节点和联盟ai的代理;将出现次数最多的m个确认节点作为联盟ai的授权节点集vngi;各个联盟的代理将统计结果广播给内部的认证节点,vngi中的每个确认节点相互通信,由此确认节点之间建立连接。

由byzantine定理可知,全网中至少存在3n/4以上的可信节点,由此可知n个节点的链中最多存在n/4个不可信的主体,故区块链更新节点集中至少包含(n+1)/2个安全认证节点,所以区块链更新节点集是可信的。

优选地,在有效期结束之前,当前授权节点集vngi随机选择m个联盟,在每个联盟选择满足以下条件的一个节点作为联盟ai的下一有效期的授权节点集vngi,即任何节点不可连续作为任一联盟的确认节点,且m>3n/4;将本节点的投票结果发送给其他m-1个确认节点和联盟ai的代理;再次统计出现次数最多的m个节点作为新的vngi,并将最终结果即下一有效期的候选授权节点集发送给入账节点集。入账节点集将下一有效期候选节点集出现次数最多的确认节点作为联盟ai的下一有效期授权节点集vngi。当入账节点集计算出所有联盟的新的授权节点集时,将新的授权节点集的节点列表发送给每个联盟的当前确认节点以及新的确认节点。入账节点un将每个联盟的vngi节点列表广播给1/4个联盟的代理,每个联盟的代理将下一有效期的节点集消息发送给内部的认证节点。基于以上机制,保证下一有效期确认节点接收到正确的授权节点集的节点列表信息。

在每个有效期内,联盟ai的授权节点集核实联盟ai的认证是否满足唯一性。优选地,联盟ai的代理将内部的块头文件数据广播给联盟ai的授权节点集vngi;vngi将满足唯一性的身份认证的tr_id广播至入账节点集。所有联盟的授权节点集从全网节点中选出一组节点作为下一有效期的入账节点集ung。

基于先前的实例,在确定了授权节点集a22,a35,a12,a34,a15,a24之后,如果超过一个预设有效期,如10分钟,则授权节点集a22,a35,a12,a34,a15,a24的授权节点角色将失效。因此在10分钟之内,对于联盟a1,a2,a3,相应的代理a11,a21,a31组织当前节点集a22,a35,a12,a34,a15,a24进行投票,重新选择下一轮授权节点集,假设根据投票数选择出的新的授权节点集为a25,a32,a16,a37,a11,a23,将投票结果在每个联盟内广播,再由新的授权节点集从全网节点中选出下一有效期的入账节点集,例如可为a13,a36,a14。该入账节点集用于构造全局联盟区块。

在所述授权节点集将满足唯一性的身份认证的发送给入账节点集后,入账节点集构建全局联盟区块;而联盟ai将块头文件数据发送给授权节点集后,不需等待授权节点集的核实,继续构建联盟ai的全局联盟区块。

如果联盟将每次身份认证广播给全网所有节点,全网通信代价为n2;若联盟将具体的身份认证内容发送给其他联盟的内部认证节点,易引发隐私信息泄露问题。若联盟将区块内容广播至全网,认证唯一性核实时间会变长,增加区块链存储与维护成本。为降低网络通信代价并提高系统吞吐量,本发明优先的实施例采用以下过程对认证的唯一性进行核实确认:

联盟ai的代理将块头文件数据广播给内部所有确认节点;确认节点按照头信息的顺序,根据以下规则进行联盟区块的唯一性核实:同一时刻的同一虚拟令牌只能认证一次,即同一vc_id不允许出现在其他联盟的块头文件数据中。块头文件包含以下信息:内部区块所有认证的tr_id列表,相关的认证方列表,联盟私钥,创建时间,前一区块的哈希值,vc_id列表,当前全局联盟区块的id。联盟ai的授权节点集将当前节点集核实后具备唯一性的认证tr_id以消息的形式发送给入账节点集,消息格式msg如下:msg=<pb_id,nb_id,tr_id,vc_id,blockid,key>,blockid为当前全局联盟区块号、key表示节点的私钥;入账节点集根据同一vc_id在同一区块中只能出现一次的规则保证认证内容满足唯一性。在当前有效期结束时,当前确认节点vn终止所有块头文件数据核实过程,并删除未处理的块头文件数据。联盟ai将块头文件数据广播给授权节点集vngi,在一定的时间间隔之内,若联盟ai没有收到核实结果,则再次发送该块头文件数据。采用以上机制,对于被中止核实的块头文件数据,延迟最大不超过该时间间隔。

可见,全局联盟区块由入账节点集广播给所有联盟的代理,由代理再将消息或者区块广播给所属联盟的认证节点;由于内部的认证节点之间一般网络状况良好;故基于本发明的机制能够帮助消除由直接广播给全网节点引发的网络堵塞,缓解了消息超时或者区块更新延迟过长。

当选择新的入账节点集时,所有联盟的授权节点集将投票信息发送给当前入账节点集,由当前入账节点集统计出投票数最高的m个的节点,并将其作为下一有效期的入账节点集,同时每个确认节点将下一有效期的入账节点集信息采用组播的方式发送给所有联盟的代理以及下一有效期入账节点集,即每个入账节点将消息广播给全网1/4联盟的代理与下一有效期入账节点。

在面临同样的入账任务时,由于不同节点间硬件处理能力差异,可能会出现高算力节点空闲,而低算力节点则一直处于忙碌的状态,影响整体效率。因此在本发明进一步的实施例中,在投票选择入账节点时综合考虑认证节点的算力。所述节点算力包括但不限于存储容量、核数、主频、总线io速率和网络带宽,并加权求和的方式计算认证节点的算力。

首先将节点算力参数采用归一化计算:

其中,uij代表联盟ai的第j个认证节点的归一化的算力参数,uj表示联盟ai的第j个认证节点归一化前的原始参数,umini代表联盟ai中各节点同一参数的最小值,代表联盟ai中各算力参数的平均值。ni表示联盟ai的认证节点数量。

根据参数归一化结果,可对节点硬件算力进行准确描述,并计算各个分量的加权平均值u’ij。

u’ij=k1×uij(1)+k2×uij(2)+…+kx×uij(x)

其中,uij(1)、uij(2)…uij(x)为根据参数归一化得到的节点算力参数的x个分量,例如存储容量,核心频率,带宽等,k1,k2,…kx代表对应的权值,即性能分量对节点算力的影响程度。

优选地,入账节点在每次与授权节点的交互过程后,授权节点均对入账节点的表现进行计分,以scij代表入账节点j为授权节点i提供交互后,授权节点i对入账节点j给予的计分。

因此,每当新的授权节点集从全网节点中选出新的入账节点集时,将u’ij×scij作为全网投票的参考权值。

在全局联盟区块构建过程中,如果所有节点均参与竞争生成全局联盟区块,会造成延迟高,算力浪费。因此本发明优选的实施例中改进全局联盟区块生成机制来提高系统吞吐量。具体地,在构建区块时,采用独立分支的方式构建区块体,独立更新每个分支,避免对系统吞吐量的限制。每个单位有效期投票选择多个主节点同时构建全局联盟区块,按照时间顺序核实每个主节点构建的全局联盟区块,入账节点集将最先核实通过的全局联盟区块广播至所有联盟的代理,同时删除其他主节点构建的全局联盟区块。通过每个单位有效期投票多个主节点同时构建区块,来降低恶意节点作为主节点带来的延迟增加的问题。

每个入账节点基于时间戳判断最先共识通过的全局联盟区块,并将此全局联盟区块广播给z个联盟的代理,n/4<z<3n/4;由于每个节点接收到多次全局联盟区块,故可保证节点接收到正确的全局联盟区块。

综上所述,本发明提出了一种区块链结构化存储控制方法,通过构建多层次区块链结构实现了区块容量可扩展,并减轻了身份认证过程导致的延迟增加问题,保证了每次身份认证在整个区块链系统中的唯一性。

显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。

应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1