一种区块链系统的数据存储方法、节点和区块链系统与流程

文档序号:17157937发布日期:2019-03-20 00:14阅读:285来源:国知局
一种区块链系统的数据存储方法、节点和区块链系统与流程

本发明涉及数据处理技术领域,特别涉及一种区块链系统的数据存储方法、节点和区块链系统。



背景技术:

区块链作为一种新型的互联网数据库技术,具有去中心化、公开透明的特点,在金融服务、供应链管理、文化娱乐、智能制造、社会公益和教育就业等领域具有广泛的应用价值。基于共识机制和密码技术,在区块链网络上的交易是无法被篡改和否认的,其中,共识机制用于确保交易信息/区块信息在整个区块链网络中达成一致,而密码技术用于保障交易信息/区块信息的安全可靠及隐私保护。

然而,随着量子计算机的出现,通过量子计算机可以在很短的时间内破解秘钥,作为区块链底层安全支撑技术之一的传统公钥密码的安全性将受到严峻的挑战,将对已有区块链系统的安全性造成极大的威胁。

为了使区块链系统能够抗量子攻击,目前常用的方式为使用后量子的签名算法替换当前区块链系统中的签名算法。

针对目前实现区块链系统抗量子攻击的方法,后量子的签名算法的公钥和签名的长度远大于传统数字签名算法的公钥和签名长度,在区块链系统中实现这些签名将使交易数据的数据量显著增加,进而导致区块链系统的吞吐量下降。



技术实现要素:

本发明实施例提供了一种区块链系统的数据存储方法、节点和区块链系统,能够使区块链系统抗量子攻击的同时避免区块链系统的吞吐量下降。

第一方面,本发明实施例提供了一种区块链系统的数据存储方法,应用于区块链系统中的任意一个第一节点,包括:

分别获取所述第一节点与所述区块链系统中除所述第一节点之外的每一个第二节点之间的共享密钥;

获取由所述第一节点所发起交易的交易信息;

通过各个所述共享密钥和预先设定的带密钥的哈希算法对所述交易信息进行处理,获得与所述交易信息相对应的哈希标签;

将所述交易信息和所述哈希标签广播给各个所述第二节点;

根据每一个所述第二节点广播的验证消息从所述区块链系统包括的节点中确定诚实节点,如果所述诚实节点确定所述交易为真实交易,由所述诚实节点将所述交易信息存储在针对主链新生成的区块中,其中,所述验证消息包括有所述第二节点根据其与所述第一节点之间的所述共享密钥以及接收到的所述交易信息和所述哈希标签对所述交易的真实性进行验证的结果。

可选地,所述分别获取所述第一节点与所述区块链系统中除所述第一节点之外的每一个第二节点之间的共享密钥,包括:

针对所述区块链系统中除所述第一节点之外的每一个所述第二节点,均执行如下处理:

接收所述第二节点利用所述第一节点的公钥对第一密钥进行封装而获得的第一封装值,其中,所述第一密钥由所述第二节点针对所述第一节点随机生成;

通过所述第一节点的私钥对所述第一封装值进行解密,获得所述第一密钥;

随机生成对应于所述第二节点的第二密钥;

通过预先约定的算法对所述第一密钥和所述第二密钥进行运算,获得所述第一节点与所述第二节点之间的共享密钥;

通过所述第二节点的公钥对所述第二密钥进行封装获得第二封装值,并将所述第二封装值发送给所述第二节点,使得所述第二节点可以利用其私钥对所述第二封装值进行解密获得所述第二密钥,并利用所述预先约定的算法对所述第一密钥和所述第二密钥进行运算,以获得所述第一节点与所述第二节点之间的所述共享密钥。

可选地,所述分别获取所述第一节点与所述区块链系统中除所述第一节点之外的每一个第二节点之间的共享密钥,包括:

针对所述区块链系统中除所述第一节点之外的每一个所述第二节点,均执行如下处理:

接收所述第二节点利用所述第一节点的公钥对第三密钥进行封装而获得的第三封装值,其中,所述第三密钥由所述第二节点针对所述第一节点随机生成,并将所述第三密钥作为所述第二节点与所述第一节点之间的共享密钥;

通过所述第一节点的私钥对所述第三封装值进行解密,获得所述第三密钥;

将所述第三密钥作为所述第一节点与所述第二节点之间的共享密钥。

可选地,通过各个所述共享密钥和预先设定的带密钥的哈希算法对所述交易信息进行处理,获得与所述交易信息相对应的哈希标签,包括:

将预设的秘密值作为预先设定的带密钥的哈希算法的密钥,通过所述带秘钥的哈希算法对所述交易信息进行运算,获得第一哈希标签;

针对每一个所述第二节点,将该第二节点与所述第一节点之间的所述共享密钥作为所述带密钥的哈希算法的密钥,通过所述带密钥的哈希算法对所述交易信息和所述第一哈希标签进行运算,获得对应于该第二节点的第二哈希标签;

根据所述区块链系统中各个所述第二节点的编号顺序,对所述第一哈希标签以及各个所述第二节点对应的所述第二哈希标签进行顺序拼接,获得所述哈希标签。

可选地,

针对每一个所述第二节点,该第二节点广播的所述验证消息进一步包括有该第二节点根据在预设时间段内接收到的所有交易信息对相应的交易进行真实性验证的结果。

第二方面,本发明实施例还提供了一种区块链系统的节点,包括:共享密钥获取单元、交易信息获取单元、哈希运算单元、信息广播单元和数据存储单元;

所述共享密钥获取单元,用于分别获取其所属的第一节点与所述区块链系统中除所述第一节点之外的每一个第二节点之间的共享密钥;

所述交易信息获取单元,用于获取由所述第一节点所发起交易的交易信息;

所述哈希运算单元,用于通过所述共享密钥获取单元获取到的各个所述共享密钥和预先设定的带密钥的哈希算法对所述交易信息获取单元获取到的所述交易信息进行处理,获得与所述交易信息相对应的哈希标签;

所述信息广播单元,用于将所述交易信息和所述哈希运算单元获取到的所述哈希标签广播给各个所述第二节点;

所述数据存储单元,用于根据每一个所述第二节点广播的验证消息从所述区块链系统包括的节点中确定诚实节点,如果所述诚实节点确定所述交易为真实交易,由所述诚实节点将所述交易信息存储在针对主链新生成的区块中,其中,所述验证消息包括有所述第二节点根据其与所述第一节点之间的所述共享密钥以及所述信息广播单元广播的所述交易信息和所述哈希标签对所述交易的真实性进行验证的结果。

可选地,

所述共享密钥获取单元,用于针对每一个所述第二节点均执行如下a1至a5的处理:

a1:接收所述第二节点利用所述第一节点的公钥对第一密钥进行封装而获得的第一封装值,其中,所述第一密钥由所述第二节点针对所述第一节点随机生成;

a2:通过所述第一节点的私钥对所述第一封装值进行解密,获得所述第一密钥;

a3:随机生成对应于所述第二节点的第二密钥;

a4:通过预先约定的算法对所述第一密钥和所述第二密钥进行运算,获得所述第一节点与所述第二节点之间的共享密钥;

a5:通过所述第二节点的公钥对所述第二密钥进行封装获得第二封装值,并将所述第二封装值发送给所述第二节点,使得所述第二节点可以利用其私钥对所述第二封装值进行解密获得所述第二密钥,并利用所述预先约定的算法对所述第一密钥和所述第二密钥进行运算,以获得所述第一节点与所述第二节点之间的所述共享密钥。

可选地,

所述共享密钥获取单元,用于针对每一个所述第二节点均执行如下b1至b3的处理:

b1:接收所述第二节点利用所述第一节点的公钥对第三密钥进行封装而获得的第三封装值,其中,所述第三密钥由所述第二节点针对所述第一节点随机生成,并将所述第三密钥作为所述第二节点与所述第一节点之间的共享密钥;

b2:通过所述第一节点的私钥对所述第三封装值进行解密,获得所述第三密钥;

b3:将所述第三密钥作为所述第一节点与所述第二节点之间的共享密钥。

可选地,

所述哈希运算单元包括:第一哈希运算子单元、第二哈希运算子单元和哈希标签拼接子单元;

所述第一哈希运算子单元,用于将预设的秘密值作为预先设定的带密钥的哈希算法的密钥,通过所述带秘钥的哈希算法对所述交易信息进行运算,获得第一哈希标签;

所述第二哈希运算子单元,用于针对每一个所述第二节点,将该第二节点与所述第一节点之间的所述共享密钥作为所述带密钥的哈希算法的密钥,通过所述带密钥的哈希算法对所述交易信息和所述第一哈希运算子单元获取到的所述第一哈希标签进行运算,获得对应于该第二节点的第二哈希标签;

所述哈希标签拼接子单元,用于根据所述区块链系统中各个所述第二节点的编号顺序,对所述第一哈希运算子单元获取到的所述第一哈希标签以及所述第二哈希运算子单元获取到的且对应于各个所述第二节点的所述第二哈希标签进行顺序拼接,获得所述哈希标签。

第三方面,本发明实施例还提供了一种区块链系统,包括:至少两个第二方面提供的任意一种区块链系统的节点;

每一个所述节点,用于接收其他节点广播的所述交易信息和所述哈希标签,并针对接收到的每一组所述交易信息和所述哈希标签,通过与广播该组所述交易信息和所述哈希标签的节点之间的所述共享密钥和所述带密钥的哈希算法对所述交易信息进行处理,获得与所述交易信息相对应的验证哈希标签,通过将所述验证哈希标签与接收到的所述哈希标签进行比对,验证该组所述交易信息和所述哈希标签所对应交易的真实性。

可选地,

