具备椭圆曲线密码算法的处理器及其处理方法与流程

文档序号:27684888发布日期:2021-12-01 00:59阅读:229来源:国知局
具备椭圆曲线密码算法的处理器及其处理方法与流程

1.本发明有关于具备密码算法的处理器及其处理方法。


背景技术:

2.中国国家密码局发布多种密码算法,包括sm2、sm3、以及sm4

等密码算法,替代rsa(简写自rivest

shamir

adleman)、des(简写自data encryption standard)、3des(简写自triple data encryption algorithm)、sha(简写自secure hash algorithm)

等国际通用密码算法。
3.sm2密码算法为椭圆曲线公钥密码算法,但在签名、密钥交换方面不同于ecdsa(简写自elliptic curve digital signature algorithm)、ecdh(简写自elliptic

curve diffie

hellman)

等国际标准,而是采取了更为安全的机制。sm2密码算法除了加、解密操作,还涉及数字签名、签名验算、密钥交换协议

等。
4.sm3密码算法为哈希(或称杂凑、散列)密码算法。特别是,sm3密码算法部分功能会被sm2密码算法频繁使用。
5.在已知的技术中,是使用软件和/或专门的硬件(如外接密码卡等)实现sm2密码算法,使用软件实现无法有效保证数据的安全性,而使用专门的硬件实现在部署时需要另外购买专门的硬件,所以会增加部署成本。
6.如何高效且更安全的完成sm2密码算法,为本技术领域一项重大课题。


技术实现要素:

7.为了有效保证数据的安全性以及减少部署成本,本发明提供一种具备椭圆曲线密码算法(sm2)的处理器及其处理方法。
8.根据本发明一种实施方式实现的处理器包括第一寄存器储存公钥指针,指向公钥。响应于指令集架构的单一条椭圆曲线密码算法指令,该处理器从第一内存空间取得明文输入,利用通过该第一寄存器取得的该公钥对该明文输入进行椭圆曲线密码算法的加密运算,加密该明文输入成密文输出,并将该密文输出写入第二内存空间。
9.根据本发明一种实施方式实现的处理器的处理方法,包括:响应于指令集架构的单一条椭圆曲线密码算法指令,从第一内存空间取得明文输入,利用公钥对该明文输入进行椭圆曲线密码算法的加密运算,加密该明文输入成密文输出,并将该密文输出写入第二内存空间。
10.通过本发明提供的具备椭圆曲线密码算法(sm2)的处理器及其处理方法,只需使用一条指令集架构指令就可以实现椭圆曲线密码算法,可将在实现椭圆曲线密码算法的过程中生成的中间数据储存在处理器内部硬件存储空间中,使得在处理器外部无法访问这些中间数据,极大地提高了安全性。另外,由于在部署时不需要另外购买专门的硬件,所以减少了部署成本。
11.下文特举实施例,并配合附图,详细说明本发明内容。
附图说明
12.图1为方块图,根据本发明一种实施方式图解一处理器100;
13.图2a至图2d根据本发明不同实施方式图解isa的sm3密码算法指令的格式、以及相关的微码ucode设计;
14.图3还图解isa指令撰写的一种实施方式;
15.图4为流程图,根据本发明一种实施方式图解isa的sm3密码算法指令引发的步骤程序,相应该sm3密码算法指令所转换出的多条微指令;
16.图5根据本发明一种实施方式图解一sm3引擎500;
17.图6为方块图,根据本发明一种实施方式图解一处理器600;
18.图7根据本发明一种实施方式图解isa的sm2密码算法指令的格式702;
19.图8以表格804说明相应加密运算的微码ucode设计,显示对应产生的微指令如何解读架构寄存器124内容;
20.图9a、9b为流程图,根据本发明一种实施方式图解isa的单一条sm2密码算法指令引发的加密运算,相应该sm2密码算法指令所转换出的多条微指令;
21.图10以表格1004说明相应解密运算的微码ucode设计,显示对应产生的微指令如何解读架构寄存器124内容;
22.图11a、11b为流程图,根据本发明一种实施方式图解单一条isa的sm2密码算法指令引发的解密运算,相应该sm2密码算法指令所转换出的多条微指令;
23.图12以表格1204说明相应签名运算的微码ucode设计,显示对应产生的微指令如何解读架构寄存器124内容;
24.图13为流程图,根据本发明一种实施方式图解一sm2密码算法指令引发的签名运算,相应该sm2密码算法指令所转换出的多条微指令;
25.图14以表格1404说明相应签名验证运算的微码ucode设计,显示对应产生的微指令如何解读架构寄存器124内容;
26.图15为流程图,根据本发明一种实施方式图解一sm2密码算法指令引发的签名验证运算,相应该sm2密码算法指令所转换出的多条微指令;
27.图16以表格1604说明相应密钥交换第一程序的微码ucode设计,显示对应第一条sm2密码算法指令产生的微指令如何解读架构寄存器124内容;
28.图17为流程图,根据本发明一种实施方式图解一条sm2密码算法指令引发的密钥交换第一程序运算,相应该sm2密码算法指令所转换出的多条微指令;
29.图18以表格1804说明相应密钥交换第二程序运算的微码ucode设计,显示对应第二条sm2密码算法指令产生的微指令如何解读架构寄存器124内容;
30.图19a、19b为流程图,根据本发明一种实施方式图解一sm2密码算法指令引发的密钥交换第二程序运算,相应该sm2密码算法指令所转换出的多条微指令;
31.图20以表格2004说明相应密钥交换第三程序运算的微码ucode设计,显示对应第三条sm2密码算法指令产生的微指令如何解读架构寄存器124内容;
32.图21a、21b为流程图,根据本发明一种实施方式图解一sm2密码算法指令引发的密钥交换第三程序运算,相应该sm2密码算法指令所转换出的多条微指令;
33.图22根据本发明一种实施方式图解发起方以及响应方如何利用本发明提出的密
instruction queue,简称fiq)108,交由解码器110根据微码(ucode,储存在一微码储存器)解码成流水线可辨识的多条微指令(microinstructions),推入指令队列(instruction queue,简称xiq)112,再经重命名单元(rename)114存入相应的保留站(reservation station)rs,驱动逻辑运算单元(arithmetic logical unit)alu、内存顺序缓存区(memory order buffer)116的地址产生单元(address generating unit)agu、多种指令的对应硬件fadd、fmul、fmisc、mmx、或密码执行单元118。运算所需要的数据则可以根据数据转译后备缓冲区(data translation lookaside buffer)dtlb的转译结果加载到数据高速缓存(data cache)120,再缓存至该内存顺序缓存区116。处理器100还包括一重排缓存区(reorder buffer,简称rob)122以及架构寄存器(architecture registers)124,以实现运算。
46.密码执行单元118包括sm3引擎126。微码ucode则包括访问相应isa的sm3密码算法指令的架构寄存器124,具体包括访问储存输入数据m预处理方式(例如,是否需要消息填充)的寄存器、输入数据尺寸寄存器、甚至输入数据m指针寄存器和哈希值指针寄存器。解码器110根据微码ucode将本发明isa的sm3密码算法指令解码为处理器100流水线可识别的多条微指令,用于解读架构寄存器124内容,取得初始哈希常量v(0)以及输入数据m,再驱动该sm3引擎126进行哈希值转换,生成转换后哈希值v(n)。解码出的该多条微指令包括一条加速器操作微指令(sm3引擎微指令),即负责该sm3引擎126的驱动。解码出的该多条微指令还包括访问、以及管理组架构寄存器124的内容,以及操作密码执行单元118对输入数据m进行哈希密码算法。
47.图2a至图2d根据本发明不同实施方式图解isa的sm3密码算法指令的格式、以及相关的微码ucode设计。除图示实施例,本发明提及的格式内容(例如,数值opcode)以及寄存器应用,也可有多种变化型。
48.图2a图解isa的sm3密码算法指令的格式202,并以表格204介绍相关的微码ucode设计。格式202的前缀、操作码(opcode)、字段modr/m为:0xf3 0x0f0xa6 0xe8(也可为其他数值)。字段sib、displacement、以及immediate则不填(non)。解码器110辨识出编码“0xf3 0x0f 0xa6 0xe8”后,即依照微码ucode产生多条微指令,其中包括定义、使用、以及管理架构寄存器124,以操作密码执行单元118对输入数据m进行sm3密码算法。
49.首先,参考表格204,讨论微码ucode如何对应isa的sm3密码算法指令定义输入寄存器(input registers),使用到架构寄存器124中的寄存器eax、ecx、esi、以及edi。
50.寄存器eax载有一消息填充标示,显示输入数据m是否需消息填充才能满足sm3密码算法输入位长。eax=0显示输入数据m有消息填充需求。eax=

1显示输入数据m不需消息填充。该消息填充标示显示有填充需求时,该多条微指令将该输入数据m填充为一输入消息单组尺寸的倍数。一种实施方式中,该输入消息单组尺寸为512比特。eax=0时,该多条微指令填充该输入数据m,填充后数据为m’,m’=m,1,k{0},64{len}。len为输入数据m的比特长度。填充后数据m’包括输入数据m、1比特高位
‘1’
、k比特低位
‘0’
、以及64比特表示的len。数值k使(len+1+k)除以512的余数为448。根据该多条微指令,512比特倍数长的输入数据m、或填充后数据m’被以512比特为单位进行分组,成n组各512比特的输入消息,包括b(0),

,b(n

1),n为整数。
51.寄存器ecx储存的是一输入数据(m)长度。若eax=0,寄存器ecx所载的该输入数据
长度以字节(byte)为计数单位。若eax=

