首页

实验报告:混沌同步控制与图像加密

混沌同步控制与图像加密

―――《混沌实验教学平台的设计与实现》中期期报告

(华南师范大学 物理与电信工程学院 指导老师 :李军 学生:王龙杰、张丹伟、杨土炎 ) 摘要:基于混沌系统的某些独特性质,如初值敏感性,本文讨论了混沌理论的两个重要运用,

即基于Lorenz 混沌系统的同步控制和基于Logistic 混沌映射的图像加密。在讨论与分析的基础上,利用MA TLAB 软件进行数值计算与模拟,得到较好的效果。 关键词:Lorenz 混沌系统; 同步控制; Logistic 混沌映射; 图像加密; MATLAB

基于Lorenz 混沌系统的同步控制

一. 引言

混沌是自然界及人类社会中的一种普遍现象, 至今为止, 在学术界对“混沌”还没有统一的被普遍接受的定义。混沌运动是确定性和随机性的对立统一, 即它具有确定性和随机性, 所谓确定性是指混沌运动是在确定性系统中发生的, 可以用动力学方程形式表述, 这与完全随机运动有着本质的区别; 所谓运动具有随机性, 是指不能像经典力学中的机械运动那样由某时刻状态可以预言以后任何时刻的运动状态, 混沌运动倒是像其他随机运动或噪声那样, 其运动状态是不可预言的, 换言之, 混沌运动在相空间中没有确定的轨道。混沌运动对初始状态(条件) 具有敏感的依赖性, 只要对系统施加非常微小的扰动, 就可能把系统从一个不稳定的周期运动转变到另一个不稳定的周期运动上去, 也可能转变到另一稳定的运动状态上, 通过这个特性, 我们可以利用混沌有意义的一面, 而避其有害的一面。Lorenz 系统作为第一个混沌模型, 是混沌发展史上的一个里程碑, 具有举足轻重的地位。对Lorenz 系统的深入研究无疑已经极大地推动了混沌学的发展。

人们发现混沌控制在众多领域中有着广阔的应用前景, 尤其在电子学、电力系统、保密通信和振荡发生器设计等领域有着巨大的应用前景, 因此引起了广泛的重视。由于混沌行为对初始状态的敏感依赖性, 受到噪声、干扰以及系统不稳定的影响, 特别是在混沌同步中, 实际系统中很难观测到混沌同步。自从1990年, Pecora 和Carroll 提出了混沌同步的概念和方法以后, 随着混沌同步研究的不断深入, 混沌控制与同步的研究工作得到了长足的发展, 并逐渐成为混沌与控制领域研究的热点。对于相近的混沌轨道, 通过相同的非线性系统控制, 最终可能导致完全不相关的状态。但在实际应用中, 往往要求控制得到相关的状态或所需要的同步结果, 本文采用了加入反馈控制量的方法使其耦合, 最终达到所要求的同步。在计算机上的仿真结果显示, 能在短时间内实现耦合同步控制。

二. Lorenz系统同步控制

1963 年,Lorenz 在研究大气对流时, 在三维自治系统中发现了第一个混沌吸引子。用动力学变量连续反馈来控制和驱动系统的运动是力学与电子工程中常用的方法。现在我们用一个混沌信号去驱动另一个混沌系统。设驱动系统为Lorenz 系统:

dx

=-c (x -y ) dt dy

=ax -y -xz

dt dz

=b (xy -z ) dt

取驱动信号为Lorenz 系统产生的变量x ,构成响应系统:

du

=-c (u -v ) +u 0dt dv

=au -v -uw +v 0

dt dw

=b (uv -w ) +w 0dt

可以看出,由于系数(u 0,v 0,w 0)的存在,两个系统的初始值是不同的。我们知道,当Lorenz 系统方程中参数取值为:a =28,b =83,c =10 时,系统经过一段时间演化后将会进入混沌状态,那么,如果能够实现这两个系统的同步控制,则相应系统最终也会进入同样的混沌,当然我们希望所需时间越短越好。下面,我们利用MA TLAB 软件进行数值模拟,程序如下:

1. 驱动系统微分方程:

