基于gpu的改进sm4并行加解密通信方法
【技术领域】
[0001] 本发明信息安全技术领域,具体设及一种基于GPU的改进SM4并行加解密通信方 法。
【背景技术】
[0002] 随着物联网的发展,越来越多的企业需要将生产及运营的设备接入网络并对其进 行远程实时监控,大量的设备监控数据往往需要通过互联网传输到远处的监控中屯、。但是, 由于互联网的开放性,一旦监控数据被截获并被加 W用进行破坏活动,其带来的损失是非 常严重的。因而,对传输的监控信息进行加密,同时又保证监控数据传输的实时性是非常重 要的。
[0003] SM4(原SMS4)是国家密码局公布的分组密码算法,其分组长度和密钥长度均为 128bit。加解密算法都采用32轮非线性迭代结构。算法的加密变换主要包含异或运算和合 成变换Τ(.)运算。其中,Τ(.)是由非线性变换τ和线性变换L复合而成,即Τ( . )=L(T (·))。非线性变换τ由4个并行的S盒变换构成,S盒是固定8比特输入8比特输出的变换;线 性变换L主要包含异或运算和左移运算。解密算法与加密算法的结构相同,只是轮密钥的使 用顺序相反,即解密算法使用的轮密钥是加密算法使用的轮密钥的逆序。加密算法中用到 的轮密钥是由加密密钥MK通过轮密钥扩展算法生成。该扩展算法基本结构与加解密算法相 同,同样包含异或运算和合成置换运算。只是其中的线性变换的形式略有不同。由于SM4算 法在计算过程中增加非线性变换,理论上具有较高的安全性。
[0004] GPU(Gra地ics Processing Unit,图形处理单元)可W理解为可编程的显卡,最早 在计算机中用于图形图像的处理,最近几年GPU还应用到大规模的并行计算领域。由于单块 GPU通常具有上百的核屯、运算单元,相比同价位的CPU而言,GPU所拥有的数百倍于CPU的核 屯、运算单元的数量。GPU非常适合于执行可高度并行化的密集型计算任务,使用GPU执行运 些任务,往往能提升数倍的性能。
[0005] 虽然利用SM4加密算法可W增加数据传输的安全性。但是,由于SM4加密算法的公 开性,轮密钥生成算法与加密算法结构类似,都导致其安全性降低。因此,如何提高数据在 用SM4加密时的安全性成为一个亟待解决的问题。另外,在数据量较大的情况下,使用SM4串 行加密的耗时成为了实时传输的瓶颈。如何利用GPU编程提高SM4算法的加密速度也远程监 控数据传输过程中是需要解决的问题。
【发明内容】
[0006] 本发明针对SM4串行加密算法在面向监控数据动态采集传输过程中所存在的安全 性和实时性的问题,提供一种基于GPU的改进SM4并行加解密通信方法。
[0007] -种基于GPU的改进SM4并行加解密通信方法,包括发送方的加密过程和接收方的 解密过程,其中
[000引所述发送方的加密过程为:
[0009] 步骤1、利用AES-128密钥扩展法生成SM4加密法所需的32个扩展密钥;
[0010] 步骤2、随机生成1个32位的随机数G;
[0011] 步骤3、利用GPU进行并行SM4加密,即将明文数据分成每块12化k特的数据分组,一 个数据分组的加密任务分配给一个的GPU线程;每个GPU线程再进行32轮循环迭代加密处 理,在每轮循环迭代加密处理时,根据迭代的轮数确定随机数G的对应位置,并根据该位置 上的随机数G的数值选取加密轮函数;
[0012] 步骤4、将各个GPU线程加密输出的数据按分块的前后顺序进行组合后形成密文数 据;
[OOU]步骤5、密文数据从GPU的全局设备存储器内传到内存中,整个力幡过程完成;
[0014]所述接收方的解密过程为:
[001引步骤6、利用GPU进行并行SM4解密,即将密文数据分成每块128比特的数据分组,每 个GPU线程解密一个数据分组;每个GPU线程再进行32轮循环迭代解密处理,在进行32轮循 环迭代解密处理时,根据随机数G对应位置上的取值,动态选择解密的轮函数;
[0016] 步骤7、将各个GPU线程解密输出的数据按分块的前后顺序进行组合后获得明文数 据;
[0017] 步骤8、明文数据从GPU的全局设备存储器内传到内存中,整个解密过程完成。
[0018] 步骤1中,扩展密钥只需要产生一次,该扩展密钥在各个GPU线程加密过程中循环 使用。
[0019] 步骤1中所述密钥扩展的具体过程为:
[0020] 步骤1. 1、将128bit的初始密钥按照列顺序组成4个32bit的字,分别记为W0-W3;
[0021] 步骤1.2、在初始密钥的基础上依次新增31个字wj,每一个新增的字wj的值依赖于 Wj-l和Wj-4,即:
[0022] 当j除W4的余数不为0时,Wj=Wj-4? wj-i;
[0023] 当 j除 W4的余数为0时,Wj=Wj-4? g(wj-i);
[0024] 步骤1.3、利用上述产生的字生成SM4加密算法中用到的扩展密钥,即扩展密钥rki = Wj+4。
[00巧]上述j = 4,5,6......35;i = 0,l,...,31 ;g〇是一个复杂函数。
[0026] 步骤1.2中,复杂函数g()的计算过程如下:
[0027] 步骤1.2.1、将字*"从字节为单位,排列表示成曲,81瓜,83]的形式,并将化〇,81, B2,B3]循环左移一个字节,变换成化,B2,B3,B0];
[0028] 步骤1.2.2、利用465的5盒对输入字的每个字节进行字节替换,变为[8'1,8'2,8'3, B'o];
[0029] 步骤1.2.3、将产生的结果[8'1,8'2,8'3,8'0]与轮常数进行异或输出;
[0030] 上述j = 4,5,6……35。
[0031 ]步骤3中,根据迭代的轮数确定随机数G对应位置,该随机数G的每一位作为每一轮 迭代时动态选择的依据,即:
[0032] 当随机数G的对应的位置的数值为加寸,选择使用:Xi+4 = F(Xi,Xi+i,Xi+2,Xi+3,rki) = Xi ? T(Xi+i ? Xi+2 ? Xi+3 ? rki)作为轮函数;
[0033] 当随机数G的对应的位置的数值为1时,选择使用:Xi+4 = F(Xi,Xi+i,Xi+2,Xi+3,rki) = Xi ? T(Xi+i巧i+2巧i+日? rki)作为轮函数;
[0034] 其中,Xi-Xi+3表示第i轮输入的明文数据,F〇表示轮函数,TO表示合成变换函数, rk康示第i轮使用的扩展密钥,i = 0,1,…,31。
[0035] 步骤3中,每个GPU线程进行加密处理的过程为:
[0036] 步骤3.1、根据本次迭代次数,确定随机数G的对应位置,并根据该位置上的明文数 据的数值选取轮函数;即当随机数G的对应的位置的明文数据的值为0时,计算Xi + l ? Xi+2 ? Xi+3 ?地;当随机数G的对应的位置的明文数据的值为1时,计算Xi+i+Xi却Xi+3 ? rki;并将计 算结果按照字节顺序排列保存为数据块A=(ao,ai,a2,a3);
[0037] 步骤3.2、利用AES的S盒对上一步的数据块A=(曰日,ai,曰2,曰3)进行字节替换,输出 按字节顺序保存为数据块B = (bo,bi,b2,b3),即(bo,bi,b2,b3) = τ(Α) = (Sbox(ao),Sbox (ai),訊ox(a2),Sbox(a3));
[003引步骤3.3、将上一步的B进行线性变换,输出保存为数据块C,则:C = L(B) = (B<?0) ? (B?<2) ? (B?<10) ? (B?<18) ? (B?<24)
[0039] 步骤3.4、将上一步生成的数据块C和本次的输入明文数据进行异或运算,计算Xi+4 =Xi Θ C ; Xi+l,Xi+2,Xi+3,Xi+4作为下一次轮循环的输入;
[0040] 步骤3.5、重复上述3.3.1~3.3.4的操作,将上一轮移位后数据作为新一轮输入, 重复32次;经过32循环迭代加密后,输出密文数据为(Yq,Yl,Y2,Y3 ) = (X35,X34,X33,X32 );
[0041] 式中,Xi-Xi+3表示第i轮输入的明文数据,rki表示第i轮使用的扩展密钥,τ()表示 置换变换函数,SboxO为S盒变换函数,L0表示线性变换函数。
[0042] 步骤6中,进行并行SM4解密时,根据迭代的轮数确定随机数G对应位置,该随机数G 的每一位作为每一轮迭代时动态选择的依据,即:
[00创当随机数G的对应的位置的数值为加寸,选择使用:Xi+4 = F(Xi,Xi+i,Xi+2,Xi+3,rk3i-i) =Xi ? T(Xi+i ? Xi+2 ? Xi+3 ? rk3i-i)作为轮函数;
[0044] 当随机数G的对应的位置的数值为1时,选择使用:Xi+4 = F(Xi,Xi+i,Xi+2,Xi+3,rk3i-i) =Xi ? T(Xi+i巧i+2巧i+3 ? rk3i-i)作为轮函数;
[0045] 其中,Xi-Xi+3表示第i轮输入的密文数据,F〇表示轮函数,TO表示合成变换函数, 地1-康示第i轮使用的扩展密钥,i = 0,1,…,31。
[0046] 与现有技术相比,本发明的改进SM4算法比原算法主要改进之处有W下几点:
[0047] (1)利用AES-128密钥扩展算法生成SM4加密算法需要的32个轮密钥;新的密钥扩 展算法,具有透明、简洁、实现速度快等优势。
[0048] (2)替换SM4加密算法中的S盒,使用高强度的AES-128的S盒;有助于抵抗传统的线 性密码分析、差分密码分析、代数攻击及最新的中间相遇攻击等,提高了加密算法的安全 性。
[0049] (3)将加解密函数中32迭代所用轮函数由"固定函数"改为"动态选择",随机数G的 每一位作为每一轮迭代时动态选择的依据;
[0050] (4)在SM4加密时采用电码本模式巧CB),具有简单实用、便于并行计算和误差不会 被传递等优点;
[0051] (5)结合AES-128密钥扩展算法与SM4加密算法的新算法,其实现速度更快、安全性 得到提高。
[0052] (6)利用GPU的并行计算能力,将串行SM4加密算法改进成并行加密的形式,对实时 数据进行并行加密;采用GPU并行加密方案实现对大数据环境下动态数据流的加解密,提高 了加密速度,从而保证数据流正常的传输,降低处理延迟。
【附图说明】
[0053] 图1为基于GPU的改进SM4并行加密通信系统加解密示意图;
[0054] 图2为基于GPU的改进SM4并行加密方法流程图;
[0055] 图3为AES密钥扩展算法示意图;
[0056] 图4为g()函数示意图;
[0057] 图5为基于动态选择的SM4轮函数流程图。
【具体实施方式】
[0058] -种基于GPU的改进SM4并行加密通信系统,如图1所示,系统包括位于发送方的并 行加密模块与位于接收方的并行解密模块。其中加密模块负责将发送方提交的动态明文数 据流,利用基于GPU的改进SM4并行加密算法进行加密;解密模块负责将接收方接收的密文 数据,利用基于GPU的改进SM4并行解密算法进行解密。
[0059] 基于GPU的改进SM4并行加解密通信方法,包括发送方的加密过程和接收方的解密 过程。
[0060] 所述发送方的加密过程,如图2所示,包括如下步骤:
[0061] 步骤1、利用基于AES-128密钥扩展算法进行SM4轮密钥扩展,如图3
所示。扩展密钥 只需要产生一次,可在整个加密过程中循环使用。在CPU上执行一次密钥扩展,具体过程如 下:
[0062] 步骤1.1、将16字节(128bit)的初始密钥按照列顺序组成4个32bit的字,分别记为 W0-W3 〇
[0063] 步骤1.2、在初始密钥之后依次新增31个字wj,每一个新增的字wj的值依赖于wj-i和 wj-4,其中j取值依次从4递增到35,一共31个。当j除W4余数不为0时,wj=wj-4 ? Wj-i;当j除 W4余数为0时,Wj = Wj-4 ? g(Wj-l)。其中g()是一个复杂函数,输入的参数为前一个新增的字 wj-i。如图4所示,计算过程如下:
[0064] 步骤1.2.1、将传入的一个字*"按照字节为单位,排列表示成邮,81瓜,83]的形 式,并将邮,81瓜瓜]循环左移一个字节,变换成化瓜,83,8〇]。
[0065] 步骤1.2.2、利用465的5盒对输入字的每个字节进行字节替换,变为[8'1,8'2,8'3, B'o]。
[0066] 步骤1.2.3、将产生的结果此1北2北3北〇]与轮常数贿逊行异或输出。
[0067] 步骤1.3、利用上述产生的字生成SM4加密算法中用到的扩展密钥,即扩展密钥rki 二 wj+4,i 二0,1,...,31d
[006引步骤2、随机生成1个32位的随机数G。申请GPU全局存储空间,将明文数据、上述产 生的扩展密钥、随机数G、和S盒从内存传到GPU全局存储空间内。
[0069]步骤3、利用GPU进行并行SM4加密。将输入数据分成每块128比特的数据分组,每个 GPU线程块负责加密一个数据分组。通过调用核函数cryptKernel<<<dmgrid,dmblock〉〉> (d_sk,d_input ,d_ou化ut)对分组的加密处理,由多个块并行执行。其中,dmgrid表示网格 的Ξ维数据,dmblock表示块的Ξ维结构,d_sk表示扩展密钥,d_input表示明文,d_ou1:put 表示加密后的密文。每一个GPU线程的加密过程如下:
[0070] 步骤3.1、计算该线程的id号。
[0071] 步骤3.2、通过该线程的id号获取该线程要处理的数据。
[0072] 步骤3.3、利用改进后的SM4轮函数加密算法,对数据进行32轮循环迭代加密处理, 改进后算法的轮函数流程图如图5所示,具体过程如下:
[0073] 步骤3.3.1、根据本次迭代次数,确定随机数G相应位上的数值:当随机数G的相对 应的位置的值为0时,计算Xi+i ? Xi+2 ? Xi+3 ? rki;当随机数G的相对应的位置的值为1时,计 算X 1 + 1 + X 1 + 3 + X 1 + 3 ? r k 1,将计算结果按照字节顺序排列保存为
[0074] 步骤3.3.2、利用AES的S盒对上一步於
进行字节 替换,输出按字节顺序排列,保存为
!p (bo,bl,b2,b3) = τ (A) = (Sbox(ao),訊ox(ai) ,Sbox(a2),訊ox(a3))
[00巧]步骤3.3.3、将上一步的Be (Zf) 4进行线性变换,输出保存为C G (Zf) 4, 则:
[0076] C = L(B) = (B?<0) ? (B?<2) ? (B?<10) ? (B?<18) ? (B?<24)
[0077] 步骤3.3.4、将上一步生成的C £ (Z|) 4和本次的输入Xi进行异或运算,计算 Xi+4 = Xi ? CaXi+l,Xi+2,Xi+3,Xi+4作为下一次轮循环的输入。
[0078] 步骤3.3.5、重复上述步骤3.3.1~步骤3.3.4操作,将上一轮移位后数据作为新一 轮输入,重复32次。经过32轮后,输出密文数据为(Υο,Yl,Y2,Y3 )=地日,X34,X33,X32 )
[0079] 步骤4、加密完成后,输出数据的结果将再次被写到全局设备存储器内,随后,CPU 程序将密文数据从GPU的全局设备存储器内取回,整个加密过程完成。
[0080] 步骤5、发送方发送加密后的密文数据至接收方。
[0081] 所述接收方的解密过程,包括如下步骤:
[0082] 步骤6、接收方接收密文数据并存储到接收缓冲区中。
[0083] 步骤7、将接收到的密文数据、扩展密钥、随机数G、和S盒从主存传到GPU全局存储 空间内。
[0084] 步骤8、同样加密过程一样,利用基于GPU的动态选择的SM4并行算法对密文数据进 行解密。将密文数据分成每块128比特的数据分组,每个GPU线程负责加密一个数据分组。每 个线程采用基于SM4并行算法解密一个数据分组。GPU线程在进行32轮循环迭代加密处理 时,根据随机数G对应位置上的取值,动态选择解密的轮函数。当随机数G的相对应的位置的 值为〇时,选择使用乂^4 =。口1,乂41,乂^2,乂^3^1?^〇=乂1?1'口^1?乂^2?乂^3?'1?1-〇轮函 数;随机数G的相对应的位置的值为1时,使用Xi+4=F(Xi,Xi+i,Xi+2,Xi+3,rk3i-i) =Xi ? T(Xi+i+ Xi+2巧i+3 ? rk3i-i)轮函数。
[0085] 步骤9、将各个线程解密输出的明文数据从GPU的全局设备存储器内传到内存中, 整个解密过程完成。
【主权项】
1. 基于GPU的改进SM4并行加解密通信方法,包括发送方的加密过程和接收方的解密过 程,其特征是, 所述发送方的加密过程为: 步骤1、利用AES-128密钥扩展法生成SM4加密法所需的32个扩展密钥; 步骤2、随机生成1个32位的随机数G; 步骤3、利用GPU进行并行SM4加密,即将明文数据分成每块128比特的数据分组,一个数 据分组的加密任务分配给一个的GPU线程;每个GPU线程再进行32轮循环迭代加密处理,在 每轮循环迭代加密处理时,根据迭代的轮数确定随机数G的对应位置,并根据该位置上的随 机数G的数值选取加密轮函数; 步骤4、将各个GRJ线程加密输出的数据按分块的前后顺序进行组合后形成密文数据; 步骤5、密文数据从GRJ的全局设备存储器内传到内存中,整个加密过程完成; 所述接收方的解密过程为: 步骤6、利用GHJ进行并行SM4解密,即将密文数据分成每块128比特的数据分组,每个 GPU线程解密一个数据分组;每个GPU线程再进行32轮循环迭代解密处理,在进行32轮循环 迭代解密处理时,根据随机数G对应位置上的取值,动态选择解密的轮函数; 步骤7、将各个GRJ线程解密输出的数据按分块的前后顺序进行组合后获得明文数据; 步骤8、明文数据从GRJ的全局设备存储器内传到内存中,整个解密过程完成。2. 根据权利要求1所述基于GPU的改进SM4并行加解密通信方法,其特征是,步骤1中,扩 展密钥只需要产生一次,该扩展密钥在各个GPU线程加密过程中循环使用。3. 根据权利要求1或2所述基于GPU的改进SM4并行加解密通信方法,其特征是,步骤1中 所述密钥扩展的具体过程为: 步骤1.1、将128bit的初始密钥按照列顺序组成4个32bit的字,分别记为WO-W3; 步骤1.2、在初始密钥的基础上依次新增31个字Wj,每一个新增的字Wj的值依赖于 Wj-4,即: 当j除以4的余数不为0时,: 当j除以4的余数为0时,步骤1.3、利用上述产生的字生成SM4加密算法中用到的扩展密钥,即扩展密钥A1 = Wj+4; 上述j = 4,5,6......35;i = 0,1,…,31;g()是一个复杂函数。4. 根据权利要求3所述基于GPU的改进SM4并行加解密通信方法,步骤1.2中,复杂函数g ()的计算过程如下: 步骤1.2.1、将字Wj^1以字节为单位,排列表示成B2, B3]的形式,并将B2, B3]循环左移一个字节,变换成[B1, B2, B3, B0]; 步骤1.2.2、利用AES的S盒对输入字的每个字节进行字节替换,变为[B ' i,B ' 2,B ' 3,B ' 〇]; 步骤1.2.3、将产生的结果[8/1,8'2,8'33'()]与轮常数进行异或输出; 上述 j = 4,5,6……35。5. 根据权利要求1所述基于GPU的改进SM4并行加解密通信方法,其特征是,步骤3中,进 行并行SM4加密时,根据迭代的轮数确定随机数G对应位置,该随机数G的每一位作为每一轮 迭代时动态选择的依据,即: 当随机数G的对应的位置的数值为O时,选择使用:作为轮函数; 当随机数G的对应的位置的数值为1时,选择使用:Xi+4 =1作为轮函数; 其中,X1-Xm表示第i轮输入的明文数据,F()表示轮函数,T()表示合成变换函数,riu 表示第i轮加密使用的扩展密钥,i = O,1,…,31。6. 根据权利要求1所述的一种基于GPU的改进SM4并行加解密通信方法,其特征是,步骤 6中,进行并行SM4解密时,根据迭代的轮数确定随机数G对应位置,该随机数G的每一位作为 每一轮迭代时动态选择的依据,即: 当随机数G的对应的位置的数值为0时,选择使用:X14^ =作为轮 函数; 当随机数G的对应的位置的数值为1时,选择使用:X1+4 =*_作为轮函 数; 其中,X1-Xh3表示第i轮输入的密文数据,F()表示轮函数,T()表示合成变换函数, rk31-i表示第i轮解密使用的扩展密钥,i = 0,1,…,31。7. 根据权利要求1或5所述基于GHJ的改进SM4并行加解密通信方法,其特征是,步骤3 中,每个GPU线程进行加密处理的过程为: 步骤3.1、根据本次迭代次数,确定随机数G的对应位置,并根据该位置上的明文数据的 数值选取轮函数;即当随机数G的对应的位置的明文数据的值为0时,计算当随机数G的对应的位置的明文数据的值为1时,计算并将计算结果按照字节顺序排列保存为数据块A= a2,a3); 步骤3.2、利用AES的S盒对上一步的数据块A= (ao,ai,a2,a3)进行字节替换,输出按字节 顺序保存为数据块B = (bo,bi,b2,b3),即(bo,bi,b2,b3) = τ(Α) = (Sbox(ao) ,Sbox(ai),Sbox (a2),Sbox(a3)); 步骤3 . 3、将上一步的B进行线性变换,输出保存为数据块C,则:步骤3.4、将上一步生成的数据块C和本次的输入明文数据进行异或运算,计算 Χ'?+.4. = X.i Φ: 〇;&+1,&+2上+3上+4作为下一次轮循环的输入; 步骤3.5、重复上述3.3.1~3.3.4的操作,将上一轮移位后数据作为新一轮输入,重复 32次;经过32循环迭代加密后,输出密文数据为(Yo,Y1,Y2,Y3) = (X35,X34,X33,X32); 式中,X1-Xw表示第i轮输入的明文数据,rki表示第i轮使用的扩展密钥,τ()表示置换 变换函数,Sbox()为S盒变换函数,L()表示线性变换函数。
【专利摘要】本发明公开了一种基于GPU的改进SM4并行加解密通信方法,该加解密方法包括:使用AES-128密钥扩展算法生成SM4加密算法所需的扩展子密钥;改进SM4加密算法中的轮函数;利用GPU的并行计算能力,将改进SM4加密算法改进成并行加密的形式。采用本发明加解密通信方法,能够有效的提高安全性和实现的速度,能够对数据进行实时并行加密,提高了加密速度,从而保证数据流正常的传输,降低处理延迟。
【IPC分类】H04L9/06
【公开号】CN105490802
【申请号】CN201510844393
【发明人】张红梅, 黄剑, 张向利, 陈俊彦, 李世文, 刘国良
【申请人】桂林电子科技大学
【公开日】2016年4月13日
【申请日】2015年11月27日