每一个所述节点,进一步用于将预设时间段内接收到的所述交易信息以及针对相对应交易的真实性验证结果广播给其他所述节点,以通过各个所述节点之间的多轮广播达成对即将生成的新区块的共识,由所有诚实节点生成新的区块,将所述预设时间段内所有真实交易对应的所述交易信息存储到主链中。

本发明实施例提供的区块链系统的数据存储方法、节点和区块链系统,针对区块链系统中的任意一个第一节点,预先分别获取该第一节点与区块链系统中每一个第二节点之间的共享密钥,当该第一节点发起交易后获取与该交易相关的交易信息,之后通过各个共享密钥和预先设定的带密钥的哈希算法对上述交易信息进行处理,获得与交易信息相对应的哈希标签,进而将交易信息和哈希标签广播给各个第二节点,第二节点根据接收到的交易信息和哈希标签可以对该交易的真实性进行验证,并将验证结果携带在验证消息中进行广播,进而可以根据各个第二节点广播的验证消息从区块链系统包括的节点中确定诚实节点,在诚实节点确定该交易为真实交易之后由诚实节点将该交易的交易信息存储到针对主链新生成的区块中。由此可见,在区块链系统中所有节点之间两两建立共享密钥,进而使用带密钥的哈希算法生成交易的哈希标签,以确保不可篡改性和不可抵赖性,同时基于每个节点的验证消息通过多轮广播达成共识,使得区块链系统能够抗量子攻击,由于通过共享密钥和带密钥的哈希算法代替公钥和签名长度较大的后量子签名算法,从而能够使区块链系统抗量子攻击的同时避免区块链系统的吞吐量下降。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一个实施例提供的一种区块链系统的数据存储方法的流程图;

图2是本发明一个实施例提供的一种共享密钥生成方法的流程图;

图3是本发明一个实施例提供的另一种共享密钥生成方法的流程图;

图4是本发明一个实施例提供的一种哈希标签生成方法的流程图;

图5是本发明一个实施例提供的一种区块链系统的节点所在设备的示意图;

图6是本发明一个实施例提供的一种区块链系统的节点的示意图;

图7是本发明一个实施例提供的另一种区块链系统的节点的示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本发明实施例提供了一种区块链系统的数据存储方法,应用于区块链系统中的任意一个第一节点,该方法可以包括以下步骤:

步骤101:分别获取第一节点与区块链系统中除第一节点之外的每一个第二节点之间的共享密钥;

步骤102:获取由第一节点所发起交易的交易信息;

步骤103:通过各个共享密钥和预先设定的带密钥的哈希算法对交易信息进行处理,获得与交易信息相对应的哈希标签;

步骤104:将交易信息和哈希标签广播给各个第二节点;

步骤105:根据每一个第二节点广播的验证消息从区块链系统包括的节点中确定诚实节点,如果诚实节点确定交易为真实交易,由诚实节点将交易信息存储在针对主链新生成的区块中,其中,验证消息包括有第二节点根据其与第一节点之间的共享密钥以及接收到的交易信息和哈希标签对交易的真实性进行验证的结果。

本发明实施例提供的区块链系统的数据存储方法,针对区块链系统中的任意一个第一节点,预先分别获取该第一节点与区块链系统中每一个第二节点之间的共享密钥,当该第一节点发起交易后获取与该交易相关的交易信息,之后通过各个共享密钥和预先设定的带密钥的哈希算法对上述交易信息进行处理,获得与交易信息相对应的哈希标签,进而将交易信息和哈希标签广播给各个第二节点,第二节点根据接收到的交易信息和哈希标签可以对该交易的真实性进行验证,并将验证结果携带在验证消息中进行广播,进而可以根据各个第二节点广播的验证消息从区块链系统包括的节点中确定诚实节点,在诚实节点确定该交易为真实交易之后由诚实节点将该交易的交易信息存储到针对主链新生成的区块中。由此可见,在区块链系统中所有节点之间两两建立共享密钥,进而使用带密钥的哈希算法生成交易的哈希标签,以确保不可篡改性和不可抵赖性,同时基于每个节点的验证消息通过多轮广播达成共识,使得区块链系统能够抗量子攻击,由于通过共享密钥和带密钥的哈希算法代替公钥和签名长度较大的后量子签名算法,从而能够使区块链系统抗量子攻击的同时避免区块链系统的吞吐量下降。

可选地,在图1所示数据存储方法的基础上,步骤101分别获得第一节点与每一个第二节点之间的共享密钥,根据第一节点与第二节点之间交互的次数的不同,共享密钥的建立可以具有如下两种方式:

方式一:第一节点与第二节点交互两次,由第一节点和第二节点共同生成共享密钥;

方式二:第一节点与第二节点交互一次,由第二节点生成共享密钥。

下面针对上述两种建立第一节点与第二节点之间共享密钥的方式分别进行说明:

针对方式一,如图2所示,对于区块链系统中除第一节点之外的每一个第二节点,均执行如下处理:

