一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种XMSS算法的全硬件实现架构及其系统的制作方法

2022-02-20 05:40:42 来源:中国专利 TAG:

tree的高度。
15.优选的,所述签名的生成,包括signature的生成和auth_path的生成,具体的:
16.一次signature的生成,包括l次的wots chain计算,l次计算结果依次拼接形成完整的signature;
17.auth_path的生成,包括获取所述l-tree输出的再经由bds计算生成与signature对应的auth_path。
18.优选的,所述merkle-tree输出其内部节点信息完成bds子模块的初始化。
19.优选的,还包括哈希核模块,所述wots chain计算、l-tree计算、merkle-tree计算中涉及的哈希运算均为串行执行,分时调用所述哈希核模块。
20.优选的,所述的控制模块,包括mx1、mx2和mx3一个选择控制模块;mx1和mx2分别位于wots子模块的输入侧和输出侧;所述的mx3位于l-tree的输出侧;所述的选择控制模块用于控制mx1和mx2;所述控制模块还接收控制信号mod,所述控制信号mod用于触发选择控制模块对mx3的控制,从而实现密钥生成与签名生成的选择。
21.第二方面,本发明还提供了一种xmss算法的客户侧的全硬件实现架构,包括wots子模块、l-tree子模块、第二消息子模块、哈希核模块和auth子模块;所述wots子模块、l-tree子模块和auth子模块逐级相连,各自还分别与所述第二消息子模块相连,具体的:
22.wots子模块基于signature和msg_dig进行l次的wots运算,作为l-tree的叶节点;l-tree计算生成根节点,输出给auth子模块;
23.所述auth子模块根据所述l-tree根节点和auth_path的内容逐级哈希运算得到根节点;匹配所述根节点与所述xmss公钥,相同则验签通过。
24.优选的,所述第二消息子模块分别将signature存储入堆栈sig中,将msg_dig存储至堆栈g中,将auth_path存储入堆栈auth中,具体包括:
25.所述第二消息子模块将signature以n bytes为单位,依次存储入堆栈sig的地址1至l中;将msg_dig以log(w)bits为数据单位,并被依次存储至堆栈g的地址1至l中;将auth_path以n bytes为单位,依次存储入堆栈auth的地址1至h中;其中,l为一个l-tree的叶节点数量,w代表是一条wots chain的级数。
26.优选的,所述wots子模块通过同时获取堆栈g和堆栈sig中内容计算得到l-tree叶子节点,并传递给l-tree子模块,具体包括:
27.所述wots子模块逐一的分别从堆栈g和堆栈sig中获取数据块di和数据块sigi,根据所述数据块di和数据块sigi,通过wots chain计算获得l-tree子模块所需的l-tree叶子节点;其中,di是第i 1次wots chain计算的起始级数;sigi是第i 1次wots chain计算的起始级数下的wots chain值;其中,i∈(0,l-1)。
28.优选的,所述wots chain计算的输入参数包括计算的起始级数,初始值和结束的级数。
29.第三方面,本发明还提供了一种xmss算法的全硬件系统,包括如第一方面所述的服务侧的xmss算法的全硬件实现架构实现的服务设备和如第二方面所述的客户侧的xmss算法的全硬件实现架构实现的终端设备;
30.所述服务设备用于生成公钥和签名,并将所述签名发送给终端设备;
31.所述终端设备用于根据signature、auth-path、msg-dig、public seed运算,输出
与所述公钥进行匹配,相同则验签通过。
32.优选的,所述的服务设备有一端,所述的终端设备有n端。
33.本发明将xmss算法的硬件实现分为公钥生成的相关模块与签名生成的相关模块两部分,从而实现了公钥生成的相关模块与签名生成的相关模块的资源复用,降低了资源消耗。
34.进一步,在优选的方案中,在密钥生成的同时便完成bds算法的初始化,从而提升了系统的执行效率。
【附图说明】
35.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
36.图1是本发明实施例提供的一种xmss的数据架构示意图;
37.图2是本发明实施例提供的一种xmss算法的服务侧全硬件实现架构示意图;
38.图3是本发明实施例提供的一种服务侧带选择器的xmss密钥生成及签名模块架构;
39.图4是本发明实施例提供的一种xmss算法的服务侧全硬件实现方法流程示意图;
40.图5是本发明实施例提供的一种xmss算法的服务侧全硬件的签名过程示意图;
41.图6是本发明实施例提供的一种终端侧xmss验签模块架构;
42.图7是本发明实施例提供的一种xmss算法的终端侧全硬件的验签过程示意图;
43.图8是本发明实施例提供的一种验签过程数据架构示意图;
44.图9是本发明实施例提供的一种本发明实施例与已有方案的资源消耗及效率对比图。
【具体实施方式】
45.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
46.在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
47.图1示出了xmss算法的算法架构。该算法由wots chain计算、l-trees计算以及merkle-tree计算三部分组成。在实际情况中,由于wots chain计算、l-trees计算以及merkle-tree计算三部分的计算结果分别会作为后者的计算基础,因此,当前图1标注的l-trees下部其实应该包含图1中黑色方块,而相应的merkle-tree标注的下部其实应该包含图1中交叉线标注的那一行方块。
48.xmss的关键参数主要包括l、w与h。其中l为l-tree的叶节点个数;因此,l个wots chain(对应图中wots中的一列过程)的计算结果构成一个l-tree的叶节点。w为wots模块的
计算的步数关联参数,以图1为例其真实的步数为w-1,则相应的w直接表征的是图1中一条wots chain从最下方的初始值(图1中以斜线填充的方块)到最上方的最终值(图1中以黑色填充的方块)一共包含的数据块对象个数;h为merkle-tree的高度,其中,在只有merkle-tree的根节点的情况下,所述h值为0,则以图1为例,merkle-tree的叶节点总数为2^h个。因此,通过二叉树的高度和相应节点数的关系,可以推导出2h个l-tree的根节点将构成一个merkle-tree的所有叶节点。
49.目前暂未见xmss算法的全硬件实现架构。本发明旨在提供一种xmss算法的全硬件实现方案,从而提升xmss在芯片及fpga层面的实现、应用、测试及产业化。
50.此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
51.实施例1:
52.本发明实施例1提供了一种xmss算法的全硬件实现架构,如图2所示,包括addr子模块、l-tree子模块、merkle子模块、sig子模块、bds子模块、wots子模块、第一消息子模块和控制模块,具体的:
53.所述addr子模块与l-tree子模块和merkle子模块两两互通从而构成密钥生成的主体功能组件;
54.所述第一消息子模块、sig子模块与bds子模块互通从而构成签名生成的主体功能组件;
55.其中,所述wots子模块分别与addr子模块、l-tree子模块、sig子模块和bds子模块建立有数据传输通道,从而被所述密钥生成主体功能组件与签名生成主体功能组件所分时调用;
56.所述控制模块用于控制数据传输通道在上述各子模块之间进行切换,从而完成密钥生成功能及签名功能。
57.本发明将xmss算法的硬件实现分为公钥生成的相关模块与签名生成的相关模块两部分,从而实现了公钥生成的相关模块与签名生成的相关模块的资源复用,降低了资源消耗。
58.在本发明实施例中,所述密钥(即merkle-tree的根节点,在本发明实施例中也被称呼为公钥)生成,具体包括:
59.addr子模块用于根据输入的secret seed生成wots子模块的私钥ski;wots子模块基于public seed和私钥ski,进行wots运算生成pki,所述pki作为l-tree的叶节点(即图1中的wots public key方块所示的对象),i为相应l-tree叶节点的序号,i的范围属于[0,l-1];
[0060]
l-tree子模块,将l个叶节点逐级哈希运算生成根节点并作为merkle-tree的叶节点;2^h个merkle-tree的叶节点逐级哈希运算得到xmss的公钥(即图1中所示的位于最上方的方块对象);其中,h为merkle-tree的高度。
[0061]
在本发明实施例的具体实现过程中,通常还会提供一个或者多个哈希核模块作为上述各个子模块共用的哈希算法加速核。例如:哈希核模块可以表现为物理实体的sha256、shake256、shake512、shake128、sha512等等。其中,若所述哈希核模块数量为一个的情况下,以分时复用的方式被其他子模块调用。
[0062]
在本发明实施例中,上述的哈希核模块所服务的对象内容主要表现为:wots chain的哈希运算过程、l-tree的叶节点生成一个l-tree的根节点过程,以及merkle-tree的叶节点生成merkle-tree的根节点的计算过程都是通过所述哈希核模块分时复用计算完成。
[0063]
在本发明实施例中,所述签名的生成,可以分为signature的生成和auth_path的生成,具体的:
[0064]
一次signature的生成,包括l次的wots chain计算;
[0065]
其中,在l次的wots chain计算中,第i次的wots chain计算输出的结果所在的级数与签名摘要中记录的参数di相同;在本发明实施例中,以wots chain的总级数w为4为例,此时的参数di由2bits表征,具体di可以是0,1,2,3中的某一值,即对应了一条wots chain中具体第di级的方块数据。在本发明实施例中,wots chain计算是被密钥计算和signature生成两个过程分时复用的,两个过程的差异在于密钥计算过程中,wots chain计算是从初始的1级私钥ski完成w-1步哈希运算生成得到w级的pki,并将pki作为l-tree的叶节点;而在signature生成过程中则是根据前面摘要中记录的参数di,仅计算到第di 1级输出为该次wots chain计算结果。
[0066]
其中,signature的生成其实对应着一颗l-tree的φ
index
,此处描述的对应含义是,将signature中l次的wots chain计算结果,将每次wots chain计算按照w级数计算完全后,便会得到上述l-tree的叶节点,进一步逐级哈希计算便可以得到所述φ
index

