S盒的设计原理
S盒的功能就是一种简单的“代替”操作。一个n输入、m输出的S盒所实现的功能是从二元域F2上的n维向量空间F2n到二元域F2上的m维向量空间F2m的映射:F2n――>F2m,该映射被称为S盒代替函数。构造S盒常用的方法有如下3种:随机选择、人为构造和数学方法构造。为保证S盒的密码强度,S盒应越大越好。一般来讲,n和m越大,随机性越好,S盒的密码强度就越大。但n和m越大,S盒的规模和可控编码的宽度也就越大。S盒的随机性可以通过可控编码来实现,通过改变可控编码,一个nm的S盒能够实现:F2n――>F2m的所有的代替函数。
输入为
S盒的硬件实现方法
S盒代替变换实际上就是一组布尔逻辑函数,S盒的输入X就是布尔逻辑函数的自变量,S盒的输出f(x)就是函数值。不同的加/解密算法所使用的S盒代替变换是不同的,为了S盒能够支持不同的加/解密算法,必须能够通过编程改变S盒模块实现的函数关系。在电路规模允许的条件下,应该使S盒模块实现的函数个数尽可能多,最好能够实现输入变量任意的布尔函数。下面给出一个n输入m输出的可编程S盒的设计方法,该S盒能够实现n个输入变量的任意布尔函数。
设x1,x2,…,xn是n个布尔变量,f1(x1,x2,…,xn)、f2(x1,x2,…,xn)、…、fm(x1,x2,…,xn)是x1,x2,…,xn的m个布尔函数,则f1(x1,x2,…,xn)、f2(x1,x2,…,xn)、…、fm(x1,x2,…,xn)都可以表示为下列最小项之和的形式:
电路功能描述与VHDL实现
功能描述
本文用VHDL硬件描述语言在ModelSim上实现了1组88的S盒,并在MAXPLUSII上通过了功能仿真。
S盒的外观电路如图2所示。X是输入,OP是功能选择输入,K0、K1、K2、K3、K4、K5、K6、K7是控制编码,Y是输出。当OP=1时,电路实现1组88的S盒;当OP=0时,电路能同时实现4组64的S盒。通过改变控制编码K1、K2……K7,S盒就可以实现88、64规格的任意布尔函数的变化,实现不同算法中要求不同的S盒功能。用表格说明更能清晰地看出它的功能和实现方式,如表1所示。
VHDL实现方法
S盒电路是一个组合电路, 1组88的S盒有256个最小项,而1组64的S盒有64个最小项,因此1组88 S盒的资源可以实现4组64的S盒,这就是设计中的资源复用,即一套资源实现多种规格的S盒功能。上面给出了具体的电路实现单元,如图3所示。
在电路实现中,共分为4组,1组有64个最小项,由64个相同的电路单元实现。op=1时,实现1组88 S盒的最小项构造;OP=0时,实现4组64 S盒的最小项构造。之后将最小项与静态编码相应位进行与操作,再将结果按位进行或操作,就得到输出Y。
S盒功能仿真结果
S盒的功能仿真在MAXPLUSII上进行,在仿真过程中,S盒的输入数据通过激励赋值,分别针对88规格和64规格给定数据。OP=1时,预期要实现1组88的S盒变换;OP=0时,预期要实现4组64的S盒变换,最终得到的仿真结果与预期结果相吻合。
S盒电路规模和延时估计
S盒的电路规模和延时依赖于实现工艺和生产厂家工艺库,在本设计中,基于台积电0.25um工艺库对上述可编程S盒的电路规模和延时进行了估计,规模约是3300门,延时约是10.73ns。主频在90MHz以下可以在单周期内完成一次S盒变换。
但由于8组256位的静态编码输入在硬件实现上引脚太多,不切实际,上述S盒不能单独以硬件实现,可作为一个IP使用在密码算法可重组系统中。在系统设计中,S盒的输入数据可以从存储器中读取,或承接另一个IP的输出数据。由于此S盒可以兼容1组88规格的S盒和4组64规格的S盒,那么在密码算法可重组系统中,所有用到这两种规格S盒的算法只要这一个S盒就可以满足,节省了整个系统的电路规模,但系统相应的数据处理速度会比较慢。此S盒可以进一步改进,使其在原来基础上再兼容16组44规格的S盒,同时也可以寻找更好的组合逻辑实现方法,把其速度提高,令主频达到100MHz以上。
结语
通过实验,本文用VHDL硬件描述语言实现了1组88的S盒,并兼容4组64的S盒。电路通过了功能仿真及电路性能评估,可以作为相应密码算法可重组系统设计的通用IP来使用,实现了密码算法设计的灵活性,增强了抗攻击能力。