步骤201:接收第二节点利用第一节点的公钥对第一密钥进行封装而获得的第一封装值,其中,第一密钥由第二节点针对第一节点随机生成;

步骤202:通过第一节点的私钥对第一封装值进行解密,获得第一密钥;

步骤203:随机生成对应于第二节点的第二密钥;

步骤204:通过预先约定的算法对第一密钥和第二密钥进行运算,获得第一节点与第二节点之间的共享密钥;

步骤205:通过第二节点的公钥对第二密钥进行封装获得第二封装值,并将第二封装值发送给第二节点,使得第二节点可以利用其私钥对第二封装值进行解密而获得第二密钥,进而利用预先约定的算法对第一密钥和第二密钥进行运算,获得第一节点与第二节点之间的共享密钥。

本实施例提供的共享密钥生成方法,两个节点各自随机生成针对对方的密钥,之后用对方的公钥对所生成的密钥进行封装获得封装值后发送给对方,每个节点在接收到对方所发送的封装值后,利用其自身的私钥对接收到的封装值进行解密,获得对方所生成的密钥,之后每个节点通过预先约定的算法对其自身生成的密钥以及由对方生成的密钥进行运算,将运算结果作为彼此之间的共享密钥。

需要说明的是,共享密钥的生成是在节点刚加入区块链系统时完成的,即在第一节点刚加入区块链系统之后,第一节点需要分别生成其与区块链系统中原有的各个第二节点之间的共享密钥。

例如,每个节点加入区块链系统后得到一个密钥封装方案的公私钥对(pk,sk),假定现有区块链系统有n个节点,分别为节点1、节点2、…、节点n。第n+1个节点进入区块链系统后得到密钥封装方案的公私钥对(pkn+1,skn+1),节点i(i=1,2,…,n)随机产生一个密钥k(i,n+1)作为相对于第n+1个节点的密钥,节点i使用第n+1个节点的公钥pkn+1对密钥k(i,n+1)进行封装,并将封装值发送给节点n+1。节点n+1用自己的私钥skn+1解密节点i发送的封装值获得密钥k(i,n+1)。节点n+1随机的产生相对于节点i的密钥k(n+1,i),并用第i个节点的公钥pki对密钥k(n+1,i)进行封装,并将封装值发送给节点i,节点i利用其私钥ski解密节点n+1发送的封装值获得密钥k(n+1,i)。节点i计算其与节点n+1之间的共享密钥节点n+1计算其与节点i之间的共享密钥其中k(i,n+1)=k(n+1,i)。

由于两个节点预先约定有相同的算法,两个节点利用相同的算法分别对彼此生成的密钥进行运算,因此可以获得相同的运算结果,从而将运算结果作为彼此之间的共享密钥。由于两个节点均通过对方的公钥对其自身所生成的密钥进行封装,并将封装生成的封装值发送给对方,保证了共享密钥的安全性。

针对方式二,如图3所示,对于区块链系统中除第一节点之外的每一个第二节点,均执行如下处理:

步骤301:节点第二节点利用第一节点的公钥对第三密钥进行封装而获得的第二封装值,其中,第三密钥由第二节点针对第一节点随机生成,并将第三密钥作为第二节点与第一节点之间的共享密钥;

步骤302:通过第一节点的私钥对第三封装值进行解密,获得第三密钥;

步骤303:将第三密钥作为第一节点与第二节点之间的共享密钥。

本实施例通过的共享密钥生成方法,第一节点在加入区块链系统之后获取密钥封装方案的公私钥对,并对其所获取到的公钥进行广播。第二节点针对第一节点生成第三密钥,并通过第一节点的公钥对所生成的第三密钥进行封装,之后将封装获得的第三封装值发送给第一节点。第一节点在接收到第三封装值后,通过其自身的私钥对第三封装值进行解密,获得第三密钥,并将第三密钥作为其与第二节点之间的共享密钥。相应地,第二节点也将其所生成的第三密钥作为其与第一节点之间的共享密钥。

例如,每个节点加入区块链系统后得到一个密钥封装方案的公私钥对(pk,sk),假定现有区块链系统有n个节点,分别为节点1、节点2、…、节点n。第n+1个节点进入区块链系统后得到密钥封装方案的公私钥对(pkn+1,skn+1),节点n+1将其公钥pkn+1广播给区块链系统中的其他节点。节点i(i=1,2,…,n)随机生成一个密钥k(i,n+1)作为与节点n+1之间的共享密钥,之后节点i使用节点n+1的公钥pkn+1采用密钥封装方案对所生成的密钥k(i,n+1)进行封装,并将获得的封装密文发送给节点n+1。节点n+1利用自身的私钥skn+1对来自节点i的封装密文进行解封装获得密钥k(i,n+1),并将密钥k(i,n+1)作为其与节点i之间的共享密钥。

