一种应用于区块链的数据编辑方法转让专利

申请号 : CN202010891283.9

文献号 : CN112272092B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 史先进韩道军陈金育沈夏炯黄亚博余建

申请人 : 河南大学

摘要 :

本发明公开了一种应用于区块链的数据编辑方法,包括以下步骤:A:构建记录验证树;B:若执行记录删除操作进入步骤C;若执行记录修改操作进入步骤F;C:用户、利益相关方想要删除的记录进行签名;D:所有节点对删除请求中的签名信息进行哈希、验证和广播;E:当删除消息验证通过后,将记录删除,并将删除消息插入到请求列表中;F:用户、利益相关方想要修改的记录进行签名;G:所有节点对删除请求中的签名信息进行哈希、验证和广播;H:当修改消息验证通过后,将区块中的记录从区块中删除,将修改消息插入到请求列表中,将新记录插入新记录列表中。本发明能够对区块链上的数据进行编辑,如修改和删除,同时能够对使用者的数据编辑行为进行有效约束。

权利要求 :

1.一种应用于区块链的数据编辑方法,其特征在于,包括以下步骤:A:构建记录验证树;

其中,记录验证树为一个二叉和三叉混合树,记录验证树共有n层,从第1层到第n‑2层为结构树,每个结构树都是一颗三叉树,即每个节点有三个叶子节点,结构树的每个节点代表着阈值门;第n层和第n‑1层为信息树,每个信息树都是一颗二叉树,即每个节点有两个叶子节点;n为正整数;

B:判断用户是执行记录删除操作还是记录修改操作,若执行记录删除操作,则进入步骤C;若执行记录修改操作,则进入步骤F;

C:设用户想要删除区块i″上的记录RL1;

首先,用户对记录RL1的哈希hash1=hash(RL1)进行签名Sign(hash1),并生成删除请求DelInfo′={address,del,Sign(hash1)},其中address为记录地址,del为删除标记,Sign()表示对任意字符进行签名计算,Sign(hash1)表示hash1的签名;

其次,用户将删除请求发送给利益相关方;

然后,利益相关方对删除请求的哈希hash2=hash(DelInfo′)进行签名并发送给签名收集方;

最后,签名收集方收集各方的签名并生成删除消息DelInfo={address,del,Sign(hash1),MuSign(hash2)},并将删除消息DelInfo广播到区块链网络中,其中MuSign(hash2)表示对删除请求hash2的多重签名;然后进入步骤D;

D:首先,所有节点对删除请求中的签名信息进行哈希,生成签名的哈希摘要hashsign=hash(Sign(hash1));

其次,将hashsign和其他记录的哈希集合hashlist一起代入记录验证树验证方法s

Verification()进行验证,并解出记录验证树保存的秘密值e(g,g) ,将其与验证参数哈希s

进行计算后再进行哈希计算得到秘密值哈希hash3=hash(e(g,g)·VPHash);

然后进行如下验证:

1)将hash3与秘密值哈希SHash进行对比是否一致;

2)对多重签名进行验证是否合法;

如果这两项都通过验证则接受删除行为,否则不接受;

最后,将验证结果广播到区块链网络中;然后进入步骤E;

E:当删除消息被全网半数以上节点的验证通过后,将区块i″中的记录RL1从区块中删除,并将删除消息插入到请求列表中;

F:设用户想要修改区块i″上的记录RL1;

首先,用户对记录RL1的哈希hash1=hash(RL1)进行签名Sign(hash1),并对新记录RL′1进行哈希得到hash′1=hash(RL′1),同时对hash′1进行签名Sign(hash′1);

其次,用户生成修改请求ModifyInfo′={address,mod,Sign(hash1),hash′1,Sign(hash′1)},并将修改请求发送给利益相关方,其中address为记录地址,mod为修改标记,Sign()表示对任意字符进行签名计算,Sign(hash1)为hash1的签名,hash′1为RL′1的哈希,Sign(hash′1)为hash′1的签名;

然后利益相关方对修改请求的哈希hash2=hash(ModifyInfo′)进行签名并发送给签名收集方;

最后签名收集方收集各方签名并生成修改消息ModifyInfo={address,mod,Sign(hash1),hash′1,Sign(hash′1),MuSign(hash2)},并将重新生成的记录RL′1一起发送到区块链网络上,其中,MuSign(hash2)表示对修改请求hash2的多重签名;然后进入步骤G;

G:首先,所有节点对修改请求中的签名信息进行哈希,生成哈希摘要hashsign=hash(Sign(hash1));

其次,将hashsign和其他记录的哈希集合hashlist一起代入记录验证树Verifications

