混沌序数值化

时间:2022-07-15 02:26:28

混沌序数值化

摘 要: 混沌是非线性确定系统的现象,在经过多次迭代后会表现出类似随机的特性,具有优良的密码学等特性,可以较好的应用于密码算法中,计算机硬件的设计和序列的数值化都会降低混沌序列的随机性,工作重点是选取适当的编码对混沌序列数值化,尽可能的保留混沌序列的数值化后的随机性,给加密算法提供一个较优良的密码序列。

关键词: 混沌;数值化;算法;编码

中图分类号:P338.2 文献标识码:A 文章编号:1671-7597(2011)1210183-01

1 混沌序列产生

混沌映射序列大体上分为实数值序列、位序列和二值序列以及四值混沌序列四种,其中实数值序列在计算机有限精度下,会偏离原来的伪随机的轨迹,二值序列和四值序列,利用函数设立阀值,大大的弱化了混沌序列的随机性,不可取,为序列的有限精度,则本文从位序列来讨论如何将混沌序列数值化。

本文的混沌序列的产生由下面两个表达式的结果相加除以2得到。

(1.1)

(1.2)

(1.3)

F1和f2由不同的 和不同的初始值x0产生混沌序列,因为表达式(1.1)和表达式(1.2)的值均在[0,1]区间内,所以由公式1.3可得f3区间也必然在[0,1]区间内。

例如:我们取值小数点后17位

f1=0.12345678901234567

f2=0.34569806242678241

f3=(f1+f2)/2=0.46915485143912808/2=0.23457742571456404

以上计算得到的是理论值,而实际上,在我们的电脑上计算时,由于有限精度的影响,我们得到是以下结果

在单精度(float)下显示小数点后20位的结果:

F1=0.12345679104328155500 (1.4)

f2=0.34569805860519409200 (1.5)

f3=0.23457741737365722700 (1.6)

在单精度的环境下运算,我们可以看出,该实数只能精确到小数点后第七位,大大损失了混沌序列的伪随机性。

在双精度下(double)显示小数点后18位的结果:

f1=0.12345678901234566300 (1.7)

f2=0.34569806242678241500 (1.8)

F3=0.23457742571956402600 (1.9)

在双精度的环境下运算,我们可以看出,该实数只能精确到小数点后第十七位,大大提高了混沌序列由于计算机在运算过程中由于有限的精度而而损失的伪随机性。

由上述实验结果显示,在单精度的环境下运算,有效位太少,双精度有效位较长,相对单精度而言能够较好的保持混沌学列的伪随机性。

2 混沌序列编码

由于二值法将混沌序列的随机性大大的降低了,为了提高数值化后的密钥序列的随机性,本文将采用为序列的方法进行数值化。

混沌序列是随机产生的,那么我们可以把混沌序列中所能够出现的所有元素找出来,即十进制的基D={0,1,2,3,4,5,6,7,8,9}共十个,也就是每一个小数位上可能出现的十进制数是字符集D中的其中一个,由于我们可以把混沌序列看成是随机产生的,即字符集D中的元素,在每一位上出现的概率可以看成是1/10,那么造哈夫曼树的构造过程如下。

字符集D={0,1,2,3,4,5,6,7,8,9}

字符出现频率w={0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1}

由字符出现频率我们用0-9这10个数作为哈夫曼树的权值构造哈夫曼树。哈夫曼树如图1。

图1 哈夫曼树

我们根据图1所得的哈夫曼树对十进制的十个元素进行哈夫曼编码。得到十个数的不同字符编码如表1字符编码。

表1 字符编码表

我们对表1中的编码进行统计分析如表2哈夫曼树编码统计,分别对生成的哈夫曼编码中的0和1的个数进行统计。

表2 哈夫曼树编码统计表

3 混沌序列数值化

由表2我们可以得到,由哈夫曼树进行编码后,编码中的0的个数和1的个数是完全相等的,等于17个,即相对于整个混沌序列来说,混沌序列数值化后,0和1的个数基本上保持1:1的比例。那么在数学统计上就是无关的。

现在用表2的哈夫曼编码对表达式f3=0.23457742571956402600的值取小数点后面18位数值化。

数值化:01001110 00100110 11101110 00010100 11011001 11110011

01010000 00010101 0

得到一个61位的二进制数,我们只需要取其中一部分或全部作为加密的密钥即可得到一个密钥流。下面我们讨论下经过哈夫曼树编码后的二进制数的长度范围。

从表2中得到,编码长度为3的数值有A={0,1,2,3,8,9}共6个,编码长度为4的数值有B={4,5,6,7}共四个。从两个极端来看一个随机数取小数点后面18位数值化经过哈夫曼编码数值化后的长度。

最短:Lmin=3*18=54 (1.10)

最长:Lmax=4*18=72 (1.11)

以我们可选择作为密钥的长度为[54,72]位二进制数,通过数学概率计算Lmin出现的可能性为 而Lmax出现的可能性为 。

那么数值化后最有可能的密钥长度是:

L=18*0.6*3+18*0.4*4=61.2 (1.12)

所以我们可以选择每一个混沌序列产生的随机数,可以数值化为64位的二进制数。如果生成的序列不够64位,那么后面补0,如果生成的序列大于64位,那么生成的序列大于64位的舍去。

这样我们就能通过一个混沌序列进行哈夫曼树编码,对其保留较大的随机性,且能够使序列在数值化中能够较好的保持混沌的特性。

参考文献:

[1]李海泉、李键,计算机网络安全与加密技术,科学出版社,2003.11.

[2]李树钧,数字化混沌密码的分析与设计,西安:西安交通大学,2003.

作者简介:

程志山(1982-),男,汉族,福建省建阳市人,工程硕士,福建工程学院软件学院教师,研究方向:混沌加密。

上一篇:采空区冒落带高度影响因素及分布规律分析 下一篇:地县一体化系统稳定性探讨