1,寄存器ecx所载的该输入数据长度以64字节的数据块(64

byte block)为计数单位。
52.寄存器esi储存的是一输入数据指针,指向储存该输入数据m的一内存空间。本发明所述内存空间可以是处理器所耦接的一系统内存(如ram)空间,可遵循es segment分段技术。寄存器edi储存的是一哈希值指针,指向储存该初始哈希常量v(0)的一内存空间(可遵循es segment分段技术)。
53.此外,表格204还显示微码ucode如何对应isa的sm3密码算法指令定义输出寄存器(output registers);在sm3密码算法完成,转换出该转换后哈希值v(n)后,如下设定各个寄存器eax、ecx、esi、edi。
54.寄存器esi上维护的输入数据指针会增加一位移量。寄存器eax为“0”时,该位移量即寄存器ecx管理的该输入数据长度。寄存器eax为
“‑
1”时,该位移量为寄存器ecx所载的该输入数据尺寸乘以64。寄存器edi上的哈希值指针则不变动,使sm3密码算法转换出的转换后哈希值v(n)得以覆盖初始哈希常量v(0)。
55.另外,寄存器eax以及寄存器ecx在sm3密码算法完成后,可有以下调整。若寄存器eax在输入时是设定“0”,则寄存器ecx不变,寄存器eax更新同寄存器ecx数值。若寄存器eax在输入时是设定
“‑
1”,则寄存器ecx归零,寄存器eax不变化。
56.图2b图解isa的sm3密码算法指令的格式212,并以表格214介绍相关的微码ucode设计。格式212同格式202。解码器110辨识出编码“0xf3 0x0f 0xa60xe8”后,即依照微码ucode产生多条微指令,其中包括定义、使用、以及管理架构寄存器124,以操作密码执行单元118对输入数据m进行sm3密码算法。
57.不同于表格204所示微码ucode设计为输入数据指针、哈希值指针分别提供寄存器esi以及寄存器edi,图2b表格214所示微码ucode设计是以寄存器esi储存一信息指针,指向一内存空间,其中储存一输入数据指针、以及一哈希值指针。该输入数据指针所指的内存空间储存该输入数据m,而该哈希值指针所指的内存空间储存该初始哈希常量v(0)。相应的,关于sm3密码算法的输出寄存器设定,表格214所示微码ucode设计不变动寄存器esi。
58.图2c图解isa的sm3密码算法指令的格式222,并以表格224介绍相关的微码ucode设计。格式222同格式202、212。解码器110辨识出编码“0xf3 0x0f0xa6 0xe8”后,即依照微码ucode产生多条微指令,其中包括定义、使用、以及管理架构寄存器124,以操作密码执行单元118对输入数据m进行sm3密码算法。
59.与图2a相比,不同于表格204所示微码ucode设计为哈希值指针提供寄存器edi,图2c表格224所示微码ucode设计是使寄存器edi在开始sm3密码算法时填0,设定使用该密码执行单元118内部的一执行单元内部寄存器储存该转换后哈希值v(n)。关于sm3密码算法的输出寄存器设定,表格224所示微码ucode设计使寄存器edi储存该执行单元内部寄存器的一执行单元寄存器编号。只要再以微指令访问寄存器edi,便可根据该执行单元寄存器编号寻得该执行单元内部寄存器,获得该转换后哈希值v(n),作为下一笔输入数据的初始哈希常量使用。
60.图2d图解isa的sm3密码算法指令的格式232,并以表格234介绍相关的微码ucode设计。不同于格式202、212、222,格式232有字段inpointer以及outpointer,分别储存一输入数据指针、以及一哈希值指针,指向系统内存储存的输入数据m以及初始哈希常量v(0)。
如此可节省使用该组架构寄存器124。一种实施方式中,sm3密码算法指令的格式232字段inpointer以及outpointer分别为32比特。解码器110辨识出编码“0xf3 0x0f 0xa6 0xe8”后,即依照微码ucode产生多条微指令,包括定义、使用、以及管理架构寄存器124,其中就不会应用到寄存器esi和寄存器edi。
61.图3还图解isa指令撰写的一种实施方式。程序代码300可包括以上格式202、212、222、或232的sm3密码算法指令302。该条sm3密码算法指令302之前可包括至少一条寄存器设定指令304,用于填写架构寄存器124,为sm3密码算法指令302的执行做准备。
62.图4为流程图,根据本发明一种实施方式图解isa的sm3密码算法指令引发的步骤程序,相应该sm3密码算法指令所转换出的多条微指令。
63.步骤s402检查输入数据(m)长度,例如,判读寄存器ecx。若寄存器ecx为0,流程进入步骤s404,该sm3密码算法指令执行结束。若寄存器ecx不为0,流程进入步骤s406。
64.步骤s406检查寄存器eax,判断是否有消息填充需求(填充为512比特的倍数)。若寄存器eax为0,步骤s408进行消息填充。输入数据m填充为m’(=m,1,k{0},64{len})。若寄存器eax不为0,流程略去消息填充步骤s408。512比特倍数长的输入数据m、或填充后数据m’以512比特为单位进行分组,成n组输入消息,包括b(0),

,b(n

1),n为整数。接着,处理器100通过步骤s410、s412和s414,逐步转换出特定长度的转换后哈希值v(n)。首先,流程进行步骤s410,开始根据一sm3引擎微指令操作该sm3引擎126。
65.步骤s410,初始哈希常量v(0)、以及第一组512比特输入消息的b(0)从系统内存空间输入该sm3引擎126,使sm3引擎126根据该初始哈希常量v(0)、以及该组输入消息b(0)运作。步骤s412,sm3引擎126转换得一中间哈希值v(1)。步骤s414检查是否对所有组输入消息完成运算,以继续、或停止循环。一种实施方式中,一循环次数可由密码执行单元118内部一寄存器temp_gpr管理,其起始值相关于寄存器eax以及寄存器ecx的输入值。寄存器temp_gpr管理的该循环次数将随着各组输入消息的运算完成而减少,即可用来判断输入数据m的输入消息b(0),

,b(n

1)是否都完成运算,达成该输入数据m的sm3密码算法。若还有输入消息未处理,流程回到步骤s410,使sm3密码算法引擎126根据中间哈希值(如,v(1))、以及下一组输入消息(如,b(1))运作,并在步骤s412转换得到下一中间哈希值(如,v(2))。以此类推,处理器100逐步处理各组输入消息,直到处理完所有组输入消息,以得到特定长度的转换后哈希值v(n)。在一实施例中,特定长度为256比特。
66.若所有组输入消息b(0),

,b(n

1)都完成运算,即该输入数据m的sm3密码算法完成,流程进入步骤s416,储存该转换后哈希值v(n)。若采用图2a、2b或2d设计,sm3引擎126是将该转换后哈希值v(n)填入系统内存;例如,根据该哈希值指标覆盖在内存的初始哈希常量v(0)上。若采用图2c设计,sm3引擎126是将该转换后哈希值v(n)填入该密码执行单元118的一执行单元内部寄存器,可再用微指令读出。步骤s418,该sm3密码算法指令执行结束。
67.上述sm3引擎微指令对应步骤s410、s412,反复驱动该sm3引擎126完成各组输入消息b(i)的哈希值转换(v(i)

v(i+1)),使初始哈希常量v(0)转换成该转换后哈希值v(n)。
68.sm3引擎126实现的运算为:
69.v(i+1)=cf(v(i),b(i))
70.cf为压缩函数:每组512比特的输入消息b(i)经消息扩展后,对应64轮(j=0~63)迭代压缩,转换出256比特的哈希值v(i+1)。初始哈希常量v(0)在所有组输入消息b(0)~b
(n

1)运算完后,转换成该转换后哈希值v(n)。
71.图5根据本发明一种实施方式图解一sm3引擎500,用于实现对一组输入消息(比如b(i))的处理,其中硬件用作:消息扩展502、迭代压缩504,且包括一加速器内部储存空间m1。加速器内部储存空间m1储存迭代压缩504所使用到的常数。
72.sm3引擎500接收512比特的一组输入消息b(i)后,是以消息扩展502将该组输入消息b(i)扩展成132个字,包括以及再以迭代压缩504进行64轮迭代运算,转换成哈希值v(i+1),供接下来512比特的另一组输入消息b(i+1)使用。
73.迭代压缩504实现以下运算:
[0074][0075]
其中,ffj和ggj为布尔函数,p0(.)为置换函数。迭代压缩504硬件包括加速器内部储存空间m2与m3、以及函数硬件506。加速器内部储存空间m2缓存起始此64轮压缩运算的哈希值v(i),即用作参数a~h。经函数硬件506提供的函数ffj、ggj、p0(.)运算后,参数a~h更新,缓存于加速器内部储存空间m3,再转换出哈希值v(i+1)供下一组512比特输入消息b(i+1)使用。所有输入消息b(0)