[0067]
在auth_path的生成过程中,导入所述φ
index
,经由bds子模块生成auth_path。其中,所述φ
index
表征的就是经由上述signature生成得到l-tree根节点位于类似图8所示merkle-tree的叶节点的编号位置。auth_path的生成过程的原理是以生成的signature所位于的l-tree,确认所述所关联的叶节点,并以逐级h-1次哈希运算得到merkle-tree的根节点设定,将当前针对所述逐级h-1次哈希运算缺失的节点补全得到所述auth_path,相应的,可以参考图6和图8所示的验签过程流程来理解,其中的auth0,auth1,...,auth
h-1
即为上述auth_path包含的路径信息。
[0068]
在本发明实施例的上述扩展方案中,由于在密钥生成的同时便完成bds算法的初始化,从而提升了系统的执行效率。
[0069]
结合本发明实施例,为了进一步支撑上述方法过程的实现,如图3所示,所述的控制模块,包括mx1、mx2和mx3一个选择控制模块;mx1和mx2分别位于wots子模块的输入侧和输出侧;所述的mx3位于l-tree的输出侧;所述的选择控制模块用于控制mx1和mx2;所述控制模块还接收控制信号mod,所述控制信号mod用于触发选择控制模块对mx3的控制,从而实现密钥生成与签名生成的选择。
[0070]
进一步的,所述选择器1通过选择addr子模块或消息子模块与wots子模块,分别完成wots子模块计算wots chain步数w的设置,以及签名地址在wots子模块中的导入;
[0071]
所述选择器2通过选择wots子模块与l-tree子模块或sig子模块的导通,分别完成l-tree的叶子节点导出和签名导出;
[0072]
所述选择器3通过选择l-tree子模块与merkle子模块或bds子模块的导通,分别完成l-tree根节点向merkle子模块的导入和l-tree子模块输出l-tree根节点给bds子模块。在具体实现过程中,选择器3的选择可以是基于mod信号来完成,即mod为计算root模式时,
选择器3通过选择l-tree子模块与merkle子模块的导通,完成l-tree根节点向merkle子模块的导入;mod为计算auth_path模式时,选择器3通过选择l-tree子模块与bds子模块的导通,l-tree子模块输出l-tree根节点给bds子模块,从而使用bds计算出上述的auth_path内路径信息auth0,auth1,...,auth
h-1

