APP下载

对Rijndael算法中密钥扩展的优化

2012-02-15王根义

电子设计工程 2012年10期

王根义

(陕西职业技术学院 陕西 西安 710100)

因为Rijndael是AES数据加密新标准的算法中最常用的一种。Rijndael数据加密技术在我国被推行时间较短,而且Rijndael蜜钥扩展技术比较深奥,所以好多学者和数据加密方面工作人员对Rijndael密钥扩展的原理没有掌握,更谈不上创新一种高效的密钥扩展方法来改进密钥扩展工作,本作者抱着推广Rijndael密钥扩展技术,讲清密Rijndael钥扩展原理,提出实现Rijndael密钥扩展的优化方法的目的,特写此论文。

1 密钥扩展的相关概念

Rijndael数据加密钥的过程,所用的子密钥是由一个密钥扩展函数KeyExpansion()用种子密钥产生的,种子密钥也叫初始密钥或主密钥。把一个种子密钥划分成若干块,每一块也叫作一个字,一个字中所含的字节数用N b来表示,这个种子密钥中所含的字数叫作种子密钥的Nk,所有的子密钥和主密钥构成密钥数组W[],共(N r+1)*N b个字节,其中r叫作加密钥的轮数[1-2]。

2 密钥扩展函数KeyExpansion()的实现方案

KeyExpansion()的定义方案如下所示[3-5]:

KeyExpansion(byte[]key, byte[][4]w)

{

copy the seed key into the first rows of w

for each remaining row of w

{

use two of the previous rows to create a new row

}

}

“use two of the previous rows to create a new row” 例程使用2个子例程 (RotWord和 SubWord),以及一个名为 Rcon的常数表(用于“循环常数”)。让我们看一看这三项中的每一项,然后返回到整个KeyExpansion例程。RotWord例程非常简单,它接受 4字节的数组并将它们排列,请注意,由KeyExpansion使用的 RotWord函数与由加密算法使用的非常相似,唯一的区别就是它作用于密钥次序表w[]的单行,而不是同ShiftRows例程作用于整个被加密的状态表 State[]。SubWord例程使用置换表 Sbox,针对密钥次序表 w[]的给定行执行逐字节置换[6]。KeyExpansion运算中的置换方法与加密算法中的置换方法完全相同。要被置换的输入字节分成(x,y)对,该对用作置换表 Sbox的索引。……

登录APP查看全文