CN103546288A - Sm2数字签名生成算法的实现方法及装置 - Google Patents

Sm2数字签名生成算法的实现方法及装置 Download PDF

Info

Publication number
CN103546288A
CN103546288A CN201310445395.1A CN201310445395A CN103546288A CN 103546288 A CN103546288 A CN 103546288A CN 201310445395 A CN201310445395 A CN 201310445395A CN 103546288 A CN103546288 A CN 103546288A
Authority
CN
China
Prior art keywords
digital signature
user
private key
cpu
generating algorithm
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201310445395.1A
Other languages
English (en)
Other versions
CN103546288B (zh
Inventor
林璟锵
潘无穷
余幸杰
王琼霄
荆继武
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Data Assurance and Communication Security Research Center of CAS
Original Assignee
Data Assurance and Communication Security Research Center of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Data Assurance and Communication Security Research Center of CAS filed Critical Data Assurance and Communication Security Research Center of CAS
Priority to CN201310445395.1A priority Critical patent/CN103546288B/zh
Publication of CN103546288A publication Critical patent/CN103546288A/zh
Application granted granted Critical
Publication of CN103546288B publication Critical patent/CN103546288B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

一种SM2数字签名生成算法的实现方法及装置,本发明采用CPU和GPU协作方式进行SM2数字签名生成算法计算,将SM2数字签名生成算法中的计算椭圆曲线点步骤在GPU中进行预先计算得到结果并存储在设置的存储器中,将对用户私钥增1求逆计算在CPU中进行预先计算得到结果并存储在设置的存储器中,然后由CPU根据SM2数字签名生成算法计算步骤对待签名消息顺序计算时,调用存储器存储的预先计算得到的结果,从而节省了对待签名消息进行数字签名的计算时间,提高了SM2数字签名生成算法的计算效率。更进一步,在CPU中可以同时对多个不同用户私钥分别进行用户私钥增1后求逆并存储在存储器中,进一步提高计算效率。

Description

SM2数字签名生成算法的实现方法及装置
技术领域
本发明涉及公钥密码算法技术,特别涉及一种结合中央处理器(CPU)和图形处理器(GPU,Graphics Processing Unit)的SM2数字签名生成算法的实现方法及装置。
背景技术
采用多核并行计算是提升处理器性能的重要方式,因此出现了包括海量并行结构运算单元的GPU,GPU已经发展成为了并行度高、多线程、计算快捷及内存带宽大的高性能通用处理器。GPU体系结构在组成上分为三层:第一层由若干个线程处理器簇(TPC,Thread Preocessing Cluster)组成,第二层由多个流多处理器(SM,Streaming Multiprocessor)组成,第三层为构成SM的流处理器(SP,Stream Processor),也可以称为线程处理器。SM作为GPU的一个任务执行和调度单元,主要负责执行GPU分发的线程指令,而SP是GPU中最基本的指令执行单元,其执行的操作由所属的SM控制。
2006年NVIDIA公司推出了计算机一体设备结构(CUDA,ComputeUnified Device Architecture)可编程平台,可以实现GPU线程的调度。在CUDA可编程平台架构下,GPU执行的最小单位是线程(thread),数个线程(thread)可以组成一个线程块(block)。一个block中的thread可以存取同一共享内存且同步。执行相同程序的thread,组成栅格(grid),不同的grid可以执行不同的程序。
相对于中央处理器(CPU),GPU具有强大的数据处理能力,在浮点运算及并行计算等方面,提高几十倍甚至数百倍于CPU的性能。GPU具有几千个核,有很高的并行性,但是每个SM相比CPU处理能力比较弱。CPU计算能力强,但是核数比较少。因此,采用何种CPU和GPU协作方式进行构架,完成各种计算,以提高***整体计算能力,是一个亟待解决的问题。
椭圆曲线公钥密码算法(SM2),是中国国家密码管理局发布的密码算法。SM2明确规定了SM2算法的数字签名算法、公钥加密算法及密钥交换协议。其中,SM2算法的数字签名算法包括生成算法和验证算法,应用在消息传输过程中可靠性的消息传输及使用消息的合法者验证。在SM2的数字签名算法中,包括一一对应的公钥和私钥,其中,私钥用于待签名消息生成数字签名,公钥用于对数字签名进行验证。签名者采用私钥进行待签名消息M的数字签名生成算法计算,得到待签名消息M的数字签名;验证者采用公钥对接收的待签名消息M进行数字签名验证计算,验证待签名消息M的数字签名是否匹配,如果匹配,确认接收的待签名消息M是正确的。
SM2算法的数字签名生成算法具体过程如下。
设待签名消息为M,为了取得待签名消息M的数字签名(r,s),作为签名者的用户A应实现以下运算步骤:
A1:置
Figure BDA00003870409700023
ZA‖M表示ZA与M的拼接;
A2:计算将e的数据类型转换为整数;
A3:产生随机数k∈[1,n-1];
A4:计算椭圆曲线点(x,y)=[k]G;
A5:计算r=(e+x)mod n,若r=0或r+k=n则返回A3;
A6:计算s=((1+dA)-1·(k-r·dA))mod n,若s=0则返回A3;
A7:将r、s的数据类型转换为字节串,待签名消息M的签名为(r,s)。
其中:ZA:关于用户A的可辨别标识、部分椭圆曲线***参数和用户公钥A的杂凑值;HV():消息摘要长度为v比特的密码杂凑函数;G:椭圆曲线上的一个基点,其阶为素数;n:基点G的阶;dA:用户A的私钥;[k]G:椭圆曲线上点G的k倍点,即,[k]G=G+G…+G,表示k个G在椭圆曲线域上相加。
目前,在实现SM2数字签名生成算法时,是由CPU按照上述步骤顺序计算,最终得到待签名消息M的数字签名,由于在计算过程中计算量比较大,比较费时,得到数字签名的效率比较低。
发明内容
有鉴于此,本发明提供一种结合CPU和GPU的SM2数字签名生成算法的实现方法,该方法能够提高SM2数字签名生成算法的计算效率。
本发明还提供一种结合CPU和GPU的SM2数字签名生成算法实现装置,该装置能够提高SM2数字签名生成算法的计算效率。
为达到上述目的,本发明实施的技术方案具体是这样实现的:
一种SM2数字签名生成算法的实现方法,该方法包括:
将SM2数字签名生成算法中的计算椭圆曲线点步骤由图形处理器GPU预先计算,得到椭圆曲线点及对应的随机数,并存储在设置的存储器中;
将SM2数字签名生成算法中的对用户私钥增1求逆计算步骤由中央处理器CPU预先计算,得到用户私钥的增1逆值存储在设置的存储器中;
CPU根据SM2数字签名生成算法计算步骤对待签名消息顺序计算时,调用存储器存储的椭圆曲线点及对应的随机数,以及用户私钥的增1逆值,完成对待签名消息的数字签名。
所述SM2数字签名生成算法中的对用户私钥增1求逆计算的CPU线程与所述根据SM2数字签名生成算法计算步骤对待签名消息顺序计算的CPU线程相同或不同。
所述将SM2数字签名生成算法中的对用户私钥增1求逆计算步骤在CPU预先计算为:
对于预先存储了用户私钥的签名请求,在接收SM2数字签名生成请求之前,预先进行用户私钥增1求逆计算,用户私钥表示为dA,用户私钥增1求逆表示为(1+dA)-1mod n,其中n为椭圆曲线基点G的阶。
所述将SM2数字签名生成算法中的对用户私钥增1求逆计算步骤在CPU预先计算为:
对于未预先存储用户私钥的签名请求,在CPU接收到SM2数字签名生成请求之后,CPU根据SM2数字签名生成算法计算步骤对待签名消息顺序计算之前,获取到用户私钥后进行增1求逆计算;
所述求逆计算的CPU线程与根据SM2数字签名生成算法计算步骤对待签名消息顺序计算的CPU线程不同。
所述获取到用户私钥进行增1求逆计算为:
设定同时求逆计算的用户私钥门限数或者设定间隔时刻,当到达同时求逆计算的用户私钥门限数或者设定的间隔时刻时,将所获取的多个不同用户私钥同时进行增1求逆操作后得到的不同用户私钥的增1逆值。
所述将所获取的多个不同用户私钥同时进行增1求逆操作后得到的不同用户私钥增1逆值为:
计算d1=1+dA1,d2=1+dA2,…,di=1+dAi
计算d1’=d1,d2’=d1*d2,…,di’=d1*d2*…*di
计算H=(di’)-1mod n;
计算(d1)-1=H*d2*…*di,(d2)-1=H*d1*d3*…*di,…,(di)-1=H*d1*d2*…*di-1
其中,dAi为用户私钥,(di)-1为用户私钥的逆,n为椭圆曲线基点G的阶。
所述SM2数字签名生成算法中的计算椭圆曲线点步骤的计算由一个GPU线程顺序完成,或多个GPU线程针对不同的随机数同时计算完成。
一种SM2数字签名生成算法的实现装置,该装置包括:GPU计算单元、CPU计算单元及存储器,其中,
GPU计算单元,用于执行SM2数字签名生成算法中的计算椭圆曲线点步骤,并将计算得到的椭圆曲线点及对应的随机数存储在存储器中;
CPU计算单元,用于执行SM2数字签名生成算法中的对用户私钥增1求逆计算步骤,得到用户私钥的增1逆值存储在存储器中;根据SM2数字签名生成算法计算步骤对待签名消息顺序计算时,调用存储器存储的预先存储的椭圆曲线点及对应的随机数,以及用户私钥的增1逆值,完成对待签名消息的数字签名。
存储器,用于存储椭圆曲线点及对应的随机数,以及用户私钥的增1逆值。
所述CPU计算单元,还用于在接收到SM2数字签名生成请求之前,存储有用户私钥,预先进行用户私钥增1求逆计算并存储在存储器中。
所述CPU计算单元包括多个CPU计算单元,其中,
一个CPU计算单元,还用于在CPU接收到SM2数字签名生成请求之后,CPU根据SM2数字签名生成算法步骤对待签名消息顺序计算之前,获取到用户私钥增1进行求逆计算并存储在存储器中;
其他CPU计算单元,还用于根据SM2数字签名生成算法步骤对待签名消息顺序计算时,调用存储器存储的预先存储的椭圆曲线点及对应的随机数,以及用户私钥的增1逆值,完成对待签名消息的数字签名。
所述GPU计算单元为一个或一个以上,用于顺序执行SM2数字签名生成算法中的计算椭圆曲线点步骤,或者针对不同的随机数同时执行SM2数字签名生成算法中的计算椭圆曲线点步骤。
由上述方案可以看出,本发明采用CPU和GPU协作方式进行SM2数字签名生成算法计算,将SM2数字签名生成算法中的计算椭圆曲线点步骤在GPU中进行预先计算得到结果并存储在设置的存储器中,将对用户私钥增1求逆计算在CPU中进行预先计算得到结果并存储在设置的存储器中,然后由CPU根据SM2数字签名生成算法计算步骤对待签名消息顺序计算时,调用存储器存储的预先计算得到的结果,从而节省了对待签名消息进行数字签名的计算时间,提高了SM2数字签名生成算法的计算效率。更进一步,在CPU中可以同时对多个不同用户私钥分别进行用户私钥增1求逆并存储在存储器中,进一步提高计算效率。
附图说明
图1为本发明实施例实施例提供的结合CPU和GPU的SM2数字签名生成算法的实现方法流程图;
图2为本发明实施例提供的结合CPU和GPU的SM2数字签名生成算法实现装置结构示意图;
图3为本发明实施例提供的椭圆曲线点及对应的随机数预计算及存取的示意图;
图4为本发明实施例提供的一个CPU计算单元对不同用户私钥dA的增1求逆计算流程图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
背景技术在实现SM2数字签名生成算法时计算效率不高的原因为:由CPU按照SM2数字签名生成算法计算步骤顺序执行,其中的增1求逆计算与椭圆曲线点计算的计算复杂性都比较高,比较耗时。为了克服这个问题,本发明采用CPU和GPU协作方式进行SM2数字签名生成算法计算,将SM2数字签名生成算法中的计算椭圆曲线点步骤在GPU中进行预先计算得到结果并存储在设置的存储器中,将对用户私钥增1求逆计算在CPU中进行预先计算得到结果并存储在设置的存储器中,然后由CPU根据SM2数字签名生成算法计算步骤对待签名消息顺序计算时,调用存储器存储的预先计算得到的结果,从而节省了对待签名消息进行数字签名的计算时间,提高了SM2数字签名生成算法的计算效率。更进一步地,在CPU中可以同时对多个不同用户私钥分别进行用户私钥增1求逆计算并存储在存储器中,进一步提高计算效率。
从背景技术的SM2数字签名生成算法中可以看出,步骤A3和步骤A4计算椭圆曲线点涉及的数据与待签名消息无关。因此,本发明采用在进行SM2数字签名生成算法之前,由GPU预先执行步骤A3和步骤A4,得到结果后存储在设置的存储器中,等到CPU根据SM2数字签名生成算法步骤对待签名消息按照步骤顺序计算时,要顺序执行步骤A3和步骤A4时,直接从设置的存储器中读取。
从背景技术的SM2数字签名生成算法中还可以看出,在步骤A6中进行的对用户私钥增1求逆操作(1+dA)-1计算复杂度较大,本发明则由CPU预先计算该步骤A6中对用户私钥增1求逆过程并在存储器中存储结果,等到CPU根据SM2数字签名生成算法步骤对待签名消息按照步骤顺序计算时,要顺序执行步骤A6时,直接从设置的存储器中读取该用户私钥增1的求逆结果,然后再执行步骤A6中的其他计算。在由CPU预先计算该步骤A6中对用户私钥增1的求逆过程并在存储器中存储结果时,CPU可以通过执行一次求逆计算,获得多个不同用户私钥的增1逆,并存储在存储器中。
图1为本发明实施例提供的一种基于GPU的SM2算法中的数字签名生成算法实现方法流程图,其具体步骤为:
步骤101、将SM2数字签名生成算法中的计算椭圆曲线点步骤由GPU预先计算得到结果并存储在设置的存储器中;
在该步骤中,结果为椭圆曲线点及对应的随机数;
步骤102、将SM2数字签名生成算法中的对用户私钥增1求逆计算步骤由CPU预先计算得到结果并存储在设置的存储器中;
在该步骤中,结果为用户私钥增1逆;
步骤103、CPU根据SM2数字签名生成算法计算步骤对待签名消息顺序计算时,调用存储器存储的椭圆曲线点及对应的随机数,以及用户私钥的增1逆值,完成对待签名消息的数字签名。
在图1中,步骤101和步骤102分别由GPU和CPU执行,执行上可以不是顺序执行。
在图1中,步骤102和步骤103都是由CPU线程完成的,可以是同一CPU线程,也可以是不同的CPU线程。
在图1中,GPU执行SM2数字签名生成算法中的计算椭圆曲线点步骤时,可以由一个GPU线程完成,也可以由多个GPU线程针对不同的随机数同时计算完成。
在图1中的步骤102中,有两种方式进行:
第一种方式,如果已经预先存储了用户私钥,则在接收到SM2数字签名生成请求之前,就预先进行用户私钥增1求逆计算并存储;
第二种方式,如果没有存储用户私钥,则在CPU接收到SM2数字签名生成请求之后,CPU收集多个计算请求,在根据SM2数字签名生成算法步骤对待签名消息顺序计算之前,获取到用户私钥进行增1求逆计算并存储。在执行第二种方式时,可以同时对不同的SM2数字签名生成请求所需的不同用户私钥增1同时进行求逆计算,比如设定同时求逆计算的用户私钥门限数或者设定间隔时刻,当到达同时求逆计算的用户私钥门限数或者设定的间隔时刻时,将所获取的多个不同用户私钥同时进行不同用户私钥增1求逆操作后得到的不同用户私钥的逆存储,当调用时,选取对应的用户私钥的增1逆值调用。
从以上两种方式可以看出,根据签名的用户私钥已知还是未知,计算方法是不同的。
图2为本发明实施例提供的一通基于GPU的SM2算法中的数字签名生成算法实现装置结构示意图,包括GPU计算单元、CPU计算单元及存储器,其中,
GPU计算单元,用于执行SM2数字签名生成算法中的计算椭圆曲线点步骤,并将计算得到的椭圆曲线点及对应的随机数存储在存储器中;
CPU计算单元,用于执行SM2数字签名生成算法中的对用户私钥增1求逆计算步骤,得到用户私钥的增1逆值存储在存储器中;根据SM2数字签名生成算法计算步骤对待签名消息顺序计算时,调用存储器存储的预先存储的椭圆曲线点及对应的随机数,以及用户私钥的增1逆值,完成对待签名消息的数字签名。
存储器,用于存储椭圆曲线点及对应的随机数,以及用户私钥的增1逆值。
在本发明中,所述GPU计算单元可以包括多个,用于顺序执行SM2数字签名生成算法中的计算椭圆曲线点步骤,或者针对不同的随机数同时执行SM2数字签名生成算法中的计算椭圆曲线点步骤。
在本发明中,所述CPU计算单元,还用于在接收到SM2数字签名生成请求之前,存储有用户私钥,预先进行用户私钥增1求逆计算并存储在存储器中。
在本发明中,所述CPU计算单元包括多个CPU计算单元,其中,
一个CPU计算单元,还用于在CPU接收到SM2数字签名生成请求之后,CPU根据SM2数字签名生成算法步骤对待签名消息顺序计算之前,获取到用户私钥进行增1求逆计算并存储在存储器中;
CPU计算单元,该CPU计算单元可以为进行求逆计算的CPU计算单元也可以为其他计算单元,还用于根据SM2数字签名生成算法步骤对待签名消息顺序计算时,调用存储器存储的预先存储的椭圆曲线点及对应的随机数,以及用户私钥的增1逆值,完成对待签名消息的数字签名。
以下对结合CPU和GPU的SM2数字签名生成算法进行详细说明。
在未接收到SM2数字签名生成请求时,至少一个GPU计算单元,该GPU计算单元运行GPU线程,执行如下操作:获取随机数k∈[1,n-1],计算椭圆曲线点(x,y)=[k]G,将k和计算结果[k]G对应地存储在存储器中。
在该实施例中,可以有多个GPU计算单元同时计算椭圆曲线点(xi,yi)=[k]G(i=1,2,…,n),即有多个GPU计算单元执行指令相同,操作数不同的椭圆曲线点的计算,提高GPU的计算效率。
在GPU预计算椭圆曲线点[k]G的前提下,CPU计算单元直接从存储器中读取椭圆曲线点及对应的随机数,执行SM2数字签名生成算法。SM2数字签名生成算法执行过程中,CPU按照SM2数字签名生成算法的步骤顺序执行,需要计算s=((1+dA)-1·(k-r·dA))mod n,本发明实施例可以对其中的增1求逆运算(1+dA)-1进行优化。
如果在接收SM2数字签名生成请求之前,已经存储了用户私钥dA,则至少一个CPU计算单元在接收SM2数字签名生成请求之前,计算S’=(1+dA)-1,将计算结果S’存储在存储器中。
在这种情况下,至少有一个CPU计算单元进行SM2数字签名生成算法的过程如下:
A1:置
Figure BDA00003870409700101
ZA‖M表示ZA与M的拼接;
A2:计算
Figure BDA00003870409700102
将e的数据类型转换为整数;
A3:从存储器中读取GPU预计算存储的椭圆曲线点(x,y)=[k]G和k,如图3所示,图3为本发明实施例的椭圆曲线点及对应的随机数预计算及存取的示意图;
A4:计算r=(e+x)mod n,若r=0或r+k=n则重新从存储器中读取椭圆曲线点;
A5:从存储器中读取(1+dA)-1的计算结果S’,并计算s=(S’·(k-r·dA))modn,若s=0则返回A3;
A6:将r、s的数据类型转换为字节串,待签名消息M的签名为(r,s)。
在上述SM2数字签名生成算法执行过程中,在接收SM2数字签名生成请求之前,预先计算了增1求逆运算(1+dA)-1,因此,直接从存储器中读取(1+dA)-1的运算结果,避免了耗时的求逆运算,提高了计算效率。
如果在接收SM2数字签名生成请求之前,没有存储用户私钥dA,不能预先计算(1+dA)-1,则可以通过接收多个不同用户私钥dA的SM2签名生成算法计算请求,实现同时对多个不同用户私钥dA增1求逆操作的优化。
具体地,当收到多个dA不同的SM2签名生成算法计算请求时,一个CPU计算单元对不同用户私钥dA增1求逆计算流程图如图4所示,其具体步骤为:
步骤401、接收i个不同的SM2数字签名生成请求,其用户私钥dA分别为dA1,dA2,…,dAi
在本步骤中,可以设定同时求逆计算的用户私钥门限数或者设定间隔时刻,当到达门限数或设定时间时,确认得到的用户私钥dA,执行步骤402;
步骤402、计算d1=1+dA1,d2=1+dA2,…,di=1+dAi
步骤403、计算d1’=d1,d2’=d1*d2,…,di’=d1*d2*…*di
步骤404、计算H=(di’)-1mod n;
步骤405、计算(d1)-1=H*d2*…*di,(d2)-1=H*d1*d3*…*di,…,(di)-1=H*d1*d2*…*di-1;并将(d1)-1,(d2)-1,…,(di)-1存储在存储器上。
在本步骤中,可以使用以下算法实现:
H’←H
For k from i downto 2 do
1.dk -1←H’*dk-1
2.H’←H’*dk
d1 -1←H’。
在图4中,步骤401和步骤402也可以用如下操作进行代替:
接收i个不同的SM2数字签名生成请求,其用户私钥dA分别为dA1,dA2,…,dAi;每收到一个用户私钥dAm,就计算并存储相应的dm=1+dAm(m=1,2,…,i),直到m=i时,执行步骤403。
在这种情况下,对于其他的CPU计算单元,进行SM2数字签名生成算法的过程如下:
A1:置
Figure BDA00003870409700111
ZA‖M表示ZA与M的拼接;
A2:计算
Figure BDA00003870409700112
将e的数据类型转换为整数;
A3:从存储器中读取GPU预计算存储的椭圆曲线点(x,y)=[k]G和k;
A4:计算r=(e+x)mod n,若r=0或r+k=n则重新从存储器中读取椭圆曲线点;
A5:从存储器中读取dm -1,s=(dm -1·(k-r·dA))mod n,若s=0则返回A3;
A6:将r、s的数据类型转换为字节串,待签名消息M的签名为(r,s)。
可以看出,如果对于i个SM2数字签名生成请求,如果对每个请求都计算一次求逆运算(1+dAk)-1(k=1,2,…,i),则执行完i个SM2数字签名生成请求需要进行i次求逆运算。而本发明实施例在执行i个时,只需进行一次求逆操作H=(d’)-1,缩短了i个SM2数字签名生成请求的平均实现时间,提高了计算效率。
举一个具体实施例对本发明进行详细说明
在该具体实施例中,选用了型号为E2 1230 v2的CPU与型号为GTX 680的GPU。
在没有收到SM2数字签名生成请求时,启动100个GPU线程循环地执行如下操作:获取随机数k∈[1,n-1],计算椭圆曲线点(x,y)=[k]G,并将{k,(x,y)}存储在存储器中。
在收到SM2数字签名生成请求之前,存储有用户私钥dA时,一个CPU线程进行增1求逆运算S’=(1+dA)-1,将S’保存在存储器中。
在收到SM2数字签名生成请求时,一个CPU线程,该CPU线程可以是对用户私钥dA增1求逆的CPU线程,也可以不是对用户私钥dA增1求逆的CPU线程。执行如下操作:
A1:置ZA‖M表示ZA与M的拼接;
A2:计算
Figure BDA00003870409700122
将e的数据类型转换为整数;
A3:从存储器中读取GPU预计算存储的椭圆曲线点(x,y)=[k]G和k;
A4:计算r=(e+x)mod n,若r=0或r+k=n则重新从存储器中读取椭圆曲线点;
A5:从存储器中读取(1+dA)-1的计算结果S’,并计算s=(S’·(k-r·dA))modn,若s=0则返回A3;
A6:将r、s的数据类型转换为字节串,待签名消息M的签名为(r,s)。
如果在接收SM2数字签名生成请求之前,没有存储用户私钥dA,在接收多个不同SM2数字签名生成请求时,首先对对应的用户私钥dA收集,收集到1000个不同的用户私钥dA后,一个CPU线程执行如下算法:
输入:椭圆曲线基点的阶n,用户私钥dA1,dA2,…,dA1000
输出:(1+dA1)-1,(1+dA2)-1,…,(1+dA1000)-1
For i from 1 to 1000 do:ai←dAi+1.
c1←a1.
For i from 2 to 1000 do:ci←ci-1*ai mod n.
u←c1000 -1mod n.
For i from 1000 downto 2 do
{ai -1←u*ci-1mod n.
u←u*ai mod n.}
a1 -1←u.
Return(a1 -1,a2 -1,…,a1000 -1).
上述算法的输出结果保存在存储器中。
其它的CPU线程进行SM2数字签名生成算法的过程如下:
A1:置
Figure BDA00003870409700131
ZA‖M表示ZA与M的拼接;
A2:计算
Figure BDA00003870409700132
将e的数据类型转换为整数;
A3:从存储器中读取GPU预计算存储的椭圆曲线点(x,y)=[k]G和k;
A4:计算r=(e+x)mod n,若r=0或r+k=n则重新从存储器中读取椭圆曲线点;
A5:从存储器中读取ai -1,s=(ai -1·(k-r·dA))mod n,若s=0则返回A3;
A6:将r、s的数据类型转换为字节串,待签名消息M的签名为(r,s)。
本发明提供的SM2数字签名生成算法可以应用在可靠性的消息传输领域中,保证无法对待签名消息的传输进行篡改,为待签名消息生成唯一的数字签名用于验证。
以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (11)

1.一种SM2数字签名生成算法的实现方法,其特征在于,该方法包括:
将SM2数字签名生成算法中的计算椭圆曲线点步骤由图形处理器GPU预先计算,得到椭圆曲线点及对应的随机数,并存储在设置的存储器中;
将SM2数字签名生成算法中的对用户私钥增1求逆计算步骤由中央处理器CPU预先计算,得到用户私钥增1逆存储在设置的存储器中;
CPU根据SM2数字签名生成算法计算步骤对待签名消息顺序计算时,调用存储器存储的椭圆曲线点及对应的随机数,以及用户私钥增1逆,完成对待签名消息的数字签名。
2.如权利要求1所述的实现方法,其特征在于,所述SM2数字签名生成算法中的对用户私钥增1求逆计算的CPU线程与所述根据SM2数字签名生成算法计算步骤对待签名消息顺序计算的CPU线程相同或不同。
3.如权利要求1所述的实现方法,其特征在于,所述将SM2数字签名生成算法中的对用户私钥增1求逆计算步骤在CPU预先计算为:
对于预先存储了用户私钥的签名请求,在接收SM2数字签名生成请求之前,预先进行用户私钥增1求逆计算,用户私钥表示为dA,用户私钥增1逆表示为(1+dA)-1mod n,其中n为椭圆曲线基点G的阶。
4.如权利要求1所述的实现方法,其特征在于,所述将SM2数字签名生成算法中的对用户私钥增1求逆计算步骤在CPU预先计算为:
对于未预先存储用户私钥的签名请求,在CPU接收到SM2数字签名生成请求之后,CPU根据SM2数字签名生成算法计算步骤对待签名消息顺序计算之前,获取到用户私钥进行增1求逆计算;
所述进行增1求逆计算的CPU线程与根据SM2数字签名生成算法计算步骤对待签名消息顺序计算的CPU线程不同。
5.如权利要求4所述的实现方法,其特征在于,所述获取到用户私钥进行增1求逆计算为:
设定同时增1求逆计算的用户私钥门限数或者设定间隔时刻,当到达同时增1求逆计算的用户私钥门限数或者设定的间隔时刻时,将所获取的多个不同用户私钥同时进行增1求逆操作后得到的不同用户私钥的增1逆。
6.如权利要求5所述的实现方法,其特征在于,所述将所获取的多个不同用户私钥同时进行增1求逆操作后得到的不同用户私钥增1逆为:
计算d1=1+dA1,d2=1+dA2,…,di=1+dAi
计算d1’=d1,d2’=d1*d2,…,di’=d1*d2*…*di
计算H=(di’)-1mod n;
计算(d1)-1=H*d2*…*di,(d2)-1=H*d1*d3*…*di,…,(di)-1=H*d1*d2*…*di-1
其中,dAi为用户私钥,(di)-1为用户私钥的增1逆,n为椭圆曲线基点G的阶。
7.如权利要求1所述的实现方法,其特征在于,所述SM2数字签名生成算法中的计算椭圆曲线点步骤的计算由一个GPU线程顺序完成,或多个GPU线程针对不同的随机数同时计算完成。
8.一种SM2数字签名生成算法的实现装置,其特征在于,该装置包括:GPU计算单元、CPU计算单元及存储器,其中,
GPU计算单元,用于执行SM2数字签名生成算法中的计算椭圆曲线点步骤,并将计算得到的椭圆曲线点及对应的随机数存储在存储器中;
CPU计算单元,用于执行SM2数字签名生成算法中的对用户私钥增1求逆计算步骤,得到用户私钥的增1逆值存储在存储器中;根据SM2数字签名生成算法计算步骤对待签名消息顺序计算时,调用存储器存储的预先存储的椭圆曲线点及对应的随机数,以及用户私钥增1逆值,完成对待签名消息的数字签名。
存储器,用于存储椭圆曲线点及对应的随机数,以及用户私钥的增1逆。
9.如权利要求8所述的实现装置,其特征在于,所述CPU计算单元,还用于在接收到SM2数字签名生成请求之前,存储有用户私钥,预先进行用户私钥增1求逆计算并存储在存储器中。
10.如权利要求8所述的实现装置,其特征在于,所述CPU计算单元包括多个CPU计算单元,其中,
一个CPU计算单元,还用于在CPU接收到SM2数字签名生成请求之后,CPU根据SM2数字签名生成算法步骤对待签名消息顺序计算之前,获取到用户私钥增1进行求逆计算并存储在存储器中;
其他CPU计算单元,还用于根据SM2数字签名生成算法步骤对待签名消息顺序计算时,调用存储器存储的预先存储的椭圆曲线点及对应的随机数,以及用户私钥的增1逆值,完成对待签名消息的数字签名。
11.如权利要求8所述的实现装置,其特征在于,所述GPU计算单元为一个或一个以上,用于顺序执行SM2数字签名生成算法中的计算椭圆曲线点步骤,或者针对不同的随机数同时执行SM2数字签名生成算法中的计算椭圆曲线点步骤。
CN201310445395.1A 2013-09-25 2013-09-25 Sm2数字签名生成算法的实现方法及装置 Active CN103546288B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310445395.1A CN103546288B (zh) 2013-09-25 2013-09-25 Sm2数字签名生成算法的实现方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310445395.1A CN103546288B (zh) 2013-09-25 2013-09-25 Sm2数字签名生成算法的实现方法及装置

Publications (2)

Publication Number Publication Date
CN103546288A true CN103546288A (zh) 2014-01-29
CN103546288B CN103546288B (zh) 2017-02-01

Family

ID=49969368

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310445395.1A Active CN103546288B (zh) 2013-09-25 2013-09-25 Sm2数字签名生成算法的实现方法及装置

Country Status (1)

Country Link
CN (1) CN103546288B (zh)

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104243456A (zh) * 2014-08-29 2014-12-24 中国科学院信息工程研究所 适用于云计算的基于sm2算法的签名及解密方法和***
CN104461469A (zh) * 2014-11-14 2015-03-25 成都卫士通信息产业股份有限公司 一种采用gpu并行化实现sm2算法的方法
CN105391736A (zh) * 2015-12-11 2016-03-09 捷德(中国)信息科技有限公司 一种交易动态数据认证方法及***
CN106549770A (zh) * 2017-01-13 2017-03-29 武汉理工大学 Sm2数字签名生成方法及***
CN106712942A (zh) * 2017-01-10 2017-05-24 武汉理工大学 基于秘密共享的sm2数字签名生成方法及***
CN107104793A (zh) * 2017-04-12 2017-08-29 武汉理工大学 一种数字签名生成方法及***
CN108259184A (zh) * 2018-01-16 2018-07-06 飞天诚信科技股份有限公司 一种基于用户标识的数字签名、验签方法及装置
CN109145644A (zh) * 2018-08-28 2019-01-04 北京云测信息技术有限公司 私钥混淆及数字签名生成方法、装置、智能设备
CN109245903A (zh) * 2018-09-29 2019-01-18 北京信安世纪科技股份有限公司 双方协同生成sm2算法的签名方法、装置及存储介质
CN109660351A (zh) * 2018-11-08 2019-04-19 北京大学 一种sm2公钥密码的数字签名快速生成方法
CN111538480A (zh) * 2020-03-26 2020-08-14 郑州信大捷安信息技术股份有限公司 一种用于椭圆曲线密码的倍点运算方法及***
CN111917548A (zh) * 2019-05-07 2020-11-10 北京大学 基于gpu与cpu异构结构的椭圆曲线数字签名方法
CN112367175A (zh) * 2020-11-12 2021-02-12 西安电子科技大学 基于sm2数字签名的隐式证书密钥生成方法
CN113055189A (zh) * 2021-06-02 2021-06-29 工业信息安全(四川)创新中心有限公司 Sm2数字签名验证失败原因判定方法、装置、设备和介质
CN114257380A (zh) * 2021-12-20 2022-03-29 湖南国科微电子股份有限公司 一种数字签名方法、***及设备
WO2023275947A1 (ja) * 2021-06-28 2023-01-05 日本電信電話株式会社 回路情報の完全性検証システムおよび回路情報の完全性検証方法
CN115766006A (zh) * 2022-11-17 2023-03-07 上海芷锐电子科技有限公司 密钥协商的方法、装置、电子设备及计算机可读存储介质
CN116980129A (zh) * 2023-09-22 2023-10-31 深圳市纽创信安科技开发有限公司 数字签名生成方法、装置、电子设备与可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090074178A1 (en) * 2007-09-14 2009-03-19 University Of Ottawa Accelerating Scalar Multiplication On Elliptic Curve Cryptosystems Over Prime Fields
CN102064940A (zh) * 2009-11-13 2011-05-18 赵运磊 一种在线/离线高效的数字签名方法
CN102446088A (zh) * 2011-09-20 2012-05-09 中国科学院深圳先进技术研究院 椭圆曲线标量乘的并行处理方法及***

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090074178A1 (en) * 2007-09-14 2009-03-19 University Of Ottawa Accelerating Scalar Multiplication On Elliptic Curve Cryptosystems Over Prime Fields
CN102064940A (zh) * 2009-11-13 2011-05-18 赵运磊 一种在线/离线高效的数字签名方法
CN102446088A (zh) * 2011-09-20 2012-05-09 中国科学院深圳先进技术研究院 椭圆曲线标量乘的并行处理方法及***

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
姚平: "《CUDA平台上的CPU/GPU异步计算模式》", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *
王雷: "基于GPU的椭圆曲线相关算法并行化效率分析", 《中国优秀硕士学位论文全文数据库》 *

Cited By (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104243456B (zh) * 2014-08-29 2017-11-03 中国科学院信息工程研究所 适用于云计算的基于sm2算法的签名及解密方法和***
CN104243456A (zh) * 2014-08-29 2014-12-24 中国科学院信息工程研究所 适用于云计算的基于sm2算法的签名及解密方法和***
CN104461469A (zh) * 2014-11-14 2015-03-25 成都卫士通信息产业股份有限公司 一种采用gpu并行化实现sm2算法的方法
CN105391736A (zh) * 2015-12-11 2016-03-09 捷德(中国)信息科技有限公司 一种交易动态数据认证方法及***
CN106712942B (zh) * 2017-01-10 2019-08-23 武汉理工大学 基于秘密共享的sm2数字签名生成方法及***
CN106712942A (zh) * 2017-01-10 2017-05-24 武汉理工大学 基于秘密共享的sm2数字签名生成方法及***
CN106549770A (zh) * 2017-01-13 2017-03-29 武汉理工大学 Sm2数字签名生成方法及***
CN106549770B (zh) * 2017-01-13 2019-07-12 武汉理工大学 Sm2数字签名生成方法及***
CN107104793B (zh) * 2017-04-12 2019-10-25 武汉理工大学 一种数字签名生成方法及***
CN107104793A (zh) * 2017-04-12 2017-08-29 武汉理工大学 一种数字签名生成方法及***
CN108259184A (zh) * 2018-01-16 2018-07-06 飞天诚信科技股份有限公司 一种基于用户标识的数字签名、验签方法及装置
CN109145644A (zh) * 2018-08-28 2019-01-04 北京云测信息技术有限公司 私钥混淆及数字签名生成方法、装置、智能设备
CN109245903A (zh) * 2018-09-29 2019-01-18 北京信安世纪科技股份有限公司 双方协同生成sm2算法的签名方法、装置及存储介质
CN109245903B (zh) * 2018-09-29 2021-10-01 北京信安世纪科技股份有限公司 双方协同生成sm2算法的签名方法、装置及存储介质
CN109660351A (zh) * 2018-11-08 2019-04-19 北京大学 一种sm2公钥密码的数字签名快速生成方法
CN109660351B (zh) * 2018-11-08 2020-09-08 北京大学 一种sm2公钥密码的数字签名快速生成方法
CN111917548B (zh) * 2019-05-07 2021-06-04 北京大学 基于gpu与cpu异构结构的椭圆曲线数字签名方法
CN111917548A (zh) * 2019-05-07 2020-11-10 北京大学 基于gpu与cpu异构结构的椭圆曲线数字签名方法
CN111538480A (zh) * 2020-03-26 2020-08-14 郑州信大捷安信息技术股份有限公司 一种用于椭圆曲线密码的倍点运算方法及***
CN111538480B (zh) * 2020-03-26 2022-02-11 郑州信大捷安信息技术股份有限公司 一种用于椭圆曲线密码的倍点运算方法及***
CN112367175B (zh) * 2020-11-12 2021-07-06 西安电子科技大学 基于sm2数字签名的隐式证书密钥生成方法
CN112367175A (zh) * 2020-11-12 2021-02-12 西安电子科技大学 基于sm2数字签名的隐式证书密钥生成方法
CN113055189A (zh) * 2021-06-02 2021-06-29 工业信息安全(四川)创新中心有限公司 Sm2数字签名验证失败原因判定方法、装置、设备和介质
CN113055189B (zh) * 2021-06-02 2021-08-10 工业信息安全(四川)创新中心有限公司 Sm2数字签名验证失败原因判定方法、装置、设备和介质
WO2023275947A1 (ja) * 2021-06-28 2023-01-05 日本電信電話株式会社 回路情報の完全性検証システムおよび回路情報の完全性検証方法
CN114257380A (zh) * 2021-12-20 2022-03-29 湖南国科微电子股份有限公司 一种数字签名方法、***及设备
CN115766006A (zh) * 2022-11-17 2023-03-07 上海芷锐电子科技有限公司 密钥协商的方法、装置、电子设备及计算机可读存储介质
CN116980129A (zh) * 2023-09-22 2023-10-31 深圳市纽创信安科技开发有限公司 数字签名生成方法、装置、电子设备与可读存储介质
CN116980129B (zh) * 2023-09-22 2024-03-26 深圳市纽创信安科技开发有限公司 数字签名生成方法、装置、电子设备与可读存储介质

Also Published As

Publication number Publication date
CN103546288B (zh) 2017-02-01

Similar Documents

Publication Publication Date Title
CN103546288A (zh) Sm2数字签名生成算法的实现方法及装置
Nejatollahi et al. Post-quantum lattice-based cryptography implementations: A survey
CN103475469A (zh) 一种结合cpu和gpu实现sm2算法的方法及装置
CN110247757B (zh) 基于国密算法的区块链处理方法、装置及***
CN111008863B (zh) 一种基于区块链的抽奖方法及***
US8538030B1 (en) Use of graphics processors as parallel math co-processors for password recovery
CN112152788A (zh) 用于后量子密码安全xmss和lms基于散列的签名和验证的加速器
CN112152793A (zh) 用于认证路径计算的奇数索引预计算
CN111950030A (zh) 基于区块链的数据共享存储方法、终端设备和存储介质
CN103631660A (zh) 在gpu中进行大整数计算时的存储资源分配方法及装置
US20230047518A1 (en) Systems and computer-implemented methods for generating pseudo random numbers
US11902432B2 (en) System and method to optimize generation of coprime numbers in cryptographic applications
Dong et al. Ec-ecc: Accelerating elliptic curve cryptography for edge computing on embedded gpu tx2
Saxena et al. State of the art parallel approaches for RSA public key based cryptosystem
Pu et al. Fastplay-a parallelization model and implementation of smc on cuda based gpu cluster architecture
CN105119929A (zh) 单一恶意云服务器下的安全模指数外包方法及***
Kishore et al. An efficient parallel algorithm for hash computation in security and forensics applications
CN111314080B (zh) 一种基于sm9算法的协同签名方法、装置、介质
Seo SIKE on GPU: Accelerating supersingular isogeny-based key encapsulation mechanism on graphic processing units
US11329808B2 (en) Secure computation device, secure computation authentication system, secure computation method, and program
US11985221B2 (en) Efficient masking of secure data in ladder-type cryptographic computations
KR102070061B1 (ko) 묶음 검증 방법 및 장치
CN111917548B (zh) 基于gpu与cpu异构结构的椭圆曲线数字签名方法
Ono et al. Automatic parallelism tuning for module learning with errors based post-quantum key exchanges on GPUs
KR101271170B1 (ko) 비밀키 생성을 위한 고속연산 수행 방법 및 장치

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant