一种基于改进AES算法的数据加密方法与流程

文档序号:11147351阅读:1855来源:国知局
一种基于改进AES算法的数据加密方法与制造工艺



背景技术:
:本发明的数据加密方法是由AES算法改进而成,AES算法(即高级加密标准)是由美国国家标准技术研究所(NIST)于2000年10月通过公开招标并从众多候选算法中选择出来的一种效率高且加密强度大的对称加密算法。它具有加密程度强、数据处理速度快,可以在短时间内处理大量数据的特点。AES算法是一个可变数据块长和可变密钥长的迭代分组加密算法,数据块长和密钥长可分别为128,192或256比特,AES算法中最重要的操作为轮变换操作,改变换过程所应用的各种运算赋予很高的加密强度。而本发明通过创建新的S盒,将原本AES算法中每个轮函数中的字节代换(ByteSub)、行移位(ShiftRow)、列混合(MixColumn)的运算过程简化查表的过程,在没有过多增加内存使用量的基础上,大大减小了计算量,使其可以在微控制器上快速实现,同时没有改变算法原本的数学结构,使其安全性更高。



技术实现要素:

本发明将AES运算过程进行改进优化,提高了在终端微处理器上实现的速度。接下来首先介绍AES算法,然后通过矩阵运算得出其矩阵表示,最后说明了优化后的加密方法的运算过程:

(1)AES算法的简介

AES算法是一个可变数据块长和可变密钥长的迭代分组加密算法,数据块长和密钥长可分别为128,192或256比特,AES算法中最重要的操作为轮变换操作,改变换过程所应用的各种运算赋予很高的加密强度。

轮变换操作(解密过程与加密过程大同小异,为加密过程的逆运算):轮变换由4个不同的变换组成(S盒变换,行变换,列变换和轮密钥加),用伪C代码描述为:

Round(State,RoundKey)

{

ByteSub(State);

ShiftRow(State);

MixColumn(State);

AddRoundKey(State,RoundKey);

}

最后一轮稍有不同,少了MixColumn(State)函数,即为:

FinalRound(State,RoundKey)

{

ByteSub(State);

ShiftRow(State);

AddRoundKey(State,RoundKey);

}

(2)AES算法轮变换的矩阵表示

AES算法主要由三大模块组成:加密模块、解密模块和密钥扩展模块。加密模块的每次轮变换均由字节代换(ByteSub)、行移位(ShiftRow)、列混合(MixColumn)和密钥加(AddRoundKey)四种运算构成,而解密模块也是由相似的四种运算构成,不同的是字节代换、行移位、列混合为加密模块的逆运算。而密钥加中每轮使用的扩展密钥则由密钥扩展模块产生。加密模块和解密模块是AES算法的核心,它们均为轮变换的重复过程,因此精简轮函数可以提高AES算法的运算速度。

为便于描述,这里采用128比特分组(16字节),密钥也是128比特。

在ByteSub变换中,假设输入为A,A=[ai,j],(0≤i,j≤3),输出为B,B=[bi,j],(0≤i,j≤3)。可以用:

B=(A) (1)

来表示ByteSub变换,即:

bi,j=B(ai,j) (2)

实际中这个变换可以转换为查表操作,该表即为AES算法的字节变换表,也成为S盒,字节变换表如表1所示:

表1字节变换表

例如,假设ax,y为字节00,则由上表可得到bx,y=S(ax,y)=63。

在ShiftRow变换中,其原理图如图1所示。设输出为C,C=[ci,j],(0≤i,j≤3)。

则C可以用矩阵表示为

在MixColumn变换中,将ShiftRow中得到的状态阵列的每个列视为GF(28)上的多项式,再与一个固定的多项式03x3+01x2+01x+02进行模x4+1乘法。

设输出为D,D=[di,j],(0≤i,j≤3),则MixColumn也可以写成矩阵乘法:

在AddRoundKey变换中,由密钥扩展模块产生的扩展轮密钥开始作用,将该轮秘钥设为K,K=[ki,j],(0≤i,j≤3),输出结果为E,E=[ei,j],(0≤i,j≤3),则AddRoundKey用矩阵可以表示为:

将(2)、(3)、(4)带入(5)中可以得到

这样就得出了AES算法每一轮输入A与输出E之间的矩阵表示。

(3)优化的AES算法

在式(6)中,计算需要一次xtime运算,一次异或运算。因此,每得到轮变换结果E的一列向量,要进行四次xtime运算,八次异或(不考虑轮密钥的生成)。而通过观察可知,与S[a1,(j+1)%4]、S[a1,(j+1)%4]、S[a2,(j+2)%4]、S[a3,(j+3)%4]相乘的列向量中,只有01、02、03这三个元素,故可以创造一个新的S盒,使其可以通过查表直接得到这四个列向量中每一个元素,这样就能省去四次xtime运算和四次异或运算,每得到轮变换结果E的一列向量只需要就行四次异或运算。通过将表1中数据分别与03,02,01这三个元素进行运算,得到新的字节变换表,如表2所示:

表2优化的AES算法的字节变换表

在使用C语言实现时,将其设为的二维数组Snew[256][3],这样就可以实现通过查表得到这四个列向量中每一个元素。例如的低四位高四位分别对应上表的横纵坐标,由此得到二维数组的行坐标,也就相当于在上表中确定了格子,列向量中2,1,1,3分别对应该二维数组列坐标的1,0,0,2,也就相当于上表格子中的第几个元素。

同样地,在解密时也可以建立一个相似的新的字节转换表,以实现解密的优化。

这种优化的AES加密算法,存储两个新的字节转换表需要256×3×2=1536B=1.5KB。而优化前的AES算法储存两个字节转换表需要256×2=512B=0.5KB,在内存资源的占用上并没有明显的提高,而速度却得到了明显的加快。

【本发明的优点和积极效果】:

本发明通过创建新的S盒,将原本AES算法中每个轮函数中的字节代换(ByteSub)、行移位(ShiftRow)、列混合(MixColumn)的运算过程简化查表的过程,在没有过多增加内存使用量的基础上,大大减小了计算量,使其可以在微控制器上快速实现,同时没有改变算法原本的数学结构,使其的安全性没有丝毫降低。

【附图说明】:

图1是算法整体框图;

图2是ShiftRow变换原理图。

【实例说明】:

在这里为了说明方便,只演示一轮轮变换中的一段16字节数据为例,并假设该段数据的128位均为0,则用矩阵表示为同时假设该轮轮密钥为设输出结果为E,E=[ei,j],(0≤i,j≤3)。则则得到了该轮乱变换的结果,之后再用该结果作为输入进行下一轮,直至最后一轮最后得出密文。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1