一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种提高AES加解密效率的方法和装置与流程

2022-03-13 23:29:39 来源:中国专利 TAG:

一种提高aes加解密效率的方法和装置
技术领域
1.本发明涉及算法技术领域,以及智能卡、se、mcu等需要用到aes算法的所有芯片。 pc机端作为对比测试也可以使用本发明中提到的方法。


背景技术:

2.aes加密算法作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。该算法内部的加解密主流程采用四种基本操作来组和实现aes算法。包括字节代替,行移位,列混合,轮密钥异或。根据算法原理实现时,需要对一个4*4的数组穿插进行行运算和列运算,且恰好三个行运算被一个列运算所分割,即使使用硬件实现速度依然远远慢于传统的des算法,在进行大数据加密时会显得实时性不够。


技术实现要素:

3.本发明提供一种提高aes加解密效率的方法和装置,拆分重组了轮加解密中的4个步骤,把i-1轮的d轮密钥异或操作和i轮的a字节代替和b行移位三个步骤进行组合,通过实际的减少赋值操作来进行提速,用以加快算法的加解密速度,并用实际硬件做了验证。
4.加密运算时把d轮密钥异或,a字节代替,b行移位,三个步骤合并成一个步骤,优化前算法每轮执行的abcd4个步骤,a步骤对输入的16字节数据进行完字节代替后,b步骤再对刚才的结果进行行移位操作,以此类推,直到执行完轮密钥异或操作。除去c操作,剩余的 abd操作一共会执行48次赋值操作,而优化后针对上一轮的d和下一轮的ab将进行合并形成新的dab,作为整体去运算,不再是每个步骤单独对16字节数据进行计算把结果传给下一个步骤,而是针对每个字节分别执行完dab三个操作后再对下一个字节执行dab操作,这种计算方法一共会执行20次赋值操作。相比优化前的48次赋值,提高了执行效率。
5.解密运算则完全是加密运算的逆运算,把bad三个步骤组合,一样可以减少28次赋值操作。
6.本发明提供一种提高aes轮加密效率的方法,其流程包括4个阶段:
7.阶段1:重组后的第1轮。
8.阶段2:重组后的第2~(n-1)轮。
9.阶段3:重组后的第n轮。
10.阶段4:后处理。
11.为说明上述4个阶段的重组过程,这里先简单介绍未执行重组优化的原始aes算法流程。
12.aes整体分为轮运算和轮密钥生成两个过程。其中本发明并不涉及对轮密钥生成过程的优化,故不展开说。对于加密的轮运算,一共分为4个小步骤,分别是a字节代替,b行移位, c列混合,d轮密钥异或。算法的执行流程见图2。
13.步骤202和步骤204分别对应轮运算的第1轮和第n-1轮。
14.步骤203代表着一系列相同的步骤,都完全等同于步骤202和步骤204。为简化不予
画出。
15.步骤205里面去掉了c列混合这步。
16.注意用户输入的待加密数据和输入到算法运行的数据是有区别的,用户每次输入16字节,然后内部先转化成一个4*4的矩阵,然后把矩阵进行转置,也就是沿着主对角线翻转一次,然后才传入算法进行运算。图2和图3最开始传入的明文和密文数据均需要先经过转置才能传给aes区运算,而图2和图3最后计算完的数据也需要再次执行转置操作才能得到最终的密文或明文数据传递给用户。
17.由图2的画法可以看出,原始算法流程中的4个小步骤,a字节代替,b行移位,c列混合,d轮密钥异或在加密的步骤202,步骤204,步骤205,以及解密的步骤215,步骤214,步骤212中,都是有一条横线分开,代表这些步骤各自独立,各自完成对当前4*4的数据矩阵操作后才会执行下一个子步骤。
18.接下来介绍经过重组的新的aes算法加密流程。
19.在核心的单轮运算中,执行的步骤包括a字节代替,b行移位,c列混合,d轮密钥异或。其中列混合是列运算,行移位和轮密钥异或是行运算,字节代替即可以认为是列运算也可以认为是行运算,这里为流程分割清晰划分到行运算。
20.a0a1a2a3a4a5a6a7a8a9a10a11a12a13a14a15
21.轮运算实质上是对一个4*4的数组进行迭代运算,上面所述的行运算和列运算都是针对这个4*4数组来说。行运算代表操作(a0,a1,a2,a3)或(a4,a5,a6,a7)或(a8,a9,a10,a11)或 (a12,a13,a14,a15);列运算代表操作(a0,a4,a8,a12)或(a1,a5,a9,a13)或(a2,a6,a10,a14) 或(a3,a7,a11,a15)。每一步执行完后才能执行下一步,每一轮执行完后才能执行下一轮,故提升每轮的运算性能对整体加密性能有着举足轻重的作用。
22.但是其中的列混合属于对4*4数组的某一列进行操作,故每轮运算中的列混合必须等到每轮运算中的字节代替和行移位都运行完毕才能进行,而每轮的轮密钥异或也要等到该轮的列混合执行完才能执行,列混合操作无法和另外三个操作一起执行。在硬件实现中,赋值数值传递的次数直接影响程序的性能以及电路的面积,故我们需要展开所有轮运算,然后进行重组,把所有行运算放到一起,通过整个三个步骤的电路合并成一个进而优化电路的面积和提速。把唯一的列运算—列混合单独拎出来,然后组成一个新的轮来进行计算。最终的流程见图3。
23.阶段1所述的重组后的第一轮,即图3中的步骤301,具体的,(301d,301a,301b)三个子步骤是由(201d,202a,202b)三个子步骤组成。
24.阶段2所述的重组后的第2轮~第n-1轮,内部执行的流程均相同,包括步骤302,步骤 303和步骤304,其中第i轮中的c列混合和d轮密钥异或均是图2中加密第i-1轮的c列混合和d轮密钥异或。第i轮中的a字节代替和b行移位均是图2中加密第i轮的a字节代替和b行移位。这样原先的由a字节代替(i),b行移位(i),c列混合(i),d轮密钥异或(i)组成一轮运算,变成了由c列混合(i-1),d轮密钥异或(i-1),a字节代替(i),b行移位(i) 组成新的一轮。
25.阶段3所述的重组后的第n轮,即步骤305,跟之前的阶段2所述中的第2轮~第n-1轮没有本质区别。
26.阶段4所述的后处理,即图3中的步骤306,由前面的打散重组后,剩下一个单独的轮密钥异或(n),即子步骤205d。
27.根据上述的加密过程,本发明提供一种提高aes轮解密效率的方法,其流程主要包括4 个阶段:
28.阶段5:预处理。
29.阶段6:重组后的第n轮。
30.阶段7:重组后的第(n-1)~2轮。
31.阶段8:重组后的第1轮。
32.解密流程即加密流程的逆过程。
33.这里对逆过程作出解释,下面不再阐述。
34.字节代替实际是执行查表操作,加密和解密查的表不同,假设定义加密查的表为s表,解密查的是s逆表,那么字节代替的逆过程则是查s逆表的过程。我们叫逆字节代替。
35.行移位在加密过程中是循环左移,则解密的行移位为循环右移,我们叫逆行移位。
36.列混合在加密和解密运算中比较复杂,由于本发明不涉及到对列混合的优化,故不再特别说明,但我们把解密的列混合叫逆列混合。
37.轮密钥异或操作实际上是数据和密钥进行对应字节异或,因为字节a对任意值连续异或两次还会得到a,所以轮密钥异或的逆过程和原过程相同,但为了区分解密和加密的不同,在图2图3图4中有关解密的轮密钥异或操作依然叫逆轮密钥异或操作。
38.为了体现解密流程即加密流程的逆过程这一点,在图3中的第一步,标注的不是步骤311 而是步骤316,执行的过程等同于步骤306,标注的轮次也是第n轮而不是第1轮,主要是为了突出解密是加密的逆过程,解密第一轮执行的操作即加密的第n轮的逆过程。同样步骤315 也是步骤305的逆运算,以此类推。
39.阶段5所述的预处理是相对于整个解密流程来说,因为是在所有轮运算之前进行,所以叫预处理,实际执行的操作,即步骤316,等同于步骤306的逆过程。
40.阶段6所述的重组后的第n轮,即步骤315,具体的,(315b,315a,315d,315c)四个子步骤是由(305b,305a,305d,305c)四个子步骤的逆运算组成。
41.阶段7所述的重组后的第(n-1)轮~第2轮,内部执行的流程均相同,包括步骤314,步骤313,步骤312,该三步为步骤304,步骤303,步骤302的逆运算。
42.阶段8所述的重组后的第一轮,即步骤311,该步骤为步骤301的逆运算。
43.由图3的画法可以看出,原始算法流程中的4个小步骤,a字节代替,b行移位,c列混合,d轮密钥异或在加密的步骤301,步骤302,步骤304,步骤305,以及解密的步骤315,步骤314,步骤312,步骤311中,涉及到dab(解密是bad)的操作都是一个整体,而没有用横线分开,代表这些步骤在操作当前4*4的数据矩阵时,是通过一个优化后的电路直接整合实现,完成16个元素中某个元素的dab(解密是bad)操作后,再去执行下一个元素的dab (解密是bad)操作。
44.本发明还提供另一种提aes轮加解密效率的方法,在之前打散重组的基础上,继续修改了行移位,列混合,轮密钥异或的执行方式,用以加快算法的加解密速度,并用实际硬
件做了验证。
45.在aes算法加解密流程中,从图2的最上面明文(16字节)开始是一次加密流程的开始,但不是用户层最原始的输入。用户层最原始输入16字节后,需要先把该数据放入一个4*4的数组,假如用户输入的数据是b0~b15,具体见下:
46.b0b1b2b3b4b5b6b7b8b9b10b11b12b13b14b15
47.然后对该数组进行沿主对角线翻转,具体见下:
48.b0b4b8b12b1b5b9b13b2b6b10b14b3b7b11b15
[0049] 真正传入算法进行轮运算的初始值是(b0,b4,b8,b12

b3,b7,b11,b15),也就是前面的(a0,a1,a2,a3

a12,a13,a14,a15)。
[0050]
在图3中的轮运算进行完毕之后,还需要再次对结果数据进行转置操作,然后输出给用户,这就造成每次加解密运算,都需要进行这两次转置,为了进一步提高算法执行效率,需要想办法去掉这两次转置操作。
[0051]
如果去掉最前面和最后面的转置操作,就需要我们在算法轮运算实际执行时,把内部的四个操作都进行转置。分析加解密轮运算,我们发现,a字节代替,b行移位,c列混合,d 轮密钥异或,实质上都是行运算或列运算,转置之后也依然是行运算和列运算,所以转置操作是可行的。且不会对四个操作本身的性能有什么影响。
[0052]
字节代替因为本身就是逐个字节进行,所以这个操作不存在行和列的概念,即可以理解为行运算也可以理解为列运算。
[0053]
行移位经过变换后变成了列移位,加密时的循环左移变成循环上移,解密时的循环右移变成循环下移。
[0054]
列混合经过变换后变成行混合。
[0055]
轮密钥异或由之前的数据一行和轮密钥一列进行异或,变成了数据一列和轮密钥一列进行异或,而两个4*4的数组逐列进行异或,也就可以理解为逐行进行异或,也就可以理解为逐字节异或。考虑到4*4的数据矩阵和轮密钥的4*4矩阵都是内部存储,所以都可以放到4 字节对齐位置上,那么在进行轮密钥异或这步操作时,变换之前,由于需要从轮密钥中取出一列数据进行运算,造成实际的异或只能拆成4次字节异或,但执行完数据转置之后,针对图4中的步骤406d和步骤416d,可以直接进行一次字的异或就可以完成一行的轮密钥异或操作,可以由之前的进行16次字节异或加16次赋值,变成4次字异或加4次赋值,在32位芯片上,可以提升执行效率。但在轮运算中的轮密钥异或操作,由于和字节代替和行移位进行整合,则依然只能进行字节的异或操作。
[0056]
本发明还提供另一种提高aes轮加解密效率的方法,其流程主要包括4个阶段:
[0057]
阶段9:重组后的第1轮。
[0058]
阶段10:重组后的第2~(n-1)轮。
[0059]
阶段11:重组后的第n轮。
[0060]
阶段12:后处理。
[0061]
阶段9~阶段12具体见图4。
[0062]
阶段9所述的重组后的第一轮,即图4中的步骤401,该步骤与步骤301基本类似,变化在于:
[0063]
a)轮密钥异或由步骤301的数据行与轮密钥列异或变成了数据列与轮密钥列进行异或,既等同于数据行与轮密钥行进行异或。
[0064]
b)字节代替没有实质变化,依然是从对应位置查表16次,字节代替本身不关注待操作数据是否进行了沿主对角线的翻转。
[0065]
c)行移位变成了列移位,加密时的循环左移变成循环上移,解密时的循环右移变成循环下移。
[0066]
阶段10所述的重组后的第2轮~第n-1轮,内部执行的流程均相同,包括步骤402,步骤403和步骤404,此三步类似于步骤302,步骤303,步骤304,其中轮密钥异或,字节代替,列移位的变化在阶段9中已经阐述,在这个阶段中的行混合完全由步骤302,步骤303,步骤 304中的列混合沿主对角线翻转而来,不改变计算方法,只是改变计算的原始数据,从取出一列数据进行计算并写回,变成取出一行数据进行计算并写回。
[0067]
阶段11所述的重组后的第n轮,即步骤405,此步骤类似于步骤305,内部的所有变化已经在阶段9和阶段10中阐述。
[0068]
阶段12所述的后处理,即图4中的步骤406,此步骤类似于步骤306,轮密钥异或的变化已经在阶段9中阐述。
[0069]
根据上述的加密过程,本发明还提供另一种高效的aes轮解密效率的方法,其流程主要包括4个阶段:
[0070]
阶段13:预处理。
[0071]
阶段14:重组后的第n轮。
[0072]
阶段15:重组后的第(n-1)~2轮。
[0073]
阶段16:重组后的第1轮。
[0074]
解密流程即加密流程的逆过程,为了体现逆过程这一点,在图4中的第一步,标注的不是步骤411而是步骤416,执行的过程等同于步骤316的逆运算,但是执行的轮密钥异或是经过主对角线翻转的数据的一行和轮密钥的一行进行异或,一共4行故执行4次,标注的轮次也是第n轮而不是第1轮,主要是为了突出解密是加密的逆过程,解密第一轮执行的操作即加密的第n轮。同样步骤415也是步骤405的逆过程,以此类推。
[0075]
阶段13所述的预处理是相对于整个解密流程来说,因为是在所有轮运算之前进行,所以叫预处理,实际执行的操作,即步骤416,等同于步骤406的逆过程。
[0076]
阶段14所述的重组后的第n轮,即步骤415,此步骤类似于步骤405,内部的所有变化已经在阶段9和阶段10中阐述。
[0077]
阶段15所述的重组后的第(n-1)轮~第2轮,内部执行的流程均相同,包括步骤414,步骤413,步骤412,此3步类似于步骤315,步骤314,步骤313,内部的所有变化已经在阶段9和阶段10中阐述。
[0078]
阶段16所述的重组后的第一轮,即图4中的步骤411,此步骤类似于步骤311,内部
的所有变化已经在阶段9和阶段10中阐述。
[0079]
针对图4,需特别注意的是加密流程,输入数据相比于图3,在明文之后已经没有了转置数据的操作,输出数据相比于图3,由密文之前已经没有了专职数据的操作。也就是优化后的算法流程已经不再需要单独的转置操作。
[0080]
由图4的画法可以看出,原始算法流程中的4个小步骤,a字节代替,b行移位,c列混合,d轮密钥异或在加密的步骤401,步骤402,步骤404,步骤405,以及解密的步骤415,步骤414,步骤412,步骤411中,涉及到dab(解密是bad)的操作都是一个整体,而没有用横线分开,代表这些步骤在操作当前4*4的数据矩阵时,是通过一个赋值语句直接进行,完成16个元素中某个元素的dab(解密是bad)操作后,再去执行下一个元素的dab(解密是bad)操作。
[0081]
本发明的装置包括:加密包括模块501、模块502和模块503,模块501和模块502相互连接,模块502和模块503相互连接;模块502由小模块5021和模块501组成,且两者在内部连接;模块501支持实现轮运算中的非c行混合功能(即包括a字节代替、b列移位、d轮密钥异或);模块5021支持实现c行混合功能,模块503支持实现d异或功能;模块501的输出即模块502的输入,输入数据给到模块502后,会重复执行模块502若干次,然后输出给模块503;最终结果从模块503的输出获得;解密包括模块601、模块602、模块603,模块601和模块602相互连接,模块602和模块603相互连接;模块602由模块601和小模块 6021组成,且两者在内部连接;模块601支持实现轮运算中非c行混合功能(即包括a字节代替、b列移位、d轮密钥异或),模块6021支持实现c行混合功能,模块603支持实现d异或功能;模块603的输出即模块602的输入,输入数据给到模块602后,会重复执行模块602 若干次,然后输出给模块601;最终结果从模块601的输出获得。
附图说明:
[0082]
图1为本发明的核心优化框图,该图为图4的一个局部缩影;
[0083]
图2为aes算法原始的流程图,即没有使用本发明所述方案的原始流程图,用于对比说明使用;
[0084]
图3为本发明实施例1提供的一种优化方案的流程图;
[0085]
图4为本发明实施例2提供的一种优化方案的流程图,且该流程为在图3基础上进行二次优化得来;
[0086]
每张图都分为左右两部分,左半部分为加密流程,右半部分为解密流程。
[0087]
图5,本发明的装置结构示意图,上半部分为加密装置,下半部分为解密装置。
具体实施方式:
[0088]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行实际数据的举例说明。
[0089]
图1为整个算法运行的概略图,也是图4的一个缩影。
[0090]
图2为原始没有优化过的aes加解密流程。
[0091]
图3为经过本发明措施1中的优化方法进行优化后的加解密流程图。
[0092]
图4为在本发明措施1基础上经过措施2中的优化方法进行优化后的加解密流程图。
[0093]
考虑到本文采用了两种优化,且两种优化互不排斥,可以共同起作用,所以实施例中的数据举例,会按照两种优化同时起作用的方式给出中间和最终结果。图4也是在图3的基础上进行的数据转置的优化,而不是在图2基础上进行的。
[0094]
这里以aes-128-ecb加解密为例,其他的密钥长度只是影响轮运算的轮数,不影响每轮运算的过程。
[0095]
实施例1:
[0096]
16字节明文:
[0097]
0x32,0x43,0xf6,0xa8,0x88,0x5a,0x30,0x8d,0x31,0x31,0x98,0xa2,0xe0,0x37,0x07,0x34
[0098]
16字节密钥:
[0099]
0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c
[0100]
经过步骤401之后的阶段性密文输出:
[0101]
0xd4,0xbf,0x5d,0x30,0xe0,0xb4,0x52,0xae,0xb8,0x41,0x11,0xf1,0x1e,0x27,0x98,0xe5
[0102]
经过步骤402之后的阶段性密文输出:
[0103]
0x49,0xdb,0x87,0x3b,0x45,0x39,0x53,0x89,0x7f,0x02,0xd2,0xf1,0x77,0xde,0x96,0x1a
[0104]
经过步骤404之后的阶段性密文输出:
[0105]
0x87,0x6e,0x46,0xa6,0xf2,0x4c,0xe7,0x8c,0x4d,0x90,0x4a,0xd8,0x97,0xec,0xc3,0x95
[0106]
经过步骤405之后的阶段性密文输出:
[0107]
0xe9,0x31,0x7d,0xb5,0xcb,0x32,0x2c,0x72,0x3d,0x2e,0x89,0x5f,0xaf,0x09,0x07,0x94
[0108]
经过步骤406之后的最终加密密文输出:
[0109]
0x39,0x25,0x84,0x1d,0x02,0xdc,0x09,0xfb,0xdc,0x11,0x85,0x97,0x19,0x6a,0x0b,0x32
[0110]
实施例2:
[0111]
16字节密文:
[0112]
0x32,0x43,0xf6,0xa8,0x88,0x5a,0x30,0x8d,0x31,0x31,0x98,0xa2,0xe0,0x37,0x07,0x34
[0113]
16字节密钥:
[0114]
0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c
[0115]
经过步骤416之后的阶段性密文输出:
[0116]
0xe2,0x57,0x0f,0x00,0x41,0xb4,0x15,0x04,0xd0,0x0e,0x94,0x6a,0x56,0x54,0x0b,0x92
[0117]
经过步骤415之后的阶段性密文输出:
[0118]
0x64,0x32,0xcc,0xc5,0xa9,0xf0,0xe5,0x46,0xa7,0x01,0x56,0x48,0xe6,
0xd9,0xcb,0x82
[0119]
经过步骤414之后的阶段性密文输出:
[0120]
0x6b,0xf1,0x83,0x3b,0x3e,0xc8,0x52,0x6f,0x1c,0xd0,0x38,0xd3,0x92,0x01,0x51,0xe7
[0121]
经过步骤412之后的阶段性密文输出:
[0122]
0xe1,0x68,0x11,0x1a,0x96,0x8e,0x0c,0x7e,0x24,0x68,0xd8,0x8f,0x6b,0x3c,0x7d,0xc7
[0123]
经过步骤411之后的最终解密明文输出:
[0124]
0xcb,0x13,0x38,0x9c,0x1d,0x59,0xc1,0xd5,0x0d,0x11,0xf6,0xb9,0x0c,0x38,0xce,0x7f
[0125]
经过时间测试,优化后的算法性能比优化前的提升42%。这个性能是一次完整的16字节加解密运算的数据,包括轮密钥生成和轮加密两部分。考虑到对大量数据进行加密时,轮密钥生成并不需要生成多次,只需要生成一次,所以对大数据加密时,性能提升基本等同于轮运算的性能提升,经过计算轮运算性能提升53%,即步骤402相比步骤202,性能提升53%。
[0126]
在图4中的流程图中,加密的dab组合和解密的bad组合,不仅出现在每轮运算中,在没有行混合的轮次也是可以复用,这在硬件电路实现时可以优化电路的面积,也就是dab的组合面积要小于单独的d a b的电路面积。而图2中的原始流程,没有列混合的abd电路无法成为一个整体在每轮运算中的到复用。
[0127]
实施例3:
[0128]
一种提高aes加解密效率的装置,加密时把dab作为一个整体形成一个模块,记为模块 501。在进行轮运算之前以及轮运算当中,重复对其进行调用,通过减少赋值次数来达到提速的效果。如图5所示,模块501同时存在于模块502中,可重复利用模块501,在轮运算全部执行完之后,在单独执行模块503。而轮运算进行中,也就是重复执行模块502时,每轮会先执行模块5021再执行模块501,也就是模块502实质由模块5021和501共同组成。
[0129]
同样的,解密完全是加密的逆运算,解密时把bad作为一个整体形成一个模块,记为模块601。在进行轮运算当中以及轮运算之后,重复对其进行调用,通过减少赋值次数来达到提速的效果。如图5所示,模块601和模块6021完全相同,可重复利用,在轮运算执行之前,先单独执行模块603,而轮运算进行中,也就是重复执行步骤602时,每轮会先执行一次bad 再执行模块6021,也就是步骤602的模块由模块6021和601共同组成。
[0130]
无论是加密还是解密,都会有一个模块进行高度复用,以加快运行速度。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献