高质量的真随机数产生器的制作方法

文档序号:6543843阅读:219来源:国知局
专利名称:高质量的真随机数产生器的制作方法
技术领域
本发明涉及一种高质量的真随机数产生器。特别地,涉及一种用于生成密码算法的密钥、银行客户的初始密码和自动寄存机的密码的防饱和的高质量真随机数产生器。
背景技术
随机数分为伪随机数和真随机数两种。伪随机数是有一定规律可循的,周期长度为有限长的随机数,因此伪随机数是可预测的。真随机数一般是由模拟电路构成的真随机数发生器产生,由于在电路中引入了噪声,真随机数没有规律可循,是完全不可预测的。
由于现有大部分的加密算法是公开的,信息安全的保证就依赖于对密钥的保护,而产生密钥一般都需要用到随机数。于是,用于产生密钥的随机数就成了保证信息安全的关键,而只有完全不可预测的真随机数才能真正保证信息的安全。
国内已开发的随机数产生器,有的是用数字电路设计的伪随机数产生器;而用模拟电路设计的真随机数产生器往往速度比较慢,而且产生的随机数质量也不好。

发明内容
本发明的目的是针对现有技术的不足,提供一种高质量的真随机数产生器。
本发明的目的是通过以下技术方案来实现的高质量的真随机数产生器,包括用于产生随机数的随机数产生模块;所述的高质量的真随机数产生器,还包括用于进一步增加数据的随机性,起到混洗功能的作用的数据混洗模块;用于判断随机数的优劣的时段熵检测模块;用于检测输出的随机序列是否为弱密钥的弱密钥检测模块。
所述的数据混洗模块添加在随机数产生模块之后,用来进一步增加数据的随机性,起到混洗功能的作用。
时段熵检测模块用由以色列人Lempel和Ziv提出的LZ算法来判断随机数的优劣。
弱密钥检测模块用来检测输出的随机序列是否为弱密钥,检查密钥中的0串或1串的长度,给出指示值result。
本发明具有以下技术效果1.真随机数的质量非常高对产生的随机数进行混洗,增加其随机性,并对数据进行时段熵测试和弱密钥算法测试,保证其随机性;2.真随机数的产生速度快。


