引言
密码模块作为安全保密系统的重要组成部分,其核心任务就是加密数据。分组密码算法AES以其高效率、低开销、实现简单等特点目前被广泛应用于密码模块的研制中。密码模块一般被设计成外接在主机串口或并口的一个硬件设备或是一块插卡,具有速度快,低时延的特点。而从整体发展趋势来看,嵌入式密码模块由于灵活,适用于多种用户终端、通信设备和武器平台,将会得到更加广泛的应用。基于FPGA实现的嵌入式密码模块与以往的主流硬件实现方式(如DSP芯片、单片机)相比,具有低成本、高速度、微功耗、微小封装以及保密性强等优点,与ASIC相比具有设计灵活、成本低、周期短等优点。另一个明显的优点在于:在对时间代价和空间代价的取舍上,基于FPGA实现的加密技术提供了多种实现方案,分别对时间代价和空间代价有不同的偏重,有利于在各种应用环境中进行优化。硬件实现无论是ASIC方案还是FPGA方案,数据处理速度的提高都离不开优化技术,包括算法轮函数和设计结构的优化。AES算法的快速实现方案包括:优化 S盒的结构(如使用复合域、查表等方法),列混合与密钥加的结合,以及采用流水线技术等。表1为几种典型的AES算法实现性能对比情况。
AES算法结构
AES是一个迭代型的分组密码,包含了轮变换对状态的重复作用。用State表示待加密状态,CipherKey表示初始加密密钥,ExpandedKey表示扩展密钥,其加密过程描述如下:
Round(State,ExpandedKey) --轮变换
{
SubByte(State); --字节代替
表1几种典型的AES算法实现性能对比
ShiftRow(State); --行移位
MixColumn(State); --列混合
AddRoundKey(State,ExpandedKey[i]); --密钥加
}
AES(State,CipherKey)--主函数
{
KeyExpansion(CipherKey,ExpandedKey); --密钥扩展
AddRoundKey(State,ExpandedKey[0]); --模加轮密钥
For(i=1;i FinalRound(State,ExpandedKey[Nr]); --末轮运算
}
在AES的单轮运算中包含了SubByte(字节代替)、ShiftRow(行移位)、MixColumn(列混合)、AddRoundKey(密钥加)四个步骤。图1所示为单轮运算的加/脱密结构。
图1 单轮运算的加/脱密结构
AES算法芯片IP核的完整结构包括:接口模块,密钥扩展模块,控制模块,加/脱密模块。各模块之间的统一调度、协调配合是芯片性能的保证。然而制约芯片吞吐率的瓶颈是加/脱密模块的实现。本文在第三部分着重分析了加/脱密模块实现方案。