控制/MCU
采用通用微处理器实现密码算法虽然灵活性好,但性能不佳,实现速度也较慢。而采用专用ASIC针对特定密码算法进行加速,灵活性不高。RISC结构密码专用微处理器设计是面向通用微处理器与高效密码处理器的结合,在RISC结构中整合了一个密码运算单元,并且这些运算单元是基于可重构的,对它配置不同的信息可以完成不同的算法,该运算单元与算术运算单元ALU并行工作,并访问同一个寄存器文件[1]。RISC体系结构作为计算机设计策略的一种类型己愈来愈多地应用于计算机的体系设计中。RISC结构的指令系统中,采用大量的寄存器——寄存器操作指令,但只有load/store指令可以访问内存。从内存中取出的数据要送到寄存器,在寄存器之间对数据进行快速处理,从而避免了由于频繁访问内存而降低执行速度[2]。RISC指令寻址模式和指令操作都相对简单,这虽然有利于简化微结构实现,但是在进行大量数据流处理特别是密码运算时,由于它需要存储较多的数据,所以必须频繁地利用load/store指令控制数据的进出,这需要占用较多的指令和较多的时钟周期。因此,针对上述问题,本文在32位RISC密码专用微处理器中设计了一个专用存储单元用来存放密码运算的相关数据,在密码运算时可以对其直接访问,大大减少了指令条数,提高了密码运算效率。
1 应用分析
通过对DES、RIJNDAEL、SERPENT、RC6、IDEA等分组密码算法的分析,很多不同分组密码算法具有相同或相似的基本操作运算,或者说,同一基本操作运算在不同的算法中出现的频率也不相同,如表1所示。
因此,为了提高密码运算的执行效率,在密码微处理器中可以设计一个内部的专用存储单元,用来存储密钥和一些特定的配置数据。对专用存储单元的访问要结合密码运算单元的特点才能具有较好的灵活性。因此在本设计中,微处理器完成密码运算时使用专用存储单元,而完成其他运算时则使用数据存储器。这样,既具有了其专用性又保留了其通用性,能够高效地实现密码算法[3]。
2 专用存储单元的设计
2.1 整体结构
密码专用微处理器在支持原load指令和store指令访问数据存储单元的基础上,硬件上又加入了专用存储单元的访问逻辑。专用存储单元与数据存储单元分离独立地存储相应的数据,这样就减少了大量RISC结构中难以避免的寄存器与存储单元交换数据的指令[4]。密码专用微处理器的整体结构如图1所示。
专用存储单元共分为三个模块:S盒模块、密钥模块、bit置换和有限域模块,每一个模块又由一些地址位宽和数据位宽各不相同的RAM组成,如图2所示。
2.2 S盒存储模块
通过对DES、AES、IDEA等41种分组密码算法分析可知,有30种算法使用了S盒替代操作,共计十种不同类型的S盒,十种S盒中为二种以上不同算法所使用的仅有4×4、6×4、8×8、8×32 四种S盒,其他六种不同类型的S盒查表操作可以采用以上四种S盒查表操作或逻辑运算实现[5]。本设计的S盒实现方式是基于查找表LUT(Look Up Table)的实现方式,将S盒查找表存储在RAM中,操作数作为读地址。这种方法占用较多存储单元,但运算速度快,最主要的是它具有可配置性,能满足当前多种密码运算的需要,并且不进行配置时它本身不带有任何算法信息,使得本身更具有安全性。S盒电路结构如图3所示。
2.3 密钥存储模块
密钥存储模块是由一个27×32的RAM组成,通过对如表2所示的多种分组密码算法密钥容量的统计和分析可知,深度为128的存储容量可以满足密码运算中密钥的存储要求。
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]为国防科技大学研制的一款向量结构的密码处理器。
通过对RISC结构进行研究可以发现,寄存器—寄存器的指令特性极大地降低了微处理器对大量存储器中数据的处理效率。因此,结合密码运算的特点及系统需求,本设计将重点放在RISC结构密码专用微处理器在实现密码算法过程中如何减少指令条数上。本文在RISC密码专用微处理器中加入了专用存储单元,用来存储和密码处理相关的数据,如密钥、S盒运算中的LUT数据、有限域乘法中的配置数据及bit置换所用到的控制信息,并扩展和改进了其相应的指令集,减少了指令条数,提高了运算效率。
全部0条评论
快来发表一下你的评论吧 !