(),并解出记录验证树保存的秘密值e(g,g) ;

s

然后,将秘密值e(g,g) 与验证参数哈希进行计算后再进行哈希计算得到秘密值哈希s

hash3=hash(e(g,g)·VPHash),并进行如下验证:

1)将hash3与秘密值哈希SHash进行对比是否一致;

2)对新生成的记录RL1′进行哈希计算,并将计算得出的记录RL1′的哈希值与修改消息中的哈希值hash′1进行对比是否一致;

3)对多重签名进行验证是否合法;

如果这三项均通过验证则接受修改行为,否则不接受;

最后,将验证结果广播到区块链网络中;然后进入步骤H;

H:当修改消息被全网半数以上节点的验证通过后,将区块中的记录RL1从区块中删除,将修改消息插入到请求列表中,将新记录插入新记录列表中;

其中,所述的步骤A包括以下步骤:A1:初始化步骤:由授权中心进行初始化,选择一个生成元为g的q阶双线性群 然后生成系统安全参数SP:

其中, 是素数阶双线性群,g为生成元,q为双线性群 的阶数,e(g,g)为双线性计算公式;

A2:生成步骤:Generate(SP,RL),Generate(SP,RL)表示记录验证树的生成,RL表示记录集合,生成步骤由区块链节点运行;

首先,区块链节点根据记录集合RL和构造规则构造记录验证树其次,为记录验证树 的每一个节点 选择一个 次多项式 其中,代表记录验证树的节点, 为节点 的子节点数的阈值, 为节点 对应的多项式;

再次,随机选择秘密参数 作为记录验证树 保存的秘密值,并将秘密参数s保存在记录验证树 的根节点R中 ;然后令qR(0) =s,对于其他节点,令其中,qR(0)=s表示根节点R对应的多项式在自变量为0时的因变量为s, 表示模为素数q的有限整数域, 表示节点 的父节点, 表示节点 的索引;

最后,设Y是记录验证树 的所有叶子节点的记录集合,计算验证树参数VP、验证参数哈希VPHash和秘密值哈希SHash:VPHash=hash(VP)      (3)s

SHash=hash(VPHash·e(g,g))      (4)其中,为记录验证树的叶子节点且 和 为计算验证树参数VP的组成参数,表示记录 对应的多项式的自变量为0时对应因变量的值,哈希函数H()表示将任意二进制字符映射到双线性群 表示叶子节点y相关联记录的哈希摘要, 表示将哈希摘要 映射到双线性群 表示对于任意属于属性集Y的属性 均可以计算得到参数 和 用于生成验证树参数VP,hash()是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数;

区块链节点将验证树参数VP、验证参数哈希VPHash、秘密值哈希SHash、记录集合RL和其他区块信息一起打包生成区块,并向全网广播,区块得到确认后存储到区块链上,其他区块信息包括时间戳、父区块哈希和版本号;

A3:验证步骤;Verification(RL,VP),Verification(RL,VP)表示记录验证树对记录的验证;验证步骤由区块链节点运行;以区块的记录集合RL和验证树参数VP作为输入,并输出验证结果;

在验证过程中:

首先,由验证系统执行解密 表示解密记录验证树以获取根节点保存的秘密值A;

其次,从记录验证树 的叶子节点开始计算节点保存的值,并使用递归计算上一层节点的值,通过逐层计算直至解出根节点R保存的秘密值;

然后,计算记录验证树的根节点R的秘密值A:其中,qR(0)表示根节点对应的多项式的自变量为0时的因变量的值,z表示当前节点的子节点;

最后,将新计算得出的秘密值哈希Shash′=hash(A·VPHash),对比Shash′是否和原始的秘密值哈希Shash一致,如果一致,说明记录真实有效,如果不一致说明区块记录被篡改。

2.根据权利要求1所述的应用于区块链的数据编辑方法,其特征在于:所述的步骤A1中,e(g,g)为双线性计算公式,满足下述性质:(1)双线性,对于 均存在

(2)非退化性, 使 成立, 代表 群的单位元;

(3)可计算性,存在有效的算法对 计算其中, 和 是素数阶双线性群, 表示模为素数q的有限整数域,整数a属于 用于双线性计算中的指数,整数b属于 用于双线性计算中的指数,属于 用于双线性计算中的底数,β属于 用于双线性计算中的底数。

3.根据权利要求2所述的应用于区块链的数据编辑方法,其特征在于:所述的步骤A3中,在计算根节点R的秘密值的过程中:对于叶子节点来说,令t为节点 对应的记录值,如果 则

如果t∈RL,则