在新的节点加入区块链系统后,区块链系统中原有的节点分别生成针对该新加入节点的共享密钥,并分别通过新加入节点的公钥对所生成的共享密钥进行封装后发送给新加入节点,新加入节点通过其私钥对所接收到的各个封装密文进行解密后,获得其与区块链系统原有的各个节点之间的共享密钥。由于在共享密钥创建过程中新加入节点仅需要接收来自原有节点的封装密文,无需向原有节点发送消息,并且仅需通过其私钥进行加密便可以获取共享密钥,从而可以精简共享密钥建立的流程,提升共享密钥建立的效率。

可选地,在上述方式一和方式二所提供建立共享密钥方法的基础上,可以采用后量子密钥封装方案建立两个节点之间的共享密钥,具体过程可以包括系统参数选择、密钥生成、密钥封装和解封装4个阶段,下面对上述4个阶段分别进行说明。

阶段1:系统参数选择阶段

系统参数选择由系统本身设定,即在设计系统的时候设置好参数,如比特币网络中采用椭圆曲线上的数字签名算法中的有限域大小需要在系统初始化时设置,系统参数的选择一般依据系统的安全需求进行设置。

f(x)=xn+1是一个次数为n(n=2k,k属于正整数)的分圆多项式,设q为奇素数,满足f(x)在有限域zq上只有n个线性因式。设r=z[x]/(f(x)),rq=zq[x]/(f(x)),以下步骤中将f(x)简写为f。

q为奇素数,m是正整数,决定本原根的阶数、分圆域和分圆环的次数。χ表示rq上的离散高斯分布,x←rχ表示从χ中随机均匀抽取一个向量x。

选取三个多项式向量这里分别是一个m维的多项式列向量,如即每个分量为一个系数在zq上的n-1次多项式ai(x)∈rq,i=1,2,...,m,将简写为将ai(x)简写为ai。定义rq上的两种乘法运算:

1)

2)

普通的单向哈希函数h:{0,1}*→rq,即将一个任意长度的比特串映射到rq上的一个元素对应的n维比特向量。

成对独立的哈希函数h:{0,1}*→{0,1}l,这里l是共享密钥的比特长度,可以根据系统安全需求进行设置。

阶段2:密钥生成

密钥生成由每个加入区块链系统的节点各自执行,生成自己的公私钥对。密钥生成是在系统参数的基础上,节点自身选取并生成自己的公私钥对。

公钥:pk=u(x)∈rq;

私钥:

私钥s是一个m×m的矩阵,矩阵元素属于r,其尺寸为:其中ef(f,2)=max{||gmodf||/g|g∈z[x]\{0}}且deg(g)≤2(deg(f)-1),其中a∈r(m-σ)×σ,b∈r(m-σ)×(m-σ)d=[0|-2iσ|2(zi,j)]∈rσ×(m-σ),其中,iσ是阶为σ的单位矩阵,im-r-σ为阶为m-r-σ的单位矩阵。

阶段3:密钥封装

密钥封装由网络中已有的节点分别独立执行,即每个已存在的节点计算其与新加入节点的共享密钥。在密钥封装过程中,需要使用新加入的节点在密钥生成过程得到公钥u(x)。

(1)随机选择这里选择s(x)是为生成每个已存在的节点与新加入节点的共享密钥,抽样误差向量执行以下步骤:

计算v(x)=u(x)s(x)+e1(x)∈rq,信号向量<v(x)>2,即二进制信号,模2舍入结果为[v(x)]2;

定义模2舍入函数表达式为分成两部分其中,k是要传输的会话密钥,它的大小是根据设计需求随机选择的,用l比特标识它的大小,y表示为剩余n-l比特;

计算h(y)和h(y),这是用来证实该方案(标准模型下ind-cca安全的基于格的密钥封装方法)的ind-cca安全完整性;

计算多项式向量为系统公开参数,且分别为一个m维的多项式向量,则得到f为一个2m维的多项式向量。

(2)输出封装密文

c=(c0=h(y),c1=<v(x)>2∈(r2)n,c2=s(x)-f+e2(x)∈(rq)2m,c3=mach(y)(c1,c2)),其中c0=h(y)通过对y进行哈希h运算得到,c1=<v(x)>2∈(r2)n即对v(x)的系统进行模2运算得到,c2=s(x)-f+e2(x)∈(rq)2m中的运算按照多项式乘法定义进行计算,的两部分从离散高斯分布中随机抽取,c3=mach(y)(c1,c2)表示(c1,c2)的消息认证码,即采用带密钥的哈希算法对(c1,c2)进行运算,这里的密钥为h(y)。

阶段4:解封装

解封装由新加入区块链网络的节点执行,其需要执行多次解封装算法以实现与网络中的所有节点建立共享密钥。

(1)计算

(2)预映射采样

选择多项式向量其中,每个分量多项式e2,i(x)是系数选择{-1,0,1}的n-1次多项式;

采用预映射采样算法,对方程解出小尺寸的解特别的,首先用线性代数的方法解出这个方程的任意解w(x),令w(x)=(w1(x),w2(x),...,wm(x))∈rm,然后用密钥s抽样分布上的短向量e1,i(x)←χ(1≤i≤m),它满足后用密钥这里调用离散高斯分布采用算法。

(3)计算其中c1是封装密文中的,分别是步骤(2)中的随机选取的多项式向量和方程式的解和调和函数rec(v1(x),<v(x)>2)=k||y,其中<v(x)>2是封装密文中的c1。

(4)重新计算h(y)和mach(y)(c1,c2)并分别与封装密文中的c0,c3进行比较以验证c0和c3是否正确。如果都是正确的,则输出k。

可选地,在图2或者图3所示共享密钥生成方法的基础上,步骤103获得哈希标签的过程具体可以通过如下方法实现,如图4所示,该方法可以包括以下步骤:

步骤401:将预设的秘密值作为预先设定的带密钥的哈希算法的密钥,通过该带秘钥的哈希算法对交易信息进行运算,获得第一哈希标签;

步骤402:针对每一个第二节点,将该第二节点与第一节点之间的共享密钥作为带密钥的哈希算法的密钥,通过该带秘钥的哈希算法对交易信息和第一哈希标签进行运算,获得对应于该第二节点的第二哈希标签;

步骤403:根据区块链系统中各个第二节点的编号顺序,对第一哈希标签以及各个第二节点对应的第二哈希标签进行顺序拼接,获得与交易信息对应的哈希标签。

首先,第一节点将预设的秘密值作为带秘钥的哈希算法的密钥,通过该带秘钥的哈希算法对交易信息进行运算,获得第一哈希标签,其中,预设的秘密值可以是第一节点随机生成的值,也可以是第一节点的私钥。通过带秘钥的哈希算法对交易信息进行运算而获得第一哈希标签,由于第三方无法知道第一节点所选用的秘密值,可以避免第三方伪造交易信息和哈希标签,从而可以提高区块链系统的安全性。

其次,在生成针对不同第二节点的第二哈希标签后,根据各个第二节点在区块链系统的编号顺序,将各个第二节点对应的第二哈希标签进行顺序拼接,之后将第一哈希标签也拼接上去,获得对应于交易信息的哈希标签。这样,第一节点将所有第二节点对应的第二哈希标签进行顺序拼接,第二节点在对相应交易的真实性进行验证时可以根据自身的编号从哈希标签中查找相应的第二哈希标签进行比对,从而第一节点无需向不用节点广播不同的哈希标签,降低区块链系统中节点的工作压力。

例如,当前区块链系统中有n+1个节点,节点a(编号为n+1)向节点b(编号为i,(i=1,2,…,n))发起一笔交易m={a(pkn+1)支付3个密码货币给b(pki)},交易中包含交易发起者和交易接受者的公钥作为身份标识。节点a采用带秘钥的哈希算法计算m的第一哈希标签这里所使用的密钥kn+1是节点a选定的秘密值。之后,节点a使用与其他节点之间的共享密钥k(i,n+1),通过带秘钥的哈希算法对m与第一哈希标签运算,获得对应于其他节点的第二哈希标签之后节点a将交易信息m、第一哈希标签以及各个第二哈希标签拼接在一起,获得哈希标签之后将获得的上述哈希标签广播到网络中,在拼接的时候所有的第二哈希标签按照其余n个节点的编号顺序进行拼接。

当一个第二节点接收到第一节点广播的交易信息和哈希标签后,该第二节点将其与第一节点之间的共享密钥作为带密钥的哈希算法的密钥,通过带秘钥的哈希算法对接收到的交易信息和第一哈希标签进行运算,获得验证哈希标签,之后根据其编号从接收到的哈希标签中获得相对应的第二哈希标签,将获取到的第二哈希标签与运算获得的验证哈希标签进行比如,如果两者相同则说明该交易为真实交易。

例如,接续上述例子,节点i收到节点a广播的交易信息和哈希标签后,将其与节点a的共享密钥k(i,n+1)作为带秘钥的哈希算法的密钥,利用带秘钥的哈希算法对接收到的交易信息m和第一哈希标签重新运算,获得验证哈希标签如果该验证哈希标签与哈希标签中与该节点i相对应的第二哈希标签相同,则该节点i对该交易信息对应的交易验证通过。

需要说明的是,本发明实施例中所述的带秘钥的哈希算法可以为基于sha-3的消息认证码算法。

可选地,在上述各个实施例所提供数据存储方法的基础上,第二节点对验证消息进行广播时,具体可以按照如下方式进行:

第二节点根据预设时间段内接收到的所有交易信息和哈希标签获得相应交易的真实性验证结果后,将这些真实性验证结果作为一个私有值,通过广播的形式对该私有值进行广播。另外,第二节点在广播私有值时,还可以将上述预设时间段内所接收到的所有交易信息一同进行广播。

例如,在预设时间段内发生了50笔交易,一个节点在接收到对应于这50笔交易的交易信息和哈希标签后,分别给出每一个交易的真实性验证结果,其中如果验证通过将真实性验证结果标记为1,如果验证不通过将真实性验证结果标记为0,从而可以得到一个50比特的向量vi={0,1}50,进而将该向量vi={0,1}50作为私有值进行广播。

如图5、图6所示,本发明实施例提供了一种区块链系统中的节点。节点实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图5所示,为本发明实施例提供的区块链系统的节点所在设备的一种硬件结构图,除了图5所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中节点所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等。以软件实现为例,如图6所示,作为一个逻辑意义上的节点,是通过其所在设备的cpu将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。本实施例提供的区块链系统的节点,包括:共享密钥获取单元601、交易信息获取单元602、哈希运算单元603、信息广播单元604和数据存储单元605;

共享密钥获取单元601,用于分别获取其所属的第一节点与区块链系统中除第一节点之外的每一个第二节点之间的共享密钥;

交易信息获取单元602,用于获取由第一节点所发起交易的交易信息;

哈希运算单元603,用于通过共享密钥获取单元601获取到的各个共享密钥和预先设定的带密钥的哈希算法对交易信息获取单元602获取到的交易信息进行处理,获得与交易信息相对应的哈希标签;

信息广播单元604,用于将交易信息和哈希运算单元603获取到的哈希标签广播给各个第二节点;

数据存储单元605,用于根据每一个第二节点广播的验证消息从区块链系统包括的节点中确定诚实节点,如果诚实节点确定交易为真实交易,由诚实节点将交易信息存储在针对主链新生成的区块中,其中,验证消息包括有第二节点根据其与第一节点之间的共享密钥以及信息广播单元604广播的交易信息和哈希标签对交易的真实性进行验证的结果。

在本发明实施例中,共享密钥获取单元601可用于执行上述方法实施例中的步骤101、步骤201至步骤205以及步骤301至步骤303,交易信息获取单元602可用于执行上述步骤102,哈希运算单元603可用于执行上述方法实施例中的步骤103以及步骤401至步骤403,信息广播单元604可用于执行上述方法实施例中的步骤104,数据存储单元605可用于执行上述方法实施例中的步骤105。

可选地,在图6所示区块链系统的节点的基础上,共享密钥获取单元601用于针对每一个第二节点均执行如下a1至a5的处理:

a1:接收第二节点利用第一节点的公钥对第一密钥进行封装而获得的第一封装值,其中,第一密钥由第二节点针对第一节点随机生成;

a2:通过第一节点的私钥对第一封装值进行解密,获得第一密钥;

a3:随机生成对应于第二节点的第二密钥;

a4:通过预先约定的算法对第一密钥和第二密钥进行运算,获得第一节点与第二节点之间的共享密钥;

a5:通过第二节点的公钥对第二密钥进行封装获得第二封装值,并将第二封装值发送给第二节点,使得第二节点可以利用其私钥对第二封装值进行解密获得第二密钥,并利用预先约定的算法对第一密钥和第二密钥进行运算,以获得第一节点与第二节点之间的共享密钥。

可选地,在图6所示区块链系统的节点的基础上,共享密钥获取单元601用于针对每一个第二节点均执行如下b1至b3的处理:

b1:接收第二节点利用第一节点的公钥对第三密钥进行封装而获得的第三封装值,其中,第三密钥由第二节点针对第一节点随机生成,并将第三密钥作为第二节点与第一节点之间的共享密钥;

b2:通过第一节点的私钥对第三封装值进行解密,获得第三密钥;

b3:将第三密钥作为第一节点与第二节点之间的共享密钥。

可选地,在图6所示区块链系统的节点的基础上,如图7所示,哈希运算单元603可以包括:第一哈希运算子单元6031、第二哈希运算子单元6032和哈希标签拼接子单元6033;

第一哈希运算子单元6031,用于将预设的秘密值作为预先设定的带密钥的哈希算法的密钥,通过带秘钥的哈希算法对交易信息进行运算,获得第一哈希标签;

第二哈希运算子单元6032,用于针对每一个第二节点,将该第二节点与第一节点之间的共享密钥作为带密钥的哈希算法的密钥,通过带密钥的哈希算法对交易信息和第一哈希运算子单元6031获取到的第一哈希标签进行运算,获得对应于该第二节点的第二哈希标签;

哈希标签拼接子单元6033,用于根据区块链系统中各个第二节点的编号顺序,对第一哈希运算子单元6031获取到的第一哈希标签以及第二哈希运算子单元6032获取到的且对应于各个第二节点的第二哈希标签进行顺序拼接,获得哈希标签。

在本发明实施例中,第一哈希运算子单元6031可用于执行上述方法实施例中的步骤401,第二哈希运算子单元6032可用于执行上述方法实施例中的步骤402,哈希标签拼接子单元6033可用于执行上述方法实施例中的步骤403。

需要说明的是,上述节点内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

本发明一个实施例提供了一种区块链系统,包括:至少两个上述任意一个实施例提供的区块链系统的节点;