b(n

1)运算完后,加速器内部储存空间m3内容用于储存该转换后哈希值v(n)。
[0076]
图示初始哈希常量(v(0))508则是根据前述哈希值指针从系统内存获取,用于填入该加速器内部储存空间m2供第一组输入消息b(0)的132个字(包括以及的迭代压缩使用。
[0077]
一种实施方式中,所有输入消息b(0)

b(n

1)运算完毕后所转换出的该转换后哈希值v(n)可存于密码执行单元118内部空间,待后续微指令取出。另一种实施方式中,该转换后哈希值v(n)是覆盖在哈希值指针所指示的系统内存空间上。
[0078]
本发明将中间哈希值v(1)

v(n

1)妥善保护在sm3引擎500中。本发明设计提供更高安全度的密码算法硬件。
[0079]
一种实施方式中,密码执行单元118没有特地设计sm3引擎126,仅通过规划微码ucode内容,令单一条isa的sm3密码算法指令转换出多条微指令操作逻辑运算单元alu,即完成该输入数据m的sm3密码算法。特别是,如此实施例也是将sm3密码算法的中间数据保护在处理器的内部储存空间,具有高安全性。
[0080]
一种实施方式中,sm3引擎比sm3引擎500少一些功能模块,并将缺少的功能模块(比如,消息扩展502)使用微码ucode配置微指令操作逻辑运算单元alu来实现。此实施例也有保护中间数据在处理器的内部储存空间的能力。
[0081]
总之,根据本发明一种实施方式实现的一处理器响应一指令集架构(isa)的单一条哈希密码算法指令,该处理器从一第一内存空间取得有限长度的一输入数据,对该输入数据进行一哈希密码算法(sm3密码算法),转换出特定长度的一转换后哈希值。本发明以单一条isa指令就完成sm3密码算法。使用sm3引擎126实现sm3密码运算,可以提高运算速度和安全性。除了以特殊硬件(sm3引擎126)辅助实现,也有全微码实现的实施例。
[0082]
本发明还将sm3引擎126应用在椭圆曲线公钥密码算法(sm2密码算法)中。以下介绍具备sm2密码算法的处理器。
[0083]
图6为方块图,根据本发明一种实施方式图解一处理器600。与图1相比,密码执行单元618除了包括sm3引擎126,还包括一sm2引擎626(即椭圆曲线密码算法加速器),后文会结合图27讲述sm2引擎626的详细硬件架构。微码ucode还有相应isa的sm2密码算法指令(即椭圆曲线密码算法指令)的内容。解码器110根据图6微码ucode,将本发明isa的sm2密码算法指令解码为处理器100流水线可识别的多条微指令,定义、使用、以及管理架构寄存器124,以操作包括sm2引擎626以及sm3引擎126的密码执行单元618,实现sm2密码算法的加密、解密、签名、验证签名、密钥交换

等运算。特别是,本发明将sm2密码算法的关键中间变量妥善隐藏在处理器内部,安全系数相当高。至于安全需求较低的中间变量则可以用系统内存(例如,处理器外的ram)暂存,以节省处理器内部的储存空间。
[0084]
图7根据本发明一种实施方式图解isa的sm2密码算法指令的格式702。格式702的前缀、操作码(opcode)、字段modr/m为:0xf2 0x0f 0xa6 0xc0。字段sib、displacement、以及immediate则不填(non)。解码器110辨识出编码“0xf20x0f 0xa6 0xc0”后,即依照微码ucode产生多条微指令,其中包括查询架构寄存器124其一寄存器edx所储存的一控制字(control word),判断出进行的是sm2密码算法的哪一个运算。该控制字可以6比特表示,对应运算如下:
[0085]
·6’
b 000001:加密(encryption)。
[0086]
·6’
b 000010:解密(decryption)。
[0087]
·6’
b 000100:签名(signature)。
[0088]
·6’
b 001000:签名验证(verify signature)。
[0089]
·6’
b 010000:密钥交换第一运算(key exchange1)。
[0090]
·6’
b 010001:密钥交换第二运算,不涉及哈希值运算的模式(key exchange2,don’t calculate hash)。
[0091]
·6’
b 010101:密钥交换第二运算,涉及哈希值运算的模式(keyexchange2,calculate hash)。
[0092]
·6’
b 010010:密钥交换第三运算,不涉及哈希值运算的模式(key exchange3,don’t calculate hash)。
[0093]
·6’
b 010110:密钥交换第三运算,涉及哈希值运算的模式(keyexchange3,calculate hash)。
[0094]
·6’
b 100000:第一预处理运算(preprocess1 to calculate value zof user’s identification)。
[0095]
·6’
b 100001:第二预处理运算(preprocess2 to calculate hashvalue for z and message m)。
[0096]
首先讨论sm2密码算法的加密运算。
[0097]
图8以表格804说明相应加密运算的微码ucode设计,显示对应产生的微指令如何解读架构寄存器124内容。前述控制字6’b 000001(cw)会事先储存在输入寄存器edx中,以注明作加密运算。除了该输入寄存器edx,表格804还分条列举输入寄存器eax、ebx、ecx、esi、edi,都作为起始加密运算的输入寄存器。一条isa的sm2密码算法指令所指示的加密运算的完成则包括填写输出寄存器eax、ecx、edi。输入或输出寄存器的应用也可有其他实施方式。
[0098]
作为输入寄存器时,寄存器eax储存一明文输入m指针,指向储存一明文输入m的一内存空间(可由处理器所耦接的一系统内存,如ram,提供,可遵循es segment分段技术)。寄存器ebx储存的是一加密公钥p
b
指针,指向储存一加密公钥p
b
的一内存空间(可遵循es segment分段技术)。寄存器ecx储存该明文输入m的字节数量。寄存器edx储存注明加密代号(6’b 000001)的控制字cw。寄存器esi储存一中间变量指针,指向一内存空间(又称暂存空间scratch space,可暂存已有高安全度的中间变量,可为8k大小,可遵循es segment分段技术,可初始化为全0,可由软件向操作系统要求规划系统内存而得)。一种实施方式中,中间变量为计算中会用到的参数。如,点乘函数中涉及的中间变量包括坐标系转换后的点坐标、或坐标系转换涉及的中间值

等。寄存器edi储存一密文输出c指针,指向一内存空间(可遵循es segment分段技术),指定一密文输出c的储存处。
[0099]
随着该条isa的sm2密码算法指令所指示的加密运算结束,输出寄存器的调整包括:将寄存器eax所储存指针增加一位移量,该位移量为该明文输入m的字节数量;使寄存器ecx储存密文输出c的字节数量;以及,将寄存器edi储存指针增加一位移量,该位移量即该密文输出c的字节数量。
[0100]
图9a、9b为流程图,根据本发明一种实施方式图解isa的单一条sm2密码算法指令引发的加密运算,相应该sm2密码算法指令所转换出的多条微指令。
[0101]
始于图9a,步骤s902将一硬件操作控制字(取自输入寄存器edx)输入sm2引擎626,使用sm2引擎626的一点乘(point multiplication)硬件,计算出一椭圆曲线点c1,其中c1=[k]g,k为一随机数,k∈[1,n

1]。g为椭圆曲线参数之一,由微码ucode提供,为椭圆曲线的基点。sm2引擎626回传椭圆曲线点c1。步骤s902可包括一点乘硬件操作微指令的执行。密码
执行单元618可包括一随机数产生器,由一随机数产生微指令操作,产生该随机数k。
[0102]
步骤s904将硬件操作控制字以及加密公钥p
b
(根据输入寄存器ebx中保存的指针获取)输入sm2引擎626,使用该点乘硬件,计算出一椭圆曲线点s,其中s=[h]p
b
。h为椭圆曲线参数之一,为椭圆曲线的余因子。sm2引擎626回传椭圆曲线点s。步骤s904可包括一点乘硬件操作微指令的执行。
[0103]
步骤s906检查椭圆曲线点s是否为零点(零点为椭圆曲线上的一个特殊点,又称为无穷远点)。若是,流程进入步骤s908,处理器产生加密失败提示。若否,流程进行步骤s910,将硬件操作控制字以及加密公钥p
b
输入sm2引擎626,使用该点乘硬件,计算出一椭圆曲线点(x2,y2)=[k]p
b
。sm2引擎626回传椭圆曲线点(x2,y2)。步骤s910可包括一点乘硬件操作微指令的执行。
[0104]
步骤s912基于该明文输入m(根据输入寄存器eax中保存的明文输入m指针获取)的一比特长度klen,进行密钥衍生(key derivation function),进行计算:t=kdf(x2||y2,klen),其中kdf为密钥衍生函数(即密钥派生函数),x2||y2表示x2与y2的拼接。
[0105]
步骤s914检查数值衍生出的密钥t是否为零(即,判断t是否为全0比特串)。若是,流程回到步骤s902,更新随机数k,再次计算椭圆曲线点c1以及s。若否,流程进行图9b的步骤s916,从系统内存将该明文输入m加载到处理器600,进行异或运算,产生部分密文c2:c2=m

t。
[0106]
步骤s918将硬件操作控制字以及完成消息填充的数值(x2||m||y2)输入sm2引擎626,使用sm2引擎626的一预处理硬件(preprocessing unit),对数值(x2||m||y2)进行分组等预处理,再输入该sm3引擎126(使用sm3引擎的过程见前面图4的步骤s410、s412及s414),实现哈希运算:c3=hash(x2||m||y2),其中hash为密码哈希函数,x2||m||y2表示x2、m与y2的拼接。sm2引擎626回传部分密文c3。步骤s918可包括一预处理硬件操作微指令、甚至一sm3引擎微指令的执行。
[0107]
步骤s920根据输入寄存器edi中保存的密文输出c指针将密文输出c载至该系统内存,其中c=c1||c2||c3,其中c1||c2||c3表示c1、c2与c3的拼接。步骤s922结束该条sm2密码算法指令所引发的加密运算。在另一实施例中,c=c1||c3||c2。
[0108]
总之,响应于一指令集架构(isa)的单一条椭圆曲线密码算法指令(sm2密码算法指令),一处理器从一第一内存空间取得一明文输入m,利用通过一寄存器(如,ebx)取得的一公钥p
b
对该明文输入m进行一椭圆曲线密码算法(sm2密码算法)的一加密运算,加密该明文输入m成一密文输出c,并将该密文输出c写入一第二内存空间。本发明以单一条isa指令就完成sm2密码算法的加密运算。与单独使用sm2引擎626实现椭圆曲线密码算法的加密运算相比,同时使用sm2引擎626和sm3引擎126,可以提高运算速度和安全性。除了以特殊硬件(sm3引擎126、sm2引擎626)辅助实现,也有全微码实现的实施例。
[0109]
接着讨论sm2密码算法的解密运算。
[0110]
图10以表格1004说明相应解密运算的微码ucode设计,显示对应产生的微指令如何解读架构寄存器124内容。前述控制字6’b 000010(cw)会事先储存在输入寄存器edx,以注明作解密运算。除了输入寄存器edx,表格1004还分条列举输入寄存器eax、ebx、ecx、esi、edi,都作为起始解密运算的输入寄存器。一条isa的sm2密码算法指令所指示的解密运算的完成则包括填写输出寄存器eax、ecx、edi。输入或输出寄存器的应用也可有其他实施方式。
[0111]
作为输入寄存器时,寄存器eax储存一密文输入c指针,指向储存一密文输入c的一内存空间(可遵循es segment分段技术),其中,如前所述,密文c=c1||c2||c3(在另一实施例中,c=c1||c3||c2)。寄存器ebx储存的是一解密私钥d
b
指针,指向储存一解密私钥d
b
的一内存空间(可遵循es segment分段技术)。寄存器ecx储存密文输入c的字节数量。寄存器edx储存注明解密代号(6’b 000010)的控制字cw。寄存器esi储存一中间变量指针,指向一内存空间(又称暂存空间scratch space,可暂存具有高安全度的中间变量,可为8k大小,可遵循es segment分段技术,可初始化为全0,可由软件向操作系统要求规划内存)。寄存器edi储存一明文输出m’指针,指向一内存空间(可遵循es segment分段技术),指定一明文输出m’的储存处。
[0112]
随着该条isa的sm2密码算法指令所指示的解密运算结束,输出寄存器的调整包括:将寄存器eax所储存指针增加一位移量,该位移量为该密文输入c的字节数量;使寄存器ecx储存明文输出m’的字节数量;以及,将寄存器edi储存指针增加一位移量,该位移量为该明文输出m’的字节数量。
[0113]
图11a、11b为流程图,根据本发明一种实施方式图解单一条isa的sm2密码算法指令引发的解密运算,相应该sm2密码算法指令所转换出的多条微指令。
[0114]
始于图11a,步骤s1102根据输入寄存器eax中保存的密文输入c指针从系统内存将部分密文c1(c1为椭圆曲线点,后文也称作点c1)加载到该处理器600(即从密文中取出c1,然后将c1加载到该处理器600)。步骤s1104验证点c1是否符合一椭圆曲线方程式。若否,流程进行步骤s1106,处理器输出解码失败提示,报错并退出解密运算。反之,若c1符合该椭圆曲线方程式,流程进行步骤s1108。
[0115]
步骤s1108将一硬件操作控制字(取自输入寄存器edx)以及点c1输入该sm2引擎626,使用该点乘硬件,计算出一椭圆曲线点s,其中s=[h]c1。sm2引擎626回传椭圆曲线点s。步骤s1108可包括一点乘硬件操作微指令的执行。
[0116]
步骤s1110验证椭圆曲线点s是否为零点。若是,判定解码失败,流程进行步骤s1106,处理器输出解码失败提示。若椭圆曲线点s不为零点,流程进行步骤s1112,将该硬件操作控制字以及解密私钥d
b
输入sm2引擎626,使用该点乘硬件,计算出一椭圆曲线点(x2,y2)=[d
b
]c1。sm2引擎626回传椭圆曲线点(x2,y2)。步骤s1112可包括一点乘硬件操作微指令的执行。
[0117]
步骤s1114基于一部分密文c2(即密文中的c2,根据输入寄存器eax中保存的密文输入c指针从系统内存获取)的一比特长度klen,进行密钥衍生:t=kdf(x2||y2,klen)。
[0118]
步骤s1116检查衍生密钥t是否为零(即,判断t是否为全0比特串)。若是,步骤s1106判定解码失败,处理器输出解码失败提示。若否,流程进行图11b的步骤s1118,从系统内存将该部分密文c2加载到处理器600,进行异或运算:m’=c2⊕
t。
[0119]
步骤s1120将硬件操作控制字以及完成消息填充的数值(x2||m’||y2)输入sm2引擎626,使用该预处理硬件,对数值(x2||m’||y2)进行分组等预处理,再输入该sm3引擎126(使用sm3引擎的过程见前面图4的步骤s410、s412及s414),实现哈希运算:u=hash(x2||m’||y2),其中hash为密码哈希函数,x2||m’||y2表示x2、m’与y2的拼接。sm2引擎626回传哈希值u。步骤s1120可包括一预处理硬件操作微指令、甚至一sm3引擎微指令的执行。
[0120]
步骤s1122验证哈希值u是否等于部分密文c3(根据输入寄存器eax中保存的密文
输入c指针从系统内存获取)。若否,判定解码失败,流程进行步骤s1106,处理器输出解码失败提示。若哈希值u等于部分密文c3,步骤s1124根据输入寄存器edi中保存的明文输出m’指针将明文输出m’载至系统内存。步骤s1126结束该单一条sm2密码算法指令所引发的解密运算。
[0121]
总之,响应于一指令集架构(isa)的单一条椭圆曲线密码算法指令(sm2密码算法指令),一处理器从一第一内存空间取得一密文输入c,利用通过该第一寄存器取得的该私钥d
b
对该密文输入c进行一椭圆曲线密码算法的一解密运算,解密该密文输入c成一明文输出m’,并将该明文输出m’写入一第二内存空间。本发明以单一条isa指令就完成sm2密码算法的解密运算。与单独使用sm2引擎626实现椭圆曲线密码算法的解密运算相比,同时使用sm2引擎626和sm3引擎126,可以提高运算速度和安全性。除了以特殊硬件(sm3引擎126、sm2引擎626)辅助实现,也有全微码实现的实施例。
[0122]
接着讨论sm2密码算法的签名运算,其中使用到一第一预处理运算、以及一第二预处理运算所计算出的一哈希值。第一预处理运算、以及第二预处理运算将于稍后段落再详细讨论。
[0123]
图12以表格1204说明相应签名运算的微码ucode设计,显示对应产生的微指令如何解读架构寄存器124内容。前述控制字6’b 000100(cw)会事先储存在输入寄存器edx,以注明作签名运算。除了输入寄存器edx,表格1204还分条列举输入寄存器eax、ebx、esi、edi,都作为起始签名运算的输入寄存器。一条isa的sm2密码算法指令所指示的签名运算的完成则包括填写输出寄存器ecx、edi。输入或输出寄存器的应用也可有其他实施方式。
[0124]
作为输入寄存器时,寄存器eax储存一哈希值e指针,指向储存该哈希值e的一内存空间(可遵循es segment分段技术);该哈希值e是一第一预处理运算以及一第二预处理运算针对一待签名数据m而产生、且预存在该内存空间。寄存器ebx储存的是一私钥d
a
指针,指向储存签名者一私钥d
a
的一内存空间(可遵循es segment分段技术)。寄存器edx储存注明签名代号(6’b 000100)的控制字cw。寄存器esi储存一中间变量指针,指向一内存空间(又称暂存空间scratch space,可暂存已有高安全度的中间变量,可为8k大小,可遵循es segment分段技术,可初始化为全0,可由软件向操作系统要求规划)。寄存器edi储存一签名(r,s)指针,指向一内存空间(可遵循es segment分段技术),指定签名(r,s)的储存处。
[0125]
随着该条isa的sm2密码算法指令所指示的签名运算结束,输出寄存器的调整包括:使寄存器ecx储存签名(r,s)的字节数量;以及,将寄存器edi储存的签名指针增加一位移量,该位移量为签名(r,s)的字节数量。
[0126]
图13为流程图,根据本发明一种实施方式图解一sm2密码算法指令引发的签名运算,相应该sm2密码算法指令所转换出的多条微指令。
[0127]
步骤s1302将一硬件操作控制字(取自输入寄存器edx)输入该sm2引擎626,使用该点乘硬件,计算出一椭圆曲线点(x1,y1)=[k]g。sm2引擎626回传椭圆曲线点(x1,y1)。k为一随机数。g为椭圆曲线基点。步骤s1302可包括一点乘硬件操作微指令的执行。
[0128]
步骤s1304根据输入寄存器eax中保存的哈希值e指针将该哈希值e从该系统内存加载到该处理器600,计算一数值r=(e+x1)mod n。n为椭圆曲线参数之一,为基点g的阶。
[0129]
步骤s1306验证数值r是否为零,或r+k是否为n。若r为零、或/以及r+k为n成立,流程回到步骤s1302,以新的随机数k再次操作点乘硬件。若r不为零、且r+k不为n,流程进入步
骤s1308。
[0130]
步骤s1308根据输入寄存器ebx中保存的私钥d
a
指针从系统内存将签名者的该私钥d
a
加载到该处理器600,运算出数值(1+d
a
)
‑1,与阶n输入sm2引擎626,使用sm2引擎626的一模逆(modular inverse)硬件,计算出一数值s’=(1+d
a
)
‑1mod n。基于数值s’,sm2引擎626的一模乘(modular multiplication)硬件运算出一数值s=(s’*(k

r*d
a
))mod n。该模逆硬件可接收一第一模逆输入、以及一第二模逆输入,产生一模逆输出。该模乘硬件可接收一第一模乘输入、一第二模乘输入、以及一第三模乘输入,产生一模乘输出。r不为零、且r+k不为n时,该处理器执行该多条微指令提供的一模逆硬件操作微指令、以及一模乘硬件操作微指令。响应该模逆硬件操作微指令,该模逆硬件进行模逆运算,s’=(1+d
a
)
‑1mod n,(1+d
a
)为该第一模逆输入,n为该第二模逆输入,s’为该模逆输出。响应该模乘硬件操作微指令,该模乘硬件进行模乘运算s=(s’*(k

r*d
a
))mod n,s’为该第一模乘输入,(k

r*d
a
)为该第二模乘输入,n为该第三模乘输入,s为该模乘输出。
[0131]
步骤s1310验证数值s是否为零。若是,流程回到步骤s1302,以新的随机数k再次操作点乘硬件。若s不为零,步骤s1312中,处理器根据输入寄存器edi中保存的签名(r,s)指针将签名(r,s)载至该系统内存,并将签名(r,s)的长度载至寄存器ecx。步骤s1314结束sm2密码算法指令引发的签名运算。
[0132]
总之,响应于一指令集架构(isa)的一条椭圆曲线密码算法指令(sm2密码算法指令),一处理器通过一第一寄存器(eax)从一第一内存空间取得一待签名数据(m)的一哈希值(e),通过一第二寄存器取得签名者的一私钥(d
a
),以该私钥(d
a
)对该哈希(e)值进行一椭圆曲线密码算法的一签名运算而产生一签名(r,s),并将该签名(r,s)写入一第二内存空间。本发明以该条isa指令就完成sm2密码算法以上签名运算。使用sm2引擎626实现椭圆曲线密码算法的签名运算,可以提高运算速度和安全性。除了以特殊硬件(sm2引擎626)辅助实现,也有全微码实现的实施例。
[0133]
接着讨论sm2密码算法的签名验证运算,其中同样使用到后续才详细讨论的第一预处理运算、以及第二预处理运算。第一预处理运算、以及第二预处理运算是用来为一待验证数据m’计算出的一哈希值e’。
[0134]
图14以表格1404说明相应签名验证运算的微码ucode设计,显示对应产生的微指令如何解读架构寄存器124内容。前述控制字6’b 001000(cw)会事先储存在输入寄存器edx,以注明作签名验证运算。除了输入寄存器edx,表格1404还分条列举输入寄存器eax、ebx、esi、edi,都作为起始签名验证运算的输入寄存器。一条isa的sm2密码算法指令所指示的签名验证运算的完成则包括填写输出寄存器ecx。输入或输出寄存器的应用也可有其他实施方式。
[0135]
作为输入寄存器时,寄存器eax储存一哈希值e’指针,指向储存一哈希值e’的一内存空间(可遵循es segment分段技术)。该哈希值e’为第一预处理运算以及第二预处理运算基于一待验证数据m’而产生。寄存器ebx储存的是一公钥p
a
指针,指向储存签名者一公钥p
a
的一内存空间(可遵循es segment分段技术)。寄存器edx储存注明验证签名代号(6’b 001000)的控制字cw。寄存器esi储存一中间变量指针,指向一内存空间(又称暂存空间scratch space,可暂存已有高安全度的中间变量,可为8k大小,可遵循es segment分段技术,可初始化为全0,可由软件向操作系统申请)。寄存器edi储存一签名(r’,s’)指针,指向
储存一签名(r’,s’)的一内存空间(可遵循es segment分段技术)。
[0136]
随着该条isa的sm2密码算法指令所指示的签名验证运算结束,输出寄存器的调整包括:填写寄存器ecx,以“1”代表签名验证通过,以“0”代表签名验证失败。
[0137]
图15为流程图,根据本发明一种实施方式图解一sm2密码算法指令引发的签名验证运算,相应该sm2密码算法指令所转换出的多条微指令。
[0138]
步骤s1502根据输入寄存器edi中保存的签名(r’,s’)指针将签名(r’,s’)从系统内存加载到该处理器600。步骤s1504检查两条件:r’∈[1,n

1];以及s’∈[1,n

1]。数值n为椭圆曲线基点g的阶。若有任一条件不成立,步骤s1506判定签名验证运算失败(例如,寄存器ecx填0)。若两条件都成立,步骤s1508计算数值t=(r’+s’)mod n。步骤s1510检查数值t是否为零。若是,步骤s1506判定签名验证运算失败。若否,流程进入步骤s1512。
[0139]
步骤s1512将一硬件操作控制字(取输入自寄存器edx)、数值t、签名s’输入sm2引擎626,使用该点乘硬件,计算出一椭圆曲线点(x1’
,y1’
)=[s’]g+[t]p
a
。sm2引擎626回传椭圆曲线点(x1’
,y1’
)。步骤s1512可涉及两条点乘硬件操作微指令。第一条操作该sm2引擎626求出[s’]g。第二条操作该sm2引擎626求出[t]p
a

[0140]
步骤s1514根据输入寄存器eax中保存的哈希值e’指针将待验证数据m’的该哈希值e’(另外以第一、第二预处理运算计算出、储存于系统内存)从系统内存加载到该处理器600,计算一签名r=(e’+x1’
)mod n。
[0141]
步骤s1516验证签名r是否等于签名r’。若否,步骤s1506判定签名验证运算失败,并将输出寄存器ecx填0。若是,步骤s1518判定签名验证运算成功,并将输出寄存器ecx填1。在另一实施例中,将输出寄存器ecx填1表示签名验证运算失败,而将输出寄存器ecx填0表示签名验证运算成功。总之,本发明并不限定用于表示签名验证运算成功、失败的具体数值。步骤s1520结束sm2密码算法指令所引发的签名验证运算。
[0142]
总之,响应于一指令集架构(isa)的一条椭圆曲线密码算法指令(sm2密码算法指令),一处理器通过第一寄存器(eax)取得一待验证数据m’的一哈希值e’,通过第二寄存器(ebx)取得签名者的一公钥p
a
,通过第三寄存器取得一签名(r’,s’),以该公钥、以及该签名对该哈希值进行一椭圆曲线密码算法的一签名验证运算,产生该验证结果做储存。本发明以该条isa指令就完成sm2密码算法以上签名验证运算。使用sm2引擎626实现椭圆曲线密码算法的签名验证运算,可以提高运算速度和安全性。除了以特殊硬件(sm2引擎626)辅助实现,也有全微码实现的实施例。
[0143]
接着讨论sm2密码算法的密钥交换功能,其中使用到密钥交换第一程序、密钥交换第二程序、以及密钥交换第三程序。密钥交换第二、第三程序又各自有涉及哈希值、以及不涉及哈希值的版本。本发明一种实施方式设计一指令集架构的三条椭圆曲线密码算法指令(三条sm2密码算法指令)。发起方处理器通过第一条椭圆曲线密码算法指令生成密钥对(r
a
,r
a
)。基于第一临时公钥r
a
、以及自身产生的第二临时公钥r
b
,响应方处理器执行第二条椭圆曲线密码算法指令生成响应方共享公钥k
b
。基于临时私钥r
a
、以及临时公钥r
a
与r
b
,发起方执行第三条椭圆曲线密码算法指令生成发起方共享公钥k
a

[0144]
图16以表格1604说明相应密钥交换第一程序的微码ucode设计,显示对应第一条sm2密码算法指令产生的微指令如何解读架构寄存器124内容。前述控制字6’b 010000(cw)会事先储存在输入寄存器edx,以注明作一密钥交换第一程序运算。除了输入寄存器edx,表
格1604还分条列举有输入寄存器esi、edi,都作为起始密钥交换第一程序运算的输入寄存器。一条isa的sm2密码算法指令所指示的密钥交换第一程序运算的完成则包括填写输出寄存器edi。输入或输出寄存器的应用也可有其他实施方式。
[0145]
作为输入寄存器时,寄存器edx储存注明密钥交换第一程序代号(6’b010000)的控制字cw。寄存器esi储存一中间变量指针,指向一系统内存空间(又称暂存空间scratch space,可暂存已有高安全度的中间变量可为8k大小,可遵循es segment分段技术,可初始化为全0,可由软件向操作系统申请)。寄存器edi储存一输出密钥对(r
a
,r
a
)指针,指示密钥对(r
a
,r
a
)至一内存(可遵循es segment分段技术)的储存。
[0146]
随着该条isa的sm2密码算法指令所指示的密钥交换第一程序运算结束,输出寄存器ecx维持不变。
[0147]
图17为流程图,根据本发明一种实施方式图解一条sm2密码算法指令引发的密钥交换第一程序运算,相应该sm2密码算法指令所转换出的多条微指令。此条sm2密码算法指令是由密钥交换的发起方执行。
[0148]
步骤s1702将一硬件操作控制字(取自输入寄存器edx)输入sm2引擎626,使用该点乘硬件,计算一椭圆曲线点r
a
=[r
a
]g=(x1,y1)。r
a
为一随机数,作为发起方的临时私钥。r
a
为第一临时公钥。步骤s1702可包括一点乘硬件操作微指令的执行,也可还包括一随机数产生微指令,操作该密码执行单元618内的一随机数产生器,产生一随机数作为该临时私钥r
a

[0149]
步骤s1704检查两条件:x1∈[1,p

1],以及y1∈[1,p

1],其中p为一256比特(bit)的素数。若有任一条件不成立,流程回到步骤s1702,以新的随机数更新密钥对(r
a
,r
a
)。若两条件都成立,步骤s1706检查该第一临时公钥r
a
是否符合一椭圆曲线(即是否满足椭圆曲线方程,下同)。若否,流程回到步骤s1702,以新的随机数更新密钥对(r
a
,r
a
)。若是,步骤s1708根据输入寄存器edi中保存的输出密钥对(r
a
,r
a
)指针将密钥对(r
a
,r
a
)载至内存。步骤s1710结束sm2密码算法的密钥交换第一程序运算。密钥对(r
a
,r
a
)保留于发起方,待后续产生发起方共享密钥k
a
时使用。第一临时公钥r
a
还需传递(如,通过网络)给响应方,使响应方得以进行密钥交换第二程序运算。
[0150]
图18以表格1804说明相应密钥交换第二程序运算的微码ucode设计,显示对应第二条sm2密码算法指令产生的微指令如何解读架构寄存器124内容。前述控制字(cw)6’b 010001(不涉及哈希值)、或6’b 010101(涉及哈希值)会事先储存在输入寄存器edx,以注明作密钥交换第二程序运算不涉及哈希值、或涉及哈希值的版本。除了输入寄存器edx,表格1804分条列举输入寄存器eax、ecx、esi、edi,都作为起始密钥交换第二程序运算的输入寄存器。一条isa的sm2密码算法指令所指示的密钥交换第二程序的完成则包括管理输出寄存器edi。输入或输出寄存器的应用也可有其他实施方式。
[0151]
作为输入寄存器时,寄存器eax记载一密钥交换信息指针,指向一内存储存的储存密钥交换信息(可遵循es segment分段技术)。该密钥交换信息包括:发起方的第一临时公钥r
a
;响应方私钥d
b
、响应方公钥p
b
、发起方公钥p
a
、发起方身份标识符(即可辨别标识,下同)比特长度id
a
_len、发起方身份标识符id
a
、响应方身份标识符比特长度id
b
_len、以及响应方身份标识符id
b
。寄存器ecx储存一共享密钥比特长度(klen)。共享密钥比特长度klen取决于通信双方需要该密钥做什么用途;例如,用于sm4加密时,共享密钥比特长度klen可
010101),流程进入步骤s1924、s1926。
[0161]
步骤s1924计算哈希值s2,
[0162]
s2=hash(0x03||y
v
||hash(x
v
||z
a
||z
b
||x1||y1||x2||y2))。
[0163]
步骤s1926计算哈希值s
b

