结构化数据记录电子签名及验证方法与流程
- 国知局
- 2024-08-30 15:08:47
本发明涉及信息安全,特别是一种结构化数据记录电子签名及验证方法。
背景技术:
1、目前,电子签名及验证技术应用日益广泛,电子签名能够对电子数据起到防篡改的作用(如:医疗机构的医疗人员,可以对医疗行为的数据进行电子签名,从而可以对医疗行为数据进行有效固化,防止医疗行为中的处方、病历等信息被后台运维人员篡改),从而为后续的电子数据作为法律认可的电子证据提供有效保障;大量电子数据以结构化数据形式存储在关系数据库中,对于结构化数据记录的电子签名是电子签名技术大量应用的场景。
2、对结构化数据记录进行电子签名时,通常采用对数据记录的全部或部分关键字段进行签名,签名时通常采用对数据记录的字段进行拼接后再进行电子签名,并且把电子签名数据保存在对应的记录内;但是,随着信息系统的改造升级及业务规则的不断演进,需要进行电子签名的字段也会发生变化,这样就会导致升级前需要进行电子签名的字段和升级后需要进行签名的字段不一致,导致验证电子签名数据的方式前后不一致,需要信息系统进行相应的前后数据兼容性的特殊处理,且在结构化数据记录的某一字段发生改变后,通过签名数据无法精准判定具体哪个字段发生变动。
技术实现思路
1、为解决现有技术中存在的问题,本发明的目的是提供一种结构化数据记录电子签名及验证方法,本发明提供了一种标准的方式来维护信息系统中结构化电子签名数据。
2、为实现上述目的,本发明采用的技术方案是:一种结构化数据记录电子签名及验证方法,包括以下步骤:
3、步骤1、对结构化数据记录进行电子签名:利用sm3和sm2加密算法,对业务系统传入的结构化数据记录[sd]的每一字段求出哈希值[hn],然后基于全部待签名字段哈希值,构造默克尔树,最终对树根的默克尔根哈希值[h1~n]进行电子签名得到签名值[s];
4、步骤2、构建签名数据体结构:把字段名[keyn]和字段值的哈希值[hn]组成键值对数组[keyn:hn],对键值对数组通过最小完美哈希计算出待存储的最小完美哈希值[mphn],同时对默克尔根哈希值[h1~n]计算时间戳,最后组装成签名数据结构体[st],并返回签名数据结构体给业务系统进行存储;
5、步骤3、对结构化数据记录的签字签名进行验证:业务系统根据电子签名时传入的结构化数据记录[sd]和签名数据结构体[st],根据结构化数据记录计算每一字段值的哈希值[hn],并构造字段值的哈希值[hn]的默克尔树,得到默克尔根哈希值[h1~n];然后依据签名数据结构体[st]解析出签名值,并且验证默克尔根哈希值[h1~n]与签名值[s],如果通过验证,则返回验证通过结果;如果验证不通过,则依据字段名[keyn]和每一字段值的哈希值[hn],构建键值对数组[keyn:hn],并且对键值对在签名结构体中的最小完美哈希[mphn]中通过最小完美哈希算法查找对应值,来判断待验证的签名字段值是否发生变化,以及发生变化的字段的位置。
6、作为本发明的进一步改进,在步骤1中,所述结构化数据记录具体表示如下:
7、[key1:value1,key2:value2,…,keyi:valuei,…,keyn:valuen]
8、其中,[keyi:valuei]表示一条记录的一个字段的值,1≤i≤n。
9、作为本发明的进一步改进,所述步骤1具体如下:
10、步骤1.1、根据结构化数据记录[key1:value1,key2:value2,…,keyi:valuei,…,keyn:valuen]的每一个字段值,依据字段顺序逐个通过sm3算法求取每一字段值的哈希值;
11、步骤1.2、根据各字段值的哈希值,通过sm3算法构造默克尔树,最终得到默克尔树根节点哈希值;
12、步骤1.3、对默克尔树根节点的哈希值,采用sm2算法进行电子签名。
13、作为本发明的进一步改进,在步骤1.3中,采用sm2算法进行电子签名时,电子签名的方式包括采用客户端ukey证书方式、云计算电子签名的协同签名模式或代理签名模式。
14、作为本发明的进一步改进,在步骤1.2中,一个具有n个字段的结构化数据记录的默克尔树构造过程为:
15、1)计算叶子节点的哈希值,即依次计算h1=sm3(value1),h2=sm3(value2),…,hn=sm3(valuen);
16、2)计算中间节点的哈希值,对节点两两配对,计算哈希值:
17、当n为偶数时,计算h1~2=sm3(h1||h2),h3~4=sm3(h3||h4),…,hn-1~n=sm3(hn-1||hn);
18、当n为奇数时,计算h1~2=sm3(h1||h2),h3~4=sm3(h3||h4),…,hn~n=sm3(hn||hn);
19、3)以h1~2,h3~4,…,hn-1~n或hn~n的数量作为n,并再次进行两两配对,重复1)-3),直至最终收敛为h1~n。
20、作为本发明的进一步改进,在步骤2中,签名数据结构体[st]的组装方式具体如下:
21、1)把签名结果[s]赋值给[st.sign]属性,其中sign为签名值;
22、2)如果需要对结构化数据记录加盖时间戳,则通过时间戳算法对[h1~n]计算时间戳[ts],并赋值给[st.ts],其中ts为时间戳;
23、3)提取结构化数据记录[key1:value1,key2:value2,…keyn:valuen]的[keyi],组合成[key1;key2;…keyn]并赋值给[st.keys];
24、4)把字段名[keyn]和字段值的哈希值[hn]组成键值对[keyi:hi],得到[key1:h1,key2:h2,…keyn:hn],并且采用最小完美哈希算法计算键值对的最小完美哈希值[mphn],对计算结果赋值给[st.mph];
25、5)对[st.mph]通过sm3算法计算哈希值并赋值给[st.hash_mph];最终把签名数据结构体返回给业务应用系统进行保存。
26、作为本发明的进一步改进,所述步骤3具体包括以下步骤:
27、步骤3.1、对业务应用系统传入的签名数据结构体[st]进行解析和验证:计算[st.mph]的sm3哈希值[hash_mph’];比较[hash_mph’]与[st.hash_mph]是否一致,比较结果为[vmph]。
28、步骤3.2、根据待验证的结构化数据记录[key1:value1,key2:value2,…keyn:valuen] 的每一个字段值,依据字段顺序逐个通过sm3算法求取每一字段值的哈希值[hi’=sm3(valuei)],其中1≤i≤n。
29、步骤3.3、根据各计算所得字段值的哈希值[hi’],通过sm3算法构造默克尔树,最终得到默克尔树根节点哈希值[h1~n’];
30、步骤3.4、把上述默克尔树根节点哈希值[h1~n’]作为签名原文,解析出的[st.sign]作为签名值,通过sm2算法进行签名验证,并且得到验证结果[vs];如果签名数据结构体的时间戳[st.ts]存在,则把[h1~n’]作为签名原文,验证时间戳的有效性,得到结果[vts];
31、步骤3.5、根据验证情况返回验证结果。
32、作为本发明的进一步改进,在步骤3.5中,验证结果如下:
33、1)判断[vs]是否通过,如果通过,则判断时间戳验证结果[vts],如果有效,则最终返回结构化数据未发生变动,签名验证通过;
34、2)判断[vs]是否为通过,如果通过,则判断时间戳验证结果[vts],如果无效,则最终返回结构化数据未发生变动,时间戳验证错误;
35、3)判断[vs]是否为通过,如果不通过,且[vmph]为一致,则把字段名[keyn]和字段值的哈希值[hn]组成键值对[keyi:hi],得到[key1:h1,key2:h2,…keyn:hn],对每一个[keyi:hi]在[st.mph]中采用最小完美哈希算法搜索,判断对应字段是否存在,如果不存在,则证明此字段的值发生了变动,并加以记录;完成后返回结构化数据发生变动,发生变动的字段包括[keyi];在[vmph]不一致的情况下,则返回结构化数据发生变动,签名结果发生变动,发生变动的字段无法判断。
36、本发明采用默克尔树计算结构化数据记录的每一个字段的最终待签名的sm3的哈希值,已经签名的结构化数据记录的任何一个字段的数据发生变动的情况下,都会造成默克尔树的根节点的值发生变动,通过的数据记录字段的默克尔数据根节点的哈希值进行签名,从而可以实现对整个结构化数据记录的所有字段签名的效果,已签名一条结构化数据记录任何一个字段值的改动都将影响签名值的验证。
37、本发明在签名结果存储上给出了一种有效的结构体,能够存储对结构化数据记录的哪些字段进行了签名,并且通过最小完美哈希存储进行签名时的每个签名字段的哈希值的哈希特征,作为后续判断哪个字段发生了变动提供可靠依据。
38、本发明在验证签名结构体时,不但可以验证结构化数据记录是否发生了变动,而且在发生了变动后,可以精确判断哪个字段发生了变动。
39、本发明通过签名数据结构体能够很好的确定被签名的结构化数据记录对哪些字段进行了电子签名,并且能够很好的支撑结构化数据记录随着业务规则的变化,需要进行电子签名的签名字段的变化。
40、本发明的有益效果是:
41、本发明通过对结构化数据记录的每个字段计算sm3哈希值,并且通过构造默克尔树的方式,得到整个记录的哈希值,在结构化数据记录字段值发生变动时,能够通过签名值的验证来判断整条记录的是否发生变动;通过签名数据结构体记录结构化数据记录签名时,具体对哪些字段值进行了电子签名,且能够适应结构化数据的结构变化,以及需要进行电子签名的签名字段的变化,满足结构化数据结构变化的需要;通过最小完美哈希计算出每一个字段的最小完美哈希值,从而有效减小了为了签名数据机构体的大小,并且可以在后续签名值验证时,判断结构化数据记录哪个字段的值发生了变动。
本文地址:https://www.jishuxx.com/zhuanli/20240830/285644.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表