[0073]
常规的算法需要遍历整个merkle-tree才能找对对应的路径,但这种产生签名的方式所耗时间较长,所以本发明实施例在xmss算法中使用bds算法,用于高效遍历并计算当前信息的真实路径。例如图8中merkle-tree里的路径节点原来是需要从底下往上算的,但是用bds算法可以省去这一操作,可以通过图8中的auth_path直接补全merkle-tree计算中的灰度方框所表现的计算过程。
[0074]
如图6所示,在本发明实施例中,所述wots chain计算的输入参数包括计算的起始级数,计算的起始级数下的初始值和wots chain的结束的级数。在图6中,参数《sigi,di,w》中的sigi为计算的起始级数下的初始值,di为计算的起始级数,w为wots chain的结束的级数。在以图3为例的密钥计算过程中(即merkle-tree的根节点计算过程),上述的参数《sigi,di,w》则因此时场景具体表现为《ski,0,w》,并且,在图3中分别表现为《0,w》和ski两部分。
[0075]
实施例2:
[0076]
在本发明实施例1中,提供了一种xmss算法的服务侧的全硬件实现架构,这种架构通常实现在服务器设备中;本发明实施例2则是提供了一种xmss算法的客户侧的全硬件实现架构,而所述客户侧的全硬件实现架构通常实现在终端设备中,从而与实施例1中的服务器设备形成验签全过程。在本发明实施例中,xmss算法的客户侧的全硬件实现架构包括wots子模块、l-tree子模块、第二消息子模块、哈希核模块和auth子模块;所述wots子模块、l-tree子模块和auth子模块逐级相连,各自还分别与所述第二消息子模块相连,所述哈希核模块为分别为所述wots子模块、l-tree子模块和auth子模块提供哈希计算功能,在获取到包含signature、msg_dig和auth_path后,具体的:
[0077]
wots子模块基于signature和msg_dig进行l次的wots运算,作为l-tree的叶节点;l-tree计算生成根节点,输出给auth子模块。
[0078]
通常表现为,所述wots子模块通过同时获取signature和msg_dig中内容计算得到l-tree叶子节点,并传递给l-tree子模块;所述l-tree子模块根据所述wots子模块传递过来的l-tree叶子节点生成l-tree根节点后,将所述l-tree根节点传递给auth子模块。
[0079]
所述auth子模块根据所述l-tree根节点和auth_path的内容逐级哈希运算得到根节点;匹配所述根节点与所述xmss公钥,相同则验签通过。
[0080]
本发明实施例在签名验签机制的典型应用场景中,公钥生成的相关模块与签名生成的相关模块通常分布于服务器端,而验签的相关模块则通常被集成于客户端。因此,本发明沿用了实施例1中的设计理念,实现了验签过程中的资源复用,降低了资源消耗。
[0081]
在本发明实施例中,对于xmss公钥而言,可以是随signature、msg_dig和auth_path一起通过签名文件作为载体发送给客户端,也可以是通过其他方式传递到客户端,在此不做特殊限定。
[0082]
在本发明实施例中,如图6所示,所述第二消息子模块分别将signature存储入堆栈sig中,将msg_dig存储至堆栈g中,将auth_path存储入堆栈auth中,具体包括:
[0083]
所述第二消息子模块将signature以n bytes为单位分块,依次存储入堆栈sig的地址1至l中,此处对应着实施例1中生成signature中表述的进行l次wots chain计算;将msg_dig以log(w)bits为数据宽度分块,并被依次存储至堆栈g的地址1至l中,此处用log(w)计算的含义就是确定bit位数量,从而能够适用二进制表达总计算步数为w-1的wots chain中的每一级位置;将auth_path以n bytes为单位分块,依次存储入堆栈auth的地址1至h中;其中,l为一个l-tree的叶节点数量,w代表是一条wots chain的级数。
[0084]
在本发明实施例中,涉及的验签过程中具体细节包括,所述wots子模块通过同时获取堆栈g和堆栈sig中内容计算得到l-tree叶子节点,并传递给l-tree子模块,具体包括:
[0085]
所述wots子模块逐一的分别从堆栈g和堆栈sig中获取数据块di和数据块sigi,根据所述数据块di和数据块sigi,通过wots chain计算获得l-tree子模块所需的l-tree叶子节点;其中,di是第i 1次wots chain计算的起始级数;sigi是第i 1次wots chain计算的起始级数下的wots chain值;其中,i∈(0,l-1)。以图8作为示例解释,并且以i为0进行具体描述,此时,d0的值为2,表明图8中位于第一列的斜线阴影的数据块位于该wots chain中的第3个位置,此时的w值为4,即图8示例的,相应的sig0只需要一次哈希运算就可以生成得到图8所示的l-tree中的第一个叶节点。
[0086]
所述wots chain计算的输入参数包括计算的起始级数,计算的起始级数下的初始值和wots chain的结束的级数。在本发明实施例中,如图6中,参数《sigi,di,w》中的sigi为计算的起始级数下的初始值,di为计算的起始级数,w为wots chain的结束的级数。
[0087]
实施例3:
[0088]
本发明实施例是基于实施例1和实施例2基础上,提出的一种xmss算法的全硬件系统,包括如实施例1所述的服务侧的xmss算法的全硬件实现架构实现的服务设备和如实施例2所述的客户侧的xmss算法的全硬件实现架构实现的终端设备;
[0089]
所述服务设备用于生成公钥和签名,并将所述签名发送给终端设备;
[0090]
所述终端设备用于根据签名输出根节点,并匹配所述根节点和所述公钥,相同则验签通过。
[0091]
本发明实施例在签名验签机制的典型应用场景中,公钥生成的相关模块与签名生成的相关模块通常分布于服务器端,而验签的相关模块则通常被集成于客户端。本发明将xmss算法的硬件实现分为公钥生成的相关模块与签名生成的相关模块两部分,从而实现了公钥生成的相关模块与签名生成的相关模块的资源复用,同时,也在客户端侧使用了等同的技术实现,降低了资源消耗。
[0092]
在本发明实施例中,在所述终端设备数量为多个时,在服务设备中还包括:
[0093]
服务设备的sig子模块在输出新一轮的signature时,对index进行递增操作后传递给服务设备的bds子模块,以便服务设备的bds子模块根据所述index,输出与所述新一轮的signature所对应的认证路径auth_path;
[0094]
将包含有所述新一轮的signature和对应auth_path发送给相应验签方的终端设备。
[0095]
此时,对于服务器中的所述第一消息子模块、sig子模块与bds子模块两两互通从而实现签名功能,具体包括:
[0096]
所述消息子模块用于获取签名摘要,用于生成每一个签名的wots chain中步数参
数,以便传递给wots子模块向sig子模块输出签名内容;
[0097]
所述sig子模块用于存储xmss的签名结果,并更新签名次数index变量(此处的index即实施例1中所涉及的中的下标,两者为同一index),所述index变量用于bds子模块定位需要计算的auth_path;其中,所述签名结果是从所述密钥生成过程中提取指定过程内容生成的路径;
[0098]
所述bds子模块用于执行bds算法,merkle子模块输出其内部节点信息以完成bds子模块的初始化;所述bds子模块公开当前签名次数的index信息,在xmss签名过程中,需要输出当前签名的auth_path(从原理上讲,每个index所指定的φ
index
都有属于自己的唯一auth_path,以图8为例,其中auth_path方格即构成了一条auth_path),以便验签方将签名还原得到xmss的根节点。
[0099]
以图8的验签过程为例,其中的wots signature和merkle-tree auth_path构成了签名的内容,这些签名的内容都是本发明实施例上述计算xmss公钥期间算到过的;换个说法xmss密钥生成若表述为:a
→b→
c,即a、b和c之间是依次计算得到的过程;相应的签名过程表示为:a

b时,则验签过程可以表示为:b

c所以这个签名结果是计算公钥c用到的中间数据。
[0100]
实施例4:
[0101]
本发明实施例提供了一种xmss算法的全硬件实现方法,使用如实施例1所述的xmss算法的全硬件实现架构,参照图3所示的架构图,计数器cnt1被置为l;计数器cnt2被置为2h;如图4所示,方法包括:
[0102]
在步骤201中,addr子模块基于输入的secret seed参数生成ski,i∈(0,l-1),并输入至wots子模块;wots子模块基于输入的ski,i∈(0,l-1)、public seed以及参数w生成wots公钥pki,i∈(0,l-1);其中,pki经过选择器2的选择作用输入至l-tree子模块,作为l-tree的叶节点,i指代pki在l-tree中叶节点的位置。以图1为例,其中,图中标识有wots private key的方块即上述的ski,图中位于wots chain各个步中相应的白色底色的方块即public seed作为输入的伪随机函数计算结果,图中黑色标识有wots public key的即上述的pki。
[0103]
在步骤202中,l-tree子模块基于输入的pki数据,调用哈希核模块进行计算,生成l-tree的根节点每输入一个ski,并完成相应的计算得到一个pki,计数器cnt1执行减一操作,并反馈至addr子模块,以记录l-tree中叶节点的生成状态,直至cnt1为0时,wots子模便完成了一个l-tree的全部叶节点生成。以图1为例,其中,图中标注有l-tree roots的方块即上述生成的l-tree的根节点
[0104]
在步骤203中,通过选择器3的选通作用,被输入至merkle子模块;上述l-tree的根节点生成过程重复2h次,l-tree子模块便可以生成merkle子模块所需的所有叶节点;其中,通过每次l-tree子模块生成一次l-tree的根节点(即merkle获取一个叶节点),计数器cnt2实行减一运算并反馈至addr子模块,以便addr子模块获取merkle子模块的状态,直至cnt2为0;merkle子模块自叶节点开始依次调用哈希核模块,执行相应的计算,最终生成merkle-tree的根节点,作为xmss的公钥。以图1为例,其中,图中标注有xmss public key的方块即上述的xmss的公钥。
[0105]
本发明实施例在签名验签机制的典型应用场景中,公钥生成的相关模块与签名生成的相关模块通常分布于服务器端,而验签的相关模块则通常被集成于客户端。因此,本发明将xmss算法的硬件实现分为公钥生成的相关模块与签名生成的相关模块两部分。从而实现了公钥生成的相关模块与签名生成的相关模块的资源复用,降低了资源消耗。
[0106]
在本发明实施例中,所述参数w的传递方法具体包括:
[0107]
选择器1选通addr子模块用于将生成的参数《0,w》输入至wots子模块;其中,w为wots子模块中wots chain计算的步数参数值,用于设定wots子模块自底向上的执行步数为w-1步,其中每一步均为调用哈希核模块执行一次计算。
[0108]
实施例5:
[0109]
在实施例4的实现基础之上,本发明实施例还提供了相应的签名过程的实现细节,参考如图3所示的架构,如图5所示,具体包括以下步骤:
[0110]
在步骤301中,签名数据msg_dig以log(w)为长度,且单位为bits方式划分为l块,并存储至消息子模块的堆栈d的地址0至l-1中。
[0111]
在步骤302中,计数器cnt3此时为初始值i=0;取消息子模块的堆栈d的地址0的数据d0传输至选择器1。
[0112]
在步骤303中,选择器1将数据《0,di》传输至wots子模块,addr子模块基于secret seed参数生成对应的ski,i∈(0,l-1),并输入至wots子模块。
[0113]
在步骤304中,wots子模块基于输入的ski,i∈(0,l-1)以及《0,di》进行运算;其中,《0,di》用于控制wots子模块中wots chain的计算从最低层的0级运算至d
i-1级,以生成的数据sigi,i∈(0,l-1),经选择器2被依次存储于sig子模块中。
[0114]
在步骤305中,重复上述步骤301-步骤304过程,当计数器cnt3中的i=l时,表示sig子模块已经输出了全部msg_dig的签名;此时存储器存储的签名次数au_num被传输至bds子模块。
[0115]
常规的算法需要遍历整个merkle-tree才能找对对应的路径,但这种产生签名的方式所耗时间较长,所以本发明实施例在xmss算法中使用bds算法,用于高效遍历并计算当前信息的真实路径。例如图8中merkle-tree里的路径节点原来是需要从底下往上算的,但是用bds算法可以省去这一操作。
[0116]
实施例6:
[0117]
在实施例4的实现基础之上,本发明实施例还提供了相应的验签过程,如图6所示的,此时,实现架构中还包含有验签模块,所述验签模块的输入包括:数据签名signature、数据摘要msg_dig、签名轮数index,以及认证路径auth_path,数据签名signature被输入至堆栈sig,并以n bytes为单位分块,依次存储入堆栈sig的地址1至l中;数据摘要msg_dig被以log(w)bits为数据宽度分块,并被依次存储至堆栈g的地址1至l中;地址l同样被存储入数据块的个数;认证路径auth_path被存储入堆栈auth中;计数器cnt4与cnt5依次被置为0,验签过程中,如图7所示,具体的:
[0118]
在步骤401中,根据计数器cnt4当前状态i,依次将堆栈sig以及堆栈g内对应地址的内容sigi、gi以及参数w输入至验签模块中的wots子模块中,此处gi和w表示wots子模块中的wots chain计算自第d
i-1级开始执行,执行至w-1级。
[0119]
在步骤402中,wots子模块计算生成pki,i∈(0,l-1),并依次输入至验签模块中的
l-tree子模块。
[0120]
在步骤403中,l-tree子模块基于输入的pki,i∈(0,l-1)计算生成l-tree的根节点φ
index