[0164]
s
b
=hash(0x02||y
v
||hash(x
v
||z
a
||z
b
||x1||y1||x2||y2))。
[0165]
步骤s1928根据输入寄存器edi中保存的共享密钥指针将响应方共享密钥k
b
、第二临时公钥r
b
、哈希值s2以及s
b
载至系统内存,再由步骤s1922结束一sm2密码算法指令引发的密钥交换第二程序运算。第二临时公钥r
b
还需传递(如,通过网络)给发起方,使发起方得以进行密钥交换第三程序运算。
[0166]
图20以表格2004说明相应密钥交换第三程序运算的微码ucode设计,显示对应第三条sm2密码算法指令产生的微指令如何解读架构寄存器124内容。前述控制字(cw)6’b 010010(不涉及哈希值)、或6’b 010110(涉及哈希值)会事先储存在输入寄存器edx,以注明作密钥交换第三程序运算不涉及哈希值、或涉及哈希值的版本。除了输入寄存器edx,表格2004还分条列举输入寄存器eax、ecx、esi、edi,都作起始密钥交换第三程序运算的输入寄存器。一条isa的sm2密码算法指令所指示的密钥交换第三程序运算的完成则包括管理输出寄存器edi。输入或输出寄存器的应用也可有其他实施方式。
[0167]
作为输入寄存器时,寄存器eax记载一密钥交换信息指针,指向内存储存的密钥交换信息。该密钥交换信息包括:发起方的临时私钥r
a
、发起方的第一临时公钥r
a
、响应方提供的第二临时公钥r
b
、响应方公钥p
b
、发起方私钥d
a
、发起方公钥p
a
、发起方身份标识符长度id
a
_len、发起方身份标识符id
a
、响应方身份标识符长度id
b
_len、以及响应方身份标识符id
b
。寄存器ecx储存一共享密钥比特长度(klen)。寄存器edx储存注明密钥交换第二程序两种控制字cw之一(密钥交换第二程序代号两种型式之一;不涉及哈希值的6’b 010010、或涉及哈希值的6’b 010110)。寄存器esi储存一中间变量指针,指向一系统内存空间(又称暂存空间scratch space,可暂存已有高安全度的中间变量,可为8k大小,可遵循es segment分段技术,可初始化为全0,可由软件向操作系统申请)。寄存器edi储存一共享密钥指针,指示发起方所生成的一发起方共享密钥k
a
、甚至哈希值s1和s
a
(选用;不涉及哈希值时不使用,涉及哈希值则使用)至该内存的储存(可遵循es segment分段技术)。
[0168]
随着该条isa的sm2密码算法指令所指示的密钥交换第三程序运算结束,输出寄存器edi维持不变。
[0169]
图21a、21b为流程图,根据本发明一种实施方式图解一sm2密码算法指令引发的密钥交换第三程序运算,相应该sm2密码算法指令所转换出的多条微指令。此条sm2密码算法指令是由密钥交换的发起方执行。
[0170]
始于图21a,步骤s2102根据输入寄存器eax中保存的密钥交换信息指针从系统内存将第一临时公钥r
a
的x坐标x1加载到处理器600,计算步骤s2104从系统内存将发起方私钥d
a
加载到处理器600,计算步骤s2106判断响应方提供的该第二临时公钥r
b
是否符合发起方的一椭圆曲线。若否,步骤s2108使处理器输出密钥交换协商失败提示。反之,步骤s2110以第二临时公钥r
b
的x2坐标计算数值坐标计算数值
[0171]
步骤s2112将数值t
a
、响应方公钥p
b
和第二临时公钥r
b
输入sm2引擎626,使用该点乘硬件,计算出一椭圆曲线点sm2引擎626回传椭圆曲线点u。步骤s2112可包括两条点乘硬件操作微指令的执行,一条算出另一条算出
[0172]
步骤s2114判断椭圆曲线点u是否为无限点(infinite point)。若是,步骤s2108使处理器输出密钥交换协商失败提示。若否,流程进入图21b的步骤s2116。
[0173]
步骤s2116根据输入寄存器eax中保存的密钥交换信息指针从系统内存将发起方身份标识符比特长度id
a
_len、发起方身份标识符id
a
、响应方身份标识符比特长度id
b
_len、以及响应方身份标识符id
b
加载到处理器600,计算身份哈希值z
a
以及z
b
,再进行密钥衍生,计算出发起方共享密钥k
a
=kdf(x
u
||y
u
||z
a
||z
b
,klen)。一种实施方式中,身份哈希值z
a
以及z
b
是用第一预处理运算计算出来的。
[0174]
步骤s2118检查寄存器edx储存的控制字cw,决定是否要输出哈希值计算结果。若否(6’b 010010),步骤s2120将发起方共享密钥k
a
载至系统内存,再由步骤s2122结束一sm2密码算法指令引发的密钥交换第三程序运算。若是(cw=6’b 010110),流程进入步骤s2124、s2126。
[0175]
步骤s2124计算哈希值s
a

