一种基于混沌的计算机随机数生成系统及方法与流程

文档序号:20698699发布日期:2020-05-12 15:21阅读:183来源:国知局
一种基于混沌的计算机随机数生成系统及方法与流程

本发明涉及信息安全领域,尤其是一种基于混沌的计算机随机数生成系统及方法。



背景技术:

伪随机数发生器(prng)广泛应用于系统仿真、安全等各个领域。基于可靠、高效的伪随机数发生器在系统仿真中真实地描述系统的运行、演变及其发展过程。在以密码学为基础的信息安全领域中,伪随机数发生器也扮演着重要的角色,密钥生成、数字签名、认证和鉴别以及各种安全通信协议都离不开高质量的随机数。从某种意义上讲,随机数的安全性决定了整个安全体系的安全性。在c语言<stdlib.h>中有四个常用的伪随机数生成函数:rand()、srand()、randomize()和random(num),但是以上四个函数都有明显的缺陷,且易用性较差。



技术实现要素:

本发明的技术解决问题:克服现有技术的不足,提供一种基于混沌的计算机随机数生成系统及方法,用户可以根据自身要求设置序列的长度、上下界,提高通用性;通过调用精度更高的函数获取微秒级时间,有效防止c语言中获取秒级时间造成的伪随机数序列被攻击的问题;改进原有一维logistic映射模型,获得随机性更强的混沌序列。

本发明的技术解决方案为:一种基于混沌的计算机随机数生成系统,其特征在于:包括用户通用性设置模块,安全性加强模块以及随机数生成模块;

用户通用性设置模块:用于提供外部接口,方便其他程序调用,通过输入相关函数参数获得需要的随机序列;所述外部接口以接口函数的方式提供,提供三种接口:分别实现生成整型伪随机数、浮点型伪随机数和字符型伪随机序列,对应的函数分别为:hdintrand函数、hddoublerand函数、hdcharrand函数;其中,函数参数包括:a[]接收随机数的数组,long序列长度,key找回随机数的密钥,*p接收生成的密钥,hdintrand函数和hddoublerand函数还包括min取值范围的最小值,max取值范围的最大值,用于获取对序列的长度、上下界、找回随机序列;

安全性加强模块:使用c中time.h中提供的minsec函数获取系统微秒级时间,并将年、月、日、时、分、秒、微秒相乘得到序列sk,如果日期中有‘0’的乘数项则将其默认置为‘1’,防止序列被置零,通过获取的是系统微妙级时间,能防止获取系统秒级时间而造成的伪随机数序列容易被攻击;

随机数生成模块:采用改进的一维logistic映射模型,通过分组迭代方式,每次只生成单个的伪随机数,从而提高一维逻辑映射函数的随机性;同时,该改进的一维logistic映射模型的两个参数μ和x0由多个因素共同决定:使用四组参数迭代作为系统的系数μ;混沌序列初值x0由固定十六进制参数mk和微秒级时间序列积sk两个参数决定。

进一步的,所述用户通用性设置模块对接口进行调用,生成整型伪随机数、浮点型伪随机数和字符型伪随机序列;对应调用的的函数分别为:hdintrand函数、hddoublerand函数、hdcharrand函数;

调用某一函数并设置参数,参数中包括接收随机数的数组,序列长度,取值范围的最大值和最小值,找回随机数的密钥和接收生成的密钥;

在字符型伪随机序列生成中,不包括取值范围的参数,供用户通用性设置模块调用。

进一步的,所述安全性加强模块使用c中time.h中提供的minsec函数获取系统微秒级时间,并将年、月、日、时、分、秒、微秒相乘得到序列sk,如果日期中有‘0’的乘数项则将其默认置为‘1’,防止序列被置零,将所得序列sk规范化,同时获取四组固定十六进制参数,每次都依次使用四组参数中的一个进行迭代,防止只使用一个参数造成的随机性不达标,以此获得mk序列,将mk按需移位生成x,供安全性加强模块调用。