[0121]
在步骤404中,验签模块中的auth子模块基于φ
index
以及auth_path逐级哈希计算得到结果output。
[0122]
在具体实现过程中,如图8所示,通常步骤404中涉及需要生成φ
index
的,此处只需要执行一次,生成一个φ
index
即可;这样可以较大的简化计算复杂度,以及签名的复杂度。
[0123]
在步骤405中,若所述output与xmss的公钥相同则签名验证通过,否则签名验证失败。
[0124]
所以本发明实施例在xmss算法的验签过程中使用auth_path,用于高效寻址和补全merkle-tree计算过程中的节点内容,例如图8中merkle-tree里的路径节点原来是需要从底下往上算的,但是用auth_path可以省去这一操作,可以通过图8中的auth_path直接补全merkle-tree计算中的灰度方框所表现的计算过程。
[0125]
其中,在实际实现过程中,若所述验签模块和上述的实施例1所阐述的实现架构是位于同一主板上的,则上述的wots子模块和l-tree子模块也可以复用实施例1中所阐述的wots子模块和l-tree子模块。
[0126]
实施例7:
[0127]
图9列出了已知的xmss算法软硬件实现方案与本发明实施例4-实施例6所描述的在xmss算法的全硬件实现架构基础上的实现方法,在资源消耗与性能上的对比。
[0128]
参数选择{n,h,w}={32,10,16},{32,16,16},{32,20,16}三组进行测试,其中,各参数值的定义沿用上述各实施例中的描述,n为如图8所示每个数据块规定的长度,单位为byte;h为merkle-tree的高度,这里的高度在只有单一根节点时其值为0,当有了第一级叶节点时,其值为1,以此类推;w为wots chain的计算总级数,转换为计算的步数的话就是w-1步。目前,已有方案中暂未发现xmss的全硬件实现。图9中所示出的方案大都是基于高性能处理器的软件实现或基于soc的软硬协同方案等。而本发明实施例则是基于artix-7 fpga的全硬件实现方案。
[0129]
已有的设计大多针对参数{n,h,w}={32,10,16},实现平台有基于嵌入式系统stm32、开源指令集(murax/svu),也有依赖传统cpu核(arm/intel),而实现的方式则有纯软件设计、软硬协同设计两种。目前表现最好的是软硬协同的设计,它是已有方案中周期数最小的设计。本发明实施例第一个提出纯硬件实现xmss的方案,并将性能列入图表中以进行对比。任何一组参数都可以体现本发明实施例设计的计算效果,本发明实施例具体结合图9中{n,h,w}={32,20,16}这一参数说明。通过使用已公开的reference执行xmss密钥计算,签名,验签需要的时钟周期分别为4574
×
109,44.9
×
106,2.5
×
106,而现有最好的解决方案即软硬协同设计架构需要的周期数为330
×
109,6.48
×
106,0.58
×
106,本发明实施例的设计需要的周期数为327
×
109,2.83
×
106,0.19
×
106。
[0130]
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
[0131]
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通
过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,read only memory)、随机存取存储器(ram,random access memory)、磁盘或光盘等。
[0132]
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献