CN103475469A - 一种结合cpu和gpu实现sm2算法的方法及装置 - Google Patents
一种结合cpu和gpu实现sm2算法的方法及装置 Download PDFInfo
- Publication number
- CN103475469A CN103475469A CN2013104083121A CN201310408312A CN103475469A CN 103475469 A CN103475469 A CN 103475469A CN 2013104083121 A CN2013104083121 A CN 2013104083121A CN 201310408312 A CN201310408312 A CN 201310408312A CN 103475469 A CN103475469 A CN 103475469A
- Authority
- CN
- China
- Prior art keywords
- algorithm
- elliptic curve
- gpu
- cpu
- point
- 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.)
- Pending
Links
Images
Landscapes
- Mobile Radio Communication Systems (AREA)
Abstract
本发明公开了一种结合CPU和GPU实现SM2算法的方法及装置,本发明采用CPU和GPU协作方式进行SM2算法,将SM2算法中的计算量比较大的椭圆曲线多倍点运算步骤在GPU预先计算得到结果并存储在设置的存储器中,然后由CPU根据SM2算法步骤对SM2算法的输入数据顺序计算时,调用存储器存储的预先计算得到的结果,从而节省了对SM2算法的输入数据进行SM2算法的计算时间,提高了SM2算法的计算效率。
Description
技术领域
本发明涉及公钥密码算法技术,特别涉及一种结合中央处理器(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算法,基于椭圆曲线离散对数问题,是目前公认的安全有效的公钥密码算法之一。椭圆曲线公钥密码涉及两个主要运算:椭圆曲线上的点加运算和多倍点运算。在椭圆曲线多倍点运算中Q=[k]P=P+P+...+P,其中基点P是椭圆曲线E上阶为N的点,k为正整数,P的k倍点为Q,P的k倍点也是椭圆曲线上的点,已知多倍点Q与基点P,求解倍数k的问题称为椭圆曲线离散对数问题。
在SM2算法中包括数字签名算法、密钥交换协议算法及加密算法等都需要进行椭圆曲线多倍点运算,椭圆曲线多倍点运算的效率直接影响了SM2算法中的数字签名算法、密钥交换协议算法及加密算法的计算效率。
SM2算法的数字签名算法、密钥交换协议和加密算法的具体过程如下所述。
SM2算法的数字签名生成算法
设待签名的消息为M,为了获取消息M的数字签名(r,s),作为签名者的用户A实现以下运算步骤:
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)。
其中:HV:消息摘要长度为v比特的密码杂凑函数;G:椭圆曲线上的一个基点,其阶为素数;n:基点G的阶;dA:用户A的私钥;[k]G:椭圆曲线上点G的k倍点,即,[k]G=G+G…+G,表示k个G在椭圆曲线域上相加。
在该算法中,在步骤A3和步骤A4采用了椭圆曲线多倍点运算。
SM2算法中的密钥交换协议算法
设用户A和用户B协商获得密钥数据的长度为klen比特,用户A为发起方,用户B为响应方。用户A和用户B双方为了获得相同的密钥,实现如下运算步骤:
记
发起方用户A:
A1:用随机数发生器产生随机数rA∈[1,n-1];
A2:计算椭圆曲线点RA=(x1,y1)=[rA]G;
A3:将RA发送给用户B;
A5:计算
A7:计算椭圆曲线点 若U是无穷远点,则A协商失败;否则将xU、yU的数据类型转换为比特串;
A8:计算KA=KDF(xU||yU||ZA||ZB,klen);
A9:(选项)将RA的坐标x1、y1和RB的坐标x2、y2的数据类型转换为比特串,计算S1=Hash(0x02||yU||Hash(xU||ZA||ZB||x1||y1||x2||y2)),并检验S1=SB是否成立,若等式不成立则从B到A的密钥确认失败;
A10:(选项)计算SA=Hash(0x03||yU||Hash(xU||ZA||ZB||x1||y1||x2||y2)),并将SA发送给用户B。
响应方用户B:
B1:用随机数发生器产生随机数rB∈[1,n-1];
B2:计算椭圆曲线点RB=[rB]G=(x2;y2);
B4:计算
B6:计算椭圆曲线点 若V是无穷远点,则B协商失败;否则将xV、yV的数据类型转换为比特串;
B7:计算KB=KDF(xV||yV||ZA||ZB,klen);
B8:(选项)将RA的坐标x1、y1和RB的坐标x2、y2的数据类型转换为比特串,计算SB=Hash(0x02||yV||Hash(xV||ZA||ZB||x1||y1||x2||y2));
B9:将RB、(选项SB)发送给用户A;
B10:(选项)计算S2=Hash(0x03||yV||Hash(xV||ZA||ZB||x1||y1||x2||y2)),并检验S2=SA是否成立,若等式不成立则从A到B的密钥确认失败。
在该算法中,在步骤A1、A2、B1和B2采用了椭圆曲线多倍点运算。
SM2算法中的加密算法
设需要发送的消息为比特串M,klen为M的比特长度。为了对消息M进行加密,作为加密者的用户A实现以下运算步骤:
A1:用随机数发生器产生随机数k∈[1,n-1];
A2:计算椭圆曲线点C1=[k]G=(x1,y1),将C1的数据类型转换为比特串;
A3:计算椭圆曲线点S=[h]PB,若S是无穷远点,则报错并退出;
A4:计算椭圆曲线点[k]PB=(x2,y2),将坐标x2、y2的数据类型转换为比特串;
A5:计算t=KDF(x2||y2,klen),若t为全0比特串,则返回A1;
A6:计算C2=M⊕t;
A7:计算C3=Hash(x2||M||y2);
A8:输出密文C=C1||C3||C2。
在该算法中,步骤A1、A2、A3和A4采用了椭圆曲线多倍点运算。
目前,椭圆曲线多倍点运算基于CPU架构以二进制展开法、加减法和滑动窗法等算法进行,这不利于计算效率的提高。
发明内容
有鉴于此,本发明提供一种结合CPU和GPU实现SM2算法的方法,该方法能够提高SM2算法的计算效率。
本发明还提供一种结合CPU和GPU实现SM2算法的装置,该装置能够提高SM2算法的计算效率。
为达到上述目的,本发明实施的技术方案具体是这样实现的:
一种结合中央处理器CPU和图形处理器GPU实现SM2算法的方法,该方法包括:
CPU调用GPU,GPU预先执行SM2算法中的计算椭圆曲线多倍点运算步骤,得到椭圆曲线点及对应的随机数预先存储在存储器中;
CPU根据SM2算法步骤对SM2算法的输入数据顺序计算时,调用存储器存储的椭圆曲线点及对应的随机数,完成SM2算法的计算。
在所述调用存储器存储的椭圆曲线点及对应的随机数之后,删除或者标记存储器存储的椭圆曲线点及对应的随机数。
CPU设定椭圆曲线上的点Q,所述GPU执行SM2算法中的计算椭圆曲线多倍点运算步骤,由GPU线程按照步骤1)、2)和3)循环计算完成:
1),读取一个随机数ki,将ki赋值给k,即k=ki;
2),计算[k]Q,[k]Q为椭圆曲线上的点Q的k倍点;
3),将(k,[k]Q)存储在设定的存储器中。
所述GPU执行SM2算法中的计算椭圆曲线多倍点运算步骤由一个GPU线程顺序完成,或多个GPU线程同时计算完成;
所述多个GPU线程同时完成时,针对不同的椭圆曲线和不同的点Q,或者针对相同的椭圆曲线和不同的点Q。
所述SM2算法为SM2算法的数字签名生成算法、密钥交换协议或加密算法。
所述SM2算法为SM2算法的数字签名生成算法或密钥交换协议时,所述计算椭圆曲线多倍点运算步骤为计算基点G的椭圆曲线多倍点;
所述SM2算法为加密算法时,所述计算椭圆曲线多倍点运算步骤为计算基点G的椭圆曲线多倍点和公钥P的椭圆曲线多倍点。
一种结合CPU和GPU实现SM2算法的装置,包括:GPU计算单元、存储器和CPU计算单元,其中,
GPU计算单元,用于在CPU计算单元的调用下,预先执行SM2算法中的计算椭圆曲线多倍点运算步骤,得到椭圆曲线点及对应的随机数预先存储在存储器中;
CPU计算单元,用于调用GPU计算单元,根据SM2算法步骤对SM2算法的输入数据顺序计算时,调用存储器存储的椭圆曲线点及对应的随机数,完成SM2算法的计算;
存储器,用于预先存储GPU计算单元计算的椭圆曲线点及对应的随机数。
所述GPU单元,还用于所述GPU执行SM2算法中的计算椭圆曲线多倍点运算步骤,由GPU线程按照步骤1)、2)和3)循环计算完成:
1),读取一个随机数ki,将ki赋值给k,即k=ki;
2),计算[k]Q,[k]Q椭圆曲线上的点Q的k倍点;
3),将(k,[k]Q)存储在设定的存储器中。
所述GPU计算单元为一个或多个,分别承载有GPU线程,用于单独或同时执行SM2算法中的计算椭圆曲线多倍点运算步骤,所述计算椭圆曲线多倍点运算针对针对不同的椭圆曲线和不同的点Q,或者针对相同的椭圆曲线和不同的点Q。
所述CPU计算单元,还用于调用存储器存储的椭圆曲线点及对应的随机数后,删除或标记存储器中存储的GPU计算单元计算的椭圆曲线点及对应的随机数。
由上述方案可以看出,本发明采用CPU和GPU协作方式进行SM2算法,将SM2算法中的计算量比较大的计算椭圆曲线多倍点运算步骤在GPU预先计算得到结果并预先存储在设置的存储器中,然后由CPU根据SM2算法步骤对SM2算法的输入数据顺序计算时,调用存储器存储的预先计算得到的结果,从而节省了对SM2算法的输入数据进行SM2算法的计算时间,提高了SM2算法的计算效率。
附图说明
图1为本发明实施例提供的结合CPU和GPU实现SM2算法的方法流程图;
图2为本发明实施例提供的结合CPU和GPU实现SM2算法的装置结构示意图;
图3为本发明实施例提供的提高SM2算法中的数字签名生成算法的计算效率的方法流程图;
图4为本发明实施例提供的提高SM2算法的密钥交换协议的计算效率的方法一流程图;
图5为本发明实施例提供的提高SM2算法的密钥交换协议的计算效率的方法二流程图;
图6为本发明实施例提供的提高SM2算法中的加密算法的计算效率方法流程图;
图7为本发明实施例提供的同时调用多个GPU线程针对不同公钥进行椭圆曲线多倍点运算的示意图;
图8为本发明实施例提供的同时提高不同SM2算法的计算效率的示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
为了提高SM2算法的计算效率,本发明采用CPU和GPU协作方式进行SM2算法,将SM2算法中的计算量比较大的计算椭圆曲线多倍点运算步骤在GPU预先计算得到结果并存储在设置的存储器中,然后由CPU根据SM2算法步骤对SM2算法的输入数据顺序计算时,调用存储器存储的预先计算得到的结果,从而节省了对SM2算法的输入数据进行SM2算法的计算时间。
图1为本发明实施例提供的结合CPU和GPU实现SM2算法的方法流程图,其具体步骤为:
步骤101、CPU调用GPU,GPU预先执行SM2算法中的计算椭圆曲线多倍点运算步骤,得到椭圆曲线点及对应的随机数预先存储在存储器中;
步骤102、CPU根据SM2算法步骤对SM2算法的输入数据顺序计算时,调用存储器存储的椭圆曲线点及对应的随机数,完成SM2算法的计算。
在该方法中,步骤101和步骤102并不需要按照顺序执行,而是预先于步骤102执行,预先计算好椭圆曲线点及对应的随机数并存储。只要CPU进行SM2算法计算时,就可以直接从存储器获取到椭圆曲线点及对应的随机数了。
具体地,在步骤101中,CPU设定椭圆曲线上的点Q,所述GPU执行SM2算法中的计算椭圆曲线多倍点运算步骤为:
CPU调用GPU线程,GPU线程采用如下循环计算椭圆曲线多倍点运算:
第一步,读取一个随机数ki,将ki赋值给k,即k=ki;
第二步,计算[k]Q,[k]Q椭圆曲线上的点Q的k倍点;
第三步,将(k,[k]Q)存储在设定的存储器中。
在图1中,GPU执行SM2算法中的计算椭圆曲线多倍点运算步骤时,可以由一个GPU线程完成,也可以由多个GPU线程同时计算完成。这时,针对不同的椭圆曲线和不同的点Q,或者针对相同的椭圆曲线和不同的点Q。
在图1中的步骤102中,当CPU调用存储器存储的椭圆曲线点及对应的随机数后,可以删除。
图2为本发明实施例提供的结合CPU和GPU实现SM2算法的装置结构示意图,包括:GPU计算单元、存储器和CPU计算单元,其中,
GPU计算单元,用于在CPU计算单元的调用下,预先执行SM2算法中的计算椭圆曲线多倍点运算步骤,得到椭圆曲线点及对应的随机数预先存储在存储器中;
CPU计算单元,用于调用GPU计算单元,根据SM2算法步骤对SM2算法的输入数据顺序计算时,调用存储器存储的椭圆曲线点及对应的随机数,完成SM2算法的计算;
存储器,用于存储GPU计算单元计算的椭圆曲线点及对应的随机数。
在该结构中,GPU计算单元为一个或多个,分别承载有GPU线程,用于单独或同时执行SM2算法中的计算椭圆曲线多倍点运算步骤,所述计算椭圆曲线多倍点运算针对不同的椭圆曲线和不同的点Q,或者针对相同的椭圆曲线和不同的点Q。
在该结构中,CPU计算单元,还用于调用存储器存储的椭圆曲线点及对应的随机数后,删除存储器中存储的GPU计算单元计算的椭圆曲线点及对应的随机数。
在本发明中,图1所述的方法应用在对传输数据的加密领域,保证数据传输的安全性。
在本发明中,图1所述的SM2算法可以为SM2算法的数字签名生成算法、密钥交换协议或加密算法。
在本发明中,执行SM2算法中的计算椭圆曲线多倍点运算步骤可以提高SM2算法的计算效率,CPU可以同时调用多个GPU线程针对不同公钥进行椭圆曲线多倍点运算,以及可以同时提高不同SM2算法的计算效率,以下详细说明。
提高SM2算法的计算效率
一、提高SM2算法中的数字签名生成算法的计算效率
图3为本发明实施例提供的提高SM2算法中的数字签名生成算法的计算效率的方法流程图,其具体步骤为:
步骤301、CPU运行SM2数字签名生成算法前,CPU设定Q=G,调用GPU,使GPU预先并行计算G的椭圆曲线多倍点并预先存储在存储器中;
步骤302、CPU执行SM2数字签名生成算法流程中的步骤A1和步骤A2;
步骤303、CPU从存储器中直接读取一个(ki,[ki]G),将ki赋值给k:k=ki,设定(x1,y1)=[k]G;
步骤304、CPU删除存储器中对应的记录(k,[k]G);
步骤305、CPU继续执行SM2数字签名生成算法流程中的步骤A5开始以后的步骤,直到完成SM2数字签名生成算法流程。
在该过程中,步骤301与后续步骤并不是顺序执行,其可以预先执行完成。
二、提高SM2算法的密钥交换协议的计算效率
图4为本发明实施例提供的提高SM2算法的密钥交换协议的计算效率的方法一流程图,该方法一应用在发起方,其具体步骤为:
步骤401、在进行密钥协商前,CPU设定Q=G,调用GPU,使GPU预先并行计算G的椭圆曲线多倍点并预先存储在存储器中;
步骤402、CPU开始进行密钥协商,从存储器中读取一个(ki,[ki]G),将ki赋值给rA:rA=k,设定RA=(x1,y1)=[rA]G,将RA发送给响应方;
步骤403、CPU删除存储器中对应的记录(rA,[rA]G);
步骤404、CPU继续执行SM2算法中的密钥交换协议的发起方流程中的步骤A3开始以后的步骤。
在该过程中,步骤401与后续步骤并不是顺序执行,其可以预先执行完成。
图5为本发明实施例提供的提高SM2算法的密钥交换协议的计算效率的方法二流程图,该方法二应用在响应方,其具体步骤为:
步骤501、在进行密钥协商前,CPU设定Q=G,调用GPU,使GPU预先并行计算G的椭圆曲线多倍点并预先存储在存储器中;
步骤502、CPU开始进行密钥协商,从存储器中读取一个(ki,[ki]G),将ki赋值给rB:rB=k,设定RB=(x2,y2)=[rB]G;
步骤503、CPU删除存储器中对应的记录(rB,[rB]G);
步骤504、CPU继续执行执行SM2算法中的密钥交换协议的响应方流程中的步骤B3开始以后的步骤。
在该过程中,步骤501与后续步骤并不是顺序执行,其可以预先执行完成。
三、提高SM2算法中的加密算法的计算效率
图6为本发明实施例提供的提高SM2算法中的加密算法的计算效率方法流程图,其具体步骤为:
步骤601、进行加密算法流程前,CPU调用GPU预先并行计算基点G的椭圆曲线多倍点和公钥PB的椭圆曲线多倍点,即启用tG个GPU线程预计算G的多倍点,tP个GPU线程预计算PB的多倍点,在每一次循环中,tG个线程读取的随机数和tP个线程读取的随机数一样;
在本步骤中,由于每一个G的k倍点和PB的k倍点成对出现,tG和tP的取值是可调节的;
步骤602、CPU开始执行加密算法流程,从存储器中读取G的一个多倍点[k]G,并设定C1=(x1,y1)=[k]G;
步骤603、CPU删除存储器中对应的记录(k,[k]G);
步骤604、CPU从存储器中读取PB的k倍点[k]PB,设定(x2,y2)=[k]PB;
步骤605、CPU删除存储器中对应的记录(k,[k]PB);
步骤606、CPU继续执行从SM2算法中的加密算法的步骤A6开始以后的步骤。
在该过程中,步骤601与后续步骤并不是顺序执行,其可以预先执行完成。
在本发明中,CPU还可以同时调用多个GPU线程针对不同公钥进行椭圆曲线多倍点运算。由于在传输加密的数据结束后,下次可能还会进行加密通信,因此在存储器存储最近使用的用于加密的公钥,并利用GPU预计算这些公钥的椭圆曲线多倍点。同时与多个用户进行加密通信,如m个用户:用户A,公钥为P1;用户B,公钥分别为P2;...;用户X,公钥为Pm时,CPU会调用t1个GPU线程预计算P1的多倍点,即设定Q=P1,t2个GPU线程预计算P2的多倍点,即设定Q=P2,...,tm个GPU线程预计算Pm的椭圆曲线多倍点,即设定Q=Pm,其中t1,t2,...,tm的取值都是可调节的。如图7所示的同时调用多个GPU线程针对不同公钥进行椭圆曲线多倍点运算的示意图。
本发明还可以同时提高不同SM2算法的计算效率。在同时收到多个不同类型的SM2算法的计算请求时,如对SM2算法的输入数据进行数字签名的请求、协商密钥的请求、加密数据的请求等,本发明采用预计算的方法,CPU同时调用t个GPU线程用于数字签名生成算法和密钥协商流程中椭圆曲线多倍点的预计算,即设定Q=G,预计算G的椭圆曲线多倍点;调用m×t/个GPU线程用于加密算法的多倍点的预计算,并将这m×t/个线程分成m组,每一组对应不同的用户公钥Pi,1<=i<=m,每组包括t/=tG+tP个线程,在每组t/个GPU线程中,用tG个线程预计算基点的多倍点,即设定Q=G,用tP个线程预计算加密公钥的椭圆曲线多倍点,即设定Q=该组对应的公钥Pi,,其中t1,t2,tG,tP,m的取值都是可调节的。如图8所示的同时提高不同SM2算法的计算效率的示意图。
举一个具体实例对本发明进行详细说明
本实例选用了型号为E21230v2的CPU与型号为GTX680的GPU。其中型号为GTX680的GPU共有1536个SP,分为8个SM,即每个SM包括192个SP。
在实例中,CPU执行SM2算法的流程,并负责调度GPU并行预计算椭圆曲线多倍点。根据SM2算法的类型以及充当的角色,在算法流程执行之前,CPU调用GPU计算单元,启动多个GPU线程并行预计算SM2算法中需要预计算的椭圆曲线多倍点并存储,预计算的结果格式是形如(k,[k]Q)的(随机数,多倍点)对,其中k是随机数,Q是待计算的点,然后CPU再根据SM2算法流程运行计算。
在执行SM2算法的数字签名生成算法流程或密钥交换协议时,首先CPU设置5M的存储器空间用于存储预计算结果。然后,CPU调用GPU的32×8个线程预计算基点G的椭圆曲线多倍点,将这256个线程分成8组,每组线程在同一个SM上并行进行预计算,每组单独预计算G的椭圆曲线多倍点,因此GPU同时计算G的8个椭圆曲线多倍点,将计算结果存入CPU设定的存储器中。
在与某一个用户通信,执行SM2算法的加密算法流程时,首先CPU设置5M的存储器空间用于存储预计算结果。然后,CPU调用GPU的32×4个线程,这128个线程分成4组,分别标识为G1,G2,G3,G3,预计算基点G的椭圆曲线多倍点,调用32×4个线程,这128个线程分成4组,分别标识为P1,P2,P3,P3,预计算加密公钥P的椭圆曲线多倍点,其中Gi组线程读入的随机数与Pi组线程读入的随机数一样。随后,预计算结果以(k,[k]G,[k]P)的格式存入CPU设定的10M的存储器中。
在同时与多个用户通信,执行SM2算法的加密算法流程时,首先CPU设置10M的存取器空间用于存储预计算结果。然后,CPU为每个进行通信的用户分配2个SM进行加密计算,启动32个线程,对应一个SM计算G的椭圆曲线多倍点,32个线程计算该用户的加密公钥P的椭圆曲线多倍点。因此,同时可为4个用户的通信计算椭圆曲线多倍点。当与用户通信的数超过4时,CPU按照通信任务的优先级或者通信的频繁程度,选取一组线程,该组线程计算的椭圆曲线多倍点对应的用户公钥加密通信较少,用于较为频繁的加密通信的椭圆曲线多倍点计算。
在同时需要进行两种SM2算法或三种SM2算法时,CPU首先设置10M的存储器空间用于存储预计算结果。然后,CPU启用32×4个线程计算G的椭圆曲线多倍点用于数字签名算法和密钥交换协议,并分配已设置的10M存储器空间的5M用于存储预计算结果;CPU启用32×4个线程用于加密算法中的椭圆曲线多倍点运算,并分配已设置的10M存储器空间的另5M用于存储预计算结果,其中预计算中的公钥可根据需求轮流替换。
可以看出,本发明结合CPU和GPU的***架构,利用CPU进行总体调度,采用GPU并行计算的特点执行具体的SM2算法中的椭圆曲线多倍点计算,提高了SM2算法的计算效率,缩短了SM2算法的响应时间。保证了SM2算法中的数字签名生成算法、密钥交换协议及加密算法中的椭圆曲线多倍点运算的高效性。
以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种结合中央处理器CPU和图形处理器GPU实现SM2算法的方法,其特征在于,该方法包括:
CPU调用GPU,GPU预先执行SM2算法中的计算椭圆曲线多倍点运算步骤,得到椭圆曲线点及对应的随机数预先存储在存储器中;
CPU根据SM2算法步骤对SM2算法的输入数据顺序计算时,调用存储器存储的椭圆曲线点及对应的随机数,完成SM2算法的计算。
2.如权利要求1所述的方法,其特征在于,在所述调用存储器存储的椭圆曲线点及对应的随机数之后,删除或者标记存储器存储的椭圆曲线点及对应的随机数。
3.如权利要求1所述的方法,其特征在于,CPU设定椭圆曲线上的点Q,所述GPU执行SM2算法中的计算椭圆曲线多倍点运算步骤,由GPU线程按照步骤1)、2)和3)循环计算完成:
1),读取一个随机数ki,将ki赋值给k,即k=ki;
2),计算[k]Q,[k]Q为椭圆曲线上的点Q的k倍点;
3),将(k,[k]Q)存储在设定的存储器中。
4.如权利要求1或2所述的方法,其特征在于,所述GPU执行SM2算法中的计算椭圆曲线多倍点运算步骤由一个GPU线程顺序完成,或多个GPU线程同时计算完成;
所述多个GPU线程同时完成时,针对不同的椭圆曲线和不同的点Q,或者针对相同的椭圆曲线和不同的点Q。
5.如权利要求1或3所述的方法,其特征在于,所述SM2算法为SM2算法的数字签名生成算法、密钥交换协议或加密算法。
6.如权利要求5所述的方法,其特征在于,所述SM2算法为SM2算法的数字签名生成算法或密钥交换协议时,所述计算椭圆曲线多倍点运算步骤为计算基点G的椭圆曲线多倍点;
所述SM2算法为加密算法时,所述计算椭圆曲线多倍点运算步骤为计算基点G的椭圆曲线多倍点和公钥P的椭圆曲线多倍点。
7.一种结合CPU和GPU实现SM2算法的装置,其特征在于,包括:GPU计算单元、存储器和CPU计算单元,其中,
GPU计算单元,用于在CPU计算单元的调用下,预先执行SM2算法中的计算椭圆曲线多倍点运算步骤,得到椭圆曲线点及对应的随机数预先存储在存储器中;
CPU计算单元,用于调用GPU计算单元,根据SM2算法步骤对SM2算法的输入数据顺序计算时,调用存储器存储的椭圆曲线点及对应的随机数,完成SM2算法的计算;
存储器,用于预先存储GPU计算单元计算的椭圆曲线点及对应的随机数。
8.如权利要求7所述的装置,其特征在于,所述GPU单元,还用于所述GPU执行SM2算法中的计算椭圆曲线多倍点运算步骤,由GPU线程按照步骤1)、2)和3)循环计算完成:
1),读取一个随机数ki,将ki赋值给k,即k=ki;
2),计算[k]Q,[k]Q椭圆曲线上的点Q的k倍点;
3),将(k,[k]Q)存储在设定的存储器中。
9.如权利要求7或8所述的装置,其特征在于,所述GPU计算单元为一个或多个,分别承载有GPU线程,用于单独或同时执行SM2算法中的计算椭圆曲线多倍点运算步骤,所述计算椭圆曲线多倍点运算针对针对不同的椭圆曲线和不同的点Q,或者针对相同的椭圆曲线和不同的点Q。
10.如权利要求7所述的装置,其特征在于,所述CPU计算单元,还用于调用存储器存储的椭圆曲线点及对应的随机数后,删除或标记存储器中存储的GPU计算单元计算的椭圆曲线点及对应的随机数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013104083121A CN103475469A (zh) | 2013-09-10 | 2013-09-10 | 一种结合cpu和gpu实现sm2算法的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013104083121A CN103475469A (zh) | 2013-09-10 | 2013-09-10 | 一种结合cpu和gpu实现sm2算法的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103475469A true CN103475469A (zh) | 2013-12-25 |
Family
ID=49800184
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013104083121A Pending CN103475469A (zh) | 2013-09-10 | 2013-09-10 | 一种结合cpu和gpu实现sm2算法的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103475469A (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461469A (zh) * | 2014-11-14 | 2015-03-25 | 成都卫士通信息产业股份有限公司 | 一种采用gpu并行化实现sm2算法的方法 |
CN105391736A (zh) * | 2015-12-11 | 2016-03-09 | 捷德(中国)信息科技有限公司 | 一种交易动态数据认证方法及*** |
CN105490802A (zh) * | 2015-11-27 | 2016-04-13 | 桂林电子科技大学 | 基于gpu的改进sm4并行加解密通信方法 |
CN105515758A (zh) * | 2015-11-27 | 2016-04-20 | 桂林电子科技大学 | 基于Modbus协议的数据并行加密通信方法和*** |
CN105843588A (zh) * | 2016-03-16 | 2016-08-10 | 浪潮电子信息产业股份有限公司 | 一种基于mic的随机数发生器分段式并行化方法 |
CN105843587A (zh) * | 2016-03-16 | 2016-08-10 | 浪潮电子信息产业股份有限公司 | 一种基于mic的随机数发生器跳跃式并行化方法 |
CN106301770A (zh) * | 2016-08-22 | 2017-01-04 | 大唐微电子技术有限公司 | 一种Java卡SM2数字签名验证或信息加密的方法及装置 |
CN106549770A (zh) * | 2017-01-13 | 2017-03-29 | 武汉理工大学 | Sm2数字签名生成方法及*** |
CN106712965A (zh) * | 2017-01-17 | 2017-05-24 | 数安时代科技股份有限公司 | 数字签名方法、装置以及密码设备 |
CN106788975A (zh) * | 2016-12-28 | 2017-05-31 | 北京天融信网络安全技术有限公司 | 基于sm4密码算法的加解密装置 |
CN108964916A (zh) * | 2018-08-03 | 2018-12-07 | 元科技控股有限公司 | 签名生成方法、生成装置、签名验证方法和验证装置 |
CN109660351A (zh) * | 2018-11-08 | 2019-04-19 | 北京大学 | 一种sm2公钥密码的数字签名快速生成方法 |
CN107147493B (zh) * | 2017-06-13 | 2020-02-28 | 北京梆梆安全科技有限公司 | 一种有限资源下的数字签名方法、装置及*** |
CN111221640A (zh) * | 2020-01-09 | 2020-06-02 | 黔南民族师范学院 | 一种gpu-cpu协同节能方法 |
CN111917548A (zh) * | 2019-05-07 | 2020-11-10 | 北京大学 | 基于gpu与cpu异构结构的椭圆曲线数字签名方法 |
CN113221193A (zh) * | 2021-06-02 | 2021-08-06 | 上海交通大学 | 基于gpu的sm2数字签名与验签快速实现方法及*** |
CN114172651A (zh) * | 2021-11-15 | 2022-03-11 | 武汉大学 | 一种sm9公钥加密算法、解密算法的gpu加速实现方法 |
WO2023275947A1 (ja) * | 2021-06-28 | 2023-01-05 | 日本電信電話株式会社 | 回路情報の完全性検証システムおよび回路情報の完全性検証方法 |
CN111240818B (zh) * | 2020-01-09 | 2023-08-08 | 黔南民族师范学院 | 一种多相同gpu异构***环境下的任务调度节能方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110093680A1 (en) * | 2009-10-15 | 2011-04-21 | Freescale Semiconductor, Inc. | Flexible memory controller for autonomous mapping of memory |
CN102298522A (zh) * | 2011-09-13 | 2011-12-28 | 四川卫士通信息安全平台技术有限公司 | 一种使用gpu实现sha-1算法的方法 |
-
2013
- 2013-09-10 CN CN2013104083121A patent/CN103475469A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110093680A1 (en) * | 2009-10-15 | 2011-04-21 | Freescale Semiconductor, Inc. | Flexible memory controller for autonomous mapping of memory |
CN102298522A (zh) * | 2011-09-13 | 2011-12-28 | 四川卫士通信息安全平台技术有限公司 | 一种使用gpu实现sha-1算法的方法 |
Non-Patent Citations (1)
Title |
---|
王雷: "基于GPU的椭圆曲线相关算法并行化效率分析", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 03, 15 March 2012 (2012-03-15), pages 49 - 51 * |
Cited By (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461469A (zh) * | 2014-11-14 | 2015-03-25 | 成都卫士通信息产业股份有限公司 | 一种采用gpu并行化实现sm2算法的方法 |
CN105515758B (zh) * | 2015-11-27 | 2018-08-17 | 桂林电子科技大学 | 基于Modbus协议的数据并行加密通信方法和*** |
CN105490802A (zh) * | 2015-11-27 | 2016-04-13 | 桂林电子科技大学 | 基于gpu的改进sm4并行加解密通信方法 |
CN105515758A (zh) * | 2015-11-27 | 2016-04-20 | 桂林电子科技大学 | 基于Modbus协议的数据并行加密通信方法和*** |
CN105490802B (zh) * | 2015-11-27 | 2018-07-27 | 桂林电子科技大学 | 基于gpu的改进sm4并行加解密通信方法 |
CN105391736A (zh) * | 2015-12-11 | 2016-03-09 | 捷德(中国)信息科技有限公司 | 一种交易动态数据认证方法及*** |
CN105843588A (zh) * | 2016-03-16 | 2016-08-10 | 浪潮电子信息产业股份有限公司 | 一种基于mic的随机数发生器分段式并行化方法 |
CN105843587A (zh) * | 2016-03-16 | 2016-08-10 | 浪潮电子信息产业股份有限公司 | 一种基于mic的随机数发生器跳跃式并行化方法 |
CN106301770A (zh) * | 2016-08-22 | 2017-01-04 | 大唐微电子技术有限公司 | 一种Java卡SM2数字签名验证或信息加密的方法及装置 |
CN106788975B (zh) * | 2016-12-28 | 2019-12-13 | 北京天融信网络安全技术有限公司 | 基于sm4密码算法的加解密装置 |
CN106788975A (zh) * | 2016-12-28 | 2017-05-31 | 北京天融信网络安全技术有限公司 | 基于sm4密码算法的加解密装置 |
CN106549770B (zh) * | 2017-01-13 | 2019-07-12 | 武汉理工大学 | Sm2数字签名生成方法及*** |
CN106549770A (zh) * | 2017-01-13 | 2017-03-29 | 武汉理工大学 | Sm2数字签名生成方法及*** |
CN106712965A (zh) * | 2017-01-17 | 2017-05-24 | 数安时代科技股份有限公司 | 数字签名方法、装置以及密码设备 |
CN106712965B (zh) * | 2017-01-17 | 2020-02-18 | 数安时代科技股份有限公司 | 数字签名方法、装置以及密码设备 |
CN107147493B (zh) * | 2017-06-13 | 2020-02-28 | 北京梆梆安全科技有限公司 | 一种有限资源下的数字签名方法、装置及*** |
CN108964916A (zh) * | 2018-08-03 | 2018-12-07 | 元科技控股有限公司 | 签名生成方法、生成装置、签名验证方法和验证装置 |
CN108964916B (zh) * | 2018-08-03 | 2021-07-16 | 中思博安科技(北京)有限公司 | 签名生成方法、生成装置、签名验证方法和验证装置 |
CN109660351A (zh) * | 2018-11-08 | 2019-04-19 | 北京大学 | 一种sm2公钥密码的数字签名快速生成方法 |
CN109660351B (zh) * | 2018-11-08 | 2020-09-08 | 北京大学 | 一种sm2公钥密码的数字签名快速生成方法 |
CN111917548A (zh) * | 2019-05-07 | 2020-11-10 | 北京大学 | 基于gpu与cpu异构结构的椭圆曲线数字签名方法 |
CN111917548B (zh) * | 2019-05-07 | 2021-06-04 | 北京大学 | 基于gpu与cpu异构结构的椭圆曲线数字签名方法 |
CN111221640A (zh) * | 2020-01-09 | 2020-06-02 | 黔南民族师范学院 | 一种gpu-cpu协同节能方法 |
CN111240818B (zh) * | 2020-01-09 | 2023-08-08 | 黔南民族师范学院 | 一种多相同gpu异构***环境下的任务调度节能方法 |
CN111221640B (zh) * | 2020-01-09 | 2023-10-17 | 黔南民族师范学院 | 一种gpu-cpu协同节能方法 |
CN113221193A (zh) * | 2021-06-02 | 2021-08-06 | 上海交通大学 | 基于gpu的sm2数字签名与验签快速实现方法及*** |
WO2023275947A1 (ja) * | 2021-06-28 | 2023-01-05 | 日本電信電話株式会社 | 回路情報の完全性検証システムおよび回路情報の完全性検証方法 |
CN114172651A (zh) * | 2021-11-15 | 2022-03-11 | 武汉大学 | 一种sm9公钥加密算法、解密算法的gpu加速实现方法 |
CN114172651B (zh) * | 2021-11-15 | 2023-07-18 | 武汉大学 | 一种sm9公钥加密算法、解密算法的gpu加速实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103475469A (zh) | 一种结合cpu和gpu实现sm2算法的方法及装置 | |
CN103546288B (zh) | Sm2数字签名生成算法的实现方法及装置 | |
CN109474423A (zh) | 数据加解密方法、服务器及存储介质 | |
US12028446B2 (en) | Method and system for key agreement utilizing semigroups | |
Doh et al. | Secure authentication for structured smart grid system | |
CN112347495A (zh) | 一种基于区块链的可信隐私智能服务计算***及方法 | |
CN103631660A (zh) | 在gpu中进行大整数计算时的存储资源分配方法及装置 | |
WO2013180413A1 (ko) | 아이디 기반 암호 시스템을 위한 비밀키 생성 장치 및 그 방법, 그리고 그 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 기록매체 | |
CN111950030A (zh) | 基于区块链的数据共享存储方法、终端设备和存储介质 | |
Saxena et al. | Hybrid Cloud Computing for Data Security System | |
CN104126284A (zh) | 生成数字签名 | |
CN104917608A (zh) | 一种密钥抗功耗攻击的方法 | |
Liu et al. | Offline/online attribute‐based encryption with verifiable outsourced decryption | |
CN101763241A (zh) | 实现ecc密码体制中签名算法的大整数求模运算装置及求模方法 | |
CN115801220A (zh) | 加速设备、计算***及加速方法 | |
US9509511B2 (en) | Identity based encryption | |
CN105119929A (zh) | 单一恶意云服务器下的安全模指数外包方法及*** | |
CN103078736A (zh) | 一种多维度密钥生成方法 | |
CN111314080B (zh) | 一种基于sm9算法的协同签名方法、装置、介质 | |
Kishore et al. | An efficient parallel algorithm for hash computation in security and forensics applications | |
CN111917548B (zh) | 基于gpu与cpu异构结构的椭圆曲线数字签名方法 | |
KR101271170B1 (ko) | 비밀키 생성을 위한 고속연산 수행 방법 및 장치 | |
CN104468100A (zh) | 改进的滑动窗口模幂计算方法 | |
CN110456706B (zh) | 一种基于云端协同的物联网*** | |
Wu | Parallel Optimized Attribute-Based Encryption Scheme Based on SM9 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20131225 |