传统的DES对称加密虽然实现速度也很快但是密钥长度短,易受攻击。而RSA非对称加密的密钥受到素数产生技术的限制,因此很难做到,一次一密运算速度较慢。为此我们针对远程监控中GPRS网络数据传输的安全问题提出的基于Logistic映射的混沌加密算法。
一、运输远程监控网络与数据传输
随着物流行业的发展,运输远程监控越来越成为运输企业进行物流管理的重要手段,通过中央控制管理平台对远距离或异地的设备进行操作和信息收集。运输远程监控平台的组成如图1所示。
该平台的服务器通过GPRS网络与设备终端的数据汇转模块进行通信,网络中的信息是通过自定的TCP/IP协议传输的,设备端通过AT指令集发送到串口,串口利用GPRS模块将其发送给服务器,服务器以二进制流的形式接收和存储信息,所有的关于组网、查询及时实数据等信息都需要通过GPRS网络以TCP数据包的形式传送给服务器,又由于数据包的前面几个字节的内容经常是固定的,所以网络传输成为系统安全的一个极其脆弱的漏洞,尤其是系统的设备端,没有任何防护措施,当外界干扰强烈或遭遇黑客截获信息攻击。服务器或设备时,可能导致服务器端和串口端接收的二进制流信息的某个字符的错位或错误。
在上述情况下,笔者提出在服务器端和设备端加入相同的混沌序列加密算法,以往的混沌加密普遍应用于图像和音频的加密,现在改进算法,使其可对本系统中的文本进行加密。该加密算法运行速度快,满足了信息的及时性,并且由于混沌系统对初始值和混沌参数高敏感性、非线性混沌算法产生的伪随机数的天然性,经过加密后的数据与原数据有非常大的差别,信息发送者能够确保信息安全地传递给接收者,使盗取者得不到正确的信息圈,因此该算法使整个系统的安全性能得到了保障。
二、混沌加密方法与流程
1、混沌的概念
混沌是一种复杂的动力学行为,不是简单的无序,它没有明显的周期和对称,其内部结构丰富是非线性系统的一种新形式。最早的混沌现象是由美国气象学家Lorenz在研究模拟天气预报时发现的。当时,他应用计算机技术把大气的动态方程简化成了三阶非线性方程,结果发现这个确定性方程的动力学演化具有类似随机的性质,因此发现了著名的Lorenz吸引子。目前,大家比较
能接受的对于“混沌”的数学描述是Li- Yorke定义:对于闭区间J,R,设连续映射J—J,如果存在不可数集S J。并满足:
a、S不含周期点;
b、对任意的两个点p,q∈S(p≠q),则有:
c、对任意p∈S及周期点q∈J,且p≠q,则有:
则称F映射在S上是混沌的。
混沌信号具有非周期性、连续宽带频谱和类似噪声特性,使得它具有天然隐蔽性的特点,而由非线性算法产生的混沌信号在加密算法下可以提供数量众多的密钥,用来产生序列密码。序列密码即混沌加密密码,是将明文消息按字符逐位加密,混沌序列是一种非线性序列网同样具有混沌状态的特点,如结构复杂滩以分析和预测。美国科学家Shannon曾证明了OTP(一次一密加密法)理论是不可破译的。混沌序列密码系统的加密端和解密端是两个独立的、完全相同的混沌系统网,两系统间不存在耦合关系。所以,在混沌加密算法下产生的序列密码有很高的安全性能。
2、Logistic映射
一维Logistic映射是一类非常简单的但被广泛研究的动力系统,又称虫口映射最初的数学模型为Xn+l=Xn(a- bXn)。之后为了数学上方便计算令a=b=μ,由此得到如今成熟的关系式:
该模型起初用于描述种群的变化其中Xn表示当年的种群数,Xn+1则是下一年的种群数,μ为增长参数。初始状态XO与参数μ为种子密钥Logistic映射属于一维非线性映射,满足达到混沌状态时所需信号的特点,对研究混沌具有普遍而重要的意义o研究发现,当参数μ在[3.57,4.00]之间时,产生的混沌序列的随机性比较好即混沌效果最佳,仿真对比结果如图2所示。
此外,混沌系统下的Logistic对初始值和参数极为敏感,只要有非常微小的差别,两个同构混注系统在较短的时间后就会产生完全不同、互不相关的混沌序列值。图3是用Matlab仿真了Logistic映射下的混沌系统对初值的敏感性,实线和虚线分别代表初值XO为0.8和0.800001时产生糸混沌序列。可见,经过多次迭代后的数值序列几乎不能和初值为0,8的数值序列重合。
3、基于Logistic映射的混沌加密
Logistic映射既简单又有确定的形式,不包含任何随机因素,但迭代后的结果却是看似完全随机的,而且对参数的动态变化和初值极为敏感。基于这些特点,Logistic映射下的混沌加密算法对文本是安全且无损的。笔者采用对称加密算法,即加解密的密钥相同,计算形式可写成如下表达式:
式中:{cn}——密文信息序列;
{Kn}——密钥信息序列;
{Pn}——名为信息序列。
基于Logistic映射的混沌加密模型采用了轨迹迭代后再进行轨迹映射的加密方法,以密钥作为迭代的初始条件,取一块待加密的明文,计算该明文与迭代后的密钥进行一定的运算得到密文序列。
混沌序列加密设计流程如图4所示,流程描述为:
a、选择合适范围内的密钥,代入Logistic映射方程,产生混沌序列;
b、将该序列与要加密的明文信息进行异或运算,得到的密文由发送端传至接收端;
c、选择相同的密钥,重复步骤a;
d、将步骤c产生的混沌序列与密文序列进行异或运算阴,得到明文序列。
三、加密算法改进与程序实现
远程监控中的服务器是整个系统的“总指挥”,在正常运行过程中,数据汇转模块的单片机通过AT指令集对GPRS模块进行控制然后把数据信息传给服务器,服务器端由后台接收并处理数据,返回给设备端。车辆在行驶过程中,该交互动作一直持续。为了保证数据准确无误地被传送,在传递数据之前加入算法,使加密后的信息达到混沌状态,截获信息者无法简单地从密文中拱出明文影子。通常来说,此时要产生一个由实数构成的序列{Xn}映射成由整数构成的伪随机序列来充当加密密钥。笔者针对在GPRS网络中自拟的TCP/IP传输协议的特点,选取的是经过迭代的Xn小数点的后5位有效数字构成的整数,然后将该整数对256取余与明文逐位进行异或运算构成密文,以下是该加密方法主要部分的C++程序。
double logistic( double u, double Xr int n) //Logistic映射方程,μ和x是密钥
{
for ( int i = O; i < n; i+ +)
{
X=μ* X* (1 -x);
printf( "[%f] , x)
}
return x;
//混沌序列加密过程data数组代表接收和发送的数据包
char* Encrypt( char* data, double u, double x0, char*oEnStr)
{
double x = logistic( u, x0,1000)
int iLen = strlen( data)
if( oEnStr = = NULL )
return NULL;
for ( int i = 0; i ( iLen; i+ +)
oEnStr[0 = ( char) (((( int) ( x * 100000)) %256)“(int) data[i]//取x小数点后5位与明文序列进行异或来生成密钥
printf(”%d“%d=%d”,((jnt)(x*100000))%256, dataa ~] oEnStr0~]
}
return oEnStr;
}
我们设计了一个小的应用程序实验了混沌序列加密算法对数据的加密,并且再一次验证了该算法对密钥初值的敏感性。选取明文信息的一小部分实验加密,当密钥为μ=3.8,x=0.8时,可见加密后的字符串完全与原始字符串不同,解密后便可恢复原文信息。
当参数x为0. 800 001,即使初始值的差值差度为10-6加密后的序列(图5)与参数为0.8时加密后的序列(图6)也有很大差别,与明文序列完全不同。这里的密码分析量和攻击量是很大的,而且破译者无法根据截取密文去重构产生序列密码的混沌系统的动力学模型及初始状态等这对数据信息的保密是很有利的。
在实际系统操作中基于大量明文序列,把该序列转换成ASCII码统计明文信息中的字符概率,从图7、8中可以看出,通过加密,明文随机混乱扩散到整个密文中,并且字符的概率相差不大。
小知识之远程监控系统
远程监控系统是一款远程控制软件,有时可以当木马程序来用。