图1是高质量的真随机数产生器结构框图;图2是真随机数产生器的工作流程图;图3是时段熵检测模块的工作流程图;图4是数据混洗模块的工作原理图;图5是数据混洗模块的工作流程图;图6是弱密钥检测模块工作流程图。
具体实施例方式
下面根据附图详细说明本发明。
如图1所示,一种高质量的真随机数产生器架构,包括随机数产生模块,数据混洗模块,时段熵监测模块和弱密钥监测模块。其中数据混洗模块添加在随机数产生模块之后,用来进一步增加数据的随机性,起到混洗功能的作用。时段熵检测模块,采用由以色列人Lempel和Ziv提出的LZ算法来判断随机数的优劣。弱密钥检测模块用来检测输出的随机序列是否为弱密钥,检查密钥中的0串或1串的长度,给出指示值result。
如图2所示,随机数产生器重置后,随机数产生模块开始工作,其产生的随机数序列由时段熵模块进行随机性检测,给出检测值,同时,该随机数序列由数据混洗模块进行混洗处理,进一步增加随机性,混洗后的随机数序列由弱密钥模块进行检测,给出检测值。
如图3所示,时段熵检测模块工作流程初始化过程中地址指针清零,存储器全部置零。非确定性判别电路从并串转换电路数据,并在该电路内部计算二叉树分支地址,判断该分支地址是否为空如果分之地址不为空地址,则判断输入的数据的长度是否达到65536比特如果没有达到65536比特,则将上述分支地址作为当前地址,继续读入1比特数据;如果达到了65536比特的数据,则输出判别结果;如果上述分支地址为空,则在存储器在中把该分支地址标记非空,将计数器加1,判断输入的数据长度是否达到了65536比特如果达到了65536比特长度,则输出判别结果;如果没有达到65536比特长,则将地址指针清零,继续读入下一比特的数据,进行判断。
如图4所示,数据混洗模块用于进一步增加数据的随机性,起到混洗功能的作用。其工作过程使能信号有效时,两个1bit位宽数据输入,每个时钟周期输入一个数据,输入1端口输入的数据放在初始移位寄存器init32中,下一个input1数据进来后,前一个数据向左移,存入初始移位寄存器init33中,以次类推,一直存入32个数据(由计数器counter控制,没输入一个数据,counter的值增加1),这样第一个数据存在初始移位寄存器init63中,最后一个数据存在初始移位寄存器init32中。Input2输入的数据放在初始移位寄存器的init0中,下一个input1数据进来后,前一个数据向左移,存入初始移位寄存器init31中,以次类推,一直存入32个数据,这样第一个数据存在初始移位寄存器init63中,最后一个数据存在初始移位寄存器init0中。当计数器的值从0递增到31时,将初始移位寄存器init中得值赋给fsr寄存器赋值,赋值的规则是fsr[12764]=~init[630],fsr[630]=init[630]。128位移位寄存器被赋值后开始工作,每个时钟周期右移一位。移出的值经过一个非线性布尔逻辑函数f到输出端output。
每个时钟周期取fsr寄存器的第111、61、11位进行一次布尔运算;取fsr寄存器的127、126、121、0位进行异或运算;将上述两个值与输出output再次进行异或运算,所得结果存入fsr寄存器的第127位。完成fsr的一次右移过程。
如图5所示,数据混洗模块的工作流程图,关键就是两组移位寄存器的移位过程,首先64位初始寄存器赋值给128位反馈移位寄存器,由反馈移位寄存器将输出信号反馈到输入信号,实现数据的置乱功能。
如图6所示,弱密钥模块就是检查经过数据混洗模块处理后的随即序列是否为弱密钥。其工作流程具体如下弱密钥检测模块复位信号有效时,系统启动,初始化计数器,开始工作。①初始化过程中,“当前游程长度”计数器、“最大游程长度”计数器被清零。读入一位数据存入“当前位寄存器”;②开始工作,读入一位数据存入“下一位寄存器”。然后判断“下一位”和当前位是否相等若相等,“当前位寄存器”加1,将“下一位”赋予“当前位”,接着比较当前游程和最大游程的大小,若当前游程大于最大游程,则将当前游程长度赋予最大游程长度;如果是第一个游程,则将当前游程长度赋予首游程长度寄存器,保存首游程类别(1游程或0游程);③判断是否要结束检查如果否,则读入一位数据存入“下一位”,并重复②。如果是要结束检查,则将当前游程和首游程比较,如果是同类游程(都是1游程或都是0游程),则判断“首游程长度+当前游程长度”是否大于“最大游程长度”,如果是,则“首游程长度+当前游程长度”赋予“最大游程长度”。然后比较最大游程长度值和理论上的游程长度门限值(根据数据的总长度计算得到)大小并输出结果。
下面举例说明真随机数产生器的工作流程首先由随机数产生模块产生随即序列,如0100,1100,0101,1011,1110,0000,1111,1011,1001,0110,0111,1100,0000,1110,0111,1001,1,1101,0001。
序列经过混洗模块增加其随机性,取随机数产生模块的前64bit,偶数位作为高32位,奇数位作为低32位,得到序列1010,1101,1000,1101,0110,1110,0010,1101,0010,0011,1100,1111,1001,0110,0011,0110。
将这64bit取反,得到序列0101,0010,0111,0010,1001,0001,1101,0010,1101,1100,0011,0000,0110,1001,1100,1001。
将原来的64bit和取反后的64bit合并作为移位寄存器的初始值,取反后的64bit作为高64位,原来的64bit作为低64位,共128位,得到序列0101,0010,0111,0010,1001,0001,1101,0010,1101,1100,0011,0000,0110,1001,1100,1001,1010,1101,1000,1101,0110,1110,0010,1101,0010,0011,1100,1111,1001,0110,0011,0110。
总输入1101,……第1个时钟输入11。
128bit的一位寄存器的数据变为1,0101,0010,0111,0010,1001,0001,1101,0010,1101,1100,0011,0000,0110,1001,1100,1001,1010,1101,1000,1101,0110,1110,0010,1101,0010,0011,1100,1111,1001,0110,0011,011。
输出0。
第2个时钟,输入01。
128bit的一位寄存器的数据变为1,1,0101,0010,0111,0010,1001,0001,1101,0010,1101,1100,0011,0000,0110,1001,1100,1001,1010,1101,1000,1101,0110,1110,0010,1101,0010,0011,1100,1111,1001,0110,0011,01。输出0。
通过时段熵检测模块判断随机数的优劣,时段熵模块时钟频率是其它模块的时钟频率的2倍,保证随机数产生模块的所有输出都能被弱密钥检测模块及时处理,该模块输入为0100,1100,0101,1011,1110,0000,1111,1011,1001,0110,0111,1100,0000,1110,0111,1001,1,1101,0001。
输入0 地址0置为非空输入1 地址1置为非空输入0 地址0非空输入0 地址00置为非空输入1 地址1非空输入1 地址11置为非空输入0 地址0非空输入0 地址00非空输入0 地址000置为非空输入1 地址1非空……直到输入满65536bit为止,计算置为非空的地址空间的个数为S。如果S大于预先设定的阈值N,则表示测试结果好;如果S不大于N,则表示测试结果不好。
弱密钥检测模块检测输出的随机序列是否为弱密钥。假定混洗模块的输出为0011,1010,1100,1000,……预先设定的检测的数据量为M=16bit,则允许的最长0或1游程为Limit=2+log2M=6。
输入0当前位0当前游程1最长游程1输入0当前位0当前游程2最长游程2输入1当前位1当前游程1最长游程2输入1当前位1当前游程2最长游程2输入1当前位1当前游程3最长游程3输入0当前位0当前游程1最长游程3
输入1当前位1当前游程1最长游程3输入0当前位0当前游程1最长游程3输入1当前位1当前游程1最长游程3输入1当前位1当前游程2最长游程3输入0当前位0当前游程1最长游程3输入0当前位0当前游程2最长游程3输入1当前位1当前游程1最长游程3输入0当前位0当前游程1最长游程3输入0当前位0当前游程2最长游程3输入0当前位0当前游程3最长游程3首尾检查第1位与第16位相同,因此首尾相接,0的游程为5,大于已知的最长游程3,因此,所测定的这16bit数据的最长游程为5。最长游程5<Limit=6,这表示测试结果好。
上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。
权利要求
1.一种高质量的真随机数产生器,包括用于产生随机数的随机数产生模块;其特征在于所述的高质量的真随机数产生器,还包括用于进一步增加数据的随机性,起到混洗功能的作用的数据混洗模块;用于判断随机数的优劣的时段熵检测模块;用于检测输出的随机序列是否为弱密钥的弱密钥检测模块。
2.根据权利要求1所述的一种高质量的真随机数产生器,其特征在于所述的数据混洗模块添加在随机数产生模块之后,用来进一步增加数据的随机性,起到混洗功能的作用。
3.根据权利要求1所述的一种高质量的真随机数产生器,其特征在于所述的时段熵检测模块用由以色列人Lempel和Ziv提出的LZ算法来判断随机数的优劣。
4.根据权利要求1所述的一种高质量的真随机数产生器,其特征在于所述的弱密钥检测模块用来检测输出的随机序列是否为弱密钥,检查密钥中的0串或1串的长度,给出指示值result。
全文摘要
本发明公开了一种高质量的真随机数产生器。它包括用于产生随机数的随机数产生模块;所述的高质量的真随机数产生器,还包括用于进一步增加数据的随机性,起到混洗功能的作用的数据混洗模块;用于判断随机数的优劣的时段熵检测模块;用于检测输出的随机序列是否为弱密钥的弱密钥检测模块。本发明具有以下技术效果1.真随机数的质量非常高对产生的随机数进行混洗,增加其随机性,并对数据进行时段熵测试和弱密钥算法测试,保证其随机性;2.真随机数的产生速度快。
文档编号G06F7/58GK1770094SQ20051006113
公开日2006年5月10日 申请日期2005年10月17日 优先权日2005年10月17日
发明者严晓浪, 沈海斌 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1