1、SEA 加密算法我们今天给大家介绍一种新的分组对称加密算法- SEA(Smart Encryption Algorithm,即灵巧型加密算法)。其核心是一种基于 Markov 转移的具有较强非线性的圈函数,其中还蕴含了两种不相容的群运算,使得算法能达到必要的混乱和扩散。该加密算法全部运算基于字节,占有的存储量低,故易于软硬件实现,特别适合于智能卡上的运用。一、 SEA 加密算法描述SEA 加密算法主体结构为多轮 Feistel 网络结构。该密码算法全部运算基于子节,仅有模256 加和异或两种运算。算法的核心部件是 B 函数,它使得算法具有强非线性特性。以下“+”表示按字节加(即模 256 加)
2、,“” 表示异或。B 函数的输入输出均为 8 字节,64 比特。B 函数的描述为:将输入的 64 比特看作是位矩阵,位矩阵的每一行依次对应一个字节。先根据输入的 64 比特的前 3 比特(确定行位置)和最后 3 比特(确定列位置)确定在位矩阵中的一个初始转换点。然后将输入的 64 比特分组,每 4 比特为一组,称这些分组为转移方向控制组。接下来则从初始转换点开始,按照每组(即转移方向控制组)的值确定的转移方向转移控制规律见图 1。从当前比特位转移到新比特位上去,对被历经的比特位取反。每个转移方向控制组对应一次转移操作。转移操作越界时在位矩阵的边界处反射。反复进行上述操作直到转移操作次数达到给定
3、要求。本加密算法中要求转移次数最少为 16 次,推荐使用 32 次。达到给定的转移次数后,当前的位矩阵即为 B 函数的输出。B 函数的数学描述式为:其中 Dci=a4i-4a4i-3a4i-2 a4i-1 为第 i 次转移时的转移方向控制组, C 为取反操作,t(t16)为转移的总次数。操作过程中,若 i 16,则 i=i- 16 。例如:设当前的转移方向控制组 Dci=1 001,则在图 1 中,本次转移将从中心点跳转到标注为“11 的比特位上,且该比特位取反。接着下一次的转移将以“11”点为中心向它周围的 16 个方向之一跳转。从 B 函数的描述可以看出,输入的 64bit 中若有一个比特
4、位发生变化,则受该比特位所在的转移控制分组的影响,之后的所有转移操作所历经的比特位将发生变化,这就使得输入的一个比特位变化将对输出的多个比特位产生影响,轮迭代时就能更快的产生雪崩效应。设 X,Y,分别为 8 字节的二进制数据块。令 Y=(X0 , X1,X7),Y=(Yo,Y1,Y7)定义圈函数 f 为:由 B 函数的定义可知,B 函数的实质即是产生一个随机数并与输入相异或,即 B(X)=XRnd( X)。那么 f 函数可等价描述为:可见 f 函数中包含了按字节加(即模 256 加)和异或(即模 2 加)两种不相容的群运算。这使得算法具有较强的置乱效果。加密过程:SEA 的加密为 r 轮 Fe
5、istel 网络结构加密。在加密的第 i 轮中,令输人为 Li,Ri(各 8 字节),轮子密钥为 Rk。,轮子密钥长度为64bit。注意,r 轮后输出的左右两半部分不交换。有:解密过程:解密过程是加密过程的逆。由 Feistel 网络结构可知,解密时颠倒白化子密钥和轮子密钥顺序,加密即变成解密。具体过程不再详述。密钥的扩展方案:本加密算法可选的种子密钥长度分别为 128bit,192bit 和 256bit。进行密钥编排时,令 LengthOfKey 为种子密钥长度,取 l= LengthOfKey/64。r 为Feistel 网络结构加密轮数。三种密钥长度下 r 分别取值 6,9 和 12。
6、Rki 为轮子密钥。有:二、雪崩效应测试好的加密算法应使密文的每一位和明文以及密钥的每一位有关,即当明文或密钥有一个比特位发生变化时,密文应有半数左右的比特位发生变化,这就是所谓的雪崩效应。对本算法进行明文的雪崩效应测试时,随机选择 10 000 个明文分组,用几个不同的密钥加密,对每个明文分组变化 1bit 后加密所得的密文进行 x2 拟合优度检定。同理,进行密钥的雪崩效应测试时,随机选择 10 000 个密钥对几个不同的明文加密,对每个密钥变化 lbit 后加密所得的密文进行 x2 拟合优度检定。加密时选择 128bit 长的种子密钥。在不同的显著性水平下,检定达到拟合优度的分组数百分比(
7、设为 )。二者的测试结果如表 1、表 2。三、速度测试在主频为 Pentium 266MHz 的计算机上用 ANSIC 编写的加解密程序进行速度测试。测试结果如下,见表 3。本加密算法的最大特点在于描述简单,没有复杂难懂的计算,这样不仅利于软硬件实现,而且有利于算法的安全性分析。从雪崩效应测试的结果来看,本算法具有良好的明文雪崩效应和密钥雪崩效应,这得益于圈函数的非线性特性设计,它能使输入的一个比特位变化将在 2 轮迭代后影响输出的每一位,因此算法经过较少轮数的迭代后就能达到较高的安全性。但根据速度测试的结果来看,本算法的加解密速度与现有的分组算法相比不是很快,而且当 B 函数中转移次数较大时,加解密速度将进一步受到影响,因此在追求安全性和高效性时,不得不作个折衷。