[0176]
s
a
=hash(0x03||y
u
||hash(x
u
||z
a
||z
b
||x1||y1||x2||y2))。
[0177]
步骤s2126计算哈希值s1,
[0178]
s1=hash(0x02||y
u
||hash(x
u
||z
a
||z
b
||x1||y1||x2||y2))。
[0179]
步骤s2128根据输入寄存器edi中保存的共享密钥指针将发起方共享密钥k
a
、哈希值s
a
以及s1载至系统内存,再由步骤s2122结束结束一sm2密码算法指令引发的密钥交换第三程序运算。
[0180]
以有考虑哈希值的示例来说,发起方的s
a
以及s1会与响应方的s2以及s
b
进行比较,判断密钥交换协商成功与否。
[0181]
图22根据本发明一种实施方式图解发起方以及响应方如何利用本发明提出的密钥交换第一~第三程序运算达成密钥交换。发起方、响应方可彼此通信。在一实施例中,发起方、响应方各自具有一处理器(600)。在另一实施例中,发起方、响应方的处理器是同一个(如处理器600)。在另一实施例中,发起方和/或响应方是加密卡。总之,本发明并不限制发起方、响应方的具体形式。
[0182]
步骤s2202使发起方准备好原始数据,包括:椭圆曲线系统参数、身份哈希值z
a
、z
b
、发起方私钥d
a
、发起方公钥p
a
、以及响应方公钥p
b
。步骤s2204使响应方准备好原始数据,包括:椭圆曲线系统参数、身份哈希值z
a
、z
b
、响应方私钥d
b
、响应方公钥p
b
、以及发起方公钥p
a