function dY=Lorenz_driven(T,Y)

a=28;b=8/3;c=10;

dY=[-c*(Y(1)-Y(2));a*Y(1)-Y(2)-Y(1)*Y(3);b*(Y(1)*Y(2)-Y(3))];

2. 响应系统:

function [Y1] = Lorenz_response(tspan);

global Y; global T; yinit = [0.1,0.1,20]; y(1:3) = yinit;

tstart = 0; tstep = 0.1; wholetimes = 200; steps = 1; iteratetimes = wholetimes/steps; S=output;

for i=1:iteratetimes

tspan = tstart:0.5*tstep:(tstart + tstep*steps); [t,Y1] = ode45(@Lorenz_driven,tspan,y); y = Y1(3,:); y(1)=S(i+1,2);

tstart = tstart + tstep*steps; results(i,:)=Y1(3,:); end

subplot(3,1,2);

plot(results(:,1),results(:,3),'b-' ); title(' 响应' ); subplot(3,1,3);

plot(Y(:,1),Y(:,3),'k-' ,results(:,1),results(:,3),'b-' ); title(' 驱动-响应叠加 '); for i=1:iteratetimes TT(1,i)=i*tstep; end figure(2); subplot(2,1,1);

plot(T,Y(:,3),'k-' );title(' 驱动' ); subplot(2,1,2);

plot(TT,results(:,3),'k-' );title(' 响应' );

3. 驱动系统的输出: function s=output;

global Y; global T;

tstart = 0; tstep = 0.1; wholetimes = 200; tspan=tstart:tstep:wholetimes*tstep;

[T,Y] = ode45(@Lorenz_driven,tspan,[0.1 0.1 0.1]); s=[T,Y]; figure(1); subplot(3,1,1);

plot(Y(:,1),Y(:,3),'k-' ); title(' 驱动' );

其中,我们设置驱动系统的初值为[0.1,0.1,0.1],而响应系统的初值为[0.1,0.1,20],显然Z 的初值相差很大。在MATLAB 界面窗口输入指令:Lorenz_response ,可以看到以下X-Z 相图图像:

驱动

50

-1050

-50

响应

51015

-1050

-5051015

驱动-响应叠加

-10

-5051015

改变相图的输出平面为Y-Z :

驱动

50

-1550

-10-50响应

51015

-1550

-10-50

驱动-响应叠加

51015

-15

-10-5051015

其对应的Z 的时域响应图像分别是:

驱动

6040

20

0246810响应

1214161820

6040

20

[**************]20

三. 结论

数值仿真的结果表明只要响应系统与驱动系统有相同的方程结构和参数, 无论初值如

何选取, 都能迅速达到两个系统的混沌同步。基于混沌同步的原理, 我们可以提出一种混沌通信设计方案。信息信号调制到混沌变量x(t) 成为混沌传输信号s(x, m) ,只要响应系统与驱动系统满足同步条件, 两个系统就能达到同步, 所以驱动系统的方程结构和参数空间(a, b, c) 的一组数可作为信号解调的密钥, 控制两个系统的同步, 从而将信息信号复原, 实现混沌保密通信。运用控制手段, 能消除初始状态对运动不确定性的影响, 使混沌系统的运动最终按照人们的意愿发展。因此, 开展此类研究对混沌同步控制在实际应用中具有特别重要的价值。

基于Logistic 混沌映射的图像加密

一. Logisitc 混沌

由于混沌系统具有伪随机性、不确定性和对初始条件与系统参数的极为敏感性,其自身的动力学特性使混沌现象天生具备了应用于保密安全的条件,在图像加密领域表现出良好的

应用前景。利用混沌系统的初值敏感性可以提供数量众多、非相关、类随机而又确定可再生的混沌序列作为加密序列。本文选取一种典型的Logistic 混沌序列,如下:

x n +1=λx n (1-x n ) x n ∈[0,1] (1)

该序列具有初值敏感、表现形式复杂、类噪声等特点。这些特性使得混沌序列在分布上不符合概率统计学原理,难以重构和预测,应用于密码学具有保密性强、随机性好、密钥量大、更换密钥方便等特点,是生成密钥流的理想序列。