进一步的,所述随机数生成模块将安全性加强模块调用生成获得的规范化的sk和x异或运算获得初始迭代x,然后进行n次预迭代,n为生成混沌序列之前为提高随机性预迭代的次数,通过提高迭代的次数,生成随机性更强的混沌序列,将预迭代后的x与系统参数μ根据移位logistic映射迭代,最终规格化生成单个伪随机数,根据随机序列长度分组多次迭代后最终生成伪随机数序列。

本发明还提出一种基于混沌的计算机随机数生成方法,包括如下步骤:

步骤(1)、对接口进行调用,应用生成整型伪随机数、浮点型伪随机数和字符型伪随机序列,调用随机数生成函数并设置函数参数,函数参数中应包括接收随机数的数组,序列长度,取值范围的最大值和最小值,找回随机数的密钥和接收生成的密钥;在字符型伪随机序列生成中,不包括取值范围的参数,供用户通用性设置模块调用;

步骤(2),随机数生成数函数使用c中time.h中提供的minsec函数获取系统微秒级时间,并将年、月、日、时、分、秒、微秒相乘得到序列sk,如果日期中有‘0’的乘数项则将其默认置为‘1’,防止序列被置零,将所得序列sk规范化,同时获取四组固定十六进制参数,每次都会依次使用四组参数中的一个进行迭代,防止只使用一个参数造成的随机性不达标,以此获得mk序列,将mk按需移位生成x;

步骤(3)、将所得规范化的sk和x异或运算获得初始迭代x,然后进行n次预迭代,n为生成混沌序列之前为提高随机性预迭代的次数,通过提高迭代的次数,可以生成随机性更强的混沌序列,将预迭代后的x与系统参数μ根据移位logistic映射迭代,最终规格化生成单个伪随机数,根据随机序列长度分组多次迭代后最终生成伪随机数序列。

进一步的,所述步骤(1)具体包括:

(1.1)创建存储参数的变量;

(1.1.1)创建接longint型收生成密钥的变量参数key;

(1.1.2)创建存储随机数序列或字符序列的数组a[];

(1.2)设置参数;

(1.2.1)设置接受随机数序列或字符序列的数组a[];

(1.2.2)设置序列长度为300*300;

(1.2.3)设置序列范围为[0,255];

(1.2.4)设置随机数找回密钥为0;

(1.2.5)设置接受生成的密钥指针为&key;

(1.3)进入步骤(2)。

进一步的,所述步骤(2)具体包括:

(2.1)获取参数;

(2.1.1)调用time.h中的minsec()函数,获取y(年)m(月)d(日)h(时)min(分)s(秒)us(微秒)时间参数;

(2.1.2)将(2.1.1)中参数为0的改成1;

(2.1.3)将(2.1.2)中参数值相乘获得sk并规范化;

(2.1.4)获取四组固定十六进制参数;

(2.1.5)每次迭代使用一个参数作为mk;

(2.1.6)根据一维logistic模型中x取值范围[0,1],将mk进行按需移位;

(2.2)将sk与x进行按位异或生成初始化x。

进一步的,所述步骤(3)具体包括:

(3.1)获取由步骤2生成的初始化参数x;

(3.1.1)生成随机数γ,令γ与迭代初值x进行预迭代n次,即x=x*γn生成迭代值x,n值设为[0,100];

(3.1.2)随机生成四组参数μ1、μ2、μ3和μ4,每一轮次迭代作为系数μ,如第一轮μ=μ1,第二轮μ=μ2,第三轮μ=μ3,第四轮μ=μ4,依次循环;

(3.2)输入一维logistic映射公式f(x)=μx(1-x),x∈[0,1]迭代运行并规格化;

(3.3)生成随机数序列。

本发明与现有技术相比的优点在于:

(1)本发明提出基于一维logistic混沌映射的通用伪随机数生成方法,可以调用不同随机数类型的接口,并提供了密钥找回随机数的功能,实现了c语言的随机数生成函数,用户可根据自身需要设置生成不同长度、不同范围的伪随机数。

