RISC结构微处理器专用存储单元的研究与实现
2.3 密钥存储模块
密钥存储模块是由一个27×32的RAM组成,通过对如表2所示的多种分组密码算法密钥容量的统计和分析可知,深度为128的存储容量可以满足密码运算中密钥的存储要求。
在AES算法中每轮要进行轮密钥加,即"异或"运算;在DES算法中,密钥要进行64位减至56位的置换,然后每一轮都要进行移位和压缩置换;在IDEA算法中,在每一轮运算中其子密钥要进行多次的"异或"、模加、模乘。可见密钥或子密钥在密码运算中参与了多种运算。为了减少硬件设计的复杂度,本设计将取出的密钥放入寄存器堆中,以便能灵活地和其他数据进行各种运算。
2.4 置换及有限域存储模块
置换作为扩散的首要手段,在密码算法中得到了广泛应用。例如:在DES中有六种不同种类的置换;Twofish和Serpent中有两种不同种类的置换。本设计的bit置换单元是基于64×64的omega-flip网络,该网络共有11级,在进行数据置换之前,要先对每一级的开关逻辑进行配置。一级omega-flip网络需要N/2bit(即32bit)控制信息决定该级开关的状态(交叉或直通),所以该置换网络进行一次置换需要11个控制信息。如果用通用指令实现这些控制信息,则至少需要6条指令才能完成配置。
分组密码应用中,有限域乘法运算主要在GF(28)、GF(27)及GF(29)域上。其中,在GF(28)域上的乘法运算最为常见,占到了全部有限域乘法的54.14%。有限域乘法电路运算前需要对乘数多项式和不可约多项式进行静态配置,每组136bit,其中128bit为乘法矩阵配置数据,8bit作为不可约多项式配置数据。
由以上分析可知,本设计的bit置换和有限域模块由6个24×32的RAM组成,它一次可以存放六种置换所需要的控制信息,四种有限域运算所需的128bit乘法矩阵配置数据和8bit不可约多项式配置数据。6个RAM都是双端口(即2个读端口),所以给出2个相同的读地址,6个RAM就可以同时读出12个配置数据。64位的bit置换一次需要的11个控制信息只用一条指令就可以完成配置,大大提高了密码运算速度。
2.5指令设计
密码专用微处理器扩展了指令集,增加了密码指令。加入专用存储单元后,由于专用存储单元存放的主要是配置数据,结合运算单元的特点,在扩展的专用密码指令中对原指令格式进行了改进,使之更适合于密码算法。改进后该指令字中的低11位被作为5位的shift域和6位的func域,其指令格式如表3所示。三个模块的数据都由CONFIGURE指令存储到专用存储单元中,密钥和S盒可以直接参与运算,对于置换和有限域乘法,在其密码运算指令的shift域中添加专用存储单元的地址,运算时再将配置信息动态配置到IU运算单元中,这样配置和运算用一条指令就可以完成。
表3中:Op为操作码,Rd为目的寄存器地址,Rs1和Rs2为源寄存器地址。type(1)作为区分bit置换和有限域。addr(4)为置换和有限域模块4bit地址,该4bit地址与该地址加1为bit置换和有限域模块6个RAM的2个读地址,读出的数据直接送入运算单元内部对相应模块进行配置。sboxtype(2)2bit为S盒类型选择,用来区分8×8、8×32、4×4及6×4四种S盒。Sboxa/b(1)这1bit是访问S盒时用来选择RAM组a或RAM组b。
3 性能分析
指令条数是影响性能的关键因素,设计专用密码处理指令的目的就是减少实现过程中的指令条数。由于本设计所基于指令的CPI都为1,故可以通过算法所需的指令数来反映系统处理明文的效率。表4给出了与其他两种处理器所需指令条数的对比情况,表中的I386为32位指令编码的通用处理器,PVCP[6]为国防科技大学研制的一款向量结构的密码处理器。
从表4可以看出,本设计的指令条数与通用处理器指令条数相比减少了78%~90%,与功能相似的向量处理器相比,指令条数也减少了许多。
通过对RISC结构进行研究可以发现,寄存器-寄存器的指令特性极大地降低了微处理器对大量存储器中数据的处理效率。因此,结合密码运算的特点及系统需求,本设计将重点放在RISC结构密码专用微处理器在实现密码算法过程中如何减少指令条数上。本文在RISC密码专用微处理器中加入了专用存储单元,用来存储和密码处理相关的数据,如密钥、S盒运算中的LUT数据、有限域乘法中的配置数据及bit置换所用到的控制信息,并扩展和改进了其相应的指令集,减少了指令条数,提高了运算效率。
- 可适配多路并行移位操作指令及其硬件实现研究(11-08)