CN103532710B - 基于gpu的sm2算法实现方法及装置 - Google Patents

基于gpu的sm2算法实现方法及装置 Download PDF

Info

Publication number
CN103532710B
CN103532710B CN201310459734.1A CN201310459734A CN103532710B CN 103532710 B CN103532710 B CN 103532710B CN 201310459734 A CN201310459734 A CN 201310459734A CN 103532710 B CN103532710 B CN 103532710B
Authority
CN
China
Prior art keywords
algorithm
gpu
type
calculating
computation requests
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.)
Active
Application number
CN201310459734.1A
Other languages
English (en)
Other versions
CN103532710A (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
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 CN201310459734.1A priority Critical patent/CN103532710B/zh
Publication of CN103532710A publication Critical patent/CN103532710A/zh
Application granted granted Critical
Publication of CN103532710B publication Critical patent/CN103532710B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种基于GPU的SM2算法的实现方法及装置,本发明由CPU接收SM2算法计算请求,调用GPU,由GPU执行该SM2算法后得到SM2算法计算结果,反馈给CPU。在具体实现上,CPU可以接收多个SM2算法计算请求并按照计算类型分类后,分别调用执行不同计算类型的SM2算法计算请求的GPU线程组,由相应的GPU线程组完成对应计算类型的SM2算法计算,得到SM2算法计算结果,反馈给CPU。GPU在计算SM2算法的过程中,都是并行计算执行,提高了SM2算法的计算效率。

Description

基于GPU的SM2算法实现方法及装置
技术领域
本发明涉及公钥密码算法技术,特别涉及一种基于图形处理器(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控制。SP具备独立的寄存器和程序计数器,但是没有内存访问和调度单元,所以SP仅仅具备计算能力,而非独立的处理器核,SM为其包含的SP提供内存访问和调度能力。如果使用同一个SM中所有SP执行相同的指令,并且使所有SP处理的计算数据都不同,就可以使SM具有最高的计算效率,有效避免计算资源的浪费。
2006年NVIDIA公司推出了计算机一体设备结构(CUDA,ComputeUnified Device Architecture)可编程平台,可以实现GPU线程的调度。在CUDA可编程平台架构下,GPU执行的最小单位是线程(thread),数个线程(thread)可以组成一个线程块(block)。一个block中的thread可以存取同一共享内存且同步。执行相同程序的thread,组成栅格(grid),不同的grid可以执行不同的程序。
GPU可以对GPU线程进行动态调度,GPU线程被承载在GPU计算单元中,每个GPU线程由一个SP执行。如果一组GPU线程同时允许相同指令且处理不同的数据,就能使尽可能多个SP在相同时间内执行相同指令。一组GPU线程同时处理的指令相同且数据不同的计算越多,GPU中SM的计算效率越高,GPU的运算速度越快。
相对于中央处理器(CPU),GPU具有强大的数据处理能力,在浮点运算及并行计算等方面,提高几十倍甚至数百倍于CPU的性能。GPU具有几千个核,有很高的并行性,但是每个SM相比CPU处理能力比较弱。CPU计算能力强,但是核数比较少。因此,采用何种CPU和GPU协作方式进行构架,完成各种计算,以提高系统整体计算能力,是一个亟待解决的问题。
椭圆曲线公钥密码算法(SM2),是中国国家密码管理局发布的密码算法。SM2明确规定了SM2算法的数字签名算法、公钥加密算法及密钥交换协议,应用在数据传输过程中可靠性的数据传输及使用数据的合法者验证。其中,SM2算法的数字签名算法包括生成算法和验证算法。在SM2的数字签名算法中,包括一一对应的公钥和私钥,其中,私钥用于数据生成数字签名,公钥用于对数字签名进行验证。签名者采用私钥进行数据M的数字签名生成算法计算,得到数据M的数字签名;验证者采用公钥对接收的数据M进行数字签名验证计算,验证数据M的数字签名是否匹配,如果匹配,确认接收的数据M是正确的。公钥加密算法包括加密算法和解密算法,适用于所传输数据的加解密。在公钥加密算法中,数据接收者有一个公钥和一个私钥,公钥和私钥一一对应。数据发送者利用接收者的公钥,使用加密算法对数据加密,接收者用对应的私钥,使用解密算法对接收的数据进行解密,获取数据。密钥交换协议是密钥交换发起者和密钥交换响应者通过交互数据传递实现秘密信息的共享,包括发起密钥交换和响应密钥交换。密钥交换发起者和响应者分别拥有自己的公钥和私钥,并用各自的私钥和对方的公钥确定共享的秘密密钥,这个共享的秘密密钥通常用于某个对称密码算法中,该密钥交换协议适用于密码应用中的密钥交换,能够用于密钥协商和管理。
SM2算法的数字签名算法、密钥交换协议和加密算法的具体郭晨如下所述。
SM2算法的数字签名生成算法
设待签名的消息为M,为了取得消息M的数字签名(r,s),作为签名者的用户A应实现以下运算步骤:
A1:置ZA‖M表示ZA与M的拼接;
A2:计算将e的数据类型转换为整数;
A3:产生随机数k∈[1,n-1];
A4:计算椭圆曲线点(x1,y1)=[k]G;
A5:计算r=(e+x1)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比特的密码杂凑函数;ZA:用户A的可辨别标识、部分椭圆曲线系统参数和用户A公钥的杂凑值;G:椭圆曲线上的一个基点,其阶为素数;n:基点G的阶;dA:用户A的私钥;[k]G:椭圆曲线上点G的k倍点,即[k]G=G+G...+G(k个G)。
SM算法的数字签名验证算法
验证者对收到的消息M′及其数字签名(r′,s′),作为验证者的用户B实现以下运算步骤:
B1:检验r′∈[1,n-1]是否成立,若不成立则验证不通过;
B2:检验s′∈[1,n-1]是否成立,若不成立则验证不通过;
B3:置 M ‾ ′ = Z A | | M ′ ;
B4:计算将e′的数据类型转换为整数;
B5:将r′、s′的数据类型转换为整数,计算t=(r′+s′)mod n,若t=0,则验证不通过;
B6:计算椭圆曲线点(x1′,y1′)=[s′]G+[t]PA
B7:计算R=(e′+x1′)mod n,检验R=r′是否成立,若成立则验证通过;否则验证不通过。
其中:PA:用户A的公钥;[s′]G:椭圆曲线上点G的s′倍点;[t]P:椭圆曲线上点P的t倍点。
SM2算法的加密算法:
设需要发送的消息为比特串M,klen为M的比特长度。为了对明文M进行加密,作为加密者的用户E应实现以下运算步骤:
E1:产生随机数k∈[1,n-1];
E2:计算椭圆曲线点C1=[k]G=(x1,y1),将C1的数据类型转换为比特串;
E3:计算椭圆曲线点S=[h]PD,若S是无穷远点,则报错并退出;
E4:计算椭圆曲线点[k]PD=(x2,y2),将坐标x2,y2的数据类型转换为比特串;
E5:计算t=KDF(x2‖y2,klen),若t为全0比特串,则返回E1;
E6:计算C2=M⊕t,⊕表示比特异或;
E7:计算C3=Hash(x2‖M‖y2);
E8:输出密文C=C1‖C3‖C2
其中:PD:用户D的公钥;h:n的余因子;[h]PD:椭圆曲线上点PD的h倍点;[k]PD:椭圆曲线上点PD的k倍点;KDF():密钥派生函数;Hash():密码杂凑函数。
SM2算法的解密算法
设klen为密文中C2的比特长度;为了对密文C=C1‖C3‖C2进行解密,作为解密者的用户D应实现以下运算步骤:
D1:从C中取出比特串C1,将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;
D2:计算椭圆曲线点S=[h]C1,若S是无穷远点,则报错并退出;
D3:计算[dD]C1=(x2,y2),将坐标x2、y2的数据类型转换为比特串;
D4:计算t=KDF(x2‖y2,klen),若t为全0比特串,则报错并退出;
D5:从C中取出比特串C2,计算M′=C2⊕t;
D6:计算u=Hash(x2‖M′‖y2),从C中取出比特串C3,若u≠C3,则报错并退出;
D7:输出明文M′。
其中:dD:用户D的私钥;[h]C1:椭圆曲线上点C1的h倍点;[dD]C1:椭圆曲线上点C1的dD倍点。
SM2算法的密钥交换协议
设用户I和用户R协商获得密钥数据的长度为klen比特,用户I为密钥交换发起方,用户R为密钥交换响应方。
记w=((log2(n)/2)-1。其中,x:顶函数,大于或等于x的最小整数。
用户I:
I1:产生随机数rI∈[1,n-1];
I2:计算椭圆曲线点RI=[rI]G=(x1,y1);
I3:将RI发送给用户R;
用户R:
R1:产生随机数rR∈[1,n-1];
R2:计算椭圆曲线点RR=[rR]G=(x2,y2);
R3:从RR中取出域元素x2,将x2的数据类型转换为整数,计算
R4:计算 t R = ( d R + x ‾ 2 · r R ) mod n ;
R5:验证RI是否满足椭圆曲线方程,若不满足则协商失败;否则从RI中取出域元素x1,将x1数据类型转换为整数,计算
R6:计算椭圆曲线点 V = [ h · t R ] ( P I + [ x ‾ 1 ] R I ) = ( x V , y V ) ,若V是无穷远点,则R协商失败;否则将xV、yV的数据类型转换为比特串;
R7:计算KR=KDF(xV‖yV‖ZI‖ZR,klen);
R8:将x1、y1、x2、y2的数据类型转换为比特串,
计算SR=Hash(0x02‖yV‖Hash(xV‖ZI‖ZR‖x1‖y1‖x2‖y2));
R9:将RR、(选项SR)发送给用户I;
用户I:
I4:从RI中取出域元素x1,计算
I5:计算 t I = ( d I + x ‾ 1 · r I ) mod n ;
I6:验证RR是否满足椭圆曲线方程,若不满足则协商失败;否则从RR中取出域元素x2,将x2数据类型转换为整数,计算
I7:计算椭圆曲线点 U = [ h · t I ] ( P R + [ x ‾ 2 ] R R ) = ( x U , y U ) ,若U是无穷远点,则I协商失败;否则将xU、yU的数据类型转换为比特串;
I8:计算KI=KDF(xU‖yU‖ZI‖ZR,klen);
I9:将x1、y1、x2、y2的数据类型转换为比特串,
计算S1=Hash(0x02‖yU‖Hash(xU‖ZI‖ZR‖x1‖y1‖x2‖y2)),并检验S1=SR是否成立,若等式不成立则从R到Q的密钥确认失败;
I10:计算SI=Hash(0x03‖yU‖Hash(xU‖ZI‖ZR‖x1‖y1‖x2‖y2)),并将SI=发送给用户R;
用户R:
R10:计算S2=Hash(0x03‖yV‖Hash(xV‖ZI‖ZR‖x1‖y1‖x2‖y2)),检验S2=SI是否成立,若等式不成立则从I到R的密钥确认失败;
其中:dR:用户R的私钥;PI:用户I的公钥;PR:用户R的公钥;dI:用户I的私钥;[k]P:椭圆曲线上点P的k倍点;ZI:关于用户I的可辨别标识、部分椭圆曲线系统参数和用户I的公钥的杂凑值;ZR:关于用户R的可辨别标识、部分椭圆曲线系统参数和用户I的公钥的杂凑值。
SM2算法在实现数字签名生成计算、数字签名验证计算、加密计算、解密计算、发起密钥交换计算及响应密钥计算时,都遵循上述过程。对于相同类型的SM2算法实现时,具有相同的计算步骤,但是具有不用的操作数及密钥。
目前,上述各种类型的SM2算法常常采用CPU按照对应类型的SM2算法流程步骤实现,由于CPU顺序执行对应类型的SM2算法流程步骤,计算效率比较低,不利于各种类型的SM2算法的应用。
发明内容
有鉴于此,本发明提供一种基于GPU的SM2算法的实现方法,该实现方法能够提高SM2算法的计算效率。
本发明还提供一种基于GPU的SM2算法的实现装置,该实现装置能够提高SM2算法的计算效率。
为达到上述目的,本发明实施的技术方案具体是这样实现的:
一种基于GPU的SM2算法的实现方法,该方法包括:
CPU接收SM2算法计算请求;
CPU调用GPU,GPU执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线程同时进行并行计算,得到SM2算法计算结果;
CPU获取GPU反馈的SM2算法计算结果。
所述接收SM2算法计算请求为多个,该方法还包括:
对请求的SM2算法按照计算类型进行分类;
所述CPU调用GPU,由GPU执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线程同时进行并行计算为:
CPU分别调用针对不同计算类型SM2算法设置的不同GPU线程组,由相应的GPU线程组完成对应计算类型的SM2算法计算,所述GPU线程组中包括执行对应计算类型SM2算法的不同SM2算法计算请求的多个GPU线程。
所述对请求的SM2算法按照计算类型进行分类为:
CPU接收到的多个SM2算法计算请求,按照计算类型分类,然后再缓存在对应的计算类型的SM2算法计算请求的缓冲队列中,顺序等待对应计算类型的SM2算法的GPU线程组执行。
设定时间或/和缓存阈值,当其中一个条件到达时,将所缓存的对应计算类型的SM2算法计算请求,提供给执行对应的计算类型的SM2算法计算的GPU线程组并行计算;
或者当执行对应的计算类型的SM2算法计算的GPU线程组执行的SM2算法计算请求完成时,则将缓存的对应计算类型的SM2算法计算请求,提供给执行对应的计算类型的SM2算法计算的GPU线程组并行计算;
所述为执行对应的计算类型的SM2算法计算的线程组提供的SM2算法计算请求数目小于等于执行对应的计算类型的SM2算法计算的GPU线程组一次执行的SM2算法计算请求的数目。
所述同一GPU线程组中的多个GPU线程在同一时刻且采用相同执行进度执行该计算类型的不同SM2算法计算请求;
对应不同计算类型的SM2算法的GPU线程组开始计算的时间及执行进度不同。
一种基于GPU的SM2算法的实现装置,该装置包括:CPU和GPU计算单元,其中,
CPU,用于接收SM2算法计算请求后,调用GPU计算单元执行SM2算法,接收GPU计算单元反馈的SM2算法计算结果;
GPU计算单元,用于在CPU的调度下,执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线程同时进行并行计算,得到SM2算法计算结果,反馈给CPU计算单元。
所述GPU计算单元为多个,分别承载不同GPU线程,将多个GPU计算单元根据执行的SM2算法的不同计算类型进行分组,每组中具有多个执行相同计算类型的SM2算法的GPU计算单元;
CPU,还用于接收多个SM2算法计算请求后,对SM2算法的计算请求按照计算类型进行分类,调用对应计算类型的GPU计算单元组;
GPU计算单元组,还用于在CPU的调用下,并行执行对应计算类型的SM2算法计算,得到对应计算类型的SM2算法计算结果。
CPU包括CPU计算单元、缓冲池、分类器及针对不同计算类型的SM2算法的缓冲队列单元,其中,
CPU计算单元,用于接收多个SM2算法计算请求后,缓存在缓冲池中;
缓冲池,用于缓存多个SM2算法计算请求后,发送给分类器;
分类器,用于从缓冲池中提取多个SM2算法计算请求,按照计算类型分类,分别存储到对应计算类型的SM2算法计算请求的缓冲队列单元中;
对应计算类型的SM2算法计算请求的缓冲队列单元,用于缓存对应计算类型的SM2算法计算请求,并提供给执行对应的计算类型的SM2算法计算的GPU计算单元组并行计算。
所述对应计算类型的SM2算法计算请求的缓冲队列单元,还用于设定时间或/和缓存阈值,当其中一个条件到达时,将所缓存的对应计算类型的SM2算法计算请求,提供给执行对应类型的SM2算法计算的GPU计算单元组并行计算,在提供时,提供的数目小于等于执行对应的计算类型的SM2算法计算的GPU计算单元组一次执行的SM2算法计算请求的数目。
所述对应同一计算类型的SM2算法计算请求的GPU计算单元组中的不同GPU计算单元在同一时刻且采用相同执行进度执行该计算类型的不同SM2算法计算请求;对应不同计算类型的SM2算法的GPU计算单元组开始计算的时间及执行进度不同。
由上述方案可以看出,本发明由CPU接收SM2算法计算请求,调用GPU,由GPU执行该SM2算法后得到SM2算法计算结果,反馈给CPU。在具体实现上,CPU可以接收多个SM2算法计算请求并按照计算类型分类后,分别调用不同GPU线程组,由相应的GPU线程组完成对应计算类型的SM2算法计算,得到SM2算法计算结果,反馈给CPU。GPU在计算SM2算法的过程中,都是并行计算执行,相比现有技术的CPU按照对应类型的SM2算法流程步骤顺序计算,提高了SM2算法的计算效率。
附图说明
图1为本发明实施例提供的基于GPU的SM2算法的实现方法流程图;
图2为本发明实施例提供的GPU线程执行多个SM2算法计算请求的示意图;
图3为本发明实施例提供的基于GPU的SM2算法的实现装置结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
从背景技术可以看出,实现SM2算法时计算效率比较低的原因就是CPU按照对应类型的SM2算法流程步骤顺序计算。因此,为了提高实现SM2算法的计算效率,本发明利用了GPU的并行计算及多线程的特点,采用了由CPU接收SM2算法计算请求,调用GPU,由GPU执行该SM2算法后得到SM2算法计算结果,反馈给CPU。
在具体实现上,CPU可以接收多个SM2算法计算请求并按照计算类型分类后,分别调用不同的GPU线程组,由相应的GPU线程组完成对应计算类型的SM2算法计算,得到SM2算法计算结果,反馈给CPU。GPU在计算SM2算法的过程中,都是并行计算执行,提高了计算效率。
图1为本发明实施例提供的基于GPU的SM2算法的实现方法流程图,其具体步骤为:
步骤101、CPU接收SM2算法计算请求;
步骤102、CPU调用GPU,由GPU执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线程同时进行并行计算,得到SM2算法计算结果;
在该步骤中,GPU包括GPU多个线程,可以对SM2算法步骤中的同一步骤的不同数据同时进行并行计算,比如SM2算法中的椭圆曲线多倍点计算等,提高计算效率;
步骤103、CPU获取GPU反馈的SM2算法计算结果。
在图1中的步骤101中,CPU接收到多个SM2算法计算请求,并对请求的SM2算法计算按照计算类型进行分类;
在图1中的步骤102中,CPU分别调用针对不同的GPU线程组,由相应的GPU线程组完成对应计算类型的SM2算法计算得到SM2算法计算结果。
在这里,预先针对不同计算类型的SM2算法请求设置不同的GPU线程组,相同计算类型的SM2算法由对应的GPU线程组并行执行,每个GPU线程组可以同时并行执行多个对应的相同计算类型的不同SM2算法计算,提高了计算效率。
CPU对接收到的多个SM2算法计算请求按照计算类型分类的过程为:
CPU缓存接收到的多个SM2算法计算请求后,对SM2算法计算请求按照计算类型分类,然后再缓存在对应的计算类型的SM2算法请求的缓冲队列中,顺序等待执行对应计算类型的SM2算法请求的GPU线程组并行执行。
在执行对应计算类型的SM2算法计算的GPU线程组中包括多个GPU线程,如图2所示,执行对应计算类型的SM2算法计算的GPU线程组从对应的计算类型的SM2算法请求的缓冲队列中提取出多个对应的计算类型的SM2算法计算请求后,分配给多个GPU线程,同时并行执行。
这时,对应同一计算类型的SM2算法计算的GPU线程组中的不同GPU线程在同一时刻且采用相同执行进度执行该计算类型的不同SM2算法计算请求。对应不同计算类型的SM2算法计算的GPU线程组开始计算的时间及执行进度不同。
在本发明中,CPU定时将对应的计算类型的SM2算法请求的缓冲队列中的多个SM2算法计算请求发送给相应的GPU线程组。如果相应的GPU线程组一次执行的SM2算法计算请求为N个,N为自然数。则当对应的计算类型的SM2算法计算请求的缓冲队列中的SM2算法计算请求大于等于N时,发送N个,小于时,发送对应的计算类型的SM2算法计算请求的缓冲队列中所有的SM2算法计算请求。CPU所设置的定时时间根据需求设置,如果设置的定时时间间隔比较长,则CPU给GPU线程组发送的相同计算类型的SM2算法计算请求比较多,但是得到计算结果的延时比较长;如果设置的定时时间间隔比较短,则得到计算结果的延时比较短,但是CPU给GPU线程组发送的相同计算类型的SM2算法计算请求比较少,无法完全利用GPU线程组提供的计算资源。
相应地,也可以为对应的计算类型的SM2算法计算请求的缓冲队列设置缓存阈值,等到缓存的SM2算法计算请求数目到达缓存阈值时,则CPU将对应的计算类型的SM2算法请求的缓冲队列中的多个SM2算法计算请求发送给相应的GPU线程组执行。缓存阈值设置的越大,则CPU给GPU线程组一次发送的相同计算类型的SM2算法计算请求越多,但是得到计算结果的延时比较长;缓存阈值设置的越小,得到计算结果的延时比较短,但是CPU给GPU线程组一次发送的相同计算类型的SM2算法计算请求比较少,无法完全利用GPU线程组提供的计算资源。
更进一步地,还可以同时定时及为对应的计算类型的SM2算法计算请求的缓冲队列设置缓存阈值,只要其中一个条件满足,CPU将对应的计算类型的SM2算法计算请求的缓冲队列中的多个SM2算法计算请求发送给相应的GPU线程组执行。
CPU还可以监控GPU线程组执行情况,当监控到GPU线程组并行执行完对应的计算类型的SM2算法时,则将对应的计算类型的SM2算法计算请求的缓冲队列中的SM2算法计算请求发送给该GPU线程执行,如果该GPU线程组一次执行的SM2算法计算请求为N个,N为自然数。则当对应的计算类型的SM2算法计算请求的缓冲队列中的SM2算法计算请求大于等于N时,发送N个,小于时,发送对应的计算类型的SM2算法计算请求的缓冲队列中所有的SM2算法计算请求。
图3为本发明实施例提供的基于GPU的SM2算法的实现装置结构示意图,包括:CPU和GPU计算单元,其中,
CPU,用于接收SM2算法计算请求后,调用GPU计算单元执行SM2算法,接收GPU计算单元反馈的SM2算法计算结果;
GPU计算单元,用于在CPU的调度下,执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线程同时进行并行计算得到SM2算法计算结果,反馈给CPU计算单元。
在图3中,GPU计算单元有多个,分别承载不同GPU线程,将多个GPU计算单元根据执行的不同计算类型SM2算法进行分组后,每组中具有多个执行相同计算类型的SM2算法的GPU计算单元,这时,该结构还包括:
CPU,还用于接收多个SM2算法计算请求后,对请求的SM2算法按照计算类型进行分类,调用对应计算类型的SM2算法的GPU计算单元组;
GPU计算单元组,还用于在CPU的调用下,并行计算对应计算类型的SM2算法,得到对应计算类型的SM2算法计算结果。
在图3中,CPU包括CPU计算单元、缓冲池、分类器及针对不同计算类型的SM2算法请求的缓冲队列单元,其中,
CPU计算单元,用于接收多个SM2算法计算请求后,缓存在缓冲池中;
缓冲池,用于缓存多个SM2算法计算请求后,发送给分类器;
分类器,用于从缓冲池中提取多个SM2算法计算请求,按照计算类型分类后,分别存储到对应计算类型的SM2算法请求的缓冲队列单元中;
对应计算类型的SM2算法请求的缓冲队列单元,用于缓存对应计算类型的SM2算法计算请求,并提供给对应的计算类型的SM2算法计算请求的GPU计算单元组并行计算。
在该结构中,对应计算类型的SM2算法请求的缓冲队列单元,还用于设定时间或/和缓存阈值,当其中一个条件到达时,将所缓存的对应计算类型的SM2算法计算请求,提供给对应的计算类型的SM2算法计算请求的GPU计算单元组并行计算,在提供时,提供的数目小于等于对应的计算类型的SM2算法计算请求的GPU计算单元组一次执行的SM2算法计算请求的数目。
在该结构中,对应同一计算类型的SM2算法计算的GPU计算单元组中的不同GPU计算单元在同一时刻且采用相同执行进度执行该计算类型的不同SM2算法计算请求。对应不同计算类型的SM2算法计算的GPU计算单元组开始计算的时间及执行进度不同。
在该结构中,CPU,还用于监控GPU计算单元组是否已经执行完当前所有的对应的计算类型的SM2算法计算请求,如果是,则指示对应计算类型的SM2算法计算请求的缓冲队列单元,将所缓存的对应计算类型的SM2算法计算请求,提供给执行对应的计算类型的SM2算法计算的GPU计算单元组并行计算,在提供时,提供的数目小于等于执行对应的计算类型的SM2算法计算的GPU计算单元组一次执行的SM2算法计算请求的数目。
在本发明中,SM2算法的不同计算类型包括:SM2算法的数字签名生成算法、数字签名验证算法、加密算法、解密算法、发起密钥交换协议和响应密钥交换协议等。
本发明提供的方法及装置应用在保证所传输数据的安全性上。
可以看出,本发明基于GPU实现SM2算法,使得同一GPU线程组的多个不同GPU线程同一时刻执行相同的SM2算法步骤,使用不同或相同的密钥,处理不同的操作数,从而使得同一GPU线程组的尽可能多的SP执行相同的SM2算法步骤,显著提高了SM2算法的计算效率,同时提高了GPU的计算效率。
以下举一个具体实例说明本发明。
型号为GTX680的GPU共有1536个SP,分为8个SM,即每个SM包括192个SP。
在本实例中,CPU收到的所有SM2算法计算请求都被要求带有标识TYPE,不同计算类型的SM2算法计算请求的标识TYPE不同。加密算法计算请求的标识TYPE等于“ENCRY”,解密算法计算请求的标识TYPE等于“DECRY”,数字签名生成算法计算请求的标识TYPE等于“SIGN”,数字签名验证算法计算请求的标识TYPE等于“VERIFY”,发起密钥交换协议计算请求的标识TYPE等于“INITIATE”,响应密钥交换协议计算请求的标识TYPE等于“RESPOND”。
该实例设置六个缓冲队列,每个缓冲队列带有一个标识TYPE,TYPE值与计算请求的TYPE值取值范围一致,并且每个缓冲队列的标识都与其它缓冲队列不同,即五个缓冲队列的标识TYPE分别为“ENCRY”,“DECRY”,“SIGN”,“VERIFY”,“INITIATE”以及“RESPOND”。
CPU接收到的SM2算法计算请求首先被放入缓冲池。
CPU每次从缓冲池中取出一个计算请求,放入分类器中对该计算请求的计算类型进行判断。分类器由一个逻辑判断构成。分类器判断计算请求的标识TYPE,并将计算请求发送至标识TYPE值与其一致的缓冲队列中。
根据SM2算法计算请求的特点,本实例将CPU每次向GPU线程组发送的计算请求上限设定为5000,每隔10ms将缓冲队列中的多个相同计算类型的计算请求发送给对应的GPU线程组,如果缓冲队列中的计算请求大于或等于5000,则发送5000个计算请求;如果小于5000个,则将缓冲队列中的计算请求全部发送。
动态调度执行GPU线程。一个GPU线程组中的GPU线程在同一时刻开始执行计算类型相同的SM2算法计算。因此,一个GPU线程组对应的多个SP会在同一时刻执行相同的指令、使用相同或不同的密钥、处理不同的操作数。这样,动态调度会在尽可能少的SM里选择SP执行这些指令,SM内执行相同指令的SP越多,运算速度越快。同时,空余的SM越多,就能执行更多的GPU线程,GPU的计算效率明显提高。可见,通过这样的方式,能有效提高SM的计算速度和GPU的计算效率。
以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种基于GPU的SM2算法的实现方法,其特征在于,该方法包括:
CPU接收SM2算法计算请求;
CPU调用GPU,GPU执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线程同时进行并行计算,得到SM2算法计算结果;
CPU获取GPU反馈的SM2算法计算结果;
所述接收SM2算法计算请求为多个,该方法还包括:
对请求的SM2算法按照计算类型进行分类;
所述CPU调用GPU,由GPU执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线程同时进行并行计算为:
CPU分别调用针对不同计算类型SM2算法设置的不同GPU线程组,由相应的GPU线程组完成对应计算类型的SM2算法计算,所述GPU线程组中包括执行对应计算类型SM2算法的不同SM2算法计算请求的多个GPU线程。
2.如权利要求要求1所述的实现方法,其特征在于,所述对请求的SM2算法按照计算类型进行分类为:
CPU接收到的多个SM2算法计算请求,按照计算类型分类,然后再缓存在对应的计算类型的SM2算法计算请求的缓冲队列中,顺序等待对应计算类型的SM2算法的GPU线程组执行。
3.如权利要求要求2所述的实现方法,其特征在于,设定时间或/和缓存阈值,当其中一个条件到达时,将所缓存的对应计算类型的SM2算法计算请求,提供给执行对应的计算类型的SM2算法计算的GPU线程组并行计算;
或者当执行对应的计算类型的SM2算法计算的GPU线程组执行的SM2算法计算请求完成时,则将缓存的对应计算类型的SM2算法计算请求,提供给执行对应的计算类型的SM2算法计算的GPU线程组并行计算;
所述为执行对应的计算类型的SM2算法计算的线程组提供的SM2算法计算请求数目小于等于执行对应的计算类型的SM2算法计算的GPU线程组一次执行的SM2算法计算请求的数目。
4.如权利要求1、2或3所述的实现方法,其特征在于,所述同一GPU线程组中的多个GPU线程在同一时刻且采用相同执行进度执行该计算类型的不同SM2算法计算请求;
对应不同计算类型的SM2算法的GPU线程组开始计算的时间及执行进度不同。
5.一种基于GPU的SM2算法的实现装置,其特征在于,该装置包括:CPU和GPU计算单元,其中,
CPU,用于接收SM2算法计算请求后,调用GPU计算单元执行SM2算法,接收GPU计算单元反馈的SM2算法计算结果;
GPU计算单元,用于在CPU的调度下,执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线程同时进行并行计算,得到SM2算法计算结果,反馈给CPU计算单元;
所述GPU计算单元为多个,分别承载不同GPU线程,将多个GPU计算单元根据执行的SM2算法的不同计算类型进行分组,每组中具有多个执行相同计算类型的SM2算法的GPU计算单元;
CPU,还用于接收多个SM2算法计算请求后,对SM2算法的计算请求按照计算类型进行分类,调用对应计算类型的GPU计算单元组;
GPU计算单元组,还用于在CPU的调用下,并行执行对应计算类型的SM2算法计算,得到对应计算类型的SM2算法计算结果。
6.如权利要求5所述的实现装置,其特征在于,CPU包括CPU计算单元、缓冲池、分类器及针对不同计算类型的SM2算法的缓冲队列单元,其中,
CPU计算单元,用于接收多个SM2算法计算请求后,缓存在缓冲池中;
缓冲池,用于缓存多个SM2算法计算请求后,发送给分类器;
分类器,用于从缓冲池中提取多个SM2算法计算请求,按照计算类型分类,分别存储到对应计算类型的SM2算法计算请求的缓冲队列单元中;
对应计算类型的SM2算法计算请求的缓冲队列单元,用于缓存对应计算类型的SM2算法计算请求,并提供给执行对应的计算类型的SM2算法计算的GPU计算单元组并行计算。
7.如权利要求6所述的实现装置,其特征在于,所述对应计算类型的SM2算法计算请求的缓冲队列单元,还用于设定时间或/和缓存阈值,当其中一个条件到达时,将所缓存的对应计算类型的SM2算法计算请求,提供给执行对应类型的SM2算法计算的GPU计算单元组并行计算,在提供时,提供的数目小于等于执行对应的计算类型的SM2算法计算的GPU计算单元组一次执行的SM2算法计算请求的数目。
8.如权利要求5所述的实现装置,其特征在于,所述对应同一计算类型的SM2算法计算请求的GPU计算单元组中的不同GPU计算单元在同一时刻且采用相同执行进度执行该计算类型的不同SM2算法计算请求;对应不同计算类型的SM2算法的GPU计算单元组开始计算的时间及执行进度不同。
CN201310459734.1A 2013-09-26 基于gpu的sm2算法实现方法及装置 Active CN103532710B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310459734.1A CN103532710B (zh) 2013-09-26 基于gpu的sm2算法实现方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310459734.1A CN103532710B (zh) 2013-09-26 基于gpu的sm2算法实现方法及装置

Publications (2)

Publication Number Publication Date
CN103532710A CN103532710A (zh) 2014-01-22
CN103532710B true CN103532710B (zh) 2016-11-30

Family

ID=

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7746350B1 (en) * 2006-06-15 2010-06-29 Nvidia Corporation Cryptographic computations on general purpose graphics processing units
CN102446088A (zh) * 2011-09-20 2012-05-09 中国科学院深圳先进技术研究院 椭圆曲线标量乘的并行处理方法及系统
CN102682232A (zh) * 2011-12-26 2012-09-19 丁丹 一种高性能超标量椭圆曲线密码处理器芯片

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7746350B1 (en) * 2006-06-15 2010-06-29 Nvidia Corporation Cryptographic computations on general purpose graphics processing units
CN102446088A (zh) * 2011-09-20 2012-05-09 中国科学院深圳先进技术研究院 椭圆曲线标量乘的并行处理方法及系统
CN102682232A (zh) * 2011-12-26 2012-09-19 丁丹 一种高性能超标量椭圆曲线密码处理器芯片

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于GPU的椭圆曲线相关算法并行化效率分析;王雷;《中国优秀硕士学位论文全文数据库》;20120315;第46-51页,图9 *

Similar Documents

Publication Publication Date Title
CN107566117B (zh) 一种区块链密钥管理系统及方法
CN103546288B (zh) Sm2数字签名生成算法的实现方法及装置
CN102170357B (zh) 组合密钥动态安全管理系统
CN103795534B (zh) 基于口令的认证方法及用于执行该方法的装置
CN105307165B (zh) 基于移动应用的通信方法、服务端和客户端
CN109409122A (zh) 文件存储方法及其电子设备、存储介质
CN109309569A (zh) 基于sm2算法的协同签名的方法、装置及存储介质
CN113424185A (zh) 快速不经意传输
CN107040369A (zh) 数据传输方法、装置及系统
CN103475469A (zh) 一种结合cpu和gpu实现sm2算法的方法及装置
CN107231351A (zh) 电子证件的管理方法及相关设备
CN109472164A (zh) 合同数据的验证方法及其网络和电子设备
CN110197082A (zh) 数据处理方法、数据处理装置和计算机系统
CN102571357B (zh) 一种签名的实现方法和装置
CN109889497A (zh) 一种去信任的数据完整性验证方法
CN111311410B (zh) 一种基于区块链的社区问题多部门协作处理系统及方法
CN109491965A (zh) 购售电合同的存储方法及其网络和电子设备
CN110335043A (zh) 一种基于区块链系统的交易隐私保护方法、设备以及系统
CN107204997A (zh) 管理云存储数据的方法和装置
CN110474908A (zh) 交易监管方法与装置、存储介质及计算机设备
CN105119719B (zh) 一种安全存储系统的密钥管理方法
CN110598416B (zh) 交易调度方法及装置
CN114003955A (zh) 一种基于区块链的安全资信管控方法及相关设备
CN106452754B (zh) 一种多人在线动态加密方法及装置
CN103532710B (zh) 基于gpu的sm2算法实现方法及装置

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant