大家都知道,我们一般使用的加密算法都是是针对十六进制数进行加密的,而人习惯使用十进制数,在相当多的网络通信应用中需要对十进制数信息进行加密。有很多应用要求十进制数的明文位数和加密后的十进制数的密文位数相对应,而不能基于十六进制的加密算法就无法满足这方面的要求,采用十进制数的明文转换成十六进制数的明文进行加密,再将加密后的十六进制数的密文转换成十进制数,其密文的十进制位数将多于十进制数明文的位数,不能满足十进制数明文与密文长度相等的特殊要求。下面我们就给大家介绍一下十进制的加密技术。
一、十进制加密技术其算法原理
AES加密算法是美国的数据加密国家标准,是对称加密算法中加密性能和速度等各项性能指标最好的加密算法。而本文我们基于十进制加密技术的新算法是以AES加密算法为基础,并对AES的四种加密运算进行重新设计,以适应十进制数的直接加密的要求。将AES中的轮密钥加改为轮密钥加密运算控制,不同的密钥加密运算的算法不一样,使加密算法具有随机性。提出了动态密钥的概念,做到了加密解密一次一密,使加密算法具有混沌加密算法一次一密的特点。因此,新算法同时具有AES加密算法、随机加密算法、混沌加密算法的优点。
1、加密中四种运算
该算法以AES加密算法为基础进行设计,对AES算法中的四种加密运算S盒替换(ByteSub)、行移位(ShiftRows)、列混合(MixColumn)、轮密钥加(AddRounds)分别进行重新设计,将AES中的轮密钥加设计为轮密钥运算控制。下面分别对四种加密运算进行介绍:
(1)S盒替换(S-box)
由于本加密算法是基于十进制数,所以S盒的空间为GF(10),相对于AES加密中的S盒GF(256)要小得多。为了使状态在加密过程中得到扩散,我们设计的S盒替换使替换的值与原值有2bit的变化,也就是在每一轮的替换中达到有一半的bit位发生了变化,使每一组状态state在加密过程中得到充分的扩散。我们设计的S盒如图所示:
(2)行移位(ShiftRows)
下表中Nb为状态state的列数,ci为第i行移位的位数。状态根据实际使用情况可分为8位、12位、16位、20位、24位、28位、32位等十进制数,状态中最后3行循环移位的位数如下表所示。即第0行不移位。第1行移位c1位数。第2行移位c2位数,第3行移位c3位数,对与小于4列和大于7列的状态移位要进行特殊处理。
(3)列混合(MixColumn)
十进制数的列混合运算不能使用AES的列混合,AES列混合中的异或加对于十进制数没有可逆性。这里采用线性列混合的加密方法,加密时对每一列的数据进行列混合,得到的结果放回到原来的矩阵中,列混合矩阵见公式1:
列混合的逆矩阵见公式2:
定义1:
对于正整数矩阵A,如果存在正整数矩阵B,使得A*B=Emodm(E为单位矩阵),则称B为A的逆正整数矩阵。
定理1:对于正整数矩阵A,如果gcd(det(A),m)=1,则正整数矩阵A的逆正整数矩阵B存在,且det(A)*B=A*modm(det(A)为A的行列式的值,A*为A的伴随矩阵)。
证明:∵A*A-1=E
设一向量α使得A*α=kmodm,k为一向量,有A-1*k=A*det(A)*k=αmodm
如果存在一矩阵B,满足B=A-1modm
即det(A)*B=A*modm
∵gcd(det(A),m)=1
∴gcd(det(A),m)αA*
根据线性同余式定理
∴矩阵B存在且B=A-1modm
证毕
(4)轮密钥运算控制(ControlRoundKey)
在AES加密算法中,利用密钥与状态对应的字节做异或运算来加密。但是异或运算对于十进制数没有可逆性,所以我们将AES轮密钥加改为轮密钥运算控制,定义了四种运算对状态循环加密运算。轮密钥运算控制程序有四个入口,入口由每一轮加密所使用的密钥的按位的和模上4来确定。该算法中一般要求密钥为32位十进制数,每一轮加密所用的密钥是由密钥扩展函数根据上一次加密所用的密钥扩展得到。轮密钥运算控制的伪代码如下:
ControlRoundKey(State,key,time)
{
i0=len*time;//len为状态长度
enter=0; for(i=i0;i<i0+len-1;i++)
{
enter=(enter+key[i])mod4;
}
for(i=0;i<len;i++)
{
j=(i+enter)mod4;
ifj=0State[i]=(State[i]+key[i+i0])mod10;
ifj=1state[i]=(State[i]-key[i+i0])mod10;
ifj=2State[i]=(State[i]+Box[key[i+i0]])mod10;
ifj=3State[i]=(State[i]-Box[key[i+0]])mod10;
}
}
轮密钥控制中引入的四种运算,不同的密钥其加密运算也不同。其加密强度比AES中的轮密钥加的加密强度大。
2、动态密钥
为了进一步提高加密的强度,笔者在新加密算法中引入动态密钥的概念,动态密钥根据初始密钥、加密通信次数和加密者的身份号ID由动态密钥算法产生每次加密解密的32位十进制数密钥.加密通信次数每通信一次加1,动态密钥算法对加密通信次数敏感,通信双方用通信加密次数做混沌同步参数。使该加密算法具有混沌加密算法的特点,从预付费管理中心到终端设备用动态密钥加密,从终端到管理中心用终端密钥加密。
3、新算法的加密/解密
如果用C代表ControlRoundKey,B代表S-box,S代表ShiftRows,M代表MixColumn,加密流程如下:
CBSMC…BSMCBSC
由于该加密运算中采用的每一种运算都是可逆的,所以对于上面的加密过程只需要对每一种运算求逆即可解密。解密流程如下:
C-1S-1B-1 C-1M-1S-1B-1…C-1M-1S-1B-1 C-1
二、十进制加密算法加密性能分析
我们对该算法的加密性能进行了软件仿真测试分析,分别以12位、16位、20位、32位十进制数为加密分组,进行2到15轮的加密解密运算测试,20位十进制数为加密分组所得测试结果如下。明文对密文的扩散率,密钥对密文的扩散率如图所示:
解密时密文对明文的扩散率,密钥对明文的扩散率如下图所示,从下图中可看出,加密轮数大于4就有很好的扩散性。
本加密算法借鉴了AES加密算法的思想,并对AES算法进行重新设计,适应十进制数加密/解密的要求。此加密算法中重新定义了AES中的S盒置换、行移位、列混合、轮密钥加四种运算,算法结合了AES加密算法、混沌加密算法、随机加密算法的特点,克服了由于密钥、状态为十进制数使空间变小而带来的加密强度降低的问题。其中S盒置换与列混合可以有效地对抗明文的差分攻击与相关性分析,算法对硬件要求低,实现容易,加密解密速度快,加密强度高,具有较高的安全性,该加密算法可广泛用于各种需要十进制数加密的领域。
小知识之十进制
十进制是相对二进制计数法而言的,是我们日常使用最多的计数方法(俗称“逢十进一”),它的定义是:“每相邻的两个计数单位之间的进率都为十”的计数法则,就叫做“十进制计数法”。