二. 加密算法

算法原理步骤:

第一步:读取原图像Ximage 为M ×N 参数矩阵,根据Logistic 映射(1),利用密钥key1、key2分别生成两组混沌序列a 和b ,其中密钥即为序列初始值x 0

第二步:按照一定的权重(如4:6)将两组混沌序列叠加,取整并令其值为[0,256],生成置乱矩阵e ,取整算法:

e=round( 256*(0.4*a+0.6*b))

第三步:对原图像进行加密处理。将参数矩阵与置乱矩阵e 中相对应的元素按一定权重叠加(如1:99),生成加密图像Yimage ,即

Yimage=0.01*Ximage+(1-0.01)*e

第四步:解密,即加密的逆过程,但必须知道密钥key1和可用可用key2。 置乱度定义:

衡量图像加密效果的一个最重要的标准是置乱程度,一般定义置乱度(SM )来评估图像的置乱程度,它的计算为

~

SM (X , X ) =

∑∑(x

i =1j =1m

n

m n

ij

-~x ij ) 2

, (2)

∑∑(x

i =1j =1

ij

-r ij ) 2

其中X ={x ij }m ⨯n 表示原始图像,X ={~x ij }m ⨯n 表示置乱图像,R ={r ij }m ⨯n 表示与原始图像相同大小的均匀分布噪声图像。

~

三. 举例与分析

下面以一副256×256的图像lena.gif 为例,根据上述算法利用MATLAB 软件进行图像

加密,加密程序如下:

function jiami clc; clear all ; global M; global N; global Ximage; global Yimage;

Ximage=double(imread('C:\Program Files\MATLAB71\work\lena.gif')); key1=0.1; key=4;

[M,N]=size(Ximage); figure(1)

imshow(Ximage,[]); Ximage=double(Ximage); for (i=1:M) for (j=1:N)

key1=key*key1*(1-key1); a(i,j)=key1; end end key2=0.2; for (i=1:M) for (j=1:N)

key2=key*key2*(1-key2); b(i,j)=key2; end end

x=0.4*a+0.6*b; e=round(x*256); tt=0.01;

Yimage=tt*Ximage+(1-tt)*e; figure(2)

imshow(Yimage,[]); %%置乱度分析

Yimage=double(Yimage);

sx=sum(sum((Ximage-256*rand(M,N)).^2)); DD=sy/sx %置乱度 comeback; %解密

解密程序:

function comeback global M; global N;

global Ximage; global Yimage;

key1=input(' 请输入密钥key1:' ); key=4; for (i=1:M) for (j=1:N)

key1=key*key1*(1-key1); a(i,j)=key1; end end

key2=input(' 请输入密钥key2:' ); for (i=1:M) for (j=1:N)

key2=key*key2*(1-key2); b(i,j)=key2; end end

x=0.4*a+0.6*b; e=round(x*256); tt=0.01;

Zimage=(Yimage-(1-tt)*e)/tt; figure(3)

imshow(Zimage,[]);

程序中密钥key1=0.1,key2=0.2,原图和加密图如下所示,显然加密效果明显,根据置乱度计算公式(2),其置乱度SM=0.8305。

(a)原图像

(b )加密图像

为了恢复原图,必须在MATLAB 界面窗口输入两个密钥,case1:“请输入密匙1:0.1 请输入密匙2:0.1999”;case2:“请输入密匙1:0.1 请输入密匙2:0.2”;case3:“请输入密匙1:0.1001 请输入密匙2:0.2”。从图像中可以看出,基于该算法的图像加密具有很好的保密性,只要密钥稍微有错就不可能成功解。经调试,只要密钥误差超过10就不能完整获得原图。

case1

15

数量级

case2

case3

参考文献:

1. 《The Essence of Chaos》(《混沌的本质》) E.N. 洛仑兹, 气象出版社,北京1997 2. 《精通MATLAB 7》 王正林 刘 明, 电子工业出版社,北京2007

3. 《一种基于混沌映射的图像加密算法》黄怡然,尹成群,华北电力大学学报,第34卷第

4期 2007年7月