基于gpu的sm2算法实现方法及装置制造方法

文档序号:7772648阅读:9353来源:国知局
基于gpu的sm2算法实现方法及装置制造方法
【专利摘要】本发明公开了一种基于GPU的SM2算法的实现方法及装置,本发明由CPU接收SM2算法计算请求,调用GPU,由GPU执行该SM2算法后得到SM2算法计算结果,反馈给CPU。在具体实现上,CPU可以接收多个SM2算法计算请求并按照计算类型分类后,分别调用执行不同计算类型的SM2算法计算请求的GPU线程组,由相应的GPU线程组完成对应计算类型的SM2算法计算,得到SM2算法计算结果,反馈给CPU。GPU在计算SM2算法的过程中,都是并行计算执行,提高了SM2算法的计算效率。
【专利说明】基于GPU的SM2算法实现方法及装置
【技术领域】
[0001]本发明涉及公钥密码算法技木,特别涉及ー种基于图形处理器(GPU,GraphicsProcessing Unit)的SM2算法的实现方法及装置。
【背景技术】
[0002]采用多核并行计算是提升处理器性能的重要方式,因此出现了包括海量并行结构运算单元的GPU,GPU已经发展成为了并行度高、多线程、计算快捷及内存带宽大的高性能通用处理器。GPU体系结构在组成上分为三层:第一层由若干个线程处理器簇(TPC,ThreadPreocessing Cluster)组成,第二层由多个流多处理器(SM, Streaming Multiprocessor)组成,第三层为构成SM的流处理器(SP, Stream Processor),也可以称为线程处理器。SM作为GPU的一个任务执行和调度单元,主要负责执行GPU分发的线程指令,而SP是GPU中最基本的指令执行单元,其执行的操作由所属的SM控制。SP具备独立的寄存器和程序计数器,但是没有内存访问和调度单元,所以SP仅仅具备计算能力,而非独立的处理器核,SM为其包含的SP提供内存访问和调度能力。如果使用同一个SM中所有SP执行相同的指令,并且使所有SP处理的计算数据都不同,就可以使SM具有最高的计算效率,有效避免计算资源的浪费。
[0003]2006 年 NVIDIA 公司推出 了计算机一体设备结构(CUDA, Compute Unified DeviceArchitecture)可编程平台,可以实现GPU线程的调度。在CUDA可编程平台架构下,GPU执行的最小单位是线程(thread),数个线程(thread)可以组成一个线程块(block)。一个block中的thread可以存取同一共享内存且同步。执行相同程序的thread,组成栅格(grid),不同的grid可以执行不同的程序。
[0004]GPU可以对GPU线程进行动态调度,GPU线程被承载在GPU计算单元中,每个GPU线程由ー个SP执行。如果ー组GPU线程同时允许相同指令且处理不同的数据,就能使尽可能多个SP在相同时间内执行相同指令。ー组GPU线程同时处理的指令相同且数据不同的计算越多,GPU中SM的计算效率越高,GPU的运算速度越快。
[0005]相对于中央处理器(CPU),GPU具有強大的数据处理能力,在浮点运算及并行计算等方面,提高几十倍甚至数百倍于CPU的性能。GPU具有几千个核,有很高的并行性,但是每个SM相比CPU处理能力比较弱。CPU计算能力强,但是核数比较少。因此,采用何种CPU和GTO协作方式进行构架,完成各种计算,以提高系统整体计算能力,是ー个亟待解决的问题。
[0006]椭圆曲线公钥密码算法(SM2),是中国国家密码管理局发布的密码算法。SM2明确规定了 SM2算法的数字签名算法、公钥加密算法及密钥交换协议,应用在数据传输过程中可靠性的数据传输及使用数据的合法者验证。其中,SM2算法的数字签名算法包括生成算法和验证算法。在SM2的数字签名算法中,包括一一对应的公钥和私钥,其中,私钥用于数据生成数字签名,公钥用于对数字签名进行验证。签名者采用私钥进行数据M的数字签名生成算法计算,得到数据M的数字签名;验证者采用公钥对接收的数据M进行数字签名验证计算,验证数据M的数字签名是否匹配,如果匹配,确认接收的数据M是正确的。公钥加密算法包括加密算法和解密算法,适用于所传输数据的加解密。在公钥加密算法中,数据接收者有一个公钥和一个私钥,公钥和私钥一一对应。数据发送者利用接收者的公钥,使用加密算法对数据加密,接收者用对应的私钥,使用解密算法对接收的数据进行解密,获取数据。密钥交换协议是密钥交换发起者和密钥交换响应者通过交互数据传递实现秘密信息的共享,包括发起密钥交换和响应密钥交換。密钥交换发起者和响应者分别拥有自己的公钥和私钥,并用各自的私钥和对方的公钥确定共享的秘密密钥,这个共享的秘密密钥通常用于某个对称密码算法中,该密钥交换协议适用于密码应用中的密钥交換,能够用于密钥协商和管理。
[0007]SM2算法的数字签名算法、密钥交换协议和加密算法的具体郭晨如下所述。
[0008]SM2算法的数字签名生成算法
[0009]设待签名的消息为M,为了取得消息M的数字签名(r,S),作为签名者的用户A应实现以下运算步骤:
[0010]Al !M=Za Il M,za Il m 表示 zA 与 M 的拼接;
[0011]A2:计算e=Hv(M),将e的数据类型转换为整数;
[0012]A3:产生随机数 k G [I, n-1];
[0013]A4:计算椭圆曲线点(X1, Y1) =[k]G ;
[0014]A5:计算 r=(e+x1)mod n,若 r=0 或 r+k=n 则返回 A3 ;
[0015]A6:计算 S= ((l+dA)? (k-r ? dA))mod n,若 s=0 则返回 A3 ;
[0016]A7:将r、s的数据类型转换为字节串,消息M的签名为(r,s)。
[0017]其中:HV:消息摘要长度为V比特的密码杂凑函数;ZA:用户A的可辨别标识、部分椭圆曲线系统參数和用户A公钥的杂凑值;G:椭圆曲线上的ー个基点,其阶为素数;n:基点G的阶;dA:用户A的私钥;[k]G:椭圆曲线上点G的k倍点,即[k]G=G+G.? ? +G(k个G)。
[0018]SM算法的数字签名验证算法
[0019]验证者对收到的消息M'及其数字签名(r',s'),作为验证者的用户B实现以下运算步骤:
[0020]B1:检验r' G [1,n-1]是否成立,若不成立则验证不通过;
[0021]B2:检验s' G [1,n-1]是否成立,若不成立则验证不通过;
[0022]B3:置M' =Za Il M';
[0023]B4:计算e' =H、,将e'的数据类型转换为整数;
[0024]、s,的数据类型转换为整数,计算t= (r' +s' )mod n,若t=0,则验证不通过;
[0025]B6:计算椭圆曲线点(x/ , Y11 )=[s' ]G+[t]PA ;
[0026]B7:计算R= (e' +x/ )mod n,检验R=?是否成立,若成立则验证通过;否则验证不通过。
[0027]其中:PA:用户A的公钥;[s' ]G:椭圆曲线上点G的s'倍点;[t]P:椭圆曲线上点P的t倍点。
[0028]SM2算法的加密算法:
[0029]设需要发送的消息为比特串M,klen为M的比特长度。为了对明文M进行加密,作为加密者的用户E应实现以下运算步骤:
[0030]El:产生随机数 k G [I, n-1];
[0031]E2:计算椭圆曲线点C1=DOG= (Xl,yi),将C1的数据类型转换为比特串;
[0032]E3:计算椭圆曲线点S=[h]PD,若S是无穷远点,则报错并退出;
[0033]E4:计算椭圆曲线点[k]PD=(ち,72),将坐标ち,72的数据类型转换为比特串;
[0034]E5:计算 t=KDF(x2 Il y2, klen),若 t 为全 0 比特串,则返回 El ;
[0035]E6:计算C2=M ? t, ?表示比特异或;
[0036]E7:计算 C3=Hash (x2 || M || y2);
[0037]E8:输出密文 C=C1 Il C3 Il C2。
[0038]其中:PD:用户D的公钥;h:n的余因子;[h]PD:椭圆曲线上点Pd的h倍点;[k]PD:椭圆曲线上点Pd的k倍点;KDF():密钥派生函数;Hash():密码杂凑函数。
[0039]SM2算法的解密算法
[0040]设klen为密文中C2的比特长度;为了对密文C=C1 || C3 Il C2进行解密,作为解密者的用户D应实现以下运算步骤:
[0041]Dl:从C中取出比特串C1,将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;
[0042]D2:计算椭圆曲线点S= MC1,若S是无穷远点,则报错并退出;
[0043]D3:计算[(IjC1= (x2, y2),将坐标x2、y2的数据类型转换为比特串;
[0044]D4:计算t=KDF(x2 I y2, klen),若t为全0比特串,则报错并退出;
[0045]D5 -J人C中取出比特串C2,计算W =C2 ? t ;
[0046]D6:计算U=Hash (x2 Il M' Il y2),从C中取出比特串C3,若uデC3,则报错并退出;
[0047]D7:输出明文M'。
[0048]其中:dD:用户D的私钥;MC1:椭圆曲线上点C1的h倍点;[(IdIC1:椭圆曲线上点C1的dD倍点。
[0049]SM2算法的密钥交换协议
[0050]设用户I和用户R协商获得密钥数据的长度为klen比特,用户I为密钥交换发起方,用户R为密钥交换响应方。
[0051]记W=「(「(log2(n) /2) -1。其中,「x"1:顶函数,大于或等于X的最小整数。
[0052]用户1:
[0053]Il:产生随机数 G [I, n-1];
[0054]12:计算椭圆曲线点 R1=Qr1!^= (X1J1);
[0055]13:将R1发送给用户R ;
[0056]用户R:
[0057]Rl:产生随机数 rE G [I, n-1];
[0058]R2:计算椭圆曲线点 RK=[rK]G= (x2, y2);
[0059]R3:从Rk中取出域元素X2,将X2的数据类型转换为整数,计算^7=2W+
(X2 & ( 2''-1 ));
[0060]R4:计算tR= ( dR+x2 ? rR ) mod n;[0061]R5:验证R1是否满足椭圆曲线方程,若不满足则协商失败;否则从R1中取出域元素X1,将X1数据类型转换为整数,计算
【权利要求】
1.一种基于GPU的SM2算法的实现方法,其特征在于,该方法包括: CPU接收SM2算法计算请求; CPU调用GPU,GPU执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线程同时进行并行计算,得到SM2算法计算结果; CPU获取GPU反馈的SM2算法计算結果。
2.如权利要求要求I所述的实现方法,其特征在于,所述接收SM2算法计算请求为多个,该方法还包括: 对请求的SM2算法按照计算类型进行分类; 所述CPU调用GPU,由GPU执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线 程同时进行并行计算为: CPU分别调用针对不同计算类型SM2算法设置的不同GPU线程组,由相应的GPU线程组完成对应计算类型的SM2算法计算,所述GPU线程组中包括执行对应计算类型SM2算法的不同SM2算法计算请求的多个GPU线程。
3.如权利要求要求2所述的实现方法,其特征在于,所述对请求的SM2算法按照计算类型进行分类为: CPU接收到的多个SM2算法计算请求,按照计算类型分类,然后再缓存在对应的计算类型的SM2算法计算请求的缓冲队列中,顺序等待对应计算类型的SM2算法的GPU线程组执行。
4.如权利要求要求3所述的实现方法,其特征在于,设定时间或/和缓存阈值,当其中ー个条件到达时,将所缓存的对应计算类型的SM2算法计算请求,提供给执行对应的计算类型的SM2算法计算的GPU线程组并行计算; 或者当执行对应的计算类型的SM2算法计算的GPU线程组执行的SM2算法计算请求完成吋,则将缓存的对应计算类型的SM2算法计算请求,提供给执行对应的计算类型的SM2算法计算的GPU线程组并行计算; 所述为执行对应的计算类型的SM2算法计算的线程组提供的SM2算法计算请求数目小于等于执行对应的计算类型的SM2算法计算的GPU线程组一次执行的SM2算法计算请求的数目。
5.如权利要求2、3或4所述的实现方法,其特征在干,所述同一GPU线程组中的多个GPU线程在同一时刻且采用相同执行进度执行该计算类型的不同SM2算法计算请求; 对应不同计算类型的SM2算法的GPU线程组开始计算的时间及执行进度不同。
6.一种基于GPU的SM2算法的实现装置,其特征在于,该装置包括:CPU和GPU计算单元,其中, CPU,用于接收SM2算法计算请求后,调用GPU计算单元执行SM2算法,接收GPU计算单元反馈的SM2算法计算结果; GPU计算单元,用于在CPU的调度下,执行该SM2算法计算,对SM2算法步骤中的同一步骤的不同数据由多个GPU线程同时进行并行计算,得到SM2算法计算結果,反馈给CPU计算单元。
7.如权利要求6所述的实现装置,其特征在于,所述GPU计算单元为多个,分别承载不同GPU线程,将多个GPU计算单元根据执行的SM2算法的不同计算类型进行分组,每组中具有多个执行相同计算类型的SM2算法的GPU计算单元; CPU,还用于接收多个SM2算法计算请求后,对SM2算法的计算请求按照计算类型进行分类,调用对应计算类型的GPU计算单元组; GPU计算单元组,还用于在CPU的调用下,并行执行对应计算类型的SM2算法计算,得到对应计算类型的SM2算法计算結果。
8.如权利要求7所述的实现装置,其特征在干,CPU包括CPU计算单元、缓冲池、分类器及针对不同计算类型的SM2算法的缓冲队列単元,其中, CPU计算单元,用于接收多个SM2算法计算请求后,缓存在缓冲池中; 缓冲池,用于缓存多个SM2算法计算请求后,发送给分类器; 分类器,用于从缓冲池中提取多个SM2算法计算请求,按照计算类型分类,分别存储到对应计算类型的SM2算法计算请求的缓冲队列単元中; 对应计算类型的SM2算法计算请求的缓冲队列単元,用于缓存对应计算类型的SM2算法计算请求,并提供给执行对应的计算类型的SM2算法计算的GPU计算单元组并行计算。
9.如权利要求8所述的实现装置,其特征在于,所述对应计算类型的SM2算法计算请求的缓冲队列単元,还用于设定时间或/和缓存阈值,当其中ー个条件到达时,将所缓存的对应计算类型的SM2算法计算请求,提供给执行对应类型的SM2算法计算的GPU计算单元组并行计算,在提供时,提供的数目小于等于执行对应的计算类型的SM2算法计算的GPU计算单元组一次执行的SM2算法计算请求的数目。
10.如权利要求7所述的`实现装置,其特征在于,所述对应同一计算类型的SM2算法计算请求的GPU计算单元组中的不同GPU计算单元在同一时刻且采用相同执行进度执行该计算类型的不同SM2算法计算请求;对应不同计算类型的SM2算法的GPU计算单元组开始计算的时间及执行进度不同。
【文档编号】H04L9/30GK103532710SQ201310459734
【公开日】2014年1月22日 申请日期:2013年9月26日 优先权日:2013年9月26日
【发明者】潘无穷, 荆继武, 管乐, 向继, 林璟锵, 余幸杰 申请人:中国科学院数据与通信保护研究教育中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1