新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 基于MC9S08JS16和AES的USB Key设计

基于MC9S08JS16和AES的USB Key设计

作者:时间:2010-12-15来源:网络收藏


的主循环对State矩阵执行4个不同的操作,规范中被称为SubBytes(字节替换)、ShifiRows(行位移变换)、MixColumns(列混合变换)和AddRound(轮密钥加)。加密算法使用了一个由种子密钥字节数组生成的密钥调度表,规范中称之为密钥扩展例程(Expans-ion)。
下面简单分析AES(128 bits密钥)的加密过程:

SubBytes例程是一个代替操作,它将State矩阵中的每个字节替换成一个由Sbox决定的新字节,Sbox是初始化的1个16x16的矩阵。比如State[0,1]的值为0xXY,则被替换为Sbox表中Sbox[X,Y]的值。
ShifiRows是一个置换操作,它将State矩阵中的字节向左旋转。State的第0行向左旋转0个位置,State的第1行向左旋转1个位置,State的第2行向左旋转2个位置,而第3行则向左旋转3个位置。
MixColumns列混合变换过程,在该变换中将状态的每列视为有限域GF(28)中的多项式且被一个固定的多项式
,GF代表伽罗瓦域,将其用矩阵形式表示为:

乘积矩阵中的每个元素是系数矩阵中第i行元素与State矩阵第j列元素State[j]的乘积之和。这里的加法和乘法都定义在有限域GF(28)上;加法即按位异或,乘法遵循GF(28)上的多项式乘法规则。
AddRound轮密钥加过程,State矩阵中的元素通过与一个轮密钥进行逐位异或而得。
KeyExpansion密钥扩展例程,用于产生密钥调度表W[]。例程用到了2个子例程RotWord和SubWord以及1个轮常数表Rcon。RotWord将接收1个4字节的数组并将它们向左旋转1位,SubWord例程使用替代Sbox对给定的一行密钥调度表进行逐字节替换。该过程的循环为:

2.3 AES加密算法的优化
从式(1)矩阵函数可以看出,在软件实现过程中,只需关注如何实现State矩阵元素在GF(28)中与OxO1,0x02,0x03的乘法和加法。GF(2 8)中用0x01的乘法相当于普通算数中用l做乘法并且结果也同样,任何值乘以0x01等于其自身;用0x02做乘法,只要被乘的值小于0x80,这时乘法的结果就是该值左移一比特位,如果被乘的值大于或等于Ox80,这时乘法的结果就是左移一比特位再用值Ox1b异或,它防止了”域溢出”并保持乘法的乘积在范围以内;用0x03做乘法时可以分解为2的幂之和,即0x03=0x02+Ox01。对程序进行优化,采用查表法,将16x16的Sbox表分别与Ox01,0x02,0x03相乘产生与Sbox相对应的3个256字节表:XtimeSbox[256]=Sbox[256],Xtime2Sbox[256],Xtime3Sbox[256]。将产生的表存储于code区。MixColumns过程与SubByte操作可通过以下程序完成:



关键词: AES Key MC9 S08

评论


相关推荐

技术专区

关闭