在对混沌加密和传统加密特性进行分析的基础上,我们提出了一个基于双密钥的对称加密方案,通信双方使用2个密钥进行加密和解密,一个是只有通信双方才有的私钥,另一个是可以公开的“公钥”。两个密钥通过一个敏感函数产生新的加密密钥或密钥序列,从而实现类似于“一次一密”的加密目标。
一、基于双密钥的加密方案
与传统的对称加密方案相比,基于双密钥的加密方案多了一个动态密钥。通信双方除了使用只有双方才知道的私钥外,还使用一个可以公开的动态密钥。动态密钥的主要作用是用来改变传统对称加密方案中密钥的不变性,并通过敏感函数产生“随机”的密钥或密钥流,使密文与明文之间的相关性不断发生变化,增强系统的安全性能。方案的结构如图1所示。
在上述方案中,私钥k1仍然需要通过专用通道或人工方式进行交换或协商,而k2则由用户A在加密时随机选定,并同密文一起通过公共信道传送给用户B。
在用户A和用户B确定了加密算法E、解密算法D及私钥k1之后,该方案的执行步骤如下:
(1)用户A输入明文M;
(2)用户A选择一个动态密钥k2,并计算K=H(k1,k2);
(3)用户A_利用加密算法E、密钥或密钥流K加密明文M,得到密文C=E(K,M);
(4)用户A把密文C及动态密钥k2发送给用户B;
(5)用户B接收密文C及动态密钥k2;
(6)用户B根据得到的动态密钥k2及私钥k1,计算K=H(k1,k2);
(7)用户B利用解密算法D和计算出的密钥(密钥流)K对密文C进行解密,得到明文M=D(C,K)。
在上述方案中,密钥k1,k2应满足下述条件:
(1)k1与k2无关,即k2的选择对k1没有任何影响,不管给出多少个k2的值都不可能由k2得出k1,反之也成立;
(2)函数H对k1,_k2是敏感的,即k1或k2的微小变化,将造成K值的巨大改变。
二、基于双密钥的加密方案的安全性分析
基于“一次一密密码本”(one-timepad)的加密方案是绝对安全的,因为密码本中的密钥流是真随机产生的,并且每个密钥流只能使用一次,一个密文对所有可能的明文都是等概率的,所以攻击者得到密文后对明文的猜测与没有密文时相比,并没有增加任何知识。
基于双密钥的加密方案虽然不属于传统的“一次一密密码本”,但是通过动态改变密钥k2的值,可以实现类似于“一次一密”的加密目标。实际上,如果函数H满足对k1和k2单射性质,即当k1≠k1′或k2≠k2′时,H(k1,k2)≠H(k1′,k2′),则可以实现真正的“一次一密”,系统的安全性最高。
如果H对k1,k2是敏感的,即k1,k2的微小改变,K=H(k1,k2)都产生巨大的变化,则系统可以提高原加密方案的安全性能。因为密钥的不断变化,将使密文与明文的关联度极大降低,从而使基于统计分析的攻击变得困难或不可行。
在特殊情况下,如果K=H(k1,k2)=k1,即H与k2无关,此时该方案退化成了传统的对称加密方案,则系统的安全性将是原加密方案的安全性。
综上所述,采用新方案将会提高所选用的加密和解密算法的安全性,并且函数H对k1及k2越敏感,方案的安全性越高。
三、基于混沌的双密钥加密方案
为进一步说明上述方案的有效性和安全性,下面给出一个基于Lorenz混沌系统的双密钥加密方案,并对模拟实验结果进行研究和分析。
1、 基于Lorenz混沌系统的双密钥加密算法
Lorenz混沌系统是美国著名气象学家Lorenz在1963年提出的,是第1个混沌的物理和数学模型。该系统对初始条件非常敏感,当初始条件变化只有10-15时,系统运行轨迹的偏差可以达到-30~30,是初始条件误差的1016倍。因此该系统非常适合用来生成敏感函数H。
在下面的实验及分析中,敏感函数H定义为:
其中,k1为混沌系统初始条件;k2为动态密钥;T为采样规则;Fk1,T(t)为采样后的混沌信号;mod是求余运算;abs是求绝对值运算;round是四舍五入运算。
依据上述定义,函数H的输出结果是一个取值在[0,255]的整数序列,适合于流加密。为了便于分析新方案的特性,加密算法E选取简单的流加密算法,密文C由密钥流K=H(k1,k2)与明文M异或得到,即C=E(K,M)=K⊕M。
基于混沌的双密钥加密方案可以描述如下:
(1)用户A输入明文M。
(2)用户A用初始条件k1和Lorenz混沌系统产生混沌信号Fk1(t),并保证它的长度足够加密明文。
(3)用户A选择动态密钥k2,并与采样规则T一起对Fk1(t)进行采样处理,得到加密用的混沌信号Fk1,T(t)。
(4)用户A利用Fk1,T(t)和k2,由函数H生成密钥序列K。
(5)用户A把K与M进行运算,得到密文C=K⊕M。
(6)用户A把密文C和动态密钥k2发送给用户B。
解密方案是加密方案的逆运算,只要用户B正确产生密钥流K,并与C异或即可得到明文M。
2、实验结果及分析
在上述方案中,由于加密和解密算法简单,系统的安全性完全由私钥k1、动态密钥k2、混沌采样规则T和敏感函数H确定。如果系统要具有高的安全性能,以上参数应该满足下面的几个要求:
(1)函数H对密钥k1和k2敏感,使得统计分析不可行。
(2)私钥k1、采样规则T和函数H组成的密钥空间足够大,使穷举攻击不可行。
(3)动态密钥k2有充分的选择空间,使得用户A在每次加密时可以选择不同的k2,实现“一次一密”的加密。
(4)密钥序列中各元素分布是均匀的,以使密文中各元素能均匀分布。
针对上述要求,本文进行了多次试验,并对实验数据进行了分析。
a、函数H对密钥k1的敏感性
根据第一节中的加密算法,函数H产生的是一个密钥序列。设密钥序列的长度为n,Hi(k1,k2)表示H(k1,k2)的第i个元素,1k为k1的误差,序列s={s(1),s(2),…,s(n)}为:
显然,序列s描述了H(k1+1k,k2)_与H(k1,k2)对应位置元素的变化情况。
因此,参数:
反映了在k1发生误差1k时,由H产生的混沌序列中发生变化的元素占序列元素总数的百分比。该参数可以很好地说明H对k1的敏感程度。
由于k1是混沌系统的初始条件,因此对1k_分别取值10-1,10-3,…,10-15,并进行了实验,实验结果见表1。
b、函数H对密钥k2敏感性
在前面的分析中,H的取值是[0,255]中的整数,k1的微小改变造成了H值99.5%以上发生了变化。而传统的加密分析都是对二进制数据进行,为便于对比,本节对H的二进制表示进行分析。该结果同样适用与H对k1的敏感性分析。
H对k2的敏感性,同样以参数p作为评价指标,但序列s定义为:
其中,Hi(k1,k2),Hi(k1,k2+△k2),分别表示Hi(k1,k2)和Hi(k1,k2+△k2)转换为二进制后的第i个元素。实验结果见表2。
从测试结果可以看出,无论是十进制还是二进制表示,函数H对k1和k2都是极其敏感的。当k1,_k2有微小改变时,H的十进制表示有99.5%_以上的元素发生改变,二进制表示平均有49.8%的值发生了变化,充分实现了Shannon信息论中提出的混淆特性。另一方面,从表1还可以看出,混沌初始条件中的每一位对加密都是有效的,并且它们的变化与密钥流的改变并不存在明显的关系,攻击者要想根据参数p的值来判断密钥的误差是很困难的。因此,k1和k2可以很好地用来产生密钥序列。
本文提出了一个基于双密钥和敏感函数的对称加密新方案,给出了一个基于Lorenz混沌系统的实现方案。理论分析和实验结果表明,当私钥k1(Lorenz混沌系统的初始条件)或动态密钥k2发生极小的改变,由敏感函数产生的密钥序列将发生巨大的变化。所以,加密者通过改变动态密钥使得每次加密都用不同的密钥流,从而实现类似于“一次一密”的加密目标。
小知识之密钥加密
发送和接收数据的双方,使用相同的或对称的密钥对明文进行加密解密运算的加密方法。