我们在之前的文章中就介绍过,AES加密算法是在1997年全世界海选征集评选出来的,当选的Rijndael算法,也就成为了现在的AES加密算法。那么我们今天来了解一下,当时排名第二的Serpent加密算法。

Serpent加密算法简介

Serpent算法是是一个非常经典的SPN式分组密码体制,同时它的安全强度非常高。与Rijndael算法一样,Serpent尚未有重大安全漏洞被发现。但与之相比,Serpent的运算速度要比Rijndael慢上不少,这也是它落选的主要原因之一。

Serpent加密算法

Serpent加密算法的原理

Serpent算法有两个版本,区别是使用SBOX不同,Serpent-0使用DES的SBOX,Serpent-1使用新的SBOX。而SBOX是算法的核心,是一种非线性的运算,XOR/乱序/线性变换都是线性运算,本身加密能力弱,主要用于增强雪崩效应。

SERPENT使用的SBOX是4bit输入4bit输出的。Serpent算法设计了8个SBOX,加密时0轮用sbox0,1轮用sbox1,……,7轮用sbox7,然后8轮用sbox0,……,15轮用sbox7,依次类推。128bit的输入拆分成32份,依次进入sbox输出4x32bit的数据。

128bit数据拆分成32个4bit数据,并行进行SBOX运算的话,速度会大大受影响。硬件实现时候,为了提速,可以将每个SBOX实例化32个实例,然后一个单位时间就可以完成原来32个时间的工作量。

解密时,SBOX使用的顺序与加密相反,7 6 5 4 3 2 1 0 7 6…… 子密钥使用的顺序相反,线性变换与加密时互为反函数。

Serpent加密算法

Serpent在运算时,每个BLOCK的长度是128bit,密钥长度 128/192/256bit可选。

在128bit数据输入后,先进行一次初始置换打乱顺序,然后进行32轮运算后,进行一次最后置换再打乱一次顺序,输出就是运算结果了。

注意,前31轮的运算使用同样的规则,而最后一轮使用特殊的规则,这一点不像DES,DES的16轮运算都是用同样的规则。同DES一样,初始置换和最后置换互为反函数。

初始置换的输入为P(明文),输出为B(0),每一轮的输入为B(n),输出为B(n+1),n为轮数,0~31。最后置换的输出为C(密文)。

Serpent加密算法

Serpent加密算法的优缺点

正如上文所说,Serpent算法的优点就是安全,它的安全性可以与如今广泛使用的Rijndael(也就是现在的AES加密算法)不相上下。但缺点也十分明显,就是其运算速度较慢,尽管官方在不断优化,但还是和主流加密算法有一定的差距。

免责声明:素材源于网络,如有侵权,请联系删稿。