Skinny算法优化实现方法、系统、终端、存储介质与流程

文档序号:18133612发布日期:2019-07-10 10:26阅读:756来源:国知局
Skinny算法优化实现方法、系统、终端、存储介质与流程
本发明涉及网络空间安全
技术领域
,具体地,涉及一种基于gpu的skinny算法优化实现方法、系统、终端、存储介质。
背景技术
:分组密码是对称密码学的一个重要分支,它的设计要满足安全性原则和实现原则。安全性原则即满足混淆原则、扩散原则和抗现有攻击原则;实现原则即保证密码算法应尽可能使用简单的运算,如模加运算、移位运算和异或运算。为了满足上述原则,需要构造密码学性质相对弱的迭代函数,并且迭代次数相对较多,分组密码skinny是满足该条件的典型分组密码。它的使用非常灵活,可以在6种不同明文和密钥块大小中自行选择,且在差分/线性攻击方面有强大的安全保证,在软件和微控制器上实现的效率非常高。skinny算法具有良好的特性,所以有必要研究其的快速实现。经过对现有技术的检索发现,对分组密码在gpu平台上的快速实现研究较少,在这方面研究较多的是aes加解密速度的优化。skinny算法作为新推出的轻量级分组密码,其良好的安全性使得优化其加解密的速度显得尤为重要。在进一步的检索中,尚未发现与本发明类似技术的说明或报道,也尚未收集到国内外类似的资料。技术实现要素:针对现有技术中存在的上述不足,本发明的目的是提供一种基于gpu的skinny算法快速优化实现方法、系统、终端、存储介质。本发明分别在cpu和gpu上完成skinny算法的快速优化实现。在算法层次上对skinny算法流程进行优化,使其在可以正确加解密的情况下拥有更快的速度。对于在cpu上的快速实现,为方便调试,本发明采用c语言对其进行速度测试,因为c语言相对于其它高级语言具有更快的执行速度。由于gpu擅长于并行计算,本发明在opencl平台上研究skinny算法的快速实现。由于skinny算法的运算分支少、主要依赖于计算,所以使用gpu良好的并行计算性能可以很好地提升其加解密速度。本发明比较于传统的实现方法,实施更加简单、性能更加稳定、实现速度更加快捷,能有效提高skinny算法在cpu和gpu平台上加密算法实现的吞吐量。本发明是通过以下技术方案实现的。根据本发明的一个方面,提供了一种skinny算法优化实现方法,基于gpu,包括:skinny加密算法的初始化优化,对加密或解密的测试数据、明文和密钥的矩阵化以及轮密钥的扩展进行优化;skinny加密算法的轮函数优化,对字节替换、轮常量加、轮密钥加、行移位、列混淆及其用于解密的逆运算进行优化;对经过初始化优化和轮函数优化后的skinny加密算法分别在cpu和gpu上实现。优选地,在skinny加密算法的初始化优化中:对加密或解密的测试数据处理进行优化,采用如下方法:对n=64bit的情形,将输入字符串中每个字符的ascll码拆成2个4bit的单元参与加密;n=128bit的情形不用处理。对明文和密钥的矩阵化进行优化,采用如下方法:输入的明文和密钥的16个单元不必组成4*4的矩阵is,直接使用长度为16个unsignedchar大小的一维向量进行操作。对轮密钥的扩展进行优化,在优化过程中,对于上一轮轮密钥,不求每个单元的每位的0/1值,采用如下方法:先前的方法是先取上一轮轮密钥每个单元的每位的0/1值,再用它们计算下一轮轮密钥的值;优化过后不用求每位的0/1值,根据不同版本的skinny,先将上一轮轮密钥复制为n份,再将这n份轮密钥分别向左或向右移位不同的值,将移位后的轮密钥分别与一个确定的数做按位与计算,得到n份数据,最后将得到的n份数据进行按位异或计算,最终得到的结果即为下一轮的轮密钥的值。这样可以减少大量乘除运算、异或运算和与运算的次数。优选地,所述n取值为3。优选地,对于skinny的版本:z=1时,密钥长度为16个单位;z=2时,密钥长度为32个单位;z=3时,密钥长度为48个单位;n=64bit时,一个单位长度为4bit;n=128bit时,一个单位长度为8bit;第一行密钥指的是,第0-15个单位的密钥;第二行密钥指的是,第16-31个单位的密钥;第三行密钥指的是,第32-47个单位的密钥;基于以上内容,根据不同版本的skinny,对轮密钥的扩展进行优化的方法,具体为:当skinny版本为z=1时,不做进一步的轮密钥扩展;当skinny版本为n=64bit、z>1时,对于第二行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向左移动1位再与15做与运算得到的结果;-上一轮轮密钥向右移动2位再与1做与运算得到的结果;-上一轮轮密钥向右移动3位再与1做与运算得到的结果;当skinny版本为n=64bit、z>2时,对于第三行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向右移动1位再与7做与运算得到的结果;-上一轮轮密钥与8做与运算得到的结果;-上一轮轮密钥与1做与运算再向左移动3位得到的结果;当skinny版本为n=128、z>1时,对于第二行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向左移动1位再与255做与运算得到的结果;-上一轮轮密钥向右移动5位再与1做与运算得到的结果;-上一轮轮密钥向右移动7位再与1做与运算得到的结果;当skinny版本为n=128、z>2时,对于第三行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向右移动1位再与127做与运算得到的结果;-上一轮轮密钥与64做与运算再向左移动1位得到的结果;-上一轮轮密钥与1做与运算再向右移动7位得到的结果。优选地,在skinny加密算法的轮函数优化中:对字节替换、轮常量加、轮密钥加、行移位以及列混淆进行优化的方法分别为:轮常量加计算时无需使constants矩阵化,使得优化前的arrayconstants无需和0做异或;做轮密钥加计算时由于加密的中间状态为向量形态而没有矩阵化,可更方便地和轮密钥做异或;做列混淆计算时提前计算好先前算法矩阵化时需要得到的结果,只利用对不同元素按位异或的直接计算省略大量乘以0与异或0的运算(中间状态为16个单元的一维向量,做完此计算的的计算结果取决每个单元左乘矩阵算出的具体的值,优化后即为只用将各个单元做按位异或,不用再做过多乘以0/1的操作);最后将字节替换、轮常量加、轮密钥加、行移位和列混淆可以化简为同一个代码实现操作,加密的计算结果可以通过一次计算得到。对字节替换、轮常量加、轮密钥加、行移位以及列混淆用于解密的逆运算进行优化的方法分别为:由于轮常量加和轮密钥加本质是做异或,所以其加密运算和解密运算相同,解密计算同加密优化方法,即,轮常量加的解密计算中,计算时不对constants矩阵化,使得优化前的arrayconstants不与0做异或运算;轮密钥加的解密计算中,计算时解密的中间状态为向量形态,能够与轮密钥做异或运算;做列混淆计算时与加密的区别仅仅在于需要乘的矩阵不同,在列混淆的解密计算中,所采用的矩阵为加密计算时所采用矩阵的逆矩阵,只利用对不同元素按位异或的直接计算省略大量乘以0与异或0的运算;最后将所有操作再化简为同一个代码实现操作,解密的计算结果可以通过一次计算得到。优选地,在对经过初始化优化和轮函数优化后的skinny加密算法分别在cpu和gpu上实现中:采用c语言,对经过初始化优化和轮函数优化后的skinny加密算法在cpu上实现;采用opencl语言,对经过初始化优化和轮函数优化后的skinny加密算法在gpu上实现。优选地,本发明上述方法还包括如下步骤:分别在cpu和gpu上,对优化前后的skinny加密算法的速度进行比较。优选地,对优化前后的skinny加密算法的速度进行比较,包括:分别统计每秒钟能够加密的明文总数或解密的密文总数并进行比较。根据本发明的第二个方面,提供了一种用于实现上述任一项所述方法的系统,其特征在于,包括:skinny加密算法的初始化优化模块,用于对加密或解密的测试数据、明文和密钥的矩阵化以及轮密钥的扩展进行优化;skinny加密算法的轮函数优化模块,用于对字节替换、轮常量加、轮密钥加、行移位、列混淆及其用于解密的逆运算进行优化;skinny加密算法实现模块,用于对经过初始化优化和轮函数优化后的skinny加密算法分别在cpu和gpu上实现。优选地,所述skinny加密算法的初始化优化模块,包括:-对加密或解密的测试数据处理进行优化的单元,用于:针对n=64bit的情形,将输入字符串中每个字符的ascll码拆成2个4bit的单元参与加密;针对n=128bit的情形,不进行处理;-对明文和密钥的矩阵化进行优化的单元,用于对输入的明文和密钥的16个单元直接使用长度为16个unsignedchar大小的一维向量进行操作;-对轮密钥的扩展进行优化的单元,用于根据不同版本的skinny,先将上一轮轮密钥复制为n份,将这n份轮密钥分别向左或向右移位不同的值,得到的n份轮密钥再分别与一个根据skinny版本确定的数做按位与计算,得到n份数据,将这n份数据进行按位异或计算,最终得到的结果即为下一轮的轮密钥的值。优选地,所述n取值为3。优选地,对于skinny的版本:z=1时,密钥长度为16个单位;z=2时,密钥长度为32个单位;z=3时,密钥长度为48个单位;n=64bit时,一个单位长度为4bit;n=128bit时,一个单位长度为8bit;第一行密钥指的是,第0-15个单位的密钥;第二行密钥指的是,第16-31个单位的密钥;第三行密钥指的是,第32-47个单位的密钥;基于以上内容,根据不同版本的skinny,所述轮密钥的扩展进行优化的单元对轮密钥的扩展进行优化的方法为:当skinny版本为z=1时,不做进一步的轮密钥扩展;当skinny版本为n=64bit、z>1时,对于第二行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向左移动1位再与15做与运算得到的结果;-上一轮轮密钥向右移动2位再与1做与运算得到的结果;-上一轮轮密钥向右移动3位再与1做与运算得到的结果;当skinny版本为n=64bit、z>2时,对于第三行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向右移动1位再与7做与运算得到的结果;-上一轮轮密钥与8做与运算得到的结果;-上一轮轮密钥与1做与运算再向左移动3位得到的结果;当skinny版本为n=128、z>1时,对于第二行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向左移动1位再与255做与运算得到的结果;-上一轮轮密钥向右移动5位再与1做与运算得到的结果;-上一轮轮密钥向右移动7位再与1做与运算得到的结果;当skinny版本为n=128、z>2时,对于第三行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向右移动1位再与127做与运算得到的结果;-上一轮轮密钥与64做与运算再向左移动1位得到的结果;-上一轮轮密钥与1做与运算再向右移动7位得到的结果。优选地,所述skinny加密算法的轮函数优化模块,包括:-对字节替换、轮常量加、轮密钥加、行移位以及列混淆进行优化的单元,其中:针对轮常量加,计算时不对constants矩阵化,使得优化前的arrayconstants不与0做异或运算;针对轮密钥加,计算时加密的中间状态为向量形态,能够与轮密钥做异或运算;针对列混淆,计算时提前计算好先前算法矩阵化时需要得到的结果,只通过对不同元素按位异或的直接计算省略大量乘以0与异或0的运算;最后将字节替换、轮常量加、轮密钥加、行移位和列混淆化简为同一个操作,加密的计算结果通过一次计算得到;-对字节替换、轮常量加、轮密钥加、行移位以及列混淆用于解密的逆运算进行优化的单元,其中:轮常量加的解密计算中,计算时不对constants矩阵化,使得优化前的arrayconstants不与0做异或运算;轮密钥加的解密计算中,计算时解密的中间状态为向量形态,能够与轮密钥做异或运算;列混淆的解密计算中,所采用的矩阵为加密计算时所采用矩阵的逆矩阵,只利用对不同元素按位异或的直接计算省略大量乘以0与异或0的运算;最后将字节替换、轮常量加、轮密钥加、行移位以及列混淆用于解密的逆运算化简为同一个操作,解密的计算结果可以通过一次计算得到。优选地,所述skinny加密算法实现模块,其中:采用c语言,对经过初始化优化和轮函数优化后的skinny加密算法在cpu上实现;采用opencl语言,对经过初始化优化和轮函数优化后的skinny加密算法在gpu上实现。优选地,所述系统还包括速度比较模块,分别统计每秒钟能够加密的明文总数或解密的密文总数并进行比较。根据本发明的第三个方面,提供了一种终端,包括存储器、处理器及存储在存储器上并能够在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时能够用于执行上述任一项所述的方法。根据本发明的第四个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可用于执行上述的基于gpu的skinny算法快速实现方法。与现有技术相比,本发明具有如下有益效果:1、本发明提供的方法,分别在cpu和gpu上快速实现skinny加密算法。通过采用本发明的技术方案,大大增加了skinny加密算法的加密/解密速度,可在相同的时间内加密或解密更多的数据。2、本发明提供的skinny加密算法的初始化优化,加密过程中不使用中间状态矩阵is;生成轮密钥时通过观察计算规律来省去大量的乘除运算、移位运算、与运算和异或运算,提高了加密/解密速度。3、本发明提供的skinny加密算法的轮函数优化,轮常量加省去一些无用的赋0值再异或的操作且不用将轮常量矩阵化;轮密钥加中由于is改成向量形式省去了计算轮密钥的相关坐标;简化列混淆中的矩阵乘法运算,减少与0做乘法和与0做异或运算;最后,通过代数计算来化简加密过程中的所有操作,直接计算出每轮加密(解密)后的中间状态来节省大量时间,使得可以在相同的时间内加密(解密)大量数据。4、本发明提供的skinny加密算法的实现方法、系统,给出了将算法优化后的详细计算方法,并以最复杂的版本n=128bit、z=3的情况为例给出了加密和解密一轮中实现的详细代码;最后经过实验数据测得优化后的加密速度达到了常规做法的4倍以上。5、本发明提供的方法、系统,可在基于skinny算法的高性能密码计算、网络加密服务请求等信息安全领域加以应用,大大提升skinny加密算法在多台处理器上的并行计算能力,且对于网络传输中发送端的加密和接收端的解密都有很高的速度提升。6、本发明的实际应用领域,包括但不限于高性能密码计算、网络加密服务请求。高性能密码计算即使用多台处理器或计算机对密码的加密与解密进行高效的并行计算,skinny所属的分组密码具有加密解密速度较快的特点,优化过后将大大提升高性能密码计算的能力。网络加密服务是指数据在传输过程中加密,在发送端和接收端以则以明文显示,由于优化过后大大提升了skinny的加密和解密速度,这可以直接的减少整个传输过程中加密和解密的时间,大大提升网络传输数据的速度。经过测试得知,使用本发明的方法可使计算速度较原始计算方法提高4倍以上,达到了单位时间内可响应4倍以上加密请求的效果。附图说明图1是原始方法在n=64bit、z=1版本的skinny加密/解密32轮情况下的流程图;图2是n=64bit、z=1版本skinny工作一轮的实际计算工作;图3是本发明所提供的基于gpu的skinny算法优化实现方法的工作示意图。具体实施方式下面对本发明的实施例作详细说明:本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。本发明实施例提供了一种基于gpu的skinny算法优化实现方法,包括:skinny加密算法的初始化优化;skinny加密算法的轮函数优化;对优化后的skinny加密算法的实现。其中:所述skinny加密算法的初始化优化,是对加密或解密的测试数据进行处理,对明文和密钥的矩阵化进行优化,最重要的是对轮密钥的扩展进行优化。所述skinny加密算法的轮函数优化,是对字节替换(subcells)、轮常量加(addconstants)、轮密钥加(addroundtweakey)、行移位(shiftrows)、列混淆(mixcolumns),以及对它们用于解密的逆运算进行优化。所述对优化后的skinny加密算法的实现,是对优化后的skinny加密算法(流程)使用c语言在cpu上实现和使用opencl在gpu上实现。还包括如下过程:对对优化后的skinny加密算法实现过后再比较对算法优化前后的加密/解密速度。进一步地,在skinny加密算法的初始化优化中:对加密或解密的测试数据处理进行优化,采用如下方法:对n=64bit的情形,将输入字符串中每个字符的ascll码拆成2个4bit的单元参与加密;n=128bit的情形不用处理。对明文和密钥的矩阵化进行优化,采用如下方法:输入的明文和密钥的16个单元不必组成4*4的矩阵is,直接使用长度为16的一维向量进行操作。对轮密钥的扩展进行优化,采用如下方法:先前的方法是先取上一轮轮密钥每个单元的每位的0/1值,再用它们计算下一轮轮密钥的值;优化过后不用求每位的0/1值可直接计算下一轮的轮密钥,且可以减少大量乘除运算、异或运算和与运算的次数。进一步地,在skinny加密算法的轮函数优化中:对字节替换、轮常量加、轮密钥加、行移位以及列混淆进行优化的方法分别为:轮常量加计算时无需使constants矩阵化、使得优化前的arrayconstants无需和0做异或;做轮密钥加计算时由于加密的中间状态为向量形态而没有矩阵化,可更方便地和轮密钥做异或;做列混淆计算时提前计算好先前算法矩阵化时需要得到的结果,通过直接计算来省略大量乘以0与异或0的运算;最后将字节替换、轮常量加、轮密钥加、行移位和列混淆可以化简为同一个操作,加密的计算结果可以通过一次计算得到。对字节替换、轮常量加、轮密钥加、行移位以及列混淆用于解密的逆运算进行优化的方法分别为:由于轮常量加和轮密钥加本质是做异或,所以其加密运算和解密运算相同,解密计算同加密优化方法;做列混淆计算时与加密的区别仅仅在于需要乘的矩阵不同,利用相同的方法可以省略大量乘以0与异或0的运算;最后将所有操作再化简为同一个操作,解密的计算结果可以通过一次计算得到。进一步地,在对经过初始化优化和轮函数优化后的skinny加密算法分别在cpu和gpu上实现中:采用c语言,对经过初始化优化和轮函数优化后的skinny加密算法在cpu上实现;采用opencl语言,对经过初始化优化和轮函数优化后的skinny加密算法在gpu上实现。进一步地,对优化前后的skinny加密算法的速度进行比较,包括:分别统计每秒钟能够加密的明文总数或解密的密文总数并进行比较。关于skinny快速加解密的优化实现方法,分别在cpu和gpu上进行实验。在cpu上实验为使用vs2010平台,采用c语言编程进行实验,将优化前后的数据进行对比;在gpu上的实验基于opencl和gpu创建的skinny快速实现方法(优化实现方法)。为了提高速度和方便实现,整个实验采用ecb的分组密码工作模式。skinny可使用的版本有6种,从每次加密的明文块大小来说,n可以分为64bit、128bit两种,密钥大小可以为n的1倍、2倍或3倍,一共有6种使用方法。本实验对这6种情形均进行了测试。本发明进行加密的测试数据为字符串,实际加密的数据为其ascll码。skinny算法每个加密的单元为n/16bit,所以对于n=64bit和128bit两种情形,每个加密的单元为4bit和8bit。由于ascll码为8bit,所以对于n=64bit的情形必须将每个ascll码拆成2个单元来加密。在本发明实施例中:对skinny加密与解密中初始化阶段的流程进行简化与优化,其中包括明文和密钥矩阵化、轮密钥的扩展优化。对skinny加密与解密中的轮函数进行简化与优化,其中包括字节替换(subcells)、轮常量加(addconstants)、轮密钥加(addroundtweakey)、行移位(shiftrows)、列混淆(mixcolumns)、以及它们用于解密的逆运算。在cpu上进行性能测试:使用c语言分别对优化前后的代码进行实现,分别统计每秒钟可以加密的明文总数或解密的密文总数并进行比较。在gpu上进行性能测试:使用opencl语言,在gpu上对优化前后的代码进行实现,分别统计每秒钟可以加密的明文总数或解密的密文总数并进行比较。下面结合附图,对本发明上述实施例所提供的技术方案进一步详细描述。以最简单的n=64bit、z=1为例,skinny加密算法的原始方法如图1所示。图1中:左侧为自上而下的加密流程,即将明文进行初始数据处理、再进行32轮的加密操作,每轮包括[0011]中的5个操作;右侧为自下而上的解密流程,即将密文做初始数据处理、在进行32轮的解密操作;中间为使用初始密钥进行初始密钥处理后,生成32轮的轮密钥(tk[0][0]→tk[31][0]),再依次作用于加密和解密的addroundtweakey操作。skinny加密算法的原始实施和优化后的方式如下所述:step1:选择版本:每次加密一块的明文的大小n=64bit或128bit;一块密钥的大小t=n、2n或3n;密钥大小与明文大小的比率z=t/n;再根据不同版本选择不同的加密轮数round,例如当n=64bit且z=1时,round=32;具体如表1所示。表1step2:加密或解密时需要使用的全局常量:constants[62]、pt[16]、s4box[16]、s8box[256]、invs4box[16]、invs8box[256],具体数值如表2表6所示。step3:对明文数据和密钥数据的初始化:1)将n分为16个n/16的单元,组成4*4的矩阵is;优化后不必组成矩阵,减少了16次赋值操作;2)根据版本z=1/2/3,分别将输入的密钥t分成16/32/48个单元组成初始密钥tk[48],每个密钥单元大小与n的单元大小相等(4bit或8bit);三维密钥矩阵tk[56][3][48]用来存放加解密过程中的轮密钥。对于第0轮的密钥处理:1)i=0->15,tk[0][0][i]=tk[i];2)若z>1:i=0->15,tk[0][1][i]=tk[i+16];3)若z>2:i=0->15,tk[0][2][i]=tk[i+32];对于第i轮(i=1->round-1)的密钥处理:1)先根据表2所示的pt向量做pt置换,用于打乱16个单元的密钥顺序:表2x0123456789101112131415pt[x]9158131014121101234567j=0->15,tk[i][0][j]=tk[i-1][0][pt[j]];2)当然,如果z>1、z>2也要对tk[i][1][j]与tk[i][2][j]做类似的变换;如果z>1,将对轮密钥tk[i][1][j]做一个较为复杂的操作:以n=128、z=2为例,在使用原方法计算时:1)取出j=0->7,取出tk[i][1][j]的8位二进制数字;比如取出tk[i][1][j]的最高位x[7]时,x[7]=(tk[i][1][j]/128)&1;2)取出x[0]—x[7]时,进行如下计算生成新的轮密钥:tk[i][1][j]=(x[6]*128)^(x[5]*64)^(x[4]*32)^(x[3]*16)^(x[2]*8)^(x[1]*4)^(x[0]*2)^(x[7]^x[5]);此计算较为繁琐,在这种情况下生成一个轮密钥要进行14次乘除运算、8次与运算、8次异或运算,优化后的计算方法如下:经过观察,此轮密钥的生成等价于将原密钥向左移位1位(最低位补0),再取出原密钥的第7位和第5位异或即可。由于移位的运算速度要远大于乘除的运算速度,所以可以直接对j=0->7做如下计算来生成轮密钥:tk[i][1][j]=(tk[i][1][j]<<1)&255^(((tk[i][1][j]>>5)&1)^((tk[i][1][j]>>7)&1));优化后,生成一个轮密钥只需要进行3次移位运算、3次与运算与2次异或运算,大大减少了计算的时间和空间开销。如果z>2,同样要对轮密钥tk[i][2][j]做类似的操作:以n=128、z=3为例,优化后的计算方法为:tk[i][2][j]=(tk[i][2][j]>>1)&127^(((tk[i][2][j]&64)<<1)^((tk[i][2][j])&1)<<7);原方法同样要付出很大的计算时间和空间开销。当n=64bit时的优化计算轮密钥方法如下:如果z>1:j=0->7,tk[i][1][j]=(tk[i][1][j]<<1)&15^(((tk[i][1][j]>>2)&1)^((tk[i][1][j]>>3)&1));如果z>2:j=0->7,tk[i][2][j]=(tk[i][2][j]>>1)&7^((tk[i][2][j]&8)^((tk[i][2][j]&1)<<3))。step4:对skinny加密和解密流程的优化,首先使用原方法来进行加密和解密,再以此来引出算法的优化方法。字节替换subcells:分n=64bit和n=128bit两种情况:前者由于一个单元为4bit,按照表3所示的s盒(十六进制)将is的每个单元进行替换,其中加密使用s4box、解密使用invs4box。表3x0123456789abcdefs4box[x]c6901a2b385d4e7finvs4box[x]3468ca1e92570bdfn=128bit时,由于一个单元为8bit,按照下图所示代码的s盒将is的每个单元进行替换,其中加密时使用s8box、解密时使用invs8box。例如,当n=128bit时,输入的字节为0x60,查表得到0xa1,则将0x60替换成0xa1,解密时则按照逆s盒进行替换。轮常量加addconstants:当进行到某轮时,根据表4所示将该轮的constants转化为4*4矩阵形式的arrayconstants:表4方法如下:arrayconstants[0][0]为constants的后4位;arrayconstants[1][0]为constants的前4位;arrayconstants[2][0]为0x2,矩阵的其余位置值全置0。is和该轮4*4arrayconstants矩阵的所有单元的值做按位异或。可优化之处:arrayconstants中给矩阵的13个位置赋值0再和中间状态is异或毫无意义,可以省略;同时constants也不必再矩阵化,可节省一些空间。轮常量加操作,对于加密和解密运算是相同的。轮密钥加addroundtweakey:is的前两行和该轮的轮密钥tk[roundnum][0]做按位异或;z>1时:某轮加密到中途的4*4矩阵形式的中间状态is的前两行再和该轮的轮密钥tk[roundnum][1]做按位异或;z>2时:某轮加密到中途的4*4矩阵形式的中间状态is的前两行再和该轮的轮密钥tk[roundnum][2]做按位异或;可优化之处:tk由于是向量形式,is是矩阵形式,在按位异或前需要额外计算被异或者tk的坐标(4*i+j),is改成向量形式可以省去这个步骤。轮密钥加操作,对于加密和解密运算是相同的行移位shiftrows:状态矩阵is的第0行不变,第1行按单元循环向右移一个单位;第2行按单元循环向右移两个单位;第3行按单元循环向右移三个单位;解密时相反,即向左循环移动。列混淆mixcolumns:加密时状态矩阵is左乘下图所示的m矩阵,解密时is左乘下图所示的m的逆矩阵。可优化之处:仍然是乘以0再异或毫无意义,可以考虑省略;此外由于m矩阵全为0,1组成,将is向量化后矩阵的乘法运算可以省略。subcells、addconstants、addroundtweakey、shiftrows、mixcolumns共同的可优化之处:1)分支判断较多:根据n和z的大小来选择具体怎么加密;2)循环较多:每块都要遍历一遍整个中间状态is;3)乘以0和与0异或的操作较多,可以省略;4)函数调用较多:如果把所有的操作手动化简,可以提速很多。优化方法:加密的中间状态从is的4*4矩阵化为大小为16的向量,并将subcells、addconstants、addroundtweakey、shiftrows、mixcolumns通过手动代数计算化简为同一个操作,加密解密结果可以一次计算全部到位。以n=64bit、z=1为例,is的实际计算流程如图2所示。优化后在进行mixcolumns前,所有模块计算(subcells、addconstants、addroundtweakey、shiftrows)无需重复两次。但由于矩阵乘法的关系,准备mixcolumns前中间状态的值可能不止使用一次,这个时候应当用temp[16]来保存中间状态的临时值,同时也可以防止在进行矩阵乘法时读脏数据。优化后skinny算法一轮中要做的工作代码表示如下图所示:当n=64bit、z=1执行加密时:当n=64bit、z=1执行解密时:当n=64bit、z=2执行加密时:当n=64bit、z=2执行解密时:当n=64bit、z=3执行加密时:当n=64bit、z=3执行解密时:当n=128bit、z=1执行加密时:当n=128bit、z=1执行解密时:当n=128bit、z=2执行加密时:当n=128bit、z=2执行解密时:当n=128bit、z=3执行加密时:当n=128bit、z=3执行解密时:这样,每轮只要重复如图所示的代码即可,可大幅度提升加密或解密速度。其中,m代表进行一轮后的加密(或解密)结果。在cpu上,使用原始算法每秒钟可以加密的明文数如表5所示;表5在cpu上,使用优化算法每秒钟可以加密的明文数如表6所示。表6在gpu上,使用原始算法每秒钟可以加密的明文数如表7所示。表7在gpu上,使用优化算法每秒钟可以加密的明文数如表8所示。表8从实验数据可知,在优化前的skinny加密算法中,gpu的执行速度约为cpu的2倍。当优化过后,cpu的执行速度提升相当显著,大约为优化前加密速度的4-7倍;而gpu的速度提升相对gpu较缓慢,也较为显著,大约为优化前的4-5倍。优化过后,gpu上的加密速度大约为cpu速度的1-2倍,由此可见该优化对cpu的速度提升较为敏感。原因是尽管在尽力减少算法中的复杂流程,但是算法中还存在少部分分支和判断,gpu却不擅长处理分支和判断。本发明实施例同时提供了一种基于gpu的skinny算法实现系统,可以用于实现实现上述基于gpu的skinny算法实现方法。该系统包括:skinny加密算法的初始化优化模块,用于对加密或解密的测试数据、明文和密钥的矩阵化以及轮密钥的扩展进行优化;skinny加密算法的轮函数优化模块,用于对字节替换、轮常量加、轮密钥加、行移位、列混淆及其用于解密的逆运算进行优化;skinny加密算法实现模块,用于对经过初始化优化和轮函数优化后的skinny加密算法分别在cpu和gpu上实现。进一步地,所述skinny加密算法的初始化优化模块,包括:-对加密或解密的测试数据处理进行优化的单元,用于:针对n=64bit的情形,将输入字符串中每个字符的ascll码拆成2个4bit的单元参与加密;针对n=128bit的情形,不进行处理;-对明文和密钥的矩阵化进行优化的单元,用于对输入的明文和密钥的16个单元直接使用长度为16个unsignedchar大小的一维向量进行操作;-对轮密钥的扩展进行优化的单元,用于根据不同版本的skinny,先将上一轮轮密钥复制为n份,将这n份轮密钥分别向左或向右移位不同的值,得到的n份轮密钥再分别与一个根据skinny版本确定的数做按位与计算,得到n份数据,将这n份数据进行按位异或计算,最终得到的结果即为下一轮的轮密钥的值。进一步地,对于skinny的版本:z=1时,密钥长度为16个单位;z=2时,密钥长度为32个单位;z=3时,密钥长度为48个单位;n=64bit时,一个单位长度为4bit;n=128bit时,一个单位长度为8bit;第一行密钥指的是,第0-15个单位的密钥;第二行密钥指的是,第16-31个单位的密钥;第三行密钥指的是,第32-47个单位的密钥;基于以上内容,根据不同版本的skinny,所述轮密钥的扩展进行优化的单元对轮密钥的扩展进行优化的方法为:当skinny版本为z=1时,不做进一步的轮密钥扩展;当skinny版本为n=64bit、z>1时,对于第二行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向左移动1位再与15做与运算得到的结果;-上一轮轮密钥向右移动2位再与1做与运算得到的结果;-上一轮轮密钥向右移动3位再与1做与运算得到的结果;当skinny版本为n=64bit、z>2时,对于第三行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向右移动1位再与7做与运算得到的结果;-上一轮轮密钥与8做与运算得到的结果;-上一轮轮密钥与1做与运算再向左移动3位得到的结果;当skinny版本为n=128、z>1时,对于第二行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向左移动1位再与255做与运算得到的结果;-上一轮轮密钥向右移动5位再与1做与运算得到的结果;-上一轮轮密钥向右移动7位再与1做与运算得到的结果;当skinny版本为n=128、z>2时,对于第三行的16个单位密钥,分别将以下三部分运算得到的结果做异或生成新的密钥:-上一轮轮密钥向右移动1位再与127做与运算得到的结果;-上一轮轮密钥与64做与运算再向左移动1位得到的结果;-上一轮轮密钥与1做与运算再向右移动7位得到的结果。进一步地,所述skinny加密算法的轮函数优化模块,包括:-对字节替换、轮常量加、轮密钥加、行移位以及列混淆进行优化的单元,其中:针对轮常量加,计算时不对constants矩阵化,使得优化前的arrayconstants不与0做异或运算;针对轮密钥加,计算时加密的中间状态为向量形态,能够与轮密钥做异或运算;针对列混淆,计算时提前计算好先前算法矩阵化时需要得到的结果,只通过对不同元素按位异或的直接计算省略大量乘以0与异或0的运算;最后将字节替换、轮常量加、轮密钥加、行移位和列混淆化简为同一个操作,加密的计算结果通过一次计算得到;-对字节替换、轮常量加、轮密钥加、行移位以及列混淆用于解密的逆运算进行优化的单元,其中:轮常量加的解密计算中,计算时不对constants矩阵化,使得优化前的arrayconstants不与0做异或运算;轮密钥加的解密计算中,计算时解密的中间状态为向量形态,能够与轮密钥做异或运算;列混淆的解密计算中,所采用的矩阵为加密计算时所采用矩阵的逆矩阵,只利用对不同元素按位异或的直接计算省略大量乘以0与异或0的运算;最后将字节替换、轮常量加、轮密钥加、行移位以及列混淆用于解密的逆运算化简为同一个操作,解密的计算结果可以通过一次计算得到。进一步地,所述skinny加密算法实现模块,其中:采用c语言,对经过初始化优化和轮函数优化后的skinny加密算法在cpu上实现;采用opencl语言,对经过初始化优化和轮函数优化后的skinny加密算法在gpu上实现。进一步地,所述系统还包括速度比较模块,分别统计每秒钟能够加密的明文总数或解密的密文总数并进行比较。基于本发明上述实施例所提供的基于gpu的skinny算法实现方法、系统,本发明实施例同时提供了一种终端,所述终端包括存储器、处理器及存储在存储器上并能够在处理器上运行的计算机程序,所述处理器执行所述计算机程序时能够用于执行本发明上述实施例所提供的方法。基于本发明上述实施例所提供的基于gpu的skinny算法实现方法、系统,本发明实施例同时提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可用于执行上述的基于gpu的skinny算法快速实现方法。本发明上述实施例提供的一种基于gpu的skinny算法实现方法、系统、终端,包括:对skinny加密算法的初始化优化、skinny加密算法的轮函数优化、使用代码对优化后的skinny加密算法的实现。skinny加密算法的初始化优化,是对加密或解密的测试数据的处理、对明文和密钥的矩阵化优化,最重要的是对轮密钥的扩展进行优化。skinny加密算法的轮函数优化,是对字节替换(subcells)、轮常量加(addconstants)、轮密钥加(addroundtweakey)、行移位(shiftrows)、列混淆(mixcolumns),以及对它们用于解密的逆运算进行优化。使用代码对优化后的skinny加密算法的实现,是对优化后的流程使用c语言在cpu上实现和使用opencl在gpu上使用代码实现,实现过后再比较对算法优化前后的加密速度。最终实验结果显示,无论是在cpu上还是gpu上实现,优化后的skinny加密算法的运算速度为正常速度的4倍以上。对于skinny加密与解密算法的优化,其应用场景包括但不限于高性能密码计算和网络加密服务请求。需要说明的是,本发明提供的所述方法中的步骤,可以利用所述系统中对应的模块、装置、单元等予以实现,本领域技术人员可以参照所述系统的技术方案实现所述方法的步骤流程,即,所述系统中的实施例可理解为实现所述方法的优选例,在此不予赘述。本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个模块、装置、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思做出诸多修改和变化。因此,凡本
技术领域
中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1