每一个节点,用于接收其他节点广播的交易信息和哈希标签,并针对接收到的每一组交易信息和哈希标签,通过与广播该组交易信息和哈希标签的节点之间的共享密钥和带密钥的哈希算法对交易信息进行处理,获得与交易信息相对应的验证哈希标签,通过将验证哈希标签与接收到的哈希标签进行比对,验证该组交易信息和哈希标签所对应交易的真实性。

可选地,在上述实施例所提供区块链系统的基础上,每一个节点进一步用于将预设时间段内接收到的交易信息以及针对相对应交易的真实性验证结果广播给其他节点,以通过各个节点之间的多轮广播达成对即将生成的新区块的共识,由所有诚实节点生成新的区块,将预设时间段内所有真实交易对应的交易信息存储到主链中。

具体地,为了生成一个区块,区块链系统中所有节点将自己接收到的交易集合及交易对应的私有值(同前述实施例中附加私有值的哈希标签)广播给区块链系统中的其他节点,在消息中加入自己的公钥。每个节点在收到其他节点的信息后,类似地进行哈希标签验证,并整合接收到的交易集合和对应的私有值。经过不超过m+1轮(m<n/3不诚实节点数量)达成对即将生成的区块的共识。所有诚实节点生成新的区块,并将时间间隔内的所有交易信息记录于主链中,这里是由交易发起者计算的。只将交易信息和交易发起者计算的哈希标签记录于区块中,这样能够减少区块大小,缓解系统的整体存储负担。用于验证的哈希标签只在验证过程中进行广播和临时存储。在比特币网络中,节点需要争夺记账权才能获得产生新区块的权利,并且由获取记账权的节点确定区块的具体内容。不同于比特币网络,在我们提出的联盟链中,区块的内容由所有诚实节点达成共识并进行维护,使其成为最长合法链。

本发明实施例还提供了一种可读介质,包括执行指令,当存储控制器的处理器执行所述执行指令时,所述存储控制器执行上述任一实施例提供的区块链系统的数据存储方法。

本发明实施例还提供了一种存储控制器,包括:处理器、存储器和总线;

所述存储器用于存储执行指令,所述处理器与所述存储器通过所述总线连接,当所述存储控制器运行时,所述处理器执行所述存储器存储的所述执行指令,以使所述存储控制器执行上述任一实施例提供的区块链系统的数据存储方法。

本发明各个实施例提供的区块链系统的数据存储方法、节点和区块链系统,至少具有如下有益效果:

1、在本发明实施例中,针对区块链系统中的任意一个第一节点,预先分别获取该第一节点与区块链系统中每一个第二节点之间的共享密钥,当该第一节点发起交易后获取与该交易相关的交易信息,之后通过各个共享密钥和预先设定的带密钥的哈希算法对上述交易信息进行处理,获得与交易信息相对应的哈希标签,进而将交易信息和哈希标签广播给各个第二节点,第二节点根据接收到的交易信息和哈希标签可以对该交易的真实性进行验证,并将验证结果携带在验证消息中进行广播,进而可以根据各个第二节点广播的验证消息从区块链系统包括的节点中确定诚实节点,在诚实节点确定该交易为真实交易之后由诚实节点将该交易的交易信息存储到针对主链新生成的区块中。由此可见,在区块链系统中所有节点之间两两建立共享密钥,进而使用带密钥的哈希算法生成交易的哈希标签,以确保不可篡改性和不可抵赖性,同时基于每个节点的验证消息通过多轮广播达成共识,使得区块链系统能够抗量子攻击,由于通过共享密钥和带密钥的哈希算法代替公钥和签名长度较大的后量子签名算法,从而能够使区块链系统抗量子攻击的同时避免区块链系统的吞吐量下降。

2、在本发明实施例中,由于两个节点预先约定有相同的算法,两个节点利用相同的算法分别对彼此生成的密钥进行运算,因此可以获得相同的运算结果,从而将运算结果作为彼此之间的共享密钥。由于两个节点均通过对方的公钥对其自身所生成的密钥进行封装,并将封装生成的封装值发送给对方,保证了共享密钥的安全性。

3、在本发明实施例中,在新的节点加入区块链系统后,区块链系统中原有的节点分别生成针对该新加入节点的共享密钥,并分别通过新加入节点的公钥对所生成的共享密钥进行封装后发送给新加入节点,新加入节点通过其私钥对所接收到的各个封装密文进行解密后,获得其与区块链系统原有的各个节点之间的共享密钥。由于在共享密钥创建过程中新加入节点仅需要接收来自原有节点的封装密文,无需向原有节点发送消息,并且仅需通过其私钥进行加密便可以获取共享密钥,从而可以精简共享密钥建立的流程,提升共享密钥建立的效率。

4、在本发明实施例中,只将交易信息和交易发起者计算的哈希标签记录于区块中,这样能够减少区块大小,缓解系统的整体存储负担。

需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质中。

最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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