[0183]
步骤s2206在发起方执行第一条sm2密码算法指令,其中寄存器edx已以控制字cw注明是进行密钥交换第一程序运算。计算出来的第一临时公钥r
a
经通信发给响应方。
[0184]
步骤s2208,响应方依据发起方传来的第一临时公钥r
a
,执行第二条sm2密码算法指令,其中寄存器edx已以控制字cw注明是进行密钥交换第二程序运算。响应方计算出来的第二临时公钥r
b
经通信发给发起方。另外,响应方以该第二条sm2密码算法指令还运算得一响应方共享密钥k
b
、以及哈希值s2与s
b
。哈希值s2以及s
b
用于后续确认是否协商成功。
[0185]
步骤s2210,发起方依据响应方传来的第二临时公钥r
b
,执行第三条sm2密码算法指令,其中寄存器edx已以控制字cw注明是进行密钥交换第三程序运算。发起方以该第三条sm2密码算法指令运算得发起方共享密钥k
a
、以及哈希值s
a
与s1。哈希值s
a
以及哈希值s1用于后续确认是否协商成功。
[0186]
步骤s2212检查哈希值s1是否等于哈希值s
b
(发起方判断)、以及哈希值s2是否等于哈希值s
a
(响应方判断)。若两条件均成立,步骤s2214使处理器判定发起方到响应方的密钥交换确认成功。若任一条件不成立,步骤s2216使处理器输出密钥交换协商失败提示。
[0187]
总之,根据本发明一种实施方式所设计的发起方用一第一寄存器(edi)、以及一第二寄存器(eax)。针对一指令集架构(isa)的一第一条椭圆曲线密码算法指令,该第一寄存器(edi)储存一密钥对(r
a
,r
a
)指针,指示密钥对(r
a
,r
a
)至内存的储存。响应该第一条椭圆曲线密码算法指令,该处理器进行一椭圆曲线密码算法的一密钥交换第一程序运算,生成一随机数作为一临时私钥r
a
,并以该临时私钥r
a
处理一椭圆曲线基点g生成一第一临时公钥r
a
,并通过该第一寄存器将该临时私钥r
a
、以及该第一临时公钥r
a
写入该内存。该第二寄存器(eax)储存一密钥交换信息指针,指向该内存储存的密钥交换信息,该密钥交换信息包括该临时私钥r
a
、该第一临时公钥r
a
、以及一第二临时公钥r
b
。该第二临时公钥r
b
系由密钥交换的响应方提供,该响应方的处理器系执行一第二条椭圆曲线密钥算法指令,进行该椭圆曲线密码算法的一密钥交换第二程序运算,生成该第二临时公钥r
b
,并基于该第一临时公钥r
a
以及该第二临时公钥r
b
而生成一响应方共享密钥k
b
。针对一第三条椭圆曲线密码算法指令,该第一寄存器(edi)更新成储存一共享密钥指针,指示一发起方共享密钥k
a
至该内存的储存。响应该第三条椭圆曲线密码算法指令,该处理器进行该椭圆曲线密码算法的一密钥交换第三程序运算,通过该第二寄存器(eax)取得该第二临时公钥r
b
,基于该临时私钥r
a
、该第一临时公钥r
a
、以及该第二临时公钥r
b
生成该发起方共享密钥k
a
,并通过该第一寄存器(edi)将该发起方共享密钥k
a
写入该内存。
[0188]
总之,根据本发明一种实施方式所设计的响应方用一第一寄存器(edi)、以及一第二寄存器(eax)。该第二寄存器(eax)储存一密钥交换信息指针,指向一内存储存的密钥交换信息,该密钥交换信息包括一第一临时公钥r
a
。该第一临时公钥r
a
系由密钥交换的发起方提供,该发起方的处理器执行一指令集架构的一第一条椭圆曲线密钥算法指令,进行一椭圆曲线密码算法的一密钥交换第一程序运算而生成该第一临时公钥r
a
。该第一寄存器储存一共享密钥指针,指示一响应方共享密钥k
b
、以及一第二临时公钥r
b
至该内存的储存。响应一第二条椭圆曲线密码算法指令,该处理器进行该椭圆曲线密码算法的一密钥交换第二程序运算,生成一随机数作为一临时私钥r
b
,以该临时私钥r
b
处理一椭圆曲线基点g生成该第二临时公钥r
b
,通过该第二寄存器(eax)取得该第一临时公钥r
a
,基于该第一临时公钥r
a
以及该第二临时公钥r
b
而生成一响应方共享密钥k
b
,并通过该第一寄存器(edi)将该第二临时公钥r
b
、以及该响应方共享密钥k
b
存入该内存。该第二临时公钥r
b
用于供应该发起方的处理器执行一第三条椭圆曲线密钥算法指令,进行该椭圆曲线密码算法的一密钥交换第三程序运算而生成一发起方共享密钥k
a