(2)本发明改进原有一维logistic映射模型,提出不直接生成整个伪随机数混沌序列,而是通过分组迭代等方式,每次只生成单个伪随机数,有效提高随机性。同时,该映射函数的两个参数x和μ由多个因素共同决定,保证获得随机性更强的混沌序列。

(3)本发明采用精度更高的minsec函数获取微秒级时间,抗破解能力强,有效防止获取秒级时间造成的伪随机数序列被攻击的问题。

(4)本发明在生成伪随机序列后产生一个密钥串,用于找回该伪随机数序列,能有效防止伪随机数丢失造成的安全风险。有效提高随机数生成的随机性、密钥敏感性和兼容性。

附图说明

图1为本发明的框架图;

图2为本发明的用户通用性设置模块执行的流程;

图3为本发明的安全性加强模块执行的流程;

图4为本发明的随机数生成模块执行的流程。

具体实施方式

为了更好地理解本发明,先对一些基本概念进行一下解释说明。

伪随机数:伪随机数是用确定性的算法计算出来自[0,1]均匀分布的随机数序列。并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等,一般采用伪随机数代替真正的随机数。

混沌系统:混沌是非线性动力系统固有的特性,在非线性系统中是普遍存在的现象。在非线性动力系统中混沌现象是一个确定性、类随机的过程,这种过程是非周期且不收敛的,并且对于初始值具有非常敏感的依赖性。一个确定性系统中,存在这样类随机的不规则运动,而且它的行为表现出不确定性的、不可重复的、不可预测的混沌现象,这就是一个混沌系统。

一维logistic映射:从数学形式上来看是一个非常简单的差分方程,最早来描述生物学中种群的变化。此系统具有极其复杂的动力学行为,现在在保密通信领域的应用十分广泛,其数学表达公式如下:

f(x)=μx(1-x),x∈[0,1]

其中,μ∈[0,4]被称为logistic参数。研究表明,当x∈[0,1]时,logistic映射工作处于混沌状态。本发明中使用四组参数迭代作为系统的系数μ,x的初始值由mk和sk参数决定。sk表示从年到微秒级时间各单位的乘积,mk为四组固定十六进制参数。

根据一个实施例,参见图1,本发明所提出的一种基于混沌的通用伪随机数系统,包括用户通用性设置模块,安全性加强模块以及随机数生成模块;

具体如下:

用户通用性设置模块:用于提供外部接口,方便其他程序调用,通过输入相关参数即可获得需要的随机序列;接口功能以接口函数的方式提供,提供三种接口:分别实现生成整型伪随机数、浮点型伪随机数和字符型伪随机序列,对应的函数分别为:hdintrand函数、hddoublerand函数、hdcharrand函数;其中,函数参数包括a[]接收随机数的数组,long序列长度,key找回随机数的密钥,*p接收生成的密钥,hdintrand函数和hddoublerand函数还包括min取值范围的最小值,max取值范围的最大值,可以满足需求者对序列的长度、上下界、找回随机序列等要求;

所述的用户通用性设置模块避免c语言<stdlib.h>中常用的四个伪随机生成函数rand(),srand(),randomize()和random(num)的参数易用性不足,满足需求者对序列的长度、上下界的要求;

