基于混沌系统的文本加密算法研究(一)——混沌及混沌加密的基础知识
前言
本科毕业设计弄的是文本混沌加密,从数学学院跑去其他学院读了研究生之后,太久没敲过代码,手痒闲来无事,把自己做过的东西放上来。虽然极为初级简陋,但也可以给初入门的学习者提供一些参考。其实文本加密与图像加密的原理完全相同,只是前期对文本和图像的处理稍有不同而已,因此本文提到的所有方法稍微调整后都可以用于图像加密(当然代码上会有很多细节之处不同,因此不建议直接用于图像加密)。
(以下内容copy自毕业论文的摘要部分,懒惰使人无所不能~~)
随着国民经济的快速发展以及互联网的广泛应用,电子商务和电子政务得以迅速普及,大量的电子文本信息需要通过计算机网络进行传输。如何确保文本信息在传输过程中的安全性也成为了人们关注的焦点。混沌系统具有很多出色的密码学特性,如初值敏感性、局部不稳定性以及内在随机性等,使其与密码学之间存在着很强的相关性。本文以混沌理论为基础,选择合适的混沌系统作为混沌密码发生器,对文本加密算法进行研究。为此,本文做了以下的工作:
第一,介绍混沌和混沌密码学的基础理论,介绍算法性能的分析指标,为后续的文本混沌加密奠定基础。
第二,介绍经典混沌映射,通过数值仿真,对Logistic映射、Henon映射以及Lorenz映射的动力学特征和重要参数进行研究。
第三,介绍Hodgkin-Huxley模型,通过将Lorenz系统生成的混沌信号作为外部刺激电流,对神经元的放电规律以及Hodgkin-Huxley模型的混沌性质进行研究。
第四,基于置乱和扩散机制,设计了一个典型的文本混沌加密算法,并在该算法中使用经典混沌映射以及Hodgkin-Huxley模型对文本进行混沌加密,利用算法性能分析指标对传统的DES算法以及文本混沌加密算法的性能进行详细的比较分析。与传统加密算法相比,典型的文本混沌密码系统具有更快的加密/解密速度、更大的密钥空间以及较强的明文敏感性。但DES算法以及典型的加密算法均不具有密文敏感性。针对该缺陷,本文最后设计了一个改进的文本混沌加密算法,并以Hodgkin-Huxley模型为例,对改进前后的两个算法进行了比较分析,实验结果表明改进算法具有较强的密文敏感性。
关键词:混沌;文本加密;Hodgkin-Huxley模型
后续会将论文所做的东西按下面的目录写出来。直接截图自论文的目录部分。由于篇幅原因,第一章略过,从第二章开始介绍。
![]() |
![]() |
本文将首先介绍上图目录中的第二章,混沌与混沌文本加密的相关理论。后续将继续发布文章对其他内容进行介绍。本章将介绍混沌与混沌文本加密的基本概念。从混沌的定义出发,对混沌的基本特征以及混沌系统的李雅普诺夫计算进行介绍;对文本混沌加密的流程框架、常用的置乱扩散算法以及算法的性能分析指标进行介绍,为后文的文本混沌加密奠定基础。
一、混沌的定义
混沌(Chaos)是一种存在于确定性系统中的类似随机但实际上有自身既定规律的现象。迄今为止,混沌还没有一个被普遍接受的定义。目前,被学者们公认的数学定义有两个:一个是李天岩和Yorke于1975年发表的《Period Three Implies Chaos》一文中提出的Li-Yorke定义;一个是Devaney于1989年提出的Devaney定义。虽然两种定义从不同的角度出发分析混沌问题,但本质上是都是对混沌运动性质的反映。
1、Li-Yorke定义
设f是区间I上的连续自映射,若满足下面条件,则可确定f有混沌现象:
(1)f的周期点的周期无上界;
(2)f的定义域存在不可数子集S,满足:
i.
∀
x
,
y
∈
S
\forall x, y \in S
∀x,y∈S,当
x
≠
y
x\neq y
x=y时,有:
lim
n
→
∞
s
u
p
∣
f
n
(
x
)
−
f
n
(
y
)
∣
>
0
(1)
\lim_{n\to \infty}sup|f^{n}(x)-f^{n}(y)|>0 \tag{1}
n→∞limsup∣fn(x)−fn(y)∣>0(1)ii.
∀
x
,
y
∈
S
\forall x, y \in S
∀x,y∈S,有:
lim
n
→
∞
i
n
f
∣
f
n
(
x
)
−
f
n
(
y
)
∣
=
0
(2)
\lim_{n\to \infty}inf|f^{n}(x)-f^{n}(y)|=0 \tag{2}
n→∞liminf∣fn(x)−fn(y)∣=0(2)iii.
∀
x
∈
S
\forall x \in S
∀x∈S和任意周期点y,有:
lim
n
→
∞
s
u
p
∣
f
n
(
x
)
−
f
n
(
y
)
∣
>
0
(3)
\lim_{n\to \infty}sup|f^{n}(x)-f^{n}(y)|>0 \tag{3}
n→∞limsup∣fn(x)−fn(y)∣>0(3)
2、Devaney定义
Devaney在1989年给出了混沌的另一个定义:
设V是一个度量空间,称一个连续映射
f
:
V
→
V
f:V\to V
f:V→V在V上混沌,如果:
(1)f具有对初始条件的敏感依赖性:
∃
δ
>
0
\exist \delta > 0
∃δ>0,
∀
y
∈
V
\forall y \in V
∀y∈V,
∀
ϵ
>
0
\forall \epsilon>0
∀ϵ>0,在y的
ϵ
\epsilon
ϵ邻域内存在x以及自然数n,使得:
d
(
f
n
(
x
)
,
f
n
(
y
)
)
>
δ
(4)
d(f^{n}(x),f^{n}(y))>\delta \tag{4}
d(fn(x),fn(y))>δ(4)(2)f是拓扑传递的:对于V上的任意一对开集X、Y,存在
k
>
0
k>0
k>0,使得:
f
k
(
X
)
∩
Y
≠
∅
(5)
f^{k}(X)\cap Y \neq \empty \tag{5}
fk(X)∩Y=∅(5)(3)f的周期点在V钟稠密;
二、混沌的基本特征与李雅普诺夫指数的计算
1、混沌的基本特征
混沌系统存在以下特有的基本特征:
(1)初值敏感性。两个相差微小的初始值,在经过充分的迭代后,它们的运动轨道会产生很大的差距。
(2)有界性。混沌是有界的,它的运动轨线始终局限在确定的区域内。
(3)遍历性。即混沌系统在有限的区域内运动时,其运动轨迹不会在区域内重复出现。
(4)分维性。即混沌运动的维数不是经典欧式空间中几何对象维数的整数维,而是分数维的。
(5)内在随机性。即在确定的非线性动力系统中产生的随机特性。
(6)统计特性。统计特性是指混沌系统具有正的李雅普诺夫指数以及连续功率谱等。
(7)局部不稳定性。即混沌系统的混沌轨道存在相互排斥的现象。
2、李雅普诺夫特征指数及其计算
混沌系统具有对初始值以及控制参数的敏感性,两个相差微小的初始值经过充分的迭代后,它们的运动轨迹会产生指数分离的现象。用李雅普诺夫指数进行衡量,当其值由负变正,则表明系统由稳定的周期运动向非周期的混沌运动转变。下面介绍一维和高维映射的Lyapunov指数计算公式。
(公式太多,计算公式截图自论文)
![]() |
![]() |
当然,这些都是混沌映射的Lyapunov指数的理论计算公式,对于具体的混沌映射,随着维数的增加,更多地使用数值计算的方法计算Lyaounov指数,后面会对数值计算方法进行介绍。
三、混沌文本密码系统
一般地,设计密码系统时需要遵循Shannon提出的“混乱”和“扩散”这两个基本原则。结合置乱和扩散算法,将混沌系统用于密码系统中,构造基于混沌映射的文本加密算法。基于混沌系统的文本加密与解密方案如下图所示:
本文设计的典型的文本混沌加密算法属于对称密钥中的序列密码系统。加密算法和解密算法中的“置乱”是指对文本的字符的坐标信息进行变化,但每个字符的ASCII码保持不变;一般通过某个混沌系统生成置乱密码序列,然后通过序列的值选择文本中相对应的字符对,并进行两者位置的互换。 “扩散”是指不改变字符的位置,而是通过混沌系统生成相应的扩散密码序列,通过异或、加取模等操作从而改变字符的ASCII码,使得任一字符的ASCII码信息影响尽可能多的其他字符的ASCII码值。
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套单字节编码系统。在本文中,文本均采用ASCII码单字节编码系统,每个字符的长度均为一个字节,ASCII码均位于0~255之间。文本中所有字符的ASCII码,按从左到右、从上到下的顺序展开构成一个列向量,记为P,其大小记为m*1。
(这是本文的核心假设,所有的代码都基于这个设定。通俗地、不严谨地讲,就是对英文文本进行加密解密)
下面对本文使用的置乱和扩散算法进行介绍。
1、置乱算法
常用的一维置乱算法包括一维随机置乱、一维无重复置乱以及借助Arnold伪随机矩阵置乱等。本文采取的置乱算法为一维无重复置乱。
一维随机置乱是指利用混沌系统生成长度为
m
∗
1
m*1
m∗1的伪随机序列
{
X
i
}
,
i
=
1
,
2
,
…
,
m
\{X_{i}\},i=1,2,\ldots,m
{Xi},i=1,2,…,m,然后依次将明文P中的
P
(
i
)
P(i)
P(i)和
P
(
X
i
)
P(X_{i})
P(Xi)交换位置,得到加密后的密文。但在一维随机置乱中,有些字符会被多次交换位置,而有些字符可能保持不变,无重复置乱方法可以避免这些问题。借助于混沌系统产生长度为
m
∗
1
m*1
m∗1的伪随机序列
{
X
i
}
,
i
=
1
,
2
,
…
,
m
\{X_{i}\},i=1,2,\ldots,m
{Xi},i=1,2,…,m,然后将序列中重复出现的只保留一个,将集合
{
1
,
2
,
…
,
m
}
\{1,2,\ldots,m\}
{1,2,…,m}中没有出现在X中的数值按由小到大的顺序添加到X的末尾。最后,将
P
(
X
i
)
P(X_{i})
P(Xi)和
P
(
X
m
−
i
+
1
)
P(X_{m-i+1})
P(Xm−i+1)交换位置,得到加密后的密文。
2、扩散算法
常用的扩散算法包括基于异或运算的扩散处理、基于加取模运算的扩散处理以及基于有限域
G
F
(
2
n
)
GF(2^{n})
GF(2n)的扩散处理等。本文采用的扩散算法为基于有限域
G
F
(
2
n
)
GF(2^{n})
GF(2n)的乘法运算的扩散处理。
高级加密标准(AES)使用有限域
G
F
(
2
8
)
GF(2^{8})
GF(28)上的运算来进行加密解密。把每个字节(8比特)看成是有限域
G
F
(
2
8
)
GF(2^{8})
GF(28)中的元素,字节
b
7
b
6
b
5
b
4
b
3
b
2
b
1
b
0
b_7b_6b_5b_4b_3b_2b_1b_0
b7b6b5b4b3b2b1b0对应的多项式为:
b
7
x
7
+
b
6
x
6
+
b
5
x
5
+
b
4
x
4
+
b
3
x
3
+
b
2
x
2
+
b
1
x
1
+
b
0
b_7x^7+b_6x^6+b_5x^5+b_4x^4+b_3x^3+b_2x^2+b_1x^1+b_0
b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x1+b0。对于有限域
G
F
(
2
8
)
GF(2^{8})
GF(28),选定不可约多项式为
m
(
x
)
=
x
8
+
x
4
+
x
3
+
x
+
1
m(x)=x^8+x^4+x^3+x+1
m(x)=x8+x4+x3+x+1,对系数为
G
F
(
2
8
)
GF(2^{8})
GF(28)上的元素的多项式
a
(
x
)
=
∑
i
=
0
7
a
i
x
i
a(x)=\sum_{i=0}^7a_ix^i
a(x)=∑i=07aixi和
b
(
x
)
=
∑
i
=
0
7
b
i
x
i
b(x)=\sum_{i=0}^{7}b_ix^i
b(x)=∑i=07bixi,其加法和乘法运算规律为:
加法运算为字节的异或运算:
a
(
x
)
+
b
(
x
)
=
∑
i
=
0
7
(
a
i
⊕
b
i
)
x
i
(16)
a(x)+b(x)=\sum_{i=0}^7(a_i\oplus b_i)x^i \tag{16}
a(x)+b(x)=i=0∑7(ai⊕bi)xi(16)乘法运算为先进行多项式相乘,再将结果模不可约多项式
m
(
x
)
m(x)
m(x):
a
(
x
)
×
b
(
x
)
=
a
(
x
)
×
b
(
x
)
m
o
d
m
(
x
)
(17)
a(x)\times b(x)=a(x) \times b(x) \, mod \,m(x) \tag{17}
a(x)×b(x)=a(x)×b(x)modm(x)(17)对于加法运算,正向扩散时,借助于(18)式,正向扩散的逆运算如式(19)所示;逆向扩散时,借助于式(20),逆向扩散的逆运算如式(21)所示。
C
i
=
C
i
−
1
+
S
i
+
P
i
(18)
C_{i}=C_{i-1}+S_{i}+P_{i} \tag{18}
Ci=Ci−1+Si+Pi(18)
P
i
=
C
i
−
C
i
−
1
−
S
i
(19)
P_{i}=C_{i}-C_{i-1}-S_{i} \tag{19}
Pi=Ci−Ci−1−Si(19)
C
i
=
C
i
+
1
+
S
i
+
P
i
(20)
C_{i}=C_{i+1}+S_{i}+P_{i} \tag{20}
Ci=Ci+1+Si+Pi(20)
P
i
=
C
i
−
C
i
+
1
−
S
i
(21)
P_{i}=C_{i}-C_{i+1}-S_{i} \tag{21}
Pi=Ci−Ci+1−Si(21)式(18)至(21)中的“+”和“-”均为
G
F
(
2
8
)
GF(2^{8})
GF(28)上的加法和减法。
对于乘法运算,在有限域
G
F
(
2
8
)
GF(2^{8})
GF(28)中,由于0作为乘数时有信息的损失,因此一般
G
F
(
2
8
)
GF(2^{8})
GF(28)域乘法运算不能直接应用于扩散算法,而是借助于
G
F
(
257
)
GF(257)
GF(257)域的乘法运算进行扩散操作。正向扩散时,借助于式(22),正向扩散的逆运算如式(23);逆向扩散时,借助于式(24),逆向扩散的逆运算如式(25)所示。
C
i
=
C
i
−
1
×
S
i
×
P
i
(22)
C_{i}=C_{i-1} \times S_{i} \times P_{i} \tag{22}
Ci=Ci−1×Si×Pi(22)
P
i
=
C
i
÷
C
i
−
1
÷
S
i
(23)
P_{i}=C_{i} \div C_{i-1} \div S_{i} \tag{23}
Pi=Ci÷Ci−1÷Si(23)
C
i
=
C
i
+
1
×
S
i
×
P
i
(24)
C_{i}=C_{i+1} \times S_{i} \times P_{i} \tag{24}
Ci=Ci+1×Si×Pi(24)
P
i
=
C
i
÷
C
i
+
1
÷
S
i
(25)
P_{i}=C_{i} \div C_{i+1} \div S_{i} \tag{25}
Pi=Ci÷Ci+1÷Si(25)式(22)至(25)中的“
×
\times
×”和“
÷
\div
÷”均为
G
F
(
2
8
)
GF(2^{8})
GF(28)上的乘法和除法运算。
(其实置乱算法和扩散算法还有很多,基于实现难度、复杂程度以及加密解密性能,选择了以上两种算法)
四、文本加密算法的性能分析指标
针对加密算法,常用的评价指标包括加密/解密速度、密钥空间、直方图、明文/密文敏感性、密钥敏感性和信息熵等。通过这些指标,可以对算法的安全性以及性能进行定量以及定性的比较分析。
1、伪随机序列
FIPS 140-2是由美国国家标准与技术研究院(NIST)发布的密码安全标准,提供了4种测试方法检验用于加密系统的比特序列的随机特性。一般地,用于混沌文本加密系统的混沌序列必须通过FIPS 140-2规定的全部测试方法。
对混沌系统产生的混沌序列的随机特性进行分析。假设由混沌系统产生的测试序列为位序列,记为S,长度为20000位。
(1)单比特测试。计算S中比特1的个数k,若
9725
<
k
<
10275
9725<k<10275
9725<k<10275,则通过单比特测试;
(2)扑克测试。将S划分为5000组,每组的长度为4位,梅4位对应一个十六进制数,每个十六进制数出现的频率记为
f
i
,
i
=
1
,
2
,
…
,
15
f_{i},i=1,2,\ldots,15
fi,i=1,2,…,15,令
p
=
16
5000
∑
i
=
0
15
f
i
2
−
5000
(26)
p=\frac{16}{5000}\sum_{i=0}^{15}f_i^2-5000 \tag{26}
p=500016i=0∑15fi2−5000(26)若满足
2.16
<
p
<
46.17
2.16<p<46.17
2.16<p<46.17,则通过扑克测试。
(3)游程测试。若0游程或1游程的长度及其出现次数满足表3-1,则通过游程测试。
游程长度 | 1 | 2 | 3 | 4 | 5 | ≥ 6 \geq 6 ≥6 |
---|---|---|---|---|---|---|
数值范围 | 2315~2685 | 1114~1386 | 527~723 | 240~384 | 103~209 | 103~209 |
(4)长游程测试。最长的0游程或1游程的长度小于26,则通过长游程测试。
2、加密与解密速度
随着对加密算法研究的不断深入,可以很容易地设计一个安全性能极高的密码系统,但是往往都是以牺牲加密和解密速度为代价。与此同时,一个具有较快的加密和解密速度且安全性足够高的密码系统才具有实用价值。因此,加密与解密速度也是密码系统的一个重要衡量指标。
3、密钥空间
一般认为,一个密码系统必须具有至少 2 100 2^{100} 2100个可能的密钥,才能有效抵御穷举攻击。
4、直方图
通过对比明文和密文的ASCII码直方图,可以直观地体现文本中各个ASCII码值的个数或分布状况,从而对密文的统计特性进行直观的评价。理论上,明文的直方图跌宕起伏,而为了尽可能地隐藏明文中的统计信息,密文应具有较为平坦的直方图。
常使用
χ
2
\chi^2
χ2统计量(单边假设检验)在数量上衡量两者的差别。给定一组观察到的频数分布,记为
f
i
,
i
=
1
,
2
,
…
,
m
f_{i},i=1,2,\ldots,m
fi,i=1,2,…,m,假设其理论频数分布为
g
i
,
i
=
1
,
2
,
…
,
m
g_i,i=1,2,\ldots,m
gi,i=1,2,…,m。作假设
H
0
H_0
H0:样本来自该理论分布。当假设
H
0
H_0
H0成立时,定义
χ
2
=
∑
i
=
1
m
(
f
i
−
g
i
)
2
g
i
(27)
\chi^2=\sum_{i=1}^m \frac{(f_i-g_i)^2}{g_i} \tag{27}
χ2=i=1∑mgi(fi−gi)2(27)式(27)称为Person
χ
2
\chi^2
χ2统计量,服从自由度为m-1的
χ
2
\chi^2
χ2分布。
对于ASCII码取值为0~255的文本,设文本展开为一维向量的大小为
m
∗
1
m*1
m∗1,假设其直方图中每个ASCII码的字符频数
f
i
f_i
fi服从均匀分布,即
g
i
=
g
=
m
256
,
i
=
1
,
2
,
…
,
255
g_i=g=\frac{m}{256},i=1,2,\ldots,255
gi=g=256m,i=1,2,…,255,则
χ
2
=
∑
i
=
0
255
(
f
i
−
g
)
2
g
(28)
\chi^2=\sum_{i=0}^{255}\frac{(f_i-g)^2}{g} \tag{28}
χ2=i=0∑255g(fi−g)2(28)服从自由度为255的
χ
2
\chi^2
χ2分布。给定显著性水平
α
\alpha
α,使得
P
(
χ
2
≥
χ
α
2
(
m
−
1
)
)
=
α
(29)
P(\chi^2\geq\chi^2_{\alpha}(m-1))=\alpha \tag{29}
P(χ2≥χα2(m−1))=α(29)即
χ
2
<
χ
α
2
(
m
−
1
)
\chi^2<\chi^2_{\alpha}(m-1)
χ2<χα2(m−1)时接受假设
H
0
H_0
H0。当取显著性水平分别为
α
=
0.01
、
0.05
、
0.1
\alpha=0.01、0.05、0.1
α=0.01、0.05、0.1时,有
χ
0.01
2
(
255
)
=
310.45739
,
χ
0.05
2
(
255
)
=
293.24783
,
χ
0.1
2
(
255
)
=
284.33591
\chi^2_{0.01}(255)=310.45739,\chi^2_{0.05}(255)=293.24783,\chi^2_{0.1}(255)=284.33591
χ0.012(255)=310.45739,χ0.052(255)=293.24783,χ0.12(255)=284.33591。
5、明文敏感性与密文敏感性
差分攻击是常见的破解密码手段。其方式主要是对两个具有相同密钥的相似明文进行加密,以确定明文和密文之间的某种关系。因此,为了抵御差分攻击,密码系统必须具有较强的明文敏感性和密文敏感性。明文敏感性是指使用相同的密钥,对两个差别微小的明文进行加密,若得到两个相差很大的密文,则称密码系统具有较强的明文敏感性。密文敏感性与明文敏感性相似,但针对的是解密系统。
常使用NPCR(像素变化比例)和UACI(统一平均变化程度)这两个指标来定量地研究两个文本之间的差别。NPCR是指比较两个大小为
m
∗
1
m*1
m∗1的文本的相应位置的字符的ASCII码,记录不同的字符个数占全部字符的比例。NPCR的计算公式如式(30)所示。
N
P
C
R
(
P
1
,
P
2
)
=
1
m
∑
i
=
1
m
∣
s
i
g
n
(
P
1
(
i
)
−
P
2
(
i
)
)
∣
×
100
%
(30)
NPCR(P_1, P_2)=\frac{1}{m}\sum_{i=1}^m|sign(P_1(i)-P_2(i))|\times 100\% \tag{30}
NPCR(P1,P2)=m1i=1∑m∣sign(P1(i)−P2(i))∣×100%(30)其中,
s
i
g
n
(
∙
)
sign(\bullet)
sign(∙)为符号函数,如式(31)所示。
s
i
g
n
(
x
)
=
{
1
,
x
>
0
0
,
x
=
0
−
1
,
x
<
0
(31)
sign(x)=\left\{ \begin{array}{c}1,x>0\\0,x=0\\-1,x<0 \end{array} \right. \tag{31}
sign(x)=⎩⎨⎧1,x>00,x=0−1,x<0(31)UACI的计算公式如式(32)所示:
U
A
C
I
(
P
1
,
P
2
)
=
1
m
∑
i
=
1
m
∣
P
1
(
i
)
−
P
2
(
i
)
∣
255
−
0
×
100
%
(32)
UACI(P_1, P_2)=\frac{1}{m}\sum_{i=1}^m\frac{|P_1(i)-P_2(i)|}{255-0}\times 100\% \tag{32}
UACI(P1,P2)=m1i=1∑m255−0∣P1(i)−P2(i)∣×100%(32)
6、密钥敏感性
密钥敏感性分为加密系统的密钥敏感性以及解密系统的密钥敏感性。加密系统的密钥敏感性是指使用两组相差微小的密钥对同一个明文进行加密,如果得到两个相差很大的密文,则认为密码系统具有较强的密钥敏感性。解密系统的密钥敏感性与加密系统相似,但针对的是解密系统的密钥。
7、信息熵
信息熵反映了信息的不确定性。信息熵越大,不确定性越大,可视信息越少。计算公式如下式所示: H = − ∑ i = 0 255 p ( i ) l o g 2 p ( i ) (33) H=-\sum_{i=0}^{255}p(i)log_{2}p(i) \tag{33} H=−i=0∑255p(i)log2p(i)(33)其中,p(i)表示ASCII码为i的出现概率。对于ASCII码取值为0~255的随机文本,由式(33)可知信息熵H的理论值为8。
总结
本文介绍了混沌以及混沌文本加密的相关理论,包括混沌的定义、基本特征和Lyapunov特征指数的计算方法,以及典型的基于混沌系统的文本加密与解密方案,并对本文使用的置乱算法和扩散算法进行了介绍,最后给出了评判密码系统性能和安全性的7个指标。
下一篇文章将对经典的混沌映射(Logistic映射、Henon映射以及Lorenz映射进行研究)。