CN109995506A - Skinny算法优化实现方法、系统、终端、存储介质 - Google Patents
Skinny算法优化实现方法、系统、终端、存储介质 Download PDFInfo
- Publication number
- CN109995506A CN109995506A CN201910280318.2A CN201910280318A CN109995506A CN 109995506 A CN109995506 A CN 109995506A CN 201910280318 A CN201910280318 A CN 201910280318A CN 109995506 A CN109995506 A CN 109995506A
- Authority
- CN
- China
- Prior art keywords
- key
- round
- skinny
- optimization
- decryption
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供了一种基于GPU的Skinny算法优化实现方法,Skinny加密算法的初始化优化,是对测试数据的处理、对明文和密钥的矩阵化优化、对轮密钥的扩展进行优化。Skinny加密算法的轮函数优化,是对字节替换、轮常量加、轮密钥加、行移位、列混淆及其用于解密的逆运算进行优化。对优化后的Skinny加密算法的实现,是对优化后的算法在CPU和GPU上实现。同时提供了一种实施上述方法的系统、终端及存储介质。本发明无论是在CPU上还是GPU上实现,优化后的Skinny加密算法的运算速度为正常速度的4倍以上。对于Skinny加密与解密算法的优化,其应用场景包括但不限于高性能密码计算和网络加密服务请求。
Description
技术领域
本发明涉及网络空间安全技术领域,具体地,涉及一种基于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 个unsigned char大小的一维向量进行操作。
对轮密钥的扩展进行优化,在优化过程中,对于上一轮轮密钥,不求每个单 元的每位的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个unsigned char大小的一维向量进行操作;
-对轮密钥的扩展进行优化的单元,用于根据不同版本的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所 示。
表1
STEP2:加密或解密时需要使用的全局常量: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个单元的密钥顺序:
表2
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
PT[x] | 9 | 15 | 8 | 13 | 10 | 14 | 12 | 11 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
j=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。
表3
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f |
S4Box[x] | c | 6 | 9 | 0 | 1 | a | 2 | b | 3 | 8 | 5 | d | 4 | e | 7 | f |
InvS4Box[x] | 3 | 4 | 6 | 8 | c | a | 1 | e | 9 | 2 | 5 | 7 | 0 | b | d | f |
n=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个unsigned char大小的一维向量进行操作;
-对轮密钥的扩展进行优化的单元,用于根据不同版本的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加密与解密算法的优化, 其应用场景包括但不限于高性能密码计算和网络加密服务请求。
需要说明的是,本发明提供的所述方法中的步骤,可以利用所述系统中对应 的模块、装置、单元等予以实现,本领域技术人员可以参照所述系统的技术方案 实现所述方法的步骤流程,即,所述系统中的实施例可理解为实现所述方法的优 选例,在此不予赘述。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的 系统及其各个模块、装置、单元以外,完全可以通过将方法步骤进行逻辑编程来 使得本发明提供的系统及其各个装置以逻辑门、开关、专用集成电路、可编程逻 辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系 统及其各项装置可以被认为是一种硬件部件,而对其内包括的用于实现各种功能 的装置也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置视为既 可以是实现方法的软件模块又可以是硬件部件内的结构。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人 员无需创造性劳动就可以根据本发明的构思做出诸多修改和变化。因此,凡本技 术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者 有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (15)
1.一种Skinny算法优化实现方法,其特征在于,包括:
Skinny加密算法的初始化优化,对加密或解密的测试数据、明文和密钥的矩阵化以及轮密钥的扩展进行优化;
Skinny加密算法的轮函数优化,对字节替换、轮常量加、轮密钥加、行移位、列混淆及其用于解密的逆运算进行优化;
对经过初始化优化和轮函数优化后的Skinny加密算法分别在CPU和GPU上实现。
2.根据权利要求1所述的Skinny算法优化实现方法,其特征在于,在Skinny加密算法的初始化优化中:
-对加密或解密的测试数据处理进行优化的方法,包括:
针对n=64bit的情形,将输入字符串中每个字符的ASCLL码拆成2个4bit的单元参与加密;针对n=128bit的情形,不进行处理;
-对明文和密钥的矩阵化进行优化的方法,包括:
输入的明文和密钥的16个单元直接使用长度为16个unsigned char大小的一维向量进行操作;
-对轮密钥的扩展进行优化的方法,包括:
根据不同版本的skinny,先将上一轮轮密钥复制为N份,将这N份轮密钥分别向左或向右移位不同的值,得到的N份轮密钥再分别与一个根据skinny版本确定的数做按位与计算,得到N份数据,将这N份数据进行按位异或计算,最终得到的结果即为下一轮的轮密钥的值。
3.根据权利要求2所述的Skinny算法优化实现方法,其特征在于,所述N取值为3。
4.根据权利要求2所述的Skinny算法优化实现方法,其特征在于,对于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位得到的结果。
5.根据权利要求1所述的Skinny算法优化实现方法,其特征在于,在Skinny加密算法的轮函数优化中:
-对字节替换、轮常量加、轮密钥加、行移位以及列混淆进行优化的方法为:
针对轮常量加,计算时不对Constants矩阵化,使得优化前的ArrayConstants不与0做异或运算;
针对轮密钥加,计算时加密的中间状态为向量形态,能够与轮密钥做异或运算;
针对列混淆,计算时提前计算好先前算法矩阵化时需要得到的结果,只通过对不同元素按位异或的直接计算省略大量乘以0与异或0的运算;
最后将字节替换、轮常量加、轮密钥加、行移位和列混淆化简为同一个操作,加密的计算结果通过一次计算得到;
-对字节替换、轮常量加、轮密钥加、行移位以及列混淆用于解密的逆运算进行优化的方法为:
轮常量加的解密计算中,计算时不对Constants矩阵化,使得优化前的ArrayConstants不与0做异或运算;
轮密钥加的解密计算中,计算时解密的中间状态为向量形态,能够与轮密钥做异或运算;
列混淆的解密计算中,所采用的矩阵为加密计算时所采用矩阵的逆矩阵,只利用对不同元素按位异或的直接计算省略大量乘以0与异或0的运算;
最后将字节替换、轮常量加、轮密钥加、行移位以及列混淆用于解密的逆运算化简为同一个操作,解密的计算结果可以通过一次计算得到。
6.根据权利要求1所述的Skinny算法优化实现方法,其特征在于,在对经过初始化优化和轮函数优化后的Skinny加密算法分别在CPU和GPU上实现中:
采用C语言,对经过初始化优化和轮函数优化后的Skinny加密算法在CPU上实现;
采用OpenCL语言,对经过初始化优化和轮函数优化后的Skinny加密算法在GPU上实现。
7.根据权利要求1至6中任一项所述的Skinny算法优化实现方法,其特征在于,还包括如下步骤:分别在CPU和GPU上,对优化前后的Skinny加密算法的速度进行比较,包括:
分别统计每秒钟能够加密的明文总数或解密的密文总数并进行比较。
8.一种用于实现权利要求1至7中任一项所述的方法的系统,其特征在于,包括:
Skinny加密算法的初始化优化模块,用于对加密或解密的测试数据、明文和密钥的矩阵化以及轮密钥的扩展进行优化;
Skinny加密算法的轮函数优化模块,用于对字节替换、轮常量加、轮密钥加、行移位、列混淆及其用于解密的逆运算进行优化;
Skinny加密算法实现模块,用于对经过初始化优化和轮函数优化后的Skinny加密算法分别在CPU和GPU上实现。
9.根据权利要求8所述的系统,其特征在于,所述Skinny加密算法的初始化优化模块,包括:
-对加密或解密的测试数据处理进行优化的单元,用于:针对n=64bit的情形,将输入字符串中每个字符的ASCLL码拆成2个4bit的单元参与加密;针对n=128bit的情形,不进行处理;
-对明文和密钥的矩阵化进行优化的单元,用于对输入的明文和密钥的16个单元直接使用长度为16个unsigned char大小的一维向量进行操作;
-对轮密钥的扩展进行优化的单元,用于根据不同版本的skinny,先将上一轮轮密钥复制为N份,将这N份轮密钥分别向左或向右移位不同的值,得到的N份轮密钥再分别与一个根据skinny版本确定的数做按位与计算,得到N份数据,将这N份数据进行按位异或计算,最终得到的结果即为下一轮的轮密钥的值。
10.根据权利要求9所述的系统,其特征在于,对于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位得到的结果。
11.根据权利要求8所述的系统,其特征在于,所述Skinny加密算法的轮函数优化模块,包括:
-对字节替换、轮常量加、轮密钥加、行移位以及列混淆进行优化的单元,其中:
针对轮常量加,计算时不对Constants矩阵化,使得优化前的ArrayConstants不与0做异或运算;
针对轮密钥加,计算时加密的中间状态为向量形态,能够与轮密钥做异或运算;
针对列混淆,计算时提前计算好先前算法矩阵化时需要得到的结果,只通过对不同元素按位异或的直接计算省略大量乘以0与异或0的运算;
最后将字节替换、轮常量加、轮密钥加、行移位和列混淆化简为同一个操作,加密的计算结果通过一次计算得到;
-对字节替换、轮常量加、轮密钥加、行移位以及列混淆用于解密的逆运算进行优化的单元,其中:
轮常量加的解密计算中,计算时不对Constants矩阵化,使得优化前的ArrayConstants不与0做异或运算;
轮密钥加的解密计算中,计算时解密的中间状态为向量形态,能够与轮密钥做异或运算;
列混淆的解密计算中,所采用的矩阵为加密计算时所采用矩阵的逆矩阵,只利用对不同元素按位异或的直接计算省略大量乘以0与异或0的运算;
最后将字节替换、轮常量加、轮密钥加、行移位以及列混淆用于解密的逆运算化简为同一个操作,解密的计算结果可以通过一次计算得到。
12.根据权利要求8所述的系统,其特征在于,所述Skinny加密算法实现模块,其中:
采用C语言,对经过初始化优化和轮函数优化后的Skinny加密算法在CPU上实现;
采用OpenCL语言,对经过初始化优化和轮函数优化后的Skinny加密算法在GPU上实现。
13.根据权利要求8至12中任一项所述的系统,其特征在于,还包括速度比较模块,分别统计每秒钟能够加密的明文总数或解密的密文总数并进行比较。
14.一种终端,包括存储器、处理器及存储在存储器上并能够在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时能够用于执行权利要求1至7中任一项所述的方法。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时可用于执行权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910280318.2A CN109995506B (zh) | 2019-04-09 | 2019-04-09 | Skinny算法优化实现方法、系统、终端、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910280318.2A CN109995506B (zh) | 2019-04-09 | 2019-04-09 | Skinny算法优化实现方法、系统、终端、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109995506A true CN109995506A (zh) | 2019-07-09 |
CN109995506B CN109995506B (zh) | 2022-09-02 |
Family
ID=67131051
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910280318.2A Active CN109995506B (zh) | 2019-04-09 | 2019-04-09 | Skinny算法优化实现方法、系统、终端、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109995506B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111404943A (zh) * | 2020-03-18 | 2020-07-10 | 腾讯科技(深圳)有限公司 | 数据的处理方法、装置、电子设备及计算机可读存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6424717B1 (en) * | 1995-04-03 | 2002-07-23 | Scientific-Atlanta, Inc. | Encryption devices for use in a conditional access system |
US20120144457A1 (en) * | 2010-12-06 | 2012-06-07 | Verizon Patent And Licensing Inc. | Method and system for providing registration of an application instance |
CN103684749A (zh) * | 2013-11-26 | 2014-03-26 | 衡阳师范学院 | 一种基于面积与性能平衡优化的klein加密实现方法 |
CN106453268A (zh) * | 2016-09-21 | 2017-02-22 | 四川大学 | 一种在物流过程中实现快递隐私保护的方法 |
CN107070630A (zh) * | 2017-01-17 | 2017-08-18 | 中国科学院信息工程研究所 | 一种aes算法的快速安全硬件结构 |
CN107257279A (zh) * | 2017-06-29 | 2017-10-17 | 努比亚技术有限公司 | 一种明文数据加密方法及设备 |
CN107579813A (zh) * | 2017-09-12 | 2018-01-12 | 四川阵风科技有限公司 | 信息加密、解密方法及装置 |
US20180375838A1 (en) * | 2017-06-27 | 2018-12-27 | Salesforce.Com, Inc. | Filtering and unicity with deterministic encryption |
CN109222970A (zh) * | 2018-07-09 | 2019-01-18 | 司法鉴定科学研究院 | 视力客观评定的设备及视觉诱发电位的检测系统与方法 |
-
2019
- 2019-04-09 CN CN201910280318.2A patent/CN109995506B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6424717B1 (en) * | 1995-04-03 | 2002-07-23 | Scientific-Atlanta, Inc. | Encryption devices for use in a conditional access system |
US20120144457A1 (en) * | 2010-12-06 | 2012-06-07 | Verizon Patent And Licensing Inc. | Method and system for providing registration of an application instance |
CN103684749A (zh) * | 2013-11-26 | 2014-03-26 | 衡阳师范学院 | 一种基于面积与性能平衡优化的klein加密实现方法 |
CN106453268A (zh) * | 2016-09-21 | 2017-02-22 | 四川大学 | 一种在物流过程中实现快递隐私保护的方法 |
CN107070630A (zh) * | 2017-01-17 | 2017-08-18 | 中国科学院信息工程研究所 | 一种aes算法的快速安全硬件结构 |
US20180375838A1 (en) * | 2017-06-27 | 2018-12-27 | Salesforce.Com, Inc. | Filtering and unicity with deterministic encryption |
CN107257279A (zh) * | 2017-06-29 | 2017-10-17 | 努比亚技术有限公司 | 一种明文数据加密方法及设备 |
CN107579813A (zh) * | 2017-09-12 | 2018-01-12 | 四川阵风科技有限公司 | 信息加密、解密方法及装置 |
CN109222970A (zh) * | 2018-07-09 | 2019-01-18 | 司法鉴定科学研究院 | 视力客观评定的设备及视觉诱发电位的检测系统与方法 |
Non-Patent Citations (4)
Title |
---|
CHRISTOF BEIERLE等: "The SKINNY Family of Block Ciphers and Its Low-Latency Variant MANTIS", 《SPRINGERLINK电子期刊》 * |
SIU-WING CHENG等: "Navigating Weighted Regions with Scattered Skinny Tetrahedra", 《IEEE》 * |
唐鹏: "轻量级分组密码的Biclique分析", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
唐鹏等: "对分组密码SKINNY-64-64的Biclique攻击", 《计算机应用与软件》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111404943A (zh) * | 2020-03-18 | 2020-07-10 | 腾讯科技(深圳)有限公司 | 数据的处理方法、装置、电子设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109995506B (zh) | 2022-09-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kim et al. | Time–space complexity of quantum search algorithms in symmetric cryptanalysis: applying to AES and SHA-2 | |
CN106850221B (zh) | 信息加密、解密方法及装置 | |
CN103152168B (zh) | 用于高级加密标准(aes)的处理器和指令 | |
US8504845B2 (en) | Protecting states of a cryptographic process using group automorphisms | |
Pornin et al. | More efficient algorithms for the NTRU key generation using the field norm | |
CN104639314A (zh) | 基于aes加密/解密算法的装置和流水控制方法 | |
CN105959107B (zh) | 一种新型高安全的轻量级sfn分组密码实现方法 | |
CN103634101A (zh) | 加密处理方法及设备 | |
CN110166223A (zh) | 一种国密sm4的快速软件实现方法 | |
CN101253473A (zh) | 用于对椭圆弧上的点进行标量乘法的方法 | |
Jawed et al. | XECryptoGA: a metaheuristic algorithm-based block cipher to enhance the security goals | |
US8553878B2 (en) | Data transformation system using cyclic groups | |
KR101923293B1 (ko) | 데이터 가산 장치 및 방법 | |
CN109995506A (zh) | Skinny算法优化实现方法、系统、终端、存储介质 | |
van Poppelen | Cryptographic decoding of the Leech lattice | |
CN111614457B (zh) | 基于p置换改进的轻量级分组加解密方法、装置及存储介质 | |
CN108650072A (zh) | 一种支持多种对称密码算法芯片及其抗攻击电路实现方法 | |
CN115865311B (zh) | 一种恒定轮次安全多方计算协议的优化方法和系统 | |
Song et al. | High-Speed Fault Attack Resistant Implementation of PIPO Block Cipher on ARM Cortex-A | |
Gueron et al. | Hardware implementation of AES using area-optimal polynomials for composite-field representation GF (2^ 4)^ 2 of GF (2^ 8) | |
Song et al. | Secure and fast implementation of ARX-Based block ciphers using ASIMD instructions in ARMv8 platforms | |
CN102857334B (zh) | 一种实现aes加解密的方法及装置 | |
US11924320B2 (en) | Devices and methods for protecting cryptographic programs | |
CN201039199Y (zh) | 一种抗功耗攻击的字节替换电路 | |
Oder | Efficient and side-channel resistant implementation of lattice-based cryptography |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |