一种改进的Rijndael算法的制作方法

文档序号:7891003阅读:255来源:国知局
专利名称:一种改进的Ri jndael算法的制作方法
技术领域
本发明专利涉及信息安全技术。尤其是用于保护敏感信息的AES (Advanced Encryption Standard) 技术。
背景技术
1997年4月15日美国国家标准技术研究所(NIST)发起征集AES(Advanced Encryption Standard)算法
的活动,并专门成立了 AES工作组。目的是为了确定一个非保密的、公开披露的、全球免费使用的分组密 码算法,用于保护21世纪政府的敏感信息。1997年9月12日在联邦登记处(FR)公布了征集AES候选算 法的通告。AES的要求是比三重DES快而且至少和三重DES—样安全,分组长度为128比特,密钥长度 为128、 192、 256比特。后来,NIST从15个算法中筛选出了 5个AES候选算法,它们是RC6、 Mars、 Rijndael、 Serpent和Twofish。最终,由比利时设计者Joan Daemen和Vincent Rijmen设计的Rijndael算法 胜出。

发明内容
加密解密过程
Rijndael加密算法是分组长度可变、密钥长度也可变的分组密码。分组长度、密钥长度彼此独立地确 定为128、 192、 256比特。
1、 字节转换(SubBytes)
字节转换是一个以字节为单位的非线性取代运算,取代表(S-Box)是经过两个运箅过程而建立,并且是 可逆的。首先找出每个字节在GF(28)中的乘法反元素;接着经过一个仿射(Affine)转换运算,字节取代 (SubBytes)运算对State的影响,经过运算后形成的S-box。
字节取代(SubBytes)转换的反运算计算仿射对应之后的相反运算可得到S"-Box,以此S"-Box做字 节取代(SubBytes)即可。
2、 移行转换(ShiftRows transformation )
在这个转换中,State的每一行以不同的偏移量做环状位移,第0行不动,第一行位移C1个字节,第 二行位移C2个字节,第三行位移C3个字节。位移的偏移量Cl,C2,C3跟区块的数目(Nb)有关,定义如表 1。 移行转换(ShiftRows)运算对于State的影响,如图2。移行转换(ShiftRows)的反运算对第二、第三 及第四行做Nb-Cl, Nb-C2, Nb-C3个字节的环状位移即可。
3、 混列转换(MixColumns transformation)
在这个转换中,把State当作一个存在GF(28)中的多项式。并且对一个固定的多项式c(x)作乘法,如果 发生溢位,则再模余x4+l。表示如下
c(f03';c3 + '0r;c2 + '0r;c + '02'
啦)与一+1互质,令W力=C(,"")。混列(MixColumns)转换的反运算,则是乘上一个特殊的多项式d(x),
('03'x3 + '01';c2 + '0r;c + '02')十d(;c)-'0r c/(x)-'05'x3 + '0D';c2 + '09';c + '0i:'。
4、 轮密钥加(AddRoundKey)
这个运算主要是把每一个冋合密钥(Round Key)透过简单的bitwise EXOR加入到每一个State中 AddRoundKey的逆是它0身。
5、 MixColumns变换的优化技术
针对AES密码最可能成功的攻击来自一个允许时间选择攻击的弱实现P'5。攻击者用不同的密钥并精 确地测量出加密例程所需的时间。如果加密例程被粗心编码,执行时间便依赖亍密钥值,它就有可能推导 出有关密钥的信息。在AES中,这种事情最可能发生在MixColumns例程中,因为有域乘。针对这种攻击 的最稳妥的安全措施是将域乘实现为一个查询表。
乘法所用的常量系数基丁域论的,并且是0x01, 0x02或0x03中的任意一个值。如给定某一列c,其替 代式如下
State
=0x02*State
+0x03*State+0x01 *State[2,c]+0x01 *State[3,c] ,
State[l ,c=0x01 *State
t0x02*State+0x03*State[2,c]+0x01*State[3,c]
State[2,c]=0x01 *State
+0x01 *State+0x02*State[2,c]+0x03*State[3,c]
State[3,c]=0xO3*State[O,c]+OxOl*State+0x01 * State[2,c]+0x02* State[3 ,c]
由以上公式计算出每一个可能的值,从而形成一张表,然后进行类似于S-box的砖匠置换。所以当做 MixColumns变换时只要查表即可,不需要用域乘,这样就增加了差分分析攻击的难度。
6、 子密钥生成优化
子密钥是由密钥导出的,这个过程包含了两个组成部分, 一个是密钥扩展,另一个是轮子密钥的选取, 其基本原理有如下3点[61:
(1) 轮子密钥的比特数总和等于分组长度乘以轮的数目加1,即每分组长128比特,轮数等于10时, 轮子密钥的比特数总和为128x (10+1) = 1408比特。
(2) 密钥扩充为扩展密钥(Expanded Key)。
(3) 轮子密钥是由这些扩展密钥中取出来的,第1轮子密钥由最先Nb个字组成,第2轮子密钥为其次
Nb个字等。
7 、密钥的扩充(Key Expahsion)
扩充后的密钥是一个4-byte的线性数组,表示为W[NbX(Nr+l)],前Nk个字组包含了加密密钥(Cipher Key)。密钥扩充函式和Nk是息息相关的,分为两种情况运作, 一是当Nk小亍或等亍6,另外则是当Nk 大丁-6,以伪码叙述如下
当NkS6时,
KeyExpansion(byte Key[4XNk] word W[NbX(Nr+l)]) for(i=0; i < Nk; i++)
W[i]=(Key[4 X ij, Key[4 X i+1 ], Key[4 X i+2], Key[4 X i+3]); for(i=Nk; i <NbX(Nr+l); i++)
4temp=W[i-l];
if(i%Nk==0)
temp-SubByte(Ro但yte(temp)) A Rcon[i /Nk]; W[i〗=W[i - Nk] a temp;
在上面的子程序中,SubByte(W)传回一个4-byte的字组,这些字组是输入的字组经过S-box的转换所 产生的相对字组。RotByte(W)则是传回经过旋转的字组。
当Nk〉6时, ' KeyExpansion(byte Key[4XNk] word W[NbX(Nr+l)])
for (i=0; i < Nk; i++)
W[i]= (key[4 X i],key[4 X i+1], key[4 X i+2], key[4 X i+3]); for (i=Nk; i < Nb X (Nr+1); i++)
{
temp=W[i - 1〗; if(i%Nk==0)
temp-SubByte(Ro但yte(temp)) A Rcon[i / Nk]; elseif(i%Nk = 4) temp=SubByte(temp); W[i]=W[i - Nk] a temp;
} 一 以上两种情况的相异处在于当NkS6时,(i-4)是Nk的倍数时,对亍W[i-l]先执行SubByte,再执行
EXOR。上述回合常数定义如下
Rcon[i]-(RC[i],'OO,,'OO,,'OO,),其中RC[O]-,Ol,, RC[i]=x(RC[i-l])-x(")。 由以上分析可得出如下公式
RC[i]=randrom[] (RC[i-l]一x(")。
第一次生成RC[I]的时候按照原来的方式利用线性同余法生成伪随机数I,从而选择运算对象rand[I],
具体的公式如下
RC[l]=(RC[I-l])'Random(K)其中k为小于1的任何数
产生Random(K)的函数
Random (n, m, seed, a, b)
{
r0=seed;
for (i=l; i<=n; i++) ri= (a*ri-l+b) modm;
其中将种子参数seed设为计算机当前的日期或者时间;m是一个较大数,可以把它取为2w, w是计 算机的字长;a可以是0.01w和0.99w之间的任何整数;n等于当前(I-1)。这样就可以方便的产生出随机的 参与异或运算的对象rand[I]。密钥生成后把所有的子密钥形成一个表,而在密钥选择阶段同样可以使用随 机函数,打乱子密钥选择的规律性,使生成各列子密钥的过程具有完全的随机性。但是由于算法中用到了 加密者的本地时间作为seed,而解密者不一定与加密者时间统一,为了解决这个问题,决定用数字时间戳 (digitaltime-st|mp)系统,该系统可以让通信双方遵守同样的时间,而算法中只要把取的系统时间加入到 密文里的某个只有双方才知道的特殊位置(或者直接加入明文里加密也可)就可以使解密者很容易地对密文进行解密了。当然,以上方法只能应用在网络中,但是它给Rijndael带来的安全性是前所未有的'并且 跟通信系统紧密联合在一起。
具体实施方式
可将对齐方案在计算机上实现,构成最终系统
权利要求
1.专利申请中提出的首先是对于最可能被攻击的混列进行的优化,使该步骤变成简单的查表而不是域乘,而对于子密钥的生成方面使用了引入了随机函数使密钥的生成和选择变成随机性的,而不是原算法简单的线形选择。
全文摘要
本发明通过深入分析Rijndael算法,改进了算法的几个有可能产生不安全隐患的步骤,首先是对于最可能被攻击的混列(MixColumns)进行的优化,使该步骤变成简单的查表而不是域乘,增加了非线形安全性;而对于子密钥的生成方面我们引入了随机函数使密钥的生成和选择变成随机性的,而不是原算法简单的线形选择,这样就几乎可以完全抵抗线形密码分析的攻击了。
文档编号H04L9/06GK101527627SQ200810034309
公开日2009年9月9日 申请日期2008年3月6日 优先权日2008年3月6日
发明者邵斌彬 申请人:邵斌彬
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1