其中,t为节点 对应的记录值, 表示记录 对应的多项式的自变量为0时对应因变量的值,⊥表示“无效输入”,哈希函数H(t)表示将节点 对应的记录值t映射到双线性群对于非叶子节点来说,进行从下到上逐层解密操作;对于所有属于节点 的子节点z,调用DecryptNode(VP,z)并输出子节点z对应的秘密值Fz;Sx表示一个由 个Fz≠⊥节点z组成的集合;其中, 为节点 的子节点数的阈值,z表示节点x的子节点,Fz表示节点z对应的秘密值;

如果不存在这样的集合,函数返回⊥,如果存在这样的集合,则根据拉格朗日插值法计算:

其中, 表示节点 对应的秘密值, 表示节点 所有子节点的集合,i′表示节点z的索引, 表示节点 对应子节点z索引组成的集合,qz(0)表示节点z对应的多项式的自变量为0时对应因变量的值, 表示索引为i′且集合为 时对应的拉格朗日插值法的插值基函数,parent(z)表示节点z的父节点,index(z)表示节点z的索引,qparent(z)(index(z))表示节点z的父节点对应的多项式在自变量为节点z的索引时的因变量的值, 表示节点对应的多项式的自变量为i′时对应因变量的值。

说明书 :

一种应用于区块链的数据编辑方法

技术领域

[0001] 本发明涉及一种数据编辑领域,尤其涉及一种应用于区块链的数据编辑方 法。

背景技术

[0002] 自从区块链的概念被提出后,区块链一直受到社会各界的普遍关注,其应 用也不再局限于虚拟货币,而是被广泛应用于物联网、供应链、医疗等领域中。 在这些领域中区块
链主要用来存储交易和数据。对于交易,现有的区块链可基 本满足交易存储的需求;对于
数据,区块链与传统的集中式存储相比满足了用 户去中心化、建立信任、数据不可篡改等
需求。然而在使用区块链过程中,链 上数据不可编辑给使用者带来诸多不便之处,主要有
以下三个方面:第一,错 误的数据无法修改。区块链广泛用于存放证书、健康记录、IoT数
据、资产信 息等,这些数据存储在区块链上,保证了数据的真实性和合法性。然而,如果 写
入区块链的数据具有只读性,那么记录中错误信息将无法被修正。第二,敏 感的数据难以
删除。数据存储是区块链的基本功能,但区块链存储数据的功能 被滥用。第三,失效的数据
无法清理。区块链经过一段时间的运行,早期产生 的区块中可能包含大量失效的数据。这
些失效的数据会持续占用大量的存储空 间,造成资源的浪费。
[0003] 针对上述问题,研究者们结合变色龙哈希、多项式等技术,对区块的哈希 验证结构、交易模式等进行了改进,实现了区块记录修改和删除功能。这些方 案大多实现了个人
数据的修改和删除,即用户只需通过节点的身份验证就可以 变更区块上的数据,而其他用
户对用户的变更操作不能进行干涉。然而,这种 设计在一些场景中是不合适的。例如,在食
品供应链中,食品企业的数据需要 上传到区块链上,以供其他合作企业或者政府监管部门
查看。一方面,食品企 业需要对错误的数据进行修改,这种需求在现有的可编辑区块链中
已经可以满 足。另一方面,如果企业对出现质量问题的相关数据进行修改,以达到逃避处 
罚的目的,那么会给食品安全的监管带来极大的困难。因此,政府监管部门、 合作企业等利
益相关方希望能够对加工企业的数据编辑行为进行约束,使其不 能随意修改上传的数据,
以达到保护消费者和企业自身利益的目的。但这种需 求在现有的可编辑区块链方案中很
难得到满足。

发明内容

[0004] 本发明的目的是提供一种应用于区块链的数据编辑方法,能够对区块链上 的数据进行编辑,如修改和删除,同时能够对使用者的数据编辑行为进行有效 约束。
[0005] 本发明采用下述技术方案:
[0006] 一种应用于区块链的数据编辑方法,包括以下步骤:
[0007] A:构建记录验证树;
[0008] 其中,记录验证树为一个二叉和三叉混合树,记录验证树共有n层,从第 1层到第n‑2层为结构树,每个结构树都是一颗三叉树,即每个节点有三个叶 子节点,结构树的每个
节点代表着阈值门;第n层和第n‑1层为信息树,每个 信息树都是一颗二叉树,即每个节点
有两个叶子节点;n为正整数;
[0009] B:判断用户是执行记录删除操作还是记录修改操作,若执行记录删除操 作,则进入步骤C;若执行记录修改操作,则进入步骤F;
[0010] C:设用户想要删除区块i″上的记录RL1;
[0011] 首先,用户对记录RL1的哈希hash1=hash(RL1)进行签名Sign(hash1),并生成 删除请求DelInfo′={address,del,Sign(hash1)},其中address为记录地址,del为删 除标
记,Sign()表示对任意字符进行签名计算,Sign(hash1)表示hash1的签名;
[0012] 其次,用户将删除请求发送给利益相关方;
[0013] 然后,利益相关方对删除请求的哈希hash2=hash(DelInfo′)进行签名并发送给 签名收集方;
[0014] 最后,签名收集方收集各方的签名并生成删除消息 DelInfo={address,del,Sign(hash1),MuSign(hash2)},并将删除消息DelInfo广播到区块 链网络中,其中MuSign
(hash2)表示对删除请求hash2的多重签名;然后进入步骤 D;
[0015] D:首先,所有节点对删除请求中的签名信息进行哈希,生成签名的哈希 摘要hashsign=hash(Sign(hash1));
[0016] 其次,将hashsign和其他记录的哈希集合hashlist一起代入记录验证树验证方 法s
Verification()进行验证,并解出记录验证树保存的秘密值e(g,g) ,将其与验证 参数哈
s
希进行计算后再进行哈希计算得到秘密值哈希hash3=hash(e(g,g)·VPHash);
[0017] 然后进行如下验证:
[0018] 1)将hash3与秘密值哈希SHash进行对比是否一致;
[0019] 2)对多重签名进行验证是否合法;
[0020] 如果这两项都通过验证则接受删除行为,否则不接受;
[0021] 最后,将验证结果广播到区块链网络中;然后进入步骤E;
[0022] E:当删除消息被全网半数以上节点的验证通过后,将区块i″中的记录RL1从 区块中删除,并将删除消息插入到请求列表中;
[0023] F:设用户想要修改区块i″上的记录RL1;
[0024] 首先,用户对记录RL1的哈希hash1=hash(RL1)进行签名Sign(hash1),并对新 记录RL′1进行哈希得到hash′1=hash(RL′1),同时对hash′1进行签名Sign(hash′1);
[0025] 其次,用户生成修改请求 ModifyInfo′={address,mod,Sign(hash1),hash′1,Sign(hash′1)},并将修改请求发送给利益 相关方,其中address为记录地址,mod为修改标
记,Sign()表示对任意字符 进行签名计算,Sign(hash1)为hash1的签名,hash′1为RL′1的哈
希,Sign(hash′1)为hash′1的签名;
[0026] 然后利益相关方对修改请求的哈希hash2=hash(ModifyInfo′)进行签名并发送 给签名收集方;
[0027] 最后签名收集方收集各方签名并生成修改消息 ModifyInfo={address,mod,Sign(hash1),hash′1,Sign(hash′1),MuSign(hash2)},并将重新生成 的记录RL1′一起发送
到区块链网络上,其中,MuSign(hash2)表示对修改请求hash2的多重签名;然后进入步骤G;
[0028] G:首先,所有节点对修改请求中的签名信息进行哈希,生成哈希摘要 hashsign=hash(Sign(hash1));
[0029] 其次,将hashsign和其他记录的哈希集合hashlist一起代入记录验证树 s
Verification(),并解出记录验证树保存的秘密值e(g,g) ;
[0030] 然后,将秘密值e(g,g)s与验证参数哈希进行计算后再进行哈希计算得到秘 密值s
哈希hash3=hash(e(g,g)·VPHash),并进行如下验证:
[0031] 1)将hash3与秘密值哈希SHash进行对比是否一致;
[0032] 2)对新生成的记录RL1′进行哈希计算,并将计算得出的记录RL1′的哈希值 与修改消息中的哈希值hash′1进行对比是否一致;
[0033] 3)对多重签名进行验证是否合法;
[0034] 如果这三项均通过验证则接受修改行为,否则不接受;
[0035] 最后,将验证结果广播到区块链网络中;然后进入步骤H;
[0036] H:当修改消息被全网半数以上节点的验证通过后,将区块中的记录RL1从 区块中删除,将修改消息插入到请求列表中,将新记录插入新记录列表中。
[0037] 所述的步骤A包括以下步骤:
[0038] A1:初始化步骤:由授权中心进行初始化,选择一个生成元为g的q阶双 线性群然后生成系统安全参数SP:
[0039]
[0040] 其中, 是素数阶双线性群,g为生成元,q为双线性群 的阶数,e(g,g) 为双线性计算公式;
[0041] A2:生成步骤:Generate(SP,RL),Generate(SP,RL)表示记录验证树的生成, RL表示记录集合,生成步骤由区块链节点运行;
[0042] 首先,区块链节点根据记录集合RL和构造规则构造记录验证树
[0043] 其次,为记录验证树 的每一个节点 选择一个 次多项式 其中,  代表记录验证树的节点, 为节点 的子节点数的阈值, 为节点 对应的多 项式;
[0044] 再次,随机选择秘密参数 作为记录验证树 保存的秘密值,并将秘密 参数s保存在记录验证树 的根节点R中;然后令qR(0)=s,对于其他节点,令 
[0045] 其中,qR(0)=s表示根节点R对应的多项式在自变量为0时的因变量为s,  表示模为素数q的有限整数域, 表示节点 的父节点, 表示 节点 的索引;
[0046] 最后,设Y是记录验证树 的所有叶子节点的记录集合,计算验证树参数 VP、验证参数哈希VPHash和秘密值哈希SHash:
[0047]
[0048] VPHash=hash(VP)     (3)
[0049] SHash=hash(VPHash·e(g,g)s)     (4)
[0050] 其中,为记录验证树的叶子节点且 和 为计算验证树参数VP 的组成参数, 表示记录 对应的多项式的自变量为0时对应因变量的值, 哈希函数H()表示
将任意二进制字符映射到双线性群 表示叶子节点y 相关联记录的哈希摘要,
表示将哈希摘要 映射到双线性群
表示对于任意属于属性集Y的属性 均可以计 算得到参数 和 用于生成验证树参数
VP,hash()是一种将任意长度的消息压 缩到某一固定长度的消息摘要的函数;
[0051] 区块链节点将验证树参数VP、验证参数哈希VPHash、秘密值哈希SHash、 记录集合RL和其他区块信息一起打包生成区块,并向全网广播,区块得到确认 后存储到区块链上,
其他区块信息包括时间戳、父区块哈希和版本号;
[0052] A3:验证步骤;Verification(RL,VP),Verification(RL,VP)表示记录验证树对记 录的验证;验证步骤由区块链节点运行;以区块的记录集合RL和验证树参数VP 作为输入,
并输出验证结果;
[0053] 在验证过程中:
[0054] 首先,由验证系统执行解密 表示解密 记录验证树以获取根节点保存的秘密值A;
[0055] 其次,从记录验证树 的叶子节点开始计算节点保存的值,并使用递归计 算上一层节点的值,通过逐层计算直至解出根节点R保存的秘密值;
[0056] 然后,计算记录验证树的根节点R的秘密值A:
[0057]
[0058] 其中,qR(0)表示根节点对应的多项式的自变量为0时的因变量的值,z表 示当前节点的子节点;
[0059] 最后,将新计算得出的秘密值哈希Shash′=hash(A·VPHash),对比Shash′是否 和原始的秘密值哈希Shash一致,如果一致,说明记录真实有效,如果不一致说 明区块记录
被篡改。
[0060] 所述的步骤A1中,e(g,g)为双线性计算公式,满足下述性质:
[0061] (1)双线性,对于 均存在
[0062] (2)非退化性, 使 成立, 代表 群的单位元;
[0063] (3)可计算性,存在有效的算法对 计算
[0064] 其中, 和 是素数阶双线性群, 表示模为素数q的有限整数域,整 数a属于用于双线性计算中的指数,整数b属于 用于双线性计算中的指 数,属于 用于双线
性计算中的底数,β属于 用于双线性计算中的底数。
[0065] 所述的步骤A3中,在计算根节点R的秘密值的过程中:
[0066] 对于叶子节点来说,令t为节点 对应的记录值,
[0067] 如果 则
[0068] 如果t∈RL,则
[0069]
[0070] 其中,t为节点 对应的记录值, 表示记录 对应的多项式的自变量为 0时对应因变量的值,⊥表示“无效输入”,哈希函数H(t)表示将节点 对应的 记录值t映射到双线
性群
[0071] 对于非叶子节点来说,进行从下到上逐层解密操作;对于所有属于节点 的 子节点z,调用DecryptNode(VP,z)并输出子节点z对应的秘密值Fz;Sx表示一个 由 个Fz≠⊥节
点z组成的集合;其中, 为节点 的子节点数的阈值,z表示 节点x的子节点,Fz表示节点z
对应的秘密值;
[0072] 如果不存在这样的集合,函数返回⊥,如果存在这样的集合,则根据拉格 朗日插值法计算:
[0073]
[0074] 其中, 表示节点 对应的秘密值, 表示节点 所有子节点的集合,i′表 示节点z的索引, 表示节点 对应子节点z索引组成的集合,qz(0)表示节点 z对应的多项式的自
变量为0时对应因变量的值, 表示索引为i′且集合为  时对应的拉格朗日插值法
的插值基函数,parent(z)表示节点z的父节点, index(z)表示节点z的索引,qparent(z)
(index(z))表示节点z的父节点对应的多项式 在自变量为节点z的索引时的因变量的值,
表示节点 对应的多项式的自 变量为i′时对应因变量的值。
[0075] 本发明通过构建记录验证树特有的验证方式来实现记录的编辑;然后将多 重签名引入到该发明中,当用户需要编辑记录时,利益相关方进行签名,签名 验证通过后才能
执行编辑操作,以此保证记录不能被随意编辑,从而在供应链、 物联网等场景中保护利益
相关方的利益。本发明既能够实现对区块链上的数据 进行编辑,如修改和删除,同时还能
够对使用者的数据编辑行为进行有效约束。

