计算机适宜处理十六进制数,即二进制,加密算法一般针对十六进制数进行设计,加密通信中密文一般由通信线路传送,其加密技术已很成熟。但在某些应用中,因为通信双方没有直接联系,密文由人传送,属于免介质通信,所以对密文的进制和分组长度有很严格的要求,要求短分组的十进制密文能表示最大信息量。进制转换很容易实现,但通过进制转换得到的固定长度密文不能表示最大信息量。因此,进制转换得到的十进制数密文不能表示最大信息量。为此基于AES的短分组加密技术很好地解决了此问题,本文对其进行了研究,并提出了改进方案。
一、短分组加密算法的4种运算及加密/解密
基于AES的短分组加密算法以AES为基础,并对AES的4种加密运算进行重新设计,以满足实际应用中对短分组加密的要求。将AES中的轮密钥加改为轮密钥运算控制,不同的密钥加密运算的轮密钥运算控制算法不一样,使加密算法具有随机性。提出了动态密钥的概念,做到了加密解密一次一密,使加密算法具有混沌加密算法一次一密的特点。因此,该算法同时具有AES加密算法、随机加密算法、混沌加密算法的优点。下面分别对短分组加密算法中的4种加密运算及加密/解密过程进行简要介绍。
1、S盒替换(S_box)
短分组加密算法采用的S盒是一位十进制S盒,S盒的空间为GF(10),为了使状态在加/解密时得到较好的扩散,该S盒替换使替换值与原值有2bit的变化。该S盒如图1所示。
2、行移位(ShiftRows)
表1中Nb为状态state的列数,ci为第i行移位的位数。状态根据实际使用情况可分为8位、12位、16位、20位、24位、28位、32位等十进制数。状态中最后3行循环移位的位数如表1所示,即第0行不移位,第1行移位c1位数,第2行移位c2位数,第3行移位c3位数。对与小于4列和大于7列的状态移位要进行特殊处理。
3、列混合(MixColumn)
AES列混合中的按位异或加对于十进制数没有可逆性,短分组加密算法的列混合采用线性列混合的加密方法。加密时对每一列的数据进行列混合处理,得到的结果放回到原来的矩阵中。记加密中列混合矩阵为A,解密中逆列混合矩阵为B,A和B是互逆正整数矩阵[1],即A*B=Emod10(E为单位矩阵)。
该短分组加密算法采用的列混合矩阵见式(1)。
该短分组加密算法采用的逆列混合矩阵见式(2)。
4、轮密钥运算控制(ControlRoundKey)
由于异或运算对于十进制数没有可逆性,因此该短分组加密算法将AES轮密钥加改为轮密钥运算控制。轮密钥运算控制程序有4个入口,不同的入口对应不同的运算。入口由每一轮加密运算所使用密钥的按位的和模上4来确定[3]。每一轮加密所用的密钥是由密钥扩展函数根据上一轮加密所用的密钥扩展得到。
5、短分组加密算法的加密/解密
用C代表ControlRoundKey,B代表S_box,S代表ShiftRows,M代表MixColumn,加密流程如下:
CBSMC…BSMCBSC
由于该短分组加密运算中采用的每一种运算都是可逆的,因此解密流程如下:
C1S1B1C1M1S1B1…C1M1S1B1C1
二、新S盒的设计
基于AES的短分组加密算法的S盒运算是一个独立作用于状态单元的非线性变换,短分组加密算法采用的是一位十进制S盒,其S盒空间为GF(10),由于该S盒的运算域比AES的S盒GF(256)小得多,因此S盒的非线性和扩散性并非很高。从安全性的角度考虑,目前对AES最为可行的攻击方法就是设计者自己提出的Square攻击,该短分组加密算法和AES具有类似的结构,算法的行移位、列混合和轮密钥运算控制的基本加密运算域是一位十进制数,如果S盒运算也采用一位十进制数替换,就很容易使用改进的Square攻击算法对其实施攻击,并且攻击的复杂度大大低于AES的相应攻击,其安全性受到一定的威胁。
为了有效提高该加密算法的扩散性和安全性,本文设计了一种新的、两位十进制数S盒,S盒的空间为(100)GF。新S盒运算包括在有限域(100)GF中的求乘法逆运算和在域(10)GF下的仿射变换运算两个步骤。其中,求逆运算是将两位十进制数看作域GF(100)的元素,求其在十进制不可化约多项式m(x)=x2+1下的逆,而仿射变换是求逆结果与GF(10)上矩阵M相乘然后与向量I相加。其中,M=;向量I=(2,3)T。S盒运算具体过程如下:
(1)在GF(10的2次方)域,求乘法的逆运算,即对于α∈GF(10的2次方)求β∈GF(10的2次方),使α*β=β*α≡1mod(x2+1);
(2)在GF(10的2次方)域作仿射变换:
通过计算得到GF(10的2次方)域上各个元素的逆元。规定0元素的逆为其自身。经过仿射变换,得到的新S盒如表2所示。
从表2可以看出,GF(10的2次方)域上各个元素的S盒替换值遍历整个GF(10的2次方)空间。通过作仿射变换,很好地消除了不动点和对立不动点。
三、S盒改进前后加密性能比较
1、S盒改进前后加密算法安全性比较
短分组加密算法是以AES为基础设计的,秉承了AES的许多特点。该算法每一轮的加密分为S盒替换、行移位、列混合和轮密钥运算控制4个步骤。加密运算的基本域是状态中的一位十进制数。目前,Square攻击是对AES最为有效的攻击方法。经研究发现,对于此短分组加密算法可以使用改进的square算法进行攻击。描述改进square攻击算法,需要定义2个概念:Λ集和平衡。
定义1:Λ集是一个包含101个状态的集合,这些状态在某些十进制位(称为活动位)上两两互异(遍历位所有可能取值),而在其他位(称为非活动位)上则完全相同。亦即对任意状态,AB∈Λ有:
定义2: 包含110个状态的集合P在某个位置(i,j)上是平衡的,当且仅当所有状态该位置上的位模10加结果为0或5,即位(i,j))是平衡的。
显然,Λ集的活动位是平衡的,但某个位置上的位是平衡的并不意味着该位是活动的。
改进的Square-4攻击要求选择10个明文构成一个1Λ集,记为0P。经过初始轮轮密钥运算控制、第1轮的S盒替换及行移位后,0P经运算产生的中间结果仍旧构成一个1Λ集。但由于列变换的扩散性,列混合使活动性扩散到此列所有位单元上,因此第1轮变换的结果是一个4Λ集,4个活动位在同一列上。第2轮行移位后,4个活动位分散到4列上,列混合的结果是一个16Λ集。
因为活动位的线性叠加结果并不意味着是活动的,所以第3轮列混合的结果可能不再是一个Λ集。
但由于S盒替换和行移位都是一一映射,并且线性的列混合和轮密钥运算控制都不影响平衡性。第3轮结果3P即第4轮输入的16位状态仍旧是平衡的。经过第4轮S盒替换的非线性运算,这些位的平衡性被破坏了。这种平衡性的变化可用于猜测第4轮的轮密钥。
可见,改进的Square攻击完全可以攻击简化的4轮、5轮及6轮短分组加密算法,并且攻击的时间复杂度和数据复杂度都远远低于AES的相应攻击,因此采用一位十进制数S盒的加密算法安全性受到一定的威胁。
将新的S盒应用于此短分组加密算法中能够很好地提高其安全性。由于新S盒是两位十进制数的S盒,因此S盒运算对状态中的两位十进制数一起操作,即S盒替换的基本运算域是两位十进制数。而行移位、列混合及轮密钥运算控制的基本运算域是一位十进制数。在第1轮加密后,1P状态中的某些位的活动性和平衡性可能已经遭到破坏,这样就无法直接采用改进的Square攻击算法进行攻击,从而大大增加了Square攻击的难度,提高了该短分组加密算法的抗Square攻击能力,安全性得到增强。通过研究发现,改变S盒的大小或者改变行移位的运算域,_Square攻击所利用的平衡性将不再存在,从而可以提高加密算法的抗Square攻击能力,而该结论同样适用于AES。
2、S盒改进前后加密解密扩散率比较
将新的两位十进制S盒替换短分组加密算法原有的S盒,并对替换前后的加密解密扩散率进行了软件仿真测试分析,分别以12位、16位、20位、32位十进制数为加密分组,进行2到15轮的加密解密运算测试。下面是20位十进制数为加密分组所得测试比较结果。改进前后文件加密过程中明文对密文扩散率比较结果如图2所示,密钥对密文扩散率比较结果如图3所示。
改进前后解密过程中密文对明文扩散率比较结果如图4所示,密钥对明文扩散率比较结果如图5所示。
可以看出,增大S盒后,加密解密扩散率的各项指标均有明显提高。其中加密过程中明文对密文扩散率提高了3.3%,密钥对密文扩散率提高了25%;解密过程中密文对明文扩散率提高了1%,密钥对明文扩散率提高了1.5%。由此 得出,加密性能很大程度上取决于S盒的大小。在存储空间、运算速度等条件允许的情况下,适当地增大S盒使加解密过程中的状态得到很好的扩散,加解密性能得到了明显的提高。
本文简要介绍了基于AES的短分组加密技术,在此基础上指出原S盒太小是加密性能难以提高的原因。通过求逆、作仿射变换设计出了新的S盒,并将新设计的S盒应用于短分组加密仿真系统中,通过分析发现新S盒的应用大大提高了该加密算法的抗Square攻击能力,安全性得到了加强。通过仿真测试分析发现新S盒的应用使系统加密解密扩散率得到明显提高。在存储空间、运算速度等条件允许的情况下,适当地改变S盒的大小或者改变行移位的运算域,使得Square攻击所利用的平衡性将不再存在,从而可以增强短分组加密算法的抗Square攻击能力,使加密算法的安全性和扩散性得到提高,而这种改进对加密性能的影响同样适用于AES等分组加密算法。
小知识之S盒
S盒用在分组加密算法中,是非线性结构,其密码强度直接决定了加密算法的好坏。
S盒的功能就是一种简单的“代替”操作。一个n输入、m输出的S盒所实现的功能是从二元域F2上的n维向量空间F2到二元域F2上的m维向量空间F2的映射:F2——>F2,该映射被称为S盒代替函数。
构造S盒常用的方法有如下3种:随机选择、人为构造和数学方法构造。