[0189]
本发明以简单三条isa指令就完成sm2密码算法的密钥交换。与单独使用sm2引擎626实现椭圆曲线密码算法的密钥交换运算相比,同时使用sm2引擎626和sm3引擎126,可以提高运算速度和安全性。除了以特殊硬件(sm3引擎126、sm2引擎626)辅助实现,也有全微码
实现的实施例。
[0190]
以下段落则详细说明应用在哈希值计算的第一预处理运算以及第二预处理运算。
[0191]
图23以表格2304说明相应第一预处理运算的微码ucode设计,显示对应单一条sm2密码算法指令产生的微指令如何解读架构寄存器124内容。前述控制字(cw)6’b 100000会事先储存在输入寄存器edx,以注明该单一条sm2密码算法指令作第一预处理运算。除了输入寄存器edx,表格2304还分条列举寄存器eax、ebx、ecx、esi、edi,都作为第一预处理运算的输入寄存器。一条isa的sm2密码算法指令所指示的第一预处理运算的完成还包括管理输出寄存器edi。输入或输出寄存器的应用也可有其他实施方式。
[0192]
作为输入寄存器时,寄存器eax记载一用户标识符id
a
指针,指向储存一用户标识符id
a
的一内存空间(可遵循es segment分段技术)。寄存器ebx记载一公钥(x
a
,y
a
)指针,指向储存一公钥(x
a
,y
a
)的一内存空间(可遵循es segment分段技术)。寄存器ecx记载用户标识符id
a
的比特长度entl
a
。寄存器edx储存注明第一预处理运算代号的控制字cw(6’b 100000)。寄存器esi储存一中间变量指针,指向一内存空间(又称暂存空间scratch space,可暂存已有高安全度的中间变量,可为8k大小,可遵循es segment分段技术,可初始化为全0,可由软件向操作系统申请)。寄存器edi储存一预处理哈希值z
a
指针,指示一内存空间(可遵循es segment分段技术),用于储存一预处理哈希值z
a

[0193]
随着该条isa的sm2密码算法指令所指示的第一预处理运算结束,输出寄存器edi增加一位移量,该位移量为预处理哈希值z
a
的32字节区块数量。
[0194]
图24为流程图,根据本发明一种实施方式图解一sm2密码算法指令引发的第一预处理运算,相应该sm2密码算法指令所转换出的多条微指令。
[0195]
步骤s2402根据输入寄存器eax中保存的用户标识符id
a
指针从内存将用户标识符id
a
加载到处理器600,并将用户标识符id
a
的长度entl
a
从输入寄存器ecx加载到处理器600。步骤s2404拼凑出数据s,
[0196]
s=entl
a
||id
a
||a||b||x
g
||y
g
||x
a
||y
a
[0197]
a、b为椭圆曲线参数,(x
g
,y
g
)为一椭圆曲线基点g,(x
a
,y
a
)为该公钥,s为一比特串。
[0198]
步骤s2406对比特串s进行消息填充。步骤s2408将硬件操作控制字、循环尺寸(比特串s的字节数)、以及比特串s填充后的值输入sm2引擎626,使用其中预处理硬件,通过sm3引擎126实现预处理哈希值运算,
[0199]
z
a
=hash(entl
a
||id
a
||a||b||x
g
||y
g
||x
a
||y
a
),
[0200]
其中,循环尺寸的计算公式为:2+ecx/8+32+32+32+32+32+32,ecx为用户标识符id
a
的比特长度entl
a

[0201]
步骤s2408可包括一预处理硬件操作微指令、甚至一sm3引擎操作微指令。步骤s2410中,sm2引擎626回传该预处理哈希值z
a
。步骤s2412根据输入寄存器edi中保存的预处理哈希值z
a
指针将该预处理哈希值z
a
载至内存。步骤s2414结束一sm2密码算法指令引发的第一预处理运算。
[0202]
总之,响应于一指令集架构(isa)的一条椭圆曲线密码算法指令(sm2密码算法指令),一处理器通过一第一寄存器(eax)取得一用户标识符id
a
,通过一第二寄存器(ebx)取得公钥(x
a
,y
a
),对该公钥(x
a
,y
a
)、该用户标识符id
a
、以及一用户标识符长度entl
a
、进行一
椭圆曲线密码算法的一第一预处理运算而产生一预处理哈希值z
a
,并将该预处理哈希值z
a
写入内存,待后续一第二预处理运算使用。本发明以单一条isa指令就完成sm2密码算法的第一预处理运算。除了以特殊硬件(sm3引擎126、sm2引擎626)辅助实现,也有全微码实现的实施例。
[0203]
图25以表格2504说明相应第二预处理运算的微码ucode设计,显示对应单一条sm2密码算法指令产生的微指令如何解读架构寄存器124内容说明。前述控制字(cw)6’b 100001会事先储存在输入寄存器edx,以注明作第二预处理运算。除了输入寄存器edx,表格2504还分条列举输入寄存器eax、ebx、ecx、edi,都作为第二预处理运算的输入寄存器。一条isa的sm2密码算法指令所指示的第二预处理运算的完成还包括管理输出寄存器edi。输入或输出寄存器的应用也可有其他实施方式。
[0204]
作为输入寄存器时,寄存器eax记载一预处理哈希值z
a
指针,指向稍早一第一预处理运算所产生且储存的该预处理哈希值z
a
。寄存器ebx记载一输入数据m指针,指向储存一输入数据m(如,签名运算的待签名数据、或签名验证运算的已签名数据)的一内存空间(可遵循es segment分段技术)。寄存器ecx记载该输入数据m的字节数量。寄存器edx储存注明第二预处理运算代号的控制字cw(6’b 100001)。寄存器edi储存一哈希值e指针,指示一内存空间(可遵循es segment分段技术),用于储存一哈希值e。
[0205]
随着该条isa的sm2密码算法指令所指示的第二预处理运算结束,输出寄存器edi增加一位移量,该位移量为哈希值e的32字节区块数量。
[0206]
图26为流程图,根据本发明一种实施方式图解一sm2密码算法指令引发的第二预处理运算,相应该sm2密码算法指令所转换出的多条微指令。
[0207]
步骤s2602根据输入寄存器eax中保存的预处理哈希值z
a
指针从系统内存将一预处理哈希值z
a
以及一输入数据m加载到处理器600。步骤s2604拼凑出预处理数据步骤s2606对预处理数据进行消息填充。
[0208]
步骤s2608将一硬件操作控制字、循环尺寸(预处理数据的字节数)、以及预处理数据填充后的结果输入该sm2引擎626,使用其中预处理硬件,通过sm3引擎126实现哈希值运算,其中,循环尺寸的计算公式为:32+ecx,ecx为该输入数据m的字节数量。步骤s2608可包括一预处理硬件操作微指令、甚至一sm3引擎操作微指令。步骤s2610中,sm2引擎626回传哈希值e。步骤s2612根据输入寄存器edi中保存的哈希值e指针将哈希值e载至系统内存。步骤s2614结束sm2密码算法指令引发的第二预处理运算。
[0209]
总之,响应于一指令集架构(isa)的一条椭圆曲线密码算法指令(sm2密码算法指令),一处理器通过一第一寄存器(eax)从内存取得一预处理哈希值z
a
,通过一第二寄存器(ebx)从内存取得一输入数据m,对该预处理哈希值z
a
、以及该输入数据m进行该椭圆曲线密码算法的一第二预处理运算,生成一预处理数据且基于该预处理数据转换出该哈希值e,并将该哈希值e储存在内存。本发明以单一条isa指令就完成sm2密码算法的第二预处理运算。除了以特殊硬件(sm3引擎126、sm2引擎626)辅助实现,也有全微码实现的实施例。
[0210]
以上预处理设计是令哈希值运算由两条sm2密码算法指令实现,将输入数据m转换为哈希值e。第一条sm2密码算法指令即进行该第一预处理运算,产生与用户身份相关的一预处理哈希值z
a
=hash(entl
a
||id
a
||a||b||x
g
||y
g
||x
a
||y
a
)。第二条sm2密码算法指令即
进行第二预处理运算,基于输入数据m以及预处理哈希值z
a
生成哈希值e,包括运算:以及签名运算之前,可先以第一、第二预处理运算为待签名数据准备好哈希值。签名验证之前,也可先以第一、第二预处理运算为待验证数据准备好哈希值。
[0211]
另外,以密钥交换的示例来说,前述第一预处理运算也可用来实现身份哈希值z
b
之计算。与计算身份哈希值z
a
不同,使用第一预处理运算计算身份哈希值z
b
时,寄存器eax记载的是一用户标识符id
b
指针,以指向储存一用户标识符id
b
的一内存空间(可遵循es segment分段技术)。寄存器ebx记载的是一公钥(x
b
,y
b
)指针,以指向储存一公钥(x
b
,y
b
)的一内存空间(可遵循es segment分段技术)。寄存器ecx记载的是用户标识符id
b
的比特长度entl
b
。寄存器edi储存的是一预处理哈希值z
b
指针,指示一内存空间(可遵循es segment分段技术),用于储存预处理哈希值z
b
。并且,在图24所示的流程图的步骤中,使用的也都是计算预处理哈希值z
b
相关的数据,此处就不赘述了。
[0212]
以下段落细节说明本发明硬件实施方式。
[0213]
图27根据本发明一种实施方式图解sm2引擎626的详细硬件架构,包括一控制逻辑硬件2702、一点乘硬件2704、一预处理硬件2706、一模乘硬件2708、以及一模逆硬件2710。密码执行单元618另外有一随机数产生器2712。sm2引擎626也与随机数产生器2712、sm3引擎126耦接。
[0214]
根据一硬件操作控制字2714,控制逻辑硬件2702输出控制信号pnt_mul驱动该点乘硬件2704、或输出控制信号pre_process驱动该预处理硬件2706、或输出控制信号modular_mul驱动该模乘硬件2708、或输出控制信号modular_inverse驱动该模逆硬件2710。输入数据2716可以是根据各运算的输入寄存器内容而取得。sm2引擎626各运算的回传数据为输出数据2718。
[0215]
图28根据本发明一种实施方式图解一点乘硬件操作微指令驱动的该点乘硬件2704,其中实现一第一坐标系统转换硬件2802、一多倍点计算硬件2804、以及一第二坐标系统转换硬件2806。点乘硬件2704也与模乘硬件2708以及模逆硬件2710耦接。一椭圆曲线输入点2808以及一输入大数2810输入该点乘硬件2704后,配合模乘硬件2708以及模逆硬件2710的使用,转换出一椭圆曲线输出点2812。
[0216]
一种实施方式中,该第一坐标系统转换硬件2802将为仿射坐标点的该椭圆曲线输入点2808,转换成一第一中间点,该第一中间点为加重射影坐标点。该多倍点计算硬件2804以该输入大数2810对该第一中间点作多倍点计算,生成一第二中间点。该第二坐标系统转换硬件2806将为加重射影坐标点的该第二中间点,转换成该椭圆曲线输出点2812。该椭圆曲线输出点2812为仿射坐标点。
[0217]
图29根据本发明一种实施方式图解一预处理硬件操作微指令驱动的该预处理硬件2706,其中进行消息分组,将经过消息填充处理的一输入数据2902转换为n组输入消息b(0)