附图说明

[0076] 图1为本发明的流程示意图。

具体实施方式

[0077] 以下结合附图和实施例对本发明作以详细的描述:
[0078] 如图1所示,本发明所述的应用于区块链的数据编辑方法,包括以下步骤:
[0079] A:构建记录验证树;
[0080] 其中,记录验证树为一个二叉和三叉混合树,记录验证树共有n层,从第 1层到第n‑2层为结构树,每个结构树都是一颗三叉树,即每个节点有三个叶 子节点,结构树的每个
节点代表着阈值门;第n层和第n‑1层为信息树,每个 信息树都是一颗二叉树,即每个节点
有两个叶子节点;n为正整数;
[0081] 区块链系统为区块链中每一个记录构建一颗信息树;信息树中的一个叶子 节点存储着记录的哈希值,用于验证记录的真实性,信息树中的另一个叶子节 点存储着记录签
名的哈希值,用于验证数据编辑中修改和删除操作的合法性, 信息树中的父节点存储着或
门。
[0082] 本发明中,记录验证树不仅要验证原始记录,而且要验证修改或删除操作, 用OR连接两个哈希值,当其中一个哈希值存在时就可以通过记录验证树的验 证,以此来实现记
录的修改或删除,能够有效节省频繁修改记录带来的存储空 间占用,满足物联网、供应链
场景中用户修改记录的需求。
[0083] 自底向上,第n‑2层,每三颗信息树构成一颗结构树,每个结构树的根节 点代表着与门,从第n‑3层开始,每三颗结构树构成一颗复合结构树,每个复 合结构树的根节点代表
着与门;重复上一步操作直至只剩下一个节点,完成记 录验证树的构建;如果剩余的信息
树或结构树不足三颗时,将剩余的一颗或者 两颗信息树或结构树组成一颗结构树或复合
结构树;
[0084] 本发明中,使用与门是因为每一颗信息树代表了一个记录,使用与门连接 信息树就可以把区块中所有的记录连接起来形成一个整体,保证记录的安全。 此外,在将记录验
证树映射到多项式过程中,一个节点连接信息树越多在解密 时计算量越大。因此,为了降
低解密时多项式的计算量,结构树的子节点不超 过三个。
[0085] 本发明中,记录验证树的构建过程包括以下步骤:
[0086] A1:初始化步骤:
[0087] 由授权中心进行初始化,选择一个生成元为g的q阶双线性群 然后生 成系统安全参数SP:
[0088]
[0089] 其中, 是素数阶双线性群,g为生成元,q为双线性群 的阶数,e(g,g) 为双线性计算公式,满足下述公知性质:
[0090] (1)双线性,对于 均存在
[0091] (2)非退化性, 使 成立, 代表 群的单位元;
[0092] (3)可计算性,存在有效的算法对 计算
[0093] 其中, 和 是素数阶双线性群, 表示模为素数q的有限整数域,整 数a属于用于双线性计算中的指数,整数b属于 用于双线性计算中的指 数,属于 用于双线
性计算中的底数,β属于 用于双线性计算中的底数。 上述公知性质为本领域常规技术,在
此不再赘述。
[0094] A2:生成步骤:
[0095] Generate(SP,RL),Generate(SP,RL)表示记录验证树的生成,RL表示记录集合, 生成步骤由区块链节点运行。
[0096] 首先,区块链节点根据记录集合RL和构造规则构造记录验证树
[0097] 其次,为记录验证树 的每一个节点 选择一个 次多项式 其中,  代表记录验证树的节点, 为节点 的子节点数的阈值, 为节点 对应的多 项式;
[0098] 再次,随机选择秘密参数 作为记录验证树 保存的秘密值,并将秘密 参数s保存在记录验证树 的根节点R中;然后令qR(0)=s,对于其他节点,令 
其中,qR(0)=s表示根节点R对应的多项式在自变量 为0时的
因变量为s, 表示模为素数q的有限整数域, 表示节点 的 父节点,
表示节点 的索引;
[0099] 最后,设Y是记录验证树 的所有叶子节点的记录集合,计算验证树参数 VP、验证参数哈希VPHash和秘密值哈希SHash:
[0100]
[0101] VPHash=hash(VP)     (3)
[0102] SHash=hash(VPHash·e(g,g)s)     (4)
[0103] 其中,为记录验证树的叶子节点且 和 为计算验证树参数VP 的组成参数, 表示记录 对应的多项式的自变量为0时对应因变量的值, 哈希函数H()表示
将任意二进制字符映射到双线性群 表示叶子节点y 相关联记录的哈希摘要,
表示将哈希摘要 映射到双线性群
表示对于任意属于属性集Y的属性 均可以计 算得到参数 和 用于生成验证树参数
VP,hash()是一种将任意长度的消息压 缩到某一固定长度的消息摘要的函数;
[0104] 区块链节点将验证树参数VP、验证参数哈希VPHash、秘密值哈希SHash、 记录集合RL和其他区块信息一起打包生成区块,并向全网广播,区块得到确认 后存储到区块链上。
其他区块信息包括时间戳、父区块哈希和版本号,属于本 领域常规技术,在此不再赘述。
[0105] A3:验证步骤;
[0106] Verification(RL,VP),Verification(RL,VP)表示记录验证树对记录的验证;验证 步骤由区块链节点运行;以区块的记录集合RL和验证树参数VP作为输入,并 输出验证
结果;
[0107] 在验证过程中:
[0108] 首先,由验证系统执行解密 表示解密 记录验证树以获取根节点保存的秘密值A;
[0109] 其次,从记录验证树 的叶子节点开始计算节点保存的值,并使用递归计 算上一层节点的值,通过逐层计算直至解出根节点R保存的秘密值;
[0110] 然后,计算记录验证树的根节点R的秘密值A:
[0111]
[0112] 其中,qR(0)表示根节点对应的多项式的自变量为0时的因变量的值,z表 示当前节点(此处为根节点R)的子节点;
[0113] 最后,将新计算得出的秘密值哈希Shash′=hash(A·VPHash),对比Shash′是否 和原始的秘密值哈希Shash一致,如果一致,说明记录真实有效,如果不一致说 明区块记录
被篡改。
[0114] 在计算根节点R的秘密值的过程中:
[0115] 对于叶子节点来说,令t为节点 对应的记录值,
[0116] 如果 则
[0117] 如果t∈RL,则
[0118]
[0119] 其中,t为节点 对应的记录值, 表示记录 对应的多项式的自变量为 0时对应因变量的值,⊥表示“无效输入”,哈希函数H(t)表示将节点 对应的 记录值t映射到双线
性群
[0120] 对于非叶子节点来说,进行从下到上逐层解密操作;对于所有属于节点 的 子节点z,调用DecryptNode(VP,z)并输出子节点z对应的秘密值Fz;Sx表示一个 由 个Fz≠⊥
节点z组成的集合;其中, 为节点 的子节点数的阈值,z表示 节点x的子节点,Fz表示节
点z对应的秘密值;
[0121] 如果不存在这样的集合,函数返回⊥,如果存在这样的集合,则根据拉格 朗日插值法计算:
[0122]
[0123] 其中, 表示节点 对应的秘密值, 表示节点 所有子节点的集合,i′表 示节点z的索引, 表示节点 对应子节点z索引组成的集合,qz(0)表示节点 z对应的多项式的自
变量为0时对应因变量的值, 表示索引为i′且集合为  时对应的拉格朗日插值法
的插值基函数,parent(z)表示节点z的父节点, index(z)表示节点z的索引,qparent(z)
(index(z))表示节点z的父节点对应的多项式 在自变量为节点z的索引时的因变量的值,
表示节点 对应的多项式的自 变量为i′时对应因变量的值,拉格朗日插值法的定义
如下:
[0124] 对于一个未知的n次多项式,如果已知该多项式的n+1个不同的点在 xi(i=0,1,…,n)处的函数值yi(i=0,1,…,n)(即该函数过(xi,yi)i=0,1,…,n这n+1个点),则 可以唯
一确定一个拉格朗日插值多项式 其中Δj(x)为插值基函数, 表达式为:
[0125]
[0126] 其中,n为多项式次方数,i表示点的编号且i=0,1,…,n,xi为点i的横坐标, yi为点i的纵坐标,P(x)表示拉格朗日插值多项式,j表示点的编号且j=0,1,…,n, yj表示编号
为j时对应的纵坐标值,Δj(x)为插值基函数,x表示多项式的自变 量,xj为点j的横坐标;
[0127] B:判断用户是执行记录删除操作还是记录修改操作,若执行记录删除操 作,则进入步骤C;若执行记录修改操作,则进入步骤F;
[0128] C:设用户想要删除区块i″上的记录RL1;
[0129] 首先,用户对记录RL1的哈希hash1=hash(RL1)进行签名Sign(hash1),并生成 删除请求DelInfo′={address,del,Sign(hash1)},其中address为记录地址,del为删 除标
记,Sign()表示对任意字符进行签名计算,Sign(hash1)表示hash1的签名;
[0130] 其次,用户将删除请求发送给利益相关方;
[0131] 然后,利益相关方对删除请求的哈希hash2=hash(DelInfo′)进行签名并发送给 签名收集方,利益相关方一般由企业的合作伙伴和政府监管部门等组成;
[0132] 最后,签名收集方收集各方的签名并生成删除消息 DelInfo={address,del,Sign(hash1),MuSign(hash2)},并将删除消息DelInfo广播到区块 链网络中,其中MuSign
(hash2)表示对删除请求hash2的多重签名;然后进入步骤 D;
[0133] D:首先,所有节点对删除请求中的签名信息进行哈希,生成签名的哈希 摘要hashsign=hash(Sign(hash1));
[0134] 其次,将hashsign和其他记录的哈希集合hashlist一起代入记录验证树验证方 法s
Verification()进行验证,并解出记录验证树保存的秘密值e(g,g) ,将其与验证 参数哈
s
希进行计算后再进行哈希计算得到秘密值哈希hash3=hash(e(g,g)·VPHash);
[0135] 然后进行如下验证:
[0136] 1)将hash3与秘密值哈希SHash进行对比是否一致;
[0137] 2)对多重签名进行验证是否合法;
[0138] 如果这两项都通过验证则接受删除行为,否则不接受;
[0139] 最后,将验证结果广播到区块链网络中;然后进入步骤E;
[0140] E:当删除消息被全网半数以上节点的验证通过后,将区块i″中的记录RL1从 区块中删除,并将删除消息插入到请求列表中;
[0141] F:设用户想要修改区块i″上的记录RL1;
[0142] 首先,用户对记录RL1的哈希hash1=hash(RL1)进行签名Sign(hash1),并对新 记录RL′1进行哈希得到hash′1=hash(RL′1),同时对hash′1进行签名Sign(hash′1);
[0143] 其次,用户生成修改请求 ModifyInfo′={address,mod,Sign(hash1),hash′1,Sign(hash′1)},并将修改请求发送给利益 相关方,其中address为记录地址,mod为修改标
记,Sign()表示对任意字符 进行签名计算,Sign(hash1)为hash1的签名,hash′1为RL′1的哈
希,Sign(hash′1)为hash′1的签名;
[0144] 然后利益相关方对修改请求的哈希hash2=hash(ModifyInfo′)进行签名并发送 给签名收集方;
[0145] 最后签名收集方收集各方签名并生成修改消息 ModifyInfo={address,mod,Sign(hash1),hash′1,Sign(hash′1),MuSign(hash2)},并将重新生成 的记录RL1′一起发送
到区块链网络上,其中,MuSign(hash2)表示对修改请求hash2的多重签名;然后进入步骤G;
[0146] G:首先,所有节点对修改请求中的签名信息进行哈希,生成哈希摘要 hashsign=hash(Sign(hash1));
[0147] 其次,将hashsign和其他记录的哈希集合hashlist一起代入记录验证树 s
Verification(),并解出记录验证树保存的秘密值e(g,g) ;
[0148] 然后,将秘密值e(g,g)s与验证参数哈希进行计算后再进行哈希计算得到秘 密值s
哈希hash3=hash(e(g,g)·VPHash),并进行如下验证:
[0149] 1)将hash3与秘密值哈希SHash进行对比是否一致;
[0150] 2)对新生成的记录RL1′进行哈希计算,并将计算得出的记录RL1′的哈希值 与修改消息中的哈希值hash′1进行对比是否一致;
[0151] 3)对多重签名进行验证是否合法;
[0152] 如果这三项均通过验证则接受修改行为,否则不接受;
[0153] 最后,将验证结果广播到区块链网络中;然后进入步骤H;
[0154] H:当修改消息被全网半数以上节点的验证通过后,将区块中的记录RL1从 区块中删除,将修改消息插入到请求列表中,将新记录插入新记录列表中。