发明内容
本发明要解决的技术问题是:联盟链数据保密性和安全性不够高的技术问题。提出了一种基于联盟链的分布式账本存取方法,能够提高联盟链上记账数据的保密性和安全性。
为解决上述技术问题,本发明所采取的技术方案为:一种基于联盟链的分布式账本存取方法,包括:记账数据存储:步骤A)联盟链节点P0将记账数据加密后拆分成n个子数据,n个联盟链节点决定参与记账数据的存取并分别被分配一个子数据;步骤B)联盟链节点P0产生公私秘钥对,将公钥使用n个联盟链节点中的任意一个节点的公钥加密后广播;步骤C)能够成功解密获得公钥的联盟链节点,使用解密获得的公钥加密被分配到的子数据,而后产生一对新的公私秘钥对,将公钥使用n个联盟链节点中的任意一个节点的公钥加密后广播;步骤D)能够成功解密获得公钥的联盟链节点执行步骤C),直到全部子数据完成加密;记账数据读取:步骤E)联盟链节点P0向n个联盟链节点发出记账数据解密请求,联盟链节点将保存的加密记账子数据在联盟链内广播;步骤F)联盟链节点均使用自身保存的私钥尝试解密广播的加密子数据,若能成功解密,则将解密后的子数据发送给联盟链节点P0,收集到全部子数据后拼接,联盟链节点P0再次解密后获得记账数据,完成记账数据的读取。将记账数据截断拆分成子数据,而后对子数据加密后,分别存储在不同的联盟链节点中,分散了数据,提高了记账数据的保密性,存储有子数据的联盟链节点并不保存对应的解密秘钥,且在解密过程中,联盟链节点不会接触到解密秘钥,且解密秘钥不需要传递,因而提高了记账数据的保密性,分散存储提高了记账数据的安全性。记账数据的解密需要在联盟链内网环境中才能完成,有效避免了记账数据泄露出联盟链之外的风险。
作为优选,联盟链节点P0将记账数据复制一份,重新执行步骤A)至步骤D),作为记账数据的备份存储。提高了记账数据的安全性,使其不易损毁丢失。
作为优选,步骤A)中,联盟链节点P0将记账数据拆分成n个子数据后,提取子数据的哈希值,为子数据建立标签,所述标签记载子数据的所有者标识、次序和哈希值;步骤F)中,联盟链节点判断能成功解密子数据的方法为,将解密后的子数据提取哈希值,将提取的哈希值与标签记载哈希值对比,若一致则判断成功解密,反之,则判定解密失败。通过验证哈希值能够判断解密后是否正确获得了原数据。
作为优选,步骤A)中,联盟链节点P0发布智能合约,所述智能合约记录记账数据的标识、参与标识数组和奖励,所述参与标识数组长度为n且具有初始空值,联盟链节点若决定参与记账数据的存取,则随机选取参与标识数组中的一个空值替换为自身的标识。通过智能合约能够方便的记录参与记账数据的存取的联盟链节点,提高记账数据存取效率。
作为优选,步骤A)中,联盟链节点P0将子数据随机排序,而后按照参与标识数组顺序中记录的联盟链节点,将dk发送给对应的联盟链节点。通过本优选方案能够使得取数据时不出现重复现象,保证数据一一分发给联盟链节点。
作为优选,步骤D)中,若联盟链节点能够成功解密获得公钥,但其已经将被分配的子数据加密,则传递解密得到的公钥,具体包括:将解密得到的公钥使用联盟链节点P0的公钥加密后广播,联盟链节点P0收到后,再次随机选取一个联盟链节点的公钥加密后广播,联盟链节点P0维护一个被选取过的联盟链节点的列表,当联盟链节点的列表包含了全部n个参与记账数据的联盟链节点时,判定全部子数据完成加密。本优选方案能够确保所有联盟链节点均能够收到一个加密秘钥,且能够快速判定全部联盟链节点读取的子数据均被加密。
作为优选,步骤D)中,若联盟链节点能够成功解密获得公钥,但其已经将被分配的子数据加密,则在联盟链内网中广播公开解密得到的公钥,产生被公开的公钥的联盟链节点收到广播后,重新生成公私秘钥对,并重新随机选取一个联盟链节点的公钥加密重新生成的公钥,每个联盟链节点均维护一个被选取过的联盟链节点的列表,当某个联盟链节点维护的被选取过的联盟链节点的列表包含除自身外的其他n-1个参与记账数据的联盟链节点时,判定全部子数据完成加密。本优选方案能够确保所有联盟链节点均能够收到一个加密公钥。
作为优选,步骤A)中,联盟链节点P0发布智能合约,所述智能合约记录记账数据的标识、两个参与标识数组和奖励,两个所述参与标识数组长度为n且具有初始空值,联盟链节点若决定参与记账数据的存取,则在两个参与标识数组中分别选取参与标识数组中的一个空值替换为自身的标识,联盟链节点P0按照两个标识数组顺序中记录的联盟链节点,两次将子数据随机排序后按参与标识数组发送给对应的联盟链节点。通过本优选方案能够形成备用存储,单一联盟链节点上存储的数据损坏时,记账数据仍然能够恢复。
本发明的实质性效果是:1)将记账数据分散存储,提高了记账数据的保密性和安全性;2)存储有子数据的联盟链节点并不保存对应的解密秘钥,且在解密过程中,联盟链节点不需要传递解密秘钥,因而提高了记账数据的保密性;3)记账数据的解密需要在联盟链内网环境中才能完成,有效避免了记账数据泄露出联盟链之外的风险。
具体实施方式
下面通过具体实施例,并结合附图,对本发明的具体实施方式作进一步具体说明。
实施例一:
一种基于联盟链的分布式账本存取方法,包括:
记账数据存储步骤:
预处理记账数据,包括步骤A)联盟链节点P0产生记账数据Dk0,联盟链节点P0将记账数据Dk0加密为记账数据Dk,解密秘钥为key0,k为记账数据标识,联盟链节点P0将记账数据Dk拆分成n份,提取子数据dkj,j∈[1,n]的哈希值,记为子数据dkj,j∈[1,n],j表示子数据的次序标识,n为拟参与记账数据Dk存取的联盟链节点数量,数据dkj关联有标识标签,标识标签记录有k、j和哈希值。记账数据预处理过程请参阅附图1。
联盟链节点P0将d
kj,j∈[1,n]公开在联盟链内网环境中,联盟链节点P0发布智能合约100,智能合约100记录记账数据标识k、标识数组101和奖励102,标识数组101长度为n且具有初始空值,联盟链节点P
j若决定参与记账数据D
k的存取,则随机选取标识数组101中的一个初始空值,将初始空值替换为自身的标识。n个联盟链节点P
j,j∈[1,n]决定参与记账数据Dk的存取,而后联盟链节点P0将d
kj随机排序,而后按照标识数组101顺序中记录的联盟链节点P
j,将d
kj发送给对应的联盟链节点P
j。联盟链节点P0记录联盟链节点P
j,j∈[1,n]的标识,n个联盟链节点分别读取记账数据D
k拆分后的一个子数据,记为
联盟链内网环境通常为较为安全的网络环境,可以采用专用网络或采用VPN的方式构建。联盟链内的记账数据,仅允许在联盟链内使用并需要保证其正确性。
步骤B)联盟链节点P0产生一个公私秘钥对
和
从联盟链节点P
j,j∈[1,n]中,随机选取一个联盟链节点P
e,将
使用联盟链节点P
e的公钥加密,记为
而后公开在联盟链内网中,将
与记账数据标识k关联后存储。联盟链节点P
e虽然知道联盟链节点P
e2接收了其发送的公钥,但联盟链节点P
e并不能确定联盟链节点P
e2存储了哪一个子数据,只有在全部联盟链节点均将其存储的子数据汇集时,联盟链节点P
e才能确保能够找到对应的子数据,使用其保存的私钥解密对应的子数据,使得只有全部参与记账数据D
k的联盟链节点P
j,j∈[1,n]同时进行解密步骤时,才能完成解密过程,使得意外的解密行为无法进行,确保了联盟链记账数据的安全性。
步骤C)联盟链节点P
j,j∈[1,n]均读取并尝试使用自己的私钥解密
其余联盟链节点不做操作,联盟链节点P
e使用
加密
获得加密后的记账子数据
将
存储在本地,而后联盟链节点P
e产生一个公私秘钥对
和
将
与记账数据标识k关联后存储,随机选取一个联盟链节点P
e2,将
使用联盟链节点P
e2的公钥加密,记为
而后公开在联盟链内网中。
步骤D)重复步骤C),直到全部联盟链节点Pj读取的子数据均被加密,联盟链节点Pi删除记账数据Dk,完成记账数据Dk的分布式存储。
在步骤D)中,随机选取一个联盟链节点P
e2时,可能会出现联盟链节点被重复选取或漏选的情况,本实施例提供了避免联盟链节点被漏选的技术方案,请参阅附图2,在步骤D)中,若联盟链节点P
e已经将子数据加密,但再次成功解密
获得
则传递
具体为:将
使用联盟链节点P
i的公钥加密后公开在联盟链内网中,联盟链节点P0收到
后,随机选取一个联盟链节点P
e2,将
使用联盟链节点P
e2的公钥加密,记为
而后公开在联盟链内网中,联盟链节点P0维护一个被选取联盟链节点的列表,当联盟链节点的列表包含了全部参与记账数据D
k存取的联盟链节点时,判定全部联盟链节点P
j读取的子数据均被加密。本优选方案能够确保所有联盟链节点P
j,j∈[1,n]均能够收到一个加密秘钥,且能够快速判定全部联盟链节点P
j读取的子数据均被加密。
记账数据存储读取流程示意请参阅附图3,本实施例中,共有3个联盟链节点参与账本数据的加密存储,即j取值1/2/3。联盟链节点P0将产生的账本数据拆分为子数据:d_203_1,d_203_2,d_203_3,其中203表示账本数据在联盟链中的唯一编号为203。三个子数据随机分配给三个联盟链节点P1、联盟链节点P2和联盟链节点P3。联盟链节点P1被分配子数据d_203_3,联盟链节点P2被分配子数据d_203_1,联盟链节点P3被分配子数据d_203_2。联盟链节点P0产生公私秘钥对,Key_P0_pub和Key_P0_priate,将Key_P0_pub使用联盟链节点P2的公钥加密后广播。
联盟链节点P2将收到Key_P0_pub,使用Key_P0_pub加密子数据d_203_1后,产生公私秘钥对,Key_P2_pub和Key_P2_priate,将Key_P2_pub使用随机选取的联盟链节点P1的公钥加密后广播。
联盟链节点P1将收到Key_P2_pub,使用Key_P2_pub加密子数据d_203_3后,产生公私秘钥对,Key_P1_pub和Key_P1_priate,将Key_P1_pub使用随机选取的联盟链节点P2的公钥加密后广播。
联盟链节点P2将收到Key_P1_pub,由于联盟链节点P2收到的子数据d_203_1已经被加密,因而联盟链节点P2将Key_P1_pub用联盟链节点P0的公钥加密后广播,联盟链节点P0收到后,再次随机选取一个联盟链节点P3的公钥加密后广播,并在已被选取的联盟链节点列表中添加联盟链节点P3的标识。
联盟链节点P3将收到Key_P1_pub,使用Key_P1_pub加密子数据d_203_2后,产生公私秘钥对,Key_P3_pub和Key_P3_priate,将Key_P3_pub使用随机选取的联盟链节点P2的公钥加密后广播。
联盟链节点P2将收到Key_P3_pub,由于联盟链节点P2收到的子数据d_203_1已经被加密,因而联盟链节点P2将Key_P3_pub用联盟链节点P0的公钥加密后广播,联盟链节点P0收到后,再次随机选取一个联盟链节点P1的公钥加密后广播,并在已被选取的联盟链节点列表中添加联盟链节点P1的标识。
联盟链节点P1也将退回Key_P3_pub,联盟链节点P0再次随机选取一个联盟链节点P2的公钥加密后广播,并在已被选取的联盟链节点列表中添加联盟链节点P1的标识。联盟链节点P2也将退回Key_P3_pub,联盟链节点P0将发现联盟链节点P1、联盟链节点P2和联盟链节点P3均已在被选取的联盟链节点列表中,因而判断全部子数据已完成加密。因而不再转发公钥Key_P3_pub,完成联盟链账本数据的存储。
记账数据读取:
步骤E)联盟链节点P0向联盟链节点P
j,j∈[1,n]发出记账数据D
k解密请求,联盟链节点P
j,j∈[1,n]将全部记账子数据
在联盟链内广播。
步骤F)联盟链节点P0以及联盟链节点P
j,j∈[1,n]均尝试使用各自存储的与k关联的私钥
解密加密后的记账子数据
将记账子数据
解密后的哈希值与对应的标识标签含有的哈希值比对,若一致则判定解密成功,反之,则判定解密失败,若解密成功则将解密后的记账子数据
发送给联盟链节点P0,联盟链节点P0将收到全部解密后的记账子数据
即记账子数据dk
j,j∈[1,n]根据标识标签排序后,获得记账数据D
k,将记账数据D
k使用解密秘钥key
0解密后获得记账数据D
k0。将记账数据D
k截断拆分成子数据,而后对子数据加密后,分别存储在不同的联盟链节点中,分散了数据,提高了记账数据D
k的保密性,存储有子数据的联盟链节点并不保存对应的解密秘钥,且在解密过程中,联盟链节点不会接触到解密秘钥,且解密秘钥不需要传递,因而提高了记账数据D
k的保密性,分散存储提高了记账数据D
k的安全性。记账数据D
k的解密需要在联盟链内网环境中才能完成,有效避免了记账数据D
k泄露出联盟链之外的风险。
本实施例的有益技术效果是:将记账数据Dk分散存储,提高了记账数据Dk的保密性和安全性;存储有子数据的联盟链节点并不保存对应的解密秘钥,且在解密过程中,联盟链节点不需要传递解密秘钥,因而提高了记账数据Dk的保密性;记账数据Dk的解密需要在联盟链内网环境中才能完成,有效避免了记账数据Dk泄露出联盟链之外的风险。
实施例二:
相对于实施例一,实施例二提供了另一种避免联盟链节点被漏选的技术方案,步骤D)中,若联盟链节点P
e已经将子数据加密,但再次成功解密
获得
则在联盟链内网中广播公开
产生
的联盟链节点收到广播后,重新生成一个公私秘钥对
和
并再次随机选取一个联盟链节点P
e2,将
使用联盟链节点P
e2的公钥加密,记为
而后公开在联盟链内网中,联盟链节点P
j,j∈[1,n]均记录选取列表,若某个联盟链节点P
j记录的选取列表包含了除自身外的全部参与记账数据D
k存取的联盟链节点时,则在联盟链内广播预定的完成信号,表示全部联盟链节点P
j读取的子数据均被加密。
相对于实施例一,实施例二还提供了冗余存储的两个技术方案,分别为:联盟链节点Pi将记账数据Dk0复制一份作为Dk′0,执行步骤A)至步骤D),作为记账数据Dk0的备份存储。
和在步骤A)中,联盟链节点Pi发布智能合约100,智能合约100记录记账数据标识k、两个标识数组101和奖励102,两个标识数组101长度为n且具有初始空值,请参阅附图4,联盟链节点Pj若决定参与记账数据Dk,则在两个标识数组101中分别选取一个初始空值,将初始空值替换为自身的标识,联盟链节点P0按照两个标识数组101顺序中记录的联盟链节点Pj,两次将dkj随机排序后按排序发送给标识数组101中对应顺序的联盟链节点Pj。
本实施例构建有惩罚机制,当在步骤F)中,记账子数据
解密后的哈希值与对应的标识标签含有的哈希值比对全部不一致,则对相应的联盟链节点进行惩罚,扣除其奖励或加入黑名单。其余步骤同实施例一。相对于实施例一,实施例二能够形成备用存储,单一联盟链节点上存储的数据损坏时,记账数据D
k仍然能够恢复。
以上所述的实施例只是本发明的一种较佳的方案,并非对本发明作任何形式上的限制,在不超出权利要求所记载的技术方案的前提下还有其它的变体及改型。