b(n

1),并依次交由该sm3引擎126进行消息扩展与迭代压缩,依次生成瞬时哈希值,最终转换出一转换后哈希值2904。具体而言,预处理硬件2706将第1组输入消息b(0)和初始哈希常量v(0)交由sm3引擎126,生成瞬时哈希值v(1),然后再将第2组输入消息b(1)和瞬时哈希值v(1)交由sm3引擎126,生成瞬时哈希值v(2),依次类推,直至生成转换后哈希值v(n)。
[0218]
图30根据本发明一种实施方式图解一模乘硬件操作微指令驱动的该模乘硬件2708,根据硬件输入实现运算:
[0219]
输出积=(输入乘数#1)*(输入乘数#2)mod(输入模数)
[0220]
输入乘数#1、输入乘数#2、输入模数可分别称为第一、第二、以及第三模乘输入。输出积即模乘输出。
[0221]
图31根据本发明一种实施方式图解一模逆硬件操作微指令驱动的该模逆硬件2710,根据硬件输入实现运算:
[0222]
模逆输出=(输入大数)
‑1mod(输入模数)
[0223]
输入大数可称第一模逆输入。输入模数可称第二模逆输入。
[0224]
本发明硬件、微码ucode设计更可能有多种变形。
[0225]
一种实施方式中,密码执行单元118没有特地设计sm2引擎626,而是通过规划微码ucode内容,令单一条isa的sm2密码算法指令转换出多条微指令操作逻辑运算单元alu,即完成sm2密码算法。
[0226]
一种实施方式中,sm2引擎比sm2引擎626少一些功能模块,并将缺少的功能模块(比如,模乘硬件2708)使用微码ucode配置微指令操作逻辑运算单元alu来实现。
[0227]
由上可知,在已知的技术中,是使用软件和/或专门的硬件(如外接密码卡等)实现sm2密码算法,使用软件实现无法有效保证数据的安全性,而使用专门的硬件实现在部署时需要另外购买专门的硬件,所以会增加部署成本。但是,通过本发明提供的具备椭圆曲线密码算法(sm2)的处理器及其处理方法,只需使用一条指令集架构指令就可以实现椭圆曲线密码算法,可将在实现椭圆曲线密码算法的过程中生成的中间数据储存在处理器内部硬件存储空间中,使得在处理器外部无法访问这些中间数据,极大地提高了安全性。另外,由于在部署时不需要另外购买专门的硬件,所以减少了部署成本。
[0228]
虽然本发明已以较佳实施例揭示如上,然其并非用于限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可做些许更动与润饰,因此本发明的保护范围以权利要求界定为准。
[0229]
[符号说明]
[0230]
100:处理器;
[0231]
102:分支预测器;
[0232]
104:指令高速缓存;
[0233]
106:指令缓存器(xib);
[0234]
108:格式指令队列(fiq);
[0235]
110:解码器;
[0236]
112:指令队列(xiq);
[0237]
114:重命名单元;
[0238]
116:内存顺序缓存区;
[0239]
118:密码执行单元;
[0240]
120:资料高速缓存;
[0241]
122:重排缓存区;
[0242]
124:架构寄存器;
[0243]
126:sm3引擎(哈希密码算法加速器);
[0244]
202、212、222、232:sm3密码算法指令的格式;
[0245]
204、214、224、234:表格,相应格式202、212、222、232的微码ucode设计;
[0246]
300:程序代码;
[0247]
302:sm3密码算法指令;
[0248]
304:至少一条寄存器设定指令;
[0249]
500:sm3引擎;
[0250]
502:硬件,用于消息扩展;
[0251]
504:硬件,用于迭代压缩;
[0252]
506:函数硬件,实现布尔函数ffj和ggj、以及置换函数p0(.);
[0253]
508:初始哈希值v(0);
[0254]
600:处理器;
[0255]
618:密码执行单元;
[0256]
626:sm2引擎;
[0257]
702:sm2密码算法指令的格式;
[0258]
804:表格,相应sm2密码算法的加密运算;
[0259]
1004:表格,相应sm2密码算法的解密运算;
[0260]
1204:表格,相应sm2密码算法的签名运算;
[0261]
1404:表格,相应sm2密码算法的签名验证运算;
[0262]
1604:表格,相应sm2密码算法的密钥交换第一程序运算;
[0263]
1804:表格,相应sm2密码算法的密钥交换第二程序运算;
[0264]
2004:表格,相应sm2密码算法的密钥交换第三程序运算;
[0265]
2304:表格,相应sm2密码算法的第一预处理运算;
[0266]
2504:表格,相应sm2密码算法的第二预处理运算;
[0267]
2702:控制逻辑硬件;
[0268]
2704:点乘硬件;
[0269]
2706:预处理硬件;
[0270]
2708:模乘硬件;
[0271]
2710:模逆硬件;
[0272]
2712:随机数产生器;
[0273]
2714:硬件操作控制字;
[0274]
2716:输入数据;
[0275]
2718:输出数据;
[0276]
2802:第一坐标系统转换硬件;
[0277]
2804:多倍点计算硬件;
[0278]
2806:第二坐标系统转换硬件;
[0279]
2808:椭圆曲线输入点;
[0280]
2810:输入大数;
[0281]
2812:椭圆曲线输出点;
[0282]
2902:输入数据
[0283]
2904:转换后哈希值;
[0284]
a

h:参数;
[0285]
agu:地址产生单元;
[0286]
alu:逻辑运算单元;
[0287]
dtlb:数据转译后备缓冲区;
[0288]
eax、ecx、esi、edi~寄存器;
[0289]
fadd、fmul、fmisc、mmx:多种指令的对应硬件;
[0290]
itlb:指令转译后备缓冲;
[0291]
m1

m3~加速器内部储存空间;
[0292]
opcode、modr/m、sib、displacement、以及immediate:sm3密码算法指令的格式字段;
[0293]
pnt_mul、pre_process、modular_mu、modular_inverse:硬件控制信号;
[0294]
rs:保留站;
[0295]
s402

s418、s902

s920、s1102

s1126、s1302

s1314、s1502

s1520、s1702

s1710、s1902

s1928、s2102

s2128、s2202

s2216、s2402

s2414、s2602

s2614:步骤;
[0296]
ucode:微码;
[0297]
v(i+1):哈希值;
[0298]
以及各输入消息b(i)扩展出的132个字。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1