安全性加强模块:使用c中time.h中提供的minsec函数获取系统微秒级时间,并将年、月、日、时、分、秒、微秒相乘得到序列sk,如果日期中有‘0’的乘数项则将其默认置为‘1’,防止序列被置零,由于获取的是系统微妙级时间,能有效防止类似c中srand((unsigned)(time(null))获取系统秒级时间而造成的伪随机数序列容易被攻击的问题,同时也避免采用每次初始化随机种子的方法;所述安全性加强模块在该生成器解决了四个伪随机生成函数rand(),srand(),randomize()和random(num)获取系统时间时精度仅在秒级别和随机种子必须初始化的不足;

随机数生成模块:采用改进的一维logistic映射模型,通过不直接生成整个伪随机数混沌序列,而是通过分组迭代等方式,每次只生成单个的伪随机数,从而有效提高一维逻辑映射函数的随机性。同时,该改进的一维logistic映射模型的两个参数μ和x0由多个因素共同决定:本系统使用四组参数迭代作为系统的系数μ。混沌序列初值x0由mk和sk两个参数决定。随机数生成模块通过改进一维logistic映射实现随机序列良好的混沌性质;

本发明整个实现过程如下:

(1)对接口进行调用,应用生成整型伪随机数、浮点型伪随机数和字符型伪随机序列,对应的函数分别为:hdintrand函数、hddoublerand函数、hdcharrand函数,调用某一函数并设置参数,参数中应包括接收随机数的数组,序列长度,取值范围的最大值和最小值,找回随机数的密钥和接收生成的密钥,在字符型伪随机序列生成中,不包括取值范围的参数,供用户通用性设置模块调用;

(2)使用c中time.h中提供的minsec函数获取系统微秒级时间,并将年、月、日、时、分、秒、微秒相乘得到序列sk,如果日期中有‘0’的乘数项则将其默认置为‘1’,防止序列被置零,将所得序列sk规范化,同时获取四组固定十六进制参数,每次都会依次使用四组参数中的一个进行迭代,防止只使用一个参数造成的随机性不达标,以此获得mk序列,将mk按需移位生成x,供安全性加强模块调用;

(3)将所得规范化的sk和x异或运算获得初始迭代x,然后进行n次预迭代,n为生成混沌序列之前为提高随机性预迭代的次数,通过提高迭代的次数,可以生成随机性更强的混沌序列,将预迭代后的x与系统参数μ根据移位logistic映射迭代,最终规格化生成单个伪随机数,根据随机序列长度分组多次迭代后最终生成伪随机数序列,供随机数生成模块调用。

上述各模块的具体实现过程如下:

1.用户通用性设置模块流程

该模块实现的流程的实现过程如图2所示:

(1.1)创建存储参数的变量;

(1.1.1)创建接longint型收生成密钥的变量参数key;

(1.1.2)创建存储随机数序列或字符序列的数组a[];

(1.2)设置参数;

(1.2.1)设置接受随机数序列或字符序列的数组a[];

(1.2.2)设置序列长度为300*300;

(1.2.3)设置序列范围为[0,255];

(1.2.4)设置随机数找回密钥为0;

(1.2.5)设置接受生成的密钥指针为&key;

(1.3)进入安全性加强模块;

2.安全性加强模块流程

该模块实现的流程如图3所示:

(2.1)获取参数;

(2.1.1)调用time.h中的minsec()函数,获取y(年)m(月)d(日)h(时)min(分)s(秒)us(微秒)时间参数,如2019年11月22日21时03分0秒12563微秒;

(2.1.2)将(2.1.1)中参数为0的改成1,时间参数改为2019年11月22日21时03分1秒12563微秒;

(2.1.3)将(2.1.2)中参数值相乘获得sk并规范化,sk=3860710170462,规范化后为sk=111000001011100100010000100001111101011110;

(2.1.4)获取四组固定十六进制参数;

(2.1.5)每次迭代使用一个参数作为mk;

(2.1.6)根据一维logistic模型中x取值范围[0,1]将mk进行按需移位,如mk=0x00bf0fcf,按需求移位后x=0.101111110000111111001111;

(2.2)将sk与x进行按位异或生成初始化x=0.01011111101101101101101111;

3.随机数生成模块流程

该模块实现的流程如图4所示:

(3.1)获取由模块2生成的初始化参数x;

(3.1.1)生成随机数γ,令γ与迭代初值x进行预迭代n次,即x=x*γn生成迭代值x,n值可设为[0,100];

(3.1.2)随机生成四组参数μ1、μ2、μ3和μ4,每一轮次迭代作为系数μ,如第一轮μ=μ1,第二轮μ=μ2,第三轮μ=μ3,第四轮μ=μ4,依次循环;

(3.2)输入一维logistic映射公式f(x)=μx(1-x),x∈[0,1]迭代运行并规格化;

(3.3)生成随机数序列。

尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,且应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1