本公开涉及区块链领域,特别是涉及一种多签名验签方法、相关装置和介质。
背景技术:
1、目前,随着互联网的发展,互联网事务中越来越多需要多重签名的技术。例如,某个电子物流单的核准,需要不同部门的人员的线上审批签名。这些审批签名往往还具有一些协同条件。例如,某个部门有5个领导,其中3个领导审批签名后,电子物流单就被核准。而这些复杂的规则目前缺少多重签名手段来技术化,造成在技术上需要一次次分别验证不同的签名,而这些签名之间的协同关系难以从技术角度验证,造成签名验签效率低且不安全。尤其在区块链和智能合约虚拟机中,存在大量利用智能合约对智能合约事务的多重签名的验证,情况更加严重。
2、因此,有必要解决现有技术中多重签名技术上难以构造,且验证安全性差的问题。
技术实现思路
1、本公开提供了一种多签名验签方法、相关装置和介质,它能够提高多重签名的实现效率,并提高多重签名验证的安全性。
2、根据本公开的一方面,提供了一种多签名验签方法,包括:
3、获取多签名验签指令;
4、解析所述多签名验签指令,得到待签名内容、多个签名节点的签名、和多个所述签名节点在多签名树上的路径,其中,所述多签名树指示签名节点验签密钥、和签名节点验签协同关系;
5、基于生成所述多签名树时的设置参数,恢复所述多签名树;
6、按照所述路径,在所述多签名树上定位多个所述签名节点,并利用所述待签名内容、定位到的所述签名节点的所述签名节点验签密钥、和所述签名节点验签协同关系,对多个所述签名节点的所述签名进行验签。
7、根据本公开的一方面,提供了一种多签名验签装置,包括:
8、第一获取单元,用于获取多签名验签指令;
9、第一解析单元,用于解析所述多签名验签指令,得到待签名内容、多个签名节点的签名、和多个所述签名节点在多签名树上的路径,其中,所述多签名树指示签名节点验签密钥、和签名节点验签协同关系;
10、恢复单元,用于基于生成所述多签名树时的设置参数,恢复所述多签名树;
11、验签单元,用于按照所述路径,在所述多签名树上定位多个所述签名节点,并利用所述待签名内容、定位到的所述签名节点的所述签名节点验签密钥、和所述签名节点验签协同关系,对多个所述签名节点的所述签名进行验签。
12、可选地,所述第一获取单元,具体用于:
13、从指令栈读取所述多签名验签指令的第一指令标识;
14、参照指令映射表,将所述第一指令标识映射为所述多签名验签指令。
15、可选地,在从指令栈读取所述多签名验签指令的第一指令标识之前,所述多签名验签装置还包括:接收单元,用于:
16、接收到智能合约执行指令,所述智能合约执行指令具有所述智能合约存储在区块链上的区块标识;
17、基于所述区块标识,从所述区块链上获取所述智能合约;
18、将所述智能合约中的各指令的指令标识依次加载到所述指令栈,所述指令标识包括所述第一指令标识。
19、可选地,所述第一解析单元,具体用于:
20、获取所述多签名验签指令的第一参数字段,所述第一参数字段指向参数栈的栈顶;
21、从所述栈顶获取栈顶元素;
22、对所述栈顶元素进行解析,得到所述待签名内容、多个所述签名节点的所述签名、和多个所述签名节点在所述多签名树上的所述路径。
23、可选地,所述多签名树包括根节点、中间节点和叶节点,其中,所述根节点向所述根节点的下一层延伸出所述中间节点或所述叶节点,每个所述中间节点向所述中间节点的下一层延伸出所述中间节点或所述叶节点,所述叶节点为所述签名节点,所述叶节点包含所述签名节点验签密钥,所述中间节点包含所述签名节点验签协同关系;
24、所述验签单元,具体用于:
25、利用所述待签名内容、定位到的每个所述签名节点中的所述签名节点验签密钥,对所述签名节点的所述签名进行第一验签;
26、从所述签名节点所在的层向上追溯,确定更上一层中的所述中间节点中的所述签名节点验签协同关系得到满足,直到追溯到所述根节点,从而完成第二验签。
27、可选地,所述验签单元,具体还用于:
28、利用所述签名节点验签密钥,对所述签名节点的所述签名进行解密,得到解密结果;
29、利用预定摘要算法,确定所述待签名内容的第一摘要;
30、确定所述第一摘要与所述解密结果一致,从而通过所述第一验签。
31、可选地,所述签名节点验签协同关系包括最小验签通过节点数,所述最小验签通过节点数为所述中间节点向下延伸出的下一层节点中、要求第一验签通过的最小节点数;所述验签单元,具体还用于:
32、确定所述中间节点的所述下一层节点中通过所述第一验签的实际验签通过节点数;
33、如果所述实际验签通过节点数不小于所述最小验签通过节点数,确定所述中间节点中的所述签名节点验签协同关系得到满足。
34、可选地,所述最小验签通过节点数包括与各个验签事务类型对应的所述最小验签通过节点数;
35、在确定所述中间节点的所述下一层节点中通过所述第一验签的实际验签通过节点数之前,所述多签名验签装置还包括:确定单元,用于:
36、确定所述多签名验签指令应用的所述验签事务类型;
37、参考所述对应关系表,确定所述验签事务类型对应的所述最小验签通过节点数。
38、可选地,所述签名节点验签协同关系包括最小验签通过节点权值和,所述最小验签通过节点权值和为所述中间节点向下延伸出的下一层节点中、要求第一验签通过的节点的权值的和的最小值;所述验签单元,具体还用于:
39、确定所述中间节点的所述下一层节点中通过所述第一验签的验签通过节点;
40、获取各个所述验签通过节点的权值;
41、将各个所述验签通过节点的权值加和,得到实际验签通过节点权值和;
42、如果所述实际验签通过节点权值和不小于所述最小验签通过节点权值和,确定所述中间节点中的所述签名节点验签协同关系得到满足。
43、可选地,所述恢复单元,具体用于:
44、获取设置参数存储空间中的目标账户,所述目标账户对应于所述多签名验签指令所应用于的智能合约;
45、从所述目标账户中获取所述设置参数,所述设置参数在生成所述多签名树时写入所述目标账户;
46、基于所述设置参数,恢复所述多签名树。
47、可选地,所述设置参数包括所述多签名树上每个节点的参数组,所述参数组包括所述节点的层级、路径、节点类型和节点参数,其中,所述路径是在所述多签名树上从所述根节点到所述节点经过的路由;如果所述节点是所述根节点或所述中间节点,所述节点类型是有效性节点,否则所述节点类型是所述验证密钥节点;如果所述节点类型是所述有效性节点,所述节点参数是所述签名节点验签协同关系,否则所述节点参数是所述签名节点验签密钥;所述恢复单元,具体还用于:
48、从所述设置参数中,顺次取出每个节点的所述参数组;
49、按照所述参数组中的所述层级,绘制所述节点;
50、按照所述参数组中的所述路径,绘制所述节点与上一层节点的关系;
51、在绘制的所述节点上,标注所述参数组中的所述节点类型;
52、在绘制的所述节点上,填充所述参数组中的所述节点参数。
53、可选地,在按照所述路径,在所述多签名树上定位多个所述签名节点,并利用所述待签名内容、定位到的所述签名节点的所述签名节点验签密钥、和所述签名节点验签协同关系,对多个所述签名节点的所述签名进行验签之后,所述多签名验签装置还包括:写入单元,用于:
54、将验签结果写入参数栈的栈顶。
55、可选地,在获取多签名验签指令之前,所述多签名验签装置还包括:设置单元,用于:
56、获取多签名设置指令;
57、解析所述多签名设置指令,得到所述设置参数;
58、基于所述设置参数,生成所述多签名树;
59、将所述设置参数保存在设置参数存储空间。
60、可选地,所述设置单元,具体用于:
61、从指令栈读取所述多签名设置指令的第二指令标识;
62、参照指令映射表,将所述第二指令标识映射为所述多签名设置指令。
63、可选地,所述设置单元,具体还用于:
64、获取所述多签名设置指令的第二参数字段,所述第二参数字段指向参数栈的栈顶;
65、从所述栈顶获取栈顶元素;
66、对所述栈顶元素进行解析,得到所述设置参数。
67、可选地,所述设置参数包括所述多签名树上每个节点的参数组,所述参数组包括所述节点的层级、路径、节点类型和节点参数,其中,所述多签名树包括根节点、中间节点和叶节点,所述根节点向所述根节点的下一层延伸出所述中间节点或所述叶节点,每个所述中间节点向所述中间节点的下一层延伸出所述中间节点或所述叶节点;所述路径是在所述多签名树上从所述根节点到所述节点经过的路由;如果所述节点是所述根节点或所述中间节点,所述节点类型是有效性节点,否则所述节点类型是所述验证密钥节点;如果所述节点类型是所述有效性节点,所述节点参数是签名节点验签协同关系,否则所述节点参数是签名节点验签密钥;所述设置单元,具体还用于:
68、从所述设置参数中,顺次取出每个节点的所述参数组;
69、按照所述参数组中的所述层级,绘制所述节点;
70、按照所述参数组中的所述路径,绘制所述节点与上一层节点的关系;
71、在绘制的所述节点上,标注所述参数组中的所述节点类型;
72、在绘制的所述节点上,填充所述参数组中的所述节点参数。
73、可选地,所述签名节点验签协同关系包括下属节点数;
74、在绘制的所述节点上,填充所述参数组中的所述节点参数之后,所述多签名验签装置还包括:验证单元,用于:
75、针对每个所述有效性节点,确定所述有效性节点的下一层延伸出的下一层节点数;
76、验证所述有效性节点的下一层延伸出的所述下一层节点数等于所述下属节点数。
77、可选地,所述设置单元,还具体用于:
78、获取所述设置参数存储空间中的目标账户,所述目标账户对应于所述多签名设置指令所应用于的智能合约;
79、将所述设置参数保存在所述目标账户。
80、根据本公开的一方面,提供了一种多签名验签方法,包括:
81、获取多签名设置指令;
82、解析所述多签名设置指令,得到设置参数;
83、基于所述设置参数,生成多签名树;其中,所述多签名树指示签名节点验签密钥、和签名节点验签协同关系;
84、将所述设置参数保存在设置参数存储空间。
85、根据本公开的一方面,提供了一种多签名验签装置,包括:
86、第二获取单元,用于获取多签名设置指令;
87、第二解析单元,用于解析所述多签名设置指令,得到设置参数;
88、生成单元,用于基于所述设置参数,生成多签名树;其中,所述多签名树指示签名节点验签密钥、和签名节点验签协同关系;
89、保存单元,用于将所述设置参数保存在设置参数存储空间。
90、可选地,所述第二获取单元,具体用于:
91、从指令栈读取所述多签名设置指令的第二指令标识;
92、参照指令映射表,将所述第二指令标识映射为所述多签名设置指令。
93、可选地,所述第二解析单元,具体用于:
94、获取所述多签名设置指令的第二参数字段,所述第二参数字段指向参数栈的栈顶;
95、从所述栈顶获取栈顶元素;
96、对所述栈顶元素进行解析,得到所述设置参数。
97、可选地,所述设置参数包括所述多签名树上每个节点的参数组,所述参数组包括所述节点的层级、路径、节点类型和节点参数,其中,所述多签名树包括根节点、中间节点和叶节点,所述根节点向所述根节点的下一层延伸出所述中间节点或所述叶节点,每个所述中间节点向所述中间节点的下一层延伸出所述中间节点或所述叶节点;所述路径是在所述多签名树上从所述根节点到所述节点经过的路由;如果所述节点是所述根节点或所述中间节点,所述节点类型是有效性节点,否则所述节点类型是所述验证密钥节点;如果所述节点类型是所述有效性节点,所述节点参数是签名节点验签协同关系,否则所述节点参数是签名节点验签密钥;
98、所述生成单元,具体用于:
99、从所述设置参数中,顺次取出每个节点的所述参数组;
100、按照所述参数组中的所述层级,绘制所述节点;
101、按照所述参数组中的所述路径,绘制所述节点与上一层节点的关系;
102、在绘制的所述节点上,标注所述参数组中的所述节点类型;
103、在绘制的所述节点上,填充所述参数组中的所述节点参数。
104、可选地,所述保存单元,具体用于:
105、获取所述设置参数存储空间中的目标账户,所述目标账户对应于所述多签名设置指令所应用于的智能合约;
106、将所述设置参数保存在所述目标账户。
107、根据本公开的一方面,提供了一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上所述的多签名验签方法。
108、根据本公开的一方面,提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的多签名验签方法。
109、根据本公开的一方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序,所述计算机程序被计算机设备的处理器读取并执行,使得该计算机设备执行如上所述的多签名验签方法。
110、本公开实施例中,利用多签名树验证多重签名所需的各签名节点的验证、和签名节点之间协同关系的验证。多签名树指示签名节点验签密钥和签名节点验签协同关系。从多签名验签指令中,可以解析得到待签名内容、多个签名节点的签名、和多个签名节点在多签名树上的路径。按照这个路径,可以在多签名树上定位到该多个签名节点。这时,就可以利用待签名内容、定位到的签名节点的签名节点验签密钥分别验证多个签名节点的签名是否正确。多签名验证还需要对签名节点之间的协同关系进行验证。因此,本公开实施例利用多签名树上反映出的签名节点验签协同关系,对定位到的这些签名节点的关系是否符合该签名节点验签协同关系进行验证,从而通过对一个多签名验签指令的解析完成了多重验证所需的全部验证。该验证不仅验证了多个签名本身是否正确,还验证了多个签名之间的协同关系是否正确。它提高了多重签名的实现效率,并提高了多重签名验证的安全性。
111、本公开的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本公开而了解。本公开的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。