CN111190570A - 一种高质量随机数发生器及一种随机数生成方法 - Google Patents
一种高质量随机数发生器及一种随机数生成方法 Download PDFInfo
- Publication number
- CN111190570A CN111190570A CN201911085237.3A CN201911085237A CN111190570A CN 111190570 A CN111190570 A CN 111190570A CN 201911085237 A CN201911085237 A CN 201911085237A CN 111190570 A CN111190570 A CN 111190570A
- Authority
- CN
- China
- Prior art keywords
- entropy
- module
- random number
- data
- pool
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 238000001514 detection method Methods 0.000 claims description 44
- 238000012545 processing Methods 0.000 claims description 20
- 238000011156 evaluation Methods 0.000 claims description 15
- 230000008569 process Effects 0.000 claims description 12
- 230000001133 acceleration Effects 0.000 claims description 6
- 238000003860 storage Methods 0.000 claims description 5
- 229920006395 saturated elastomer Polymers 0.000 claims description 4
- 238000011897 real-time detection Methods 0.000 claims description 3
- 238000010899 nucleation Methods 0.000 claims 1
- 238000013441 quality evaluation Methods 0.000 claims 1
- 238000010998 test method Methods 0.000 abstract 1
- 239000011159 matrix material Substances 0.000 description 16
- 238000012360 testing method Methods 0.000 description 14
- 238000004422 calculation algorithm Methods 0.000 description 12
- 230000033001 locomotion Effects 0.000 description 9
- 230000003068 static effect Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 238000009825 accumulation Methods 0.000 description 6
- 238000007689 inspection Methods 0.000 description 6
- 238000005295 random walk Methods 0.000 description 6
- 244000062793 Sorghum vulgare Species 0.000 description 5
- 230000000903 blocking effect Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 235000019713 millet Nutrition 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000000528 statistical test Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 239000003205 fragrance Substances 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 239000000427 antigen Substances 0.000 description 2
- 102000036639 antigens Human genes 0.000 description 2
- 108091007433 antigens Proteins 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 230000000737 periodic effect Effects 0.000 description 2
- 238000001583 randomness test Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- WFKWXMTUELFFGS-UHFFFAOYSA-N tungsten Chemical compound [W] WFKWXMTUELFFGS-UHFFFAOYSA-N 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010924 continuous production Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000008713 feedback mechanism Effects 0.000 description 1
- 230000005669 field effect Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- 230000005258 radioactive decay Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 230000003245 working effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
- G06F7/582—Pseudo-random number generators
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/002—Countermeasures against attacks on cryptographic mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0869—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Measurement Of The Respiration, Hearing Ability, Form, And Blood Characteristics Of Living Organisms (AREA)
Abstract
本发明提供一种高质量随机数发生器及一种随机数生成方法。本发明的随机数发生器包括熵源模块,熵池模块和随机数序列输出模块。其中熵源模块以图像和Android设备的传感器为整个随机数发生器提供高熵来源,熵池模块保障随机数发生器的内部安全,序列输出模块提供连续快速输出随机数的功能。使用美国NIST建议的16种测试方法对本发明生成的随机数的随机性进行测试,结果表明本发明的随机数发生器具有很好的随机性。
Description
技术领域:
本发明属于信息安全领域,涉及一种随机数生成方法及一种随机数发生器。
背景技术:
在网络社会中,信息数据安全一直处于十分重要的地位,因而产生各种各样的数据加密算法,其中许多算法都需要高质量随机数发生器产生的随机数。
随机数及其发生器是主流计算环境的重要组成部分(Wolfram,“Random numbergenerat ion.http://reference.wolfram.com/language/tutorial/RandomNu- mberGeneration.html.”和“Rando m.org.http://www.random.org.”))。由随机数发生器产生的随机数被广泛用于OS级功能(堆栈指针随机化)、科学计算(蒙特卡罗,马尔可夫模型)和计算机安全(密钥生成)(A.J.Me nezes,S.A.Vanstone,and P.C.V.Oorschot,Handbook of Applied Cryptography,1s-t ed.Boca Raton,FL,USA:CRC Press,Inc,1996.和W.Stallings,Cryptography and Network Se curity:Principles andPractice,sixth edition ed.Pre-ntice Hall,2013.及沈春来.随机数发生器的研究及其设计[D].南京邮电大学,2012)。
满足应用要求的随机数必须满足随机性和不可预测性(Kelsey J,Schneier B,Wagner D.Cryptanalytic Attacks on Pseudorandom[J].1999):
1、看起来是随机的,即能通过现有的所有正确的随机性检验;
2、这个序列是不可预测的,也就是说,即使给出产生序列的算法或者硬件设计和以前产生序列的所有知识,也不可能通过计算来预测下一个序列是什么;
3、这个序列不能重复产生,即使在完全相同的操作条件下用完全相同的输入对序列发生器操作两次,也将得到两个完全不同的、毫不相关的序列。
相应的,随机数也分为三类:1、伪随机数:满足第一个条件的随机数;2、密码学安全的伪随机数:同时满足前两个条件的随机数。可以通过密码学安全伪随机数发生器计算得出;和3、真随机数:同时满足三个条件的随机数。本发明所述随机数均是起码要满足前两个条件的随机数。
当随机数发生器被用于密码学应用时,它必须有足够的能力去防止来自内部或外部的攻击。下面列出了最基本的两条安全准则(Gutterman Z,Pinkas B,ReinmanT.Analysis of the Linux random number generator[J].2006,2006(2006):15pp.-385):
1、伪随机性:发生器的输出要有随机性。
2、不可预测性,包括
前向不可预测性:知道随机数发生器某一时刻的内部状态,无法知道以前输出的随机数。
后向不可预测性:知道随机数发生器某一时刻的内部状态,无法知道以后输出的所有随机数。
当敌手不了解发生器的内部状态时,伪随机性的要求就已经足够了。然而,在许多情况下,敌手可能能够了解发生器的状态,这时候就需要不可预测性来确保发生器的安全。
影响随机数质量的是其所具有的熵,熵简单来说就是随机数的不确定性。
信息论定义一条消息的信息量如下:假设所有消息是等可能的,对消息中所有可能的值进行编码所需要的最少比特数(BruceSchneier.应用密码学:协议、算法与C源程序[M].机械工业出版社,2000.)。
一条消息M的信息量可以通过它的熵(entropy)来度量。通常,一条消息的熵是log2n,其中n是消息所有可能的值,此处假设每一个值是等可能的。
一个安全的随机数意味着它含有足够的熵。根据2014年国家密码管理局发布的《密码模块安全技术要求》中对随机数的要求,无论熵从密码边界内部还是外部收集,对任何一个关键安全参数,其最小熵值应不小于256比特。
能够产生随机数序列的软件或硬件或者二者的结合被称为随机数发生器RNG(Random Number Generator)(参见Knuth D E,苏运霖译.计算机程序设计艺术(第2卷):半数值算法[M].3版.国防工业出版社.2002.)。根据其产生方法可以区分三种类型的发生器,即真随机数发生器TRNG(True Random Number Generator)、伪随机数发生器PRNG(PseudoRandom Number Generator)和混合随机数发生器HRNG(Hybrid Random NumberGenerator)。
TRNG的关键在于其输入源非常随机,一般是从物理环境中抽取,如键盘敲击活动、磁盘的电活动、鼠标移动、系统时间的瞬时值等,这个源通常叫做熵源。源或者多源组合作为算法的输入,产生随机的二元输出。
相反,PRNG取一个固定值,成为种子,作为输入,用一个确定性的算法产生比特输出序列。通常,大部分算法带有反馈机制,由此算法的部分结果反馈作为输入,而其他结果作为输出。
TRNG的好处在于可以生成真随机数,但是一般都需要额外的硬件,需要对数据进行额外的处理,并且生成的速度非常慢,所以一般不考虑TRNG。PRNG的好处在于,一旦种子适合,它们可以产生实际上无限的随机数据流,而不会面临不得不阻塞进程来刷新熵的问题。缺点是PRNG的种子输入,如果种子泄漏,则所有生成的数据都会受到影响并变得可预测。因此,外部观察者无法预测种子输入并且种子具有高水平的熵是很重要的。
而HRNG结合了TRNG和PRNG的优点,即既可以快速地无限地生成随机数,又可以防止种子被预测。HRNG通常从难以预测的事件中采集熵来生成种子,再应用确定性算法来产生随机数。一个真随机数发生器被用来从一个非确定性来源(例如,一个硬件随机数发生器)产生一个高熵种子。然后这个种子被用作PRNG结构的输入来生成大量的随机数据。如果构建得当,这个模型就像一个真正的随机数发生器一样是非确定性的,但是一旦PRNG种子被启动,它仍然能够产生大量的数据而不会被阻塞。
现有的伪随机数发生器包括:
1、Android平台系统层的基于Linux内核的/dev/random和/dev/urandom两个伪随机数发生器。
/dev/random最初是由Ts'o于1993年为Linux实现的,它从操作系统提供的大量随机事件中收集熵,例如鼠标键盘事件、磁盘IO操作、特殊中断等。一旦足够的熵混入到熵池中,它将接受用户对随机字节的请求,并通过对熵池的内容进行杂凑来提供这些随机字节。但是当熵池中的熵使用完之后,/dev/random便会进入阻塞状态,直到熵池中的熵重新收集到一定数量之后,才会继续接受请求。
/dev/urandom在功能上与/dev/random相同,唯一的区别是/dev/urandom是非阻塞的,不管熵池中有没有熵,只要有请求,它都会输出随机字节,并且对请求的随机字节数量没有限制。
对安全性要求不高的应用程序,/dev/urandom提供的随机性足够满足需求,但是在密码学等一些关键性的、安全性较高的应用中,通常使用/dev/random。然而在Android平台,/dev/random收集熵的过程实在是太过于缓慢。
使用adb(Android Debug Bridge)对小米6手机进行随机数输出测试,在手机静止并且无用户输入(不触碰手机)的情况下,/dev/random在1分钟内仅输出了16字节随机数。在有用户输入(不断的滑动屏幕、点开应用等)的情况下,/dev/random收集熵的速度快了很多,输出了128字节随机数,但这仍然很缓慢。
直接从/dev/random中读取熵,在无用户输入的前提下,第1次读取的速度很快,而从第2次开始,读取的速度就慢了很多。因为第1次读取的时候,熵池中有足够的熵,/dev/random不会进入阻塞状态,第2次读取的时候,熵池中已无熵,/dev/random便进入阻塞状态来收集熵,直到收集足够的熵。第2次到第5次,/dev/random收集了32字节(256比特)熵,共耗时642.865秒,平均每秒收集0.398比特熵。在有用户输入的前提下,再一次读取/dev/random中的熵,/dev/random收集36字节熵共耗时6.547秒,平均每秒收集43.990比特熵,比无用户输入的情况快了110倍。
可见/dev/random收集熵的速度很大程度上依赖于用户的输入,但即使是在有用户输入的情况下,/dev/random收集熵的速度也无法满足应用程序对性能的需求。
2、ANSI X9.17发生器
ANSI X9.17是一个基于3DES的发生器(参见:Jonathan Katz and YehudaLindell,现代密码学——原理与协议(Introduction to Modern Cryp-tography:Principles and Protocols),它的种子是时间。
对该发生器的分析依赖于对DES加密算法的分析。对于基于输入的攻击,比如已知输入,重放输入和选择输入,在不知道K(3DES的密钥)的情况下,攻击者无法知道发生器的输出。
如果攻击者知道K,攻击者可以对时间进行穷举攻击(由于系统定时器精度影响,在产生输出时,可以得到最近的秒数),从而得到seed。已有学者证出如果系统时间仅有10比特是未知的,最多穷举231次便可以求出seed。
3、PGP发生器
PGP是Pretty Good Privacy的缩写,它使用了两种不同的随机数,一种是通过用户敲击键盘事件获得随机数,另一种是由这些随机数和随机状态池中的随机数种子一起生成伪随机数(参见:Jonathan Katz and Yehuda Lindell,现代密码学——原理与协议(Introduction to Modern Cryp-tography:Principles and Protocols),ISBN9787118070651.)。
对于提供种子的随机状态池,可能存在开机启动时的初始状态问题。在开机基态时,池中的数据还没有来得及经过更新,有可能其内容是不随机的,这样就导致发生器的输入仅含有较少的熵,其输出就是不够随机的。
对于利用用户敲击键盘事件而产生的随机数,可能存在的问题是,用户敲击键盘事件所含的熵较小,比如只敲击一个键,产生的数据不够随机。如果将这不够随机的数据当做发生器的输入,会影响到发生器的输出,进而影响到下一次随机状态池的内容。
4、DSA发生器
DSA是Digital Signature Standard指定的一种伪随机数发生器(Dan B.DigitalSignature Standard[J].Telecommunication Engineering,1995:158-159.)。
DSA发生器的安全性基于Hash函数SHA-1,易于遭到攻击。上述4种发生器的主要特性和局限性如下表所示:
当前随机数发生器中往往存在一些缺陷和问题,为了避免潜在的安全隐患,在实现用于密码学目的的随机数发生器时,应该遵循以下关于良好发生器设计的要求(GutmannP.Software Generation of Practically Strong Random Numbers[J].Proceedings ofUs-enix Security Symposium,1998:243--257.):
1)随机数发生器的输入源要高熵,且尽可能多地使用不同输入源,以避免发生单点故障。
2)随机数发生器不应依赖于用户提供的输入来提供熵信息,而应该能够自己收集这些信息,而不需要用户的任何明确的帮助。
3)发生器应该估计在其内部状态的熵的数量,并拒绝提供安全水平不足的输出。
4)所有送入随机数发生器的数据应该以某种方式进行预处理,以防止攻击者推测出输入。
5)状态更新操作应使用尽可能多的状态数据,以确保在混合过程中每个状态位都会影响其他位。
6)在发生任何输出之前,发生器应该通过确保内部数据充分混合来避免启动问题。
7)所有的输出数据都应该通过一个抗原像的随机函数进行处理,以避免向攻击者透露有关内部状态的信息。
8)发生器应连续采样自己的输出,并对其进行任何可行的测试,以确保不会产生不良的输出或卡住一个周期并重复产生相同的输出。
/dev/random的输入源就没有高熵,导致收集熵太过于缓慢,ANSI X9.17、PGP和DSA的输入源也不满足高熵,均不满足原则(1);DSA依赖于用户提供的输入,导致容易被敌手攻击,不满足原则(2);PGP没有估计内部状态熵的数量,容易产生低熵输出,不满足原则(3)和(6);原则(4)(5)(6)(7)是为了保护发生器的内部状态,保障发生器的不可预测性;原则(8)保障发生器的伪随机性。
发明内容:
本发明提供一种满足上述所有设计要求的随机数发生器,及一种基于这种随机数发生器的随机数生成方法。
本发明的高质量随机数发生器,包括熵源模块,熵池模块和随机数输出模块,其中
所述熵源模块,包括熵采集器,从多个熵源中采集熵源数据;熵估计模块,得出各个熵源数据的熵估计值;熵质量实时评估模块,对采集的熵数据进行质量实时检测;以及数据处理模块,根据熵估计模块得出的熵估计值来确定是否重新采集熵,或将通过熵质量实时评估模块的熵源数据发送至熵池模块;
熵池模块,包括熵池,为一连续的存储空间,包括用于标记熵池内数据熵数量的熵计数器、混淆次数和熵池写入地址;输入管理模块,将熵源数据放入熵池直至熵池饱和;混淆模块,将熵源数据充分地均匀地混合到熵池中;和输出管理模块,输出混淆后的熵源数据数据并更新熵池内部状态;
随机数输出模块,包括伪随机发生器,将熵池模块的输出作为种子生成并输出随机数序列;输出策略模块,计算生成随机数所需种子。
进一步地,所述输出策略模块根据需要输出随机数的长度确定更换种子的周期。
进一步地,所述随机数输出模块还包括随机性检测模块,检测随机数发生器输出的随机数序列的随机性;所述随机数输出模块只输出通过随机性检测模块检测的随机数序列。
进一步地,所述熵采集器并对采集的熵源数据根据熵源种类分别进行预处理,使其符合熵估计模块和熵质量实时评估模块对熵源数据的格式要求。
进一步地,所述熵采集器采集Android平台设备的传感器数据和图像数据。所述传感器数据包括加速度传感器数据和陀螺仪数据;所述图像数据为模糊的图像数据。
本发明的高质量随机数生成方法,其步骤包括:
1)用户调用所述高质量随机数发生器,请求输出n字节随机数;
2)由所述输出策略模块计算n字节随机数需要m个种子;
3)向熵池模块请求种子;
4)通过熵采集器从多个熵源采集熵源数据;
5)通过熵估计模块得出各个熵源数据的熵估计值;通过熵质量实时评估模块对采集的熵数据进行质量实时检测;
6)数据处理模块根据熵估计模块得出的熵估计值来确定是否重新采集熵,或将通过熵质量实时评估模块的熵源数据发送至熵池模块;
7)熵池模块的输入管理模块将熵源数据放入熵池并混淆,直至熵池饱和;
8)通过熵池模块的输出管理模块输出混合后的熵源数据作为种子,由伪随机发生器生成随机数序列;
9)在已经请求了m个种子后,返回n字节随机数给用户。
Android设备目前的随机数发生器是基于Linux内核的/dev/random和/dev/urandom两个伪随机数发生器。/dev/random可以提供高熵随机数,但是不能提供大量的随机数,一旦/dev/random中的熵使用完,设备就会进入阻塞状态,让用户等待,以便于/dev/random采集熵;/dev/urandom和应用层的伪随机数发生器都可以连续提供随机数,但是提供的随机数不具有高熵,具有可预测性,容易被敌手攻击。
为了能让Android平台快速地产生高熵随机数,本发明提供了一种基于Android平台的具有高熵的密码学安全的随机数发生器,该随机数发生器从图像和Android设备自带的传感器中快速地采集熵数据,熵数据经过混淆后输出伪随机数发生器的种子,最后伪随机数发生器输出连续的随机序列流。
本发明具有以下有益效果:
1、设计和实现了一个快速高质量随机数发生器,整体提高了产品的实用性及安全性,满足了应用的需要。
2、本发明随机数发生器还可以被应用于Android平台上其他的软密码产品。软密码产品基本上都需要高质量的随机数,而设计的随机数发生器可以快速产生高熵高质量的随机数,并且可以适用于绝大多数Android平台。
3、自主可控。Android系统的随机数发生器是国外团队设计并实现的,如同一个黑盒子,可能存在恶意后门等安全隐患,而本发明的随机数发生器为自主设计的,不存在后门并可以不断改进或修补漏洞,做到了自主可控。
总的说来,本发明的随机数发生器满足了上述所有的设计要求,请见下表:
附图说明:
图1本发明随机数发生器结构示意图
图2本发明熵源模块结构示意图
图3本发明随机数生成方法流程图
图4本发明提取图像噪声数据示意图
图5本发明熵质量实时评估模块结构示意图
图6本发明数据处理模块结构示意图
图7本发明熵池模块结构示意图
图8本发明池输入管理流程图
图9本发明混淆机制流程图
图10本发明池输出管理流程图
图11本发明刷新熵池流程图
图12本发明随机数序列输出模块结构示意图
具体实施方式:
如图1所示,本发明的随机数发生器包括熵源、熵池和随机数序列输出三大模块。
如图3所示,本发明的随机数生成方法算法流程为:
1)用户调用随机数发生器,请求输出n字节随机数;
2)序列输出模块的输出策略计算n字节随机数需要m个种子;
3)向熵池模块请求种子;
4)熵池模块的池输出管理判断熵池的内部状态,如果内部状态不满足,则转5),满足转12);
5)池输出管理向熵源模块请求填充熵池;
6)熵源模块的熵采集器开始从熵源采集数据;
7)熵质量实时评估检测数据的有效性;
8)数据处理模块根据熵质量实时评估返回的结果,判断是否需要重新采集数据,如果需要转6),否则转9);
9)返回数据给熵池模块;
10)熵池模块的池输入管理复制数据到熵池;
11)熵池模块的混淆机制混淆熵池,转4);
12)熵池模块的池输出管理输出数据(种子),返回给序列输出模块;
13)用种子初始化序列输出模块的PRNG,PRNG输出随机序列;
14)判断是否已经请求了m个种子,没有则转(3);
15)返回n字节随机数给用户。
以下分别予以具体说明。
一、熵源模块
熵源模块结构如图2所示,其中熵源模块的熵采集器要从多处熵源采集熵,不能依赖用户输入,同时还要能估算采集到的熵数据的熵数量以及保证熵数据的安全水平。
通过熵采集器采集多熵源主要是为了防止由于某个熵源连续产生低熵数据而影响送往熵池数据的总体的熵。
1、熵源数据采集
首先要考虑的是Android设备有哪些熵源可以采集数据。熵源作为随机数发生器的核心,直接关系到最终随机数质量的高低。从理论上讲,采集熵源数据最好的方法是测量物理现象,如放射性衰减,半导体中的热噪声,在嘈杂的环境中拍摄的声音样本,或者是数字化图像。但是,很少有Android设备(或用户)可以访问前两种源所需的专用硬件,而后两种源Android设备(或用户)可以访问到。由于声音样本处理起来比较复杂,很难从中提取熵,所以也不考虑声音源。
图像是对自然界物理状态的一种捕捉,通过拍摄图像获取熵是最直接也是安全性最高的一种方式[19]。拍摄获取的图像信息本质上是一种对某个连续区域中单个像素点进行复杂描述的二维数据结构,因此图像信息的构成需要大量的数据作为支撑。图像中的熵体现在噪声上。噪声在图像上常表现为引起较强视觉效果的孤立像素点或像素块。噪声主要来源于两个方面:
(1)图像获取过程中:Android设备的摄像头基本是CCD和CMOS图像传感器,它们在采集图像过程中,由于受传感器材料属性、工作属性、电子元器件和电路结构等影响,会引入各种噪声,如电阻引起的热噪声、场效应管的沟道热噪声、光子噪声、暗电流噪声、光响应非均匀性噪声等。
(2)图像信号传输过程中:由于传输介质和记录设备等的不完善,数字图像在其传输记录过程中往往会受到多种噪声的污染。另外,在图像处理的某些环节中,当输入的对象不如预想时也会在最终图像中引入噪声。
所以以拍摄的方式获取的图像信息作为随机发生器的熵源信息容量较大,并且很容易进一步提高信息量。
本发明拍摄图像后,先提取图像的特征,并保存最新几张图像的特征。每次新拍摄图像后,都会与保存的图像特征进行对比,如果相似度很大,则重新拍摄。
具体说来,本发明基于均值哈希算法,对拍摄的图像进行相似度比较,如果相似度大于百分之50,则认为是近似图像,需要重新拍摄,如果小于百分之50,则认为是不同图像,进行噪声提取。
本发明假设图像的尺寸为height×width,如图4所示,本发明方法先定一个256×256的大矩阵模板,从图像的左顶部开始,不断地沿对角线向下移动,一次移动一个256×256的矩阵,当达到图像边缘时,将最开始左顶部的矩阵右移256像素重新定位起始点,再沿对角线向下移动,直到提取到满足数目要求的噪声点或提取完图像右上半角内全部噪声点。
具体流程如下:
1)从图像的(i,j)=(0,0)像素点开始,选取一个大小为256×256的矩阵A,不足则全选;
2)在矩阵A内,将A分割成256个16×16的小矩阵,在每个小矩阵B内:
a)用坐标(x,y)表示矩阵B内所有点,x和y的范围均为[0,15];
b)用改写的均值滤波方法记录所有的噪声点坐标;
c)找到所有噪声点的中点,提取该中点的坐标(x0,y0),将x0和y0转换为二进制,以x0|y0的形式输出,其中x0|y0就是从该小矩阵B中提取到的数据;如果该矩阵B中没有噪声点,则不提取;
3)将像素点(i,j)沿图像对角线向下移动,即(i,j)=(i+256,j+256),如果像素点(i,j)已经到了图像边缘,则重新令(i,j)=(i+256k,j),k为点到达边缘的次数,直到将图片的右上角像素全部读取完,如果此时还不满足需要提取的比特数,则重新从(0,0)处采集;
由于小矩阵B的x和y坐标均为4比特,因此从B中提取的数据x0|y0为8比特(1字节),这样可以从一个256×256的矩阵A中提取到0-256字节噪声数据,如果一个图像有n个这样的A矩阵,则从该图像中可以提取0-256n字节噪声数据。
Android设备几乎均带有传感器,比如加速度传感器、陀螺仪等,这些传感器只要开启了,无时无刻不在变化,其中也包含了大量的熵。同时传感器数据属于物理硬件的数据,是很好的熵源。再加上传感器种类众多,可以提供很多熵源。
本发明从图像源和传感器源采集熵数据,由于两者完全独立,可以开两个线程一起采集熵。
每个熵源都提供不同类型的数据,因此熵采集器需要有一个数据处理过程,将这些熵源数据处理成统一的格式,以方便于熵估计和熵检测。
2、熵估计
有了图像和传感器作为熵源,解决了“多熵源”问题,其次要考虑如何去估计采集到的熵源数据的熵。
熵估计是建立一个随机数发生器(RNG)的重要组成部分,因为能够估计熵池中包含的熵的数量所达到的安全水平。如果RNG的熵估计的准确性较高,则可以对其熵池的不可预测性给出更好的安全保证,这使得攻击者不太可能损害RNG系统的随机性。
然而,要很好地估计熵是困难的,因为从某种意义上说,这意味着必须“预测”熵源数据的不可预测性。有的熵源是随时间变化的,有的熵源产生可变长度的输出,有的需要花费不同的时间去采集数据,而且许多分析技术需要消耗大量的CPU和内存资源,虽然学者们在熵估计方面已经做了大量的研究工作,但是目前还没有找到完全可靠的熵估计的黄金解决方案。目前普遍使用的方法有香农熵计算方法和最小熵计算方法。本发明使用离线收集好大量熵源数据进行预先评估的方式。
2-1传感器熵估计
为了在熵池运作期间生成可能的最高数据量,已经把传感器速率被设置为最短的延迟。生成的数据的确切数量取决于运行的设备,但测试显示平均每分钟将有大约53000个加速度传感器和陀螺仪读数,1个传感器读数为一个传感器坐标。
若两个传感器都有5比特十进制数不可预测,转换成二进制可表示17比特。假如这5比特数完全是不可预测的,那么陀螺仪和加速度传感器一个坐标就有17比特熵,每分钟53000个传感器数据,就有901000比特熵。
由于1字节等于8比特,为了方便存储数据,所以对5比特数进行了模216运算,这样传感器的一个坐标最多只有16比特熵。
分别对三星Galaxy S3和小米6在静止状态下以及运动状态(手握手机不停地向上下左右运动)下采集数据。
1.静止状态
手机静止状态下采集10分钟数据,共采集5组,期间用香农熵和最小熵对采集的熵进行统计分析,每16比特传感器数据包含熵数量平均值如下表所示:
Android手机静止状态下传感器熵统计
手机型号 | 香农熵/比特 | 最小熵/比特 | 采集次数 |
S3 | 6.947 | 5.204 | 535227 |
小米6 | 7.213 | 5.474 | 535598 |
对S3手机在静止状态下采集10小时数据,期间每隔1小时用香浓熵和最小熵对采集的熵进行统计分析,结果如下表:
S3手机静止状态下10小时内传感器熵统计
时间/小时 | 香农熵/比特 | 最小熵/比特 |
1 | 6.893 | 4.914 |
2 | 6.976 | 4.938 |
3 | 6.953 | 5.025 |
4 | 6.933 | 5.032 |
5 | 6.923 | 4.956 |
6 | 6.965 | 4.987 |
7 | 6.912 | 5.044 |
8 | 6.974 | 5.128 |
9 | 6.898 | 5.047 |
10 | 6.954 | 5.010 |
2.运动状态
手机在运动状态采集10分钟数据,共采集5组,统计香农熵和最小熵,如下表所示:
Android手机运动状态下传感器熵统计
手机型号 | 香农熵/比特 | 最小熵/比特 | 采集次数 |
S3 | 13.225 | 10.356 | 536044 |
小米6 | 13.319 | 10.623 | 536924 |
从上述表格中可知:
在长时间使用传感器和短时间使用传感器下,采集的数据的香浓熵和最小熵相差不大。S3和小米6的传感器数据香浓熵和最小熵差别不是很大,本文以在静止状态下S3的较低数据为标准来统计。
S3手机传感器16比特数据的最小熵为5.204比特,传感器十分钟采集535227次,为了达到熵池熵的安全阈值256比特,传感器需要采集50次,需要消耗56毫秒。
平均情况,S3手机传感器16比特数据包含6.947比特熵,传感器十分钟采集535227次,为了采集256比特熵需要采集37次,消耗41毫秒。
在不断运动最好的情况下,S3手机传感器16比特数据包含13.225比特熵,传感器十分钟采集535227,采集256比特熵需要采集20次,消耗22毫秒。
考虑到如果以采集时间作为收集熵数据的标准,则可能会受到Android系统设备时钟的影响,如果攻击者修改系统时钟,则传感器可能很难收集达到熵安全阈值的数据。所以本文采用以采集固定大小数据作为收集熵数据的标准。
对于上述三种情况,假设传感器十分钟采集535227次,则采集128字节需要71毫秒,最差情况下包含333比特熵,平均情况下包含444比特熵,最好情况包含846比特,三种情况均满足256比特安全阈值。
因此传感器源一旦收集满128字节数据,便停止收集,同时将收集的128字节数据送往熵质量实时评估。
2-2图像熵估计
由于拍摄环境的不同,会导致图像中的噪声点数量也不尽相同,本文分别考虑在纯白、纯黑和正常环境中估计图像的熵,具体可以分为以下几种场景:
(1)纯白环境下正常聚焦拍摄,得到一张清晰的图像;
(2)纯白环境下模糊拍照,得到一张模糊图像;
(3)纯黑环境下正常聚焦拍摄,得到一张清晰的图像;
(4)纯黑环境下模糊拍照,得到一张模糊图像;
(5)正常环境下正常聚焦拍摄,得到一张清晰的图像;
(6)正常环境下模糊拍照,得到一张模糊图像;
纯白环境通过让手机拍一张白纸来模拟,纯黑环境则在漆黑的环境下,每个场景分别拍摄10张照片,图像的尺寸均为4000×2250,计算图像数据每8比特的香农熵和最小熵平均值如下表所示:
图像熵统计
场景 | 香农熵/比特 | 最小熵/比特 |
(1) | 0.023 | 0.014 |
(2) | 0.340 | 0.152 |
(3) | 0.025 | 0.015 |
(4) | 0.370 | 0.158 |
(5) | 5.587 | 2.254 |
(6) | 5.977 | 2.541 |
由上表可知,纯白或纯黑环境下,图像中包含的熵极少,而正常环境下图像中包含了大量的熵,并且模糊图像中的熵要高于清晰图像。
本发明使用正常环境下清晰图像的最小熵。从图像源中采集128字节数据,由表4-5可以得知,图像的最小熵均值8比特中包含2.254比特,则128字节数据包含288比特熵,满足熵安全阈值256比特。只考虑提取噪声点的时间,提取128字节的噪声点只需要微秒级别的时间,可以忽略不计。
在纯黑和纯白环境下,图像中的熵极低,所以必须要有实时检测机制,以防止低熵数据混入熵池。
3、熵质量实时评估
最后要考虑应该用什么方法去检测熵源数据的随机性。Golomb总结了随机序列最基本的三条假设,可以验证熵源数据能否通过Golomb随机性假设来检测其随机性。
如图5所示,熵质量实时评估模块输入为128字节图像源数据和(或)128字节传感器源数据,输出为输入数据和输入数据的有效长度,并将输出传递给数据处理模块。
经过熵质量实时评估的数据才能送往熵池,可以拒绝低熵数据,保证采集的传感器数据具有随机性和不可预测性。
本发明使用Golomb随机性假设来检验熵源数据的随机性。
Golomb总结了随机序列最基本的三条假设,这些假设陈述如下:
(1)0和1的个数要尽可能要等,例如,如果序列的长度L是偶数,那么0和1的个数都是L/2,如果L是奇数,那么0和1的个数都是(L±1)/2。
(2)一个序列游程长度为1的个数占序列长度的1/2,游程长度为2的个数占序列长度的1/4,游程长度为3的个数占序列长度的1/8,以此类推。游程是指一个没有间断的相同数序列。
(3)对于所有k值,相位自相关AC(k)具有相同的值。
在具有周期p的周期序列{si}i≥0的自相关AC(k)由下式定义的情况下:
其中A(k)和D(k)分别表示序列{si}i≥0和{si+k}i≥0在相同位置上数值相同和不相同的个数,{si+k}i≥0是{si}i≥0向左移动了k个位置。
如果一个周期序列满足全部三个假设,则可以称为伪随机。
由于一次检测的数据量很少,所以必须得选择要求数据量小的检测方法,其中频数检测要求待检测数据至少100位,游程检测要求至少100位,自相关检测要求至少12位,所以本发明采取这三种检测方法。
假设待检测序列的二进制序列为ε=ε1,ε2,…,εn,长度为n,检测方法共有以下三种:
1)频数检测:检测序列中位“0”和位“1”的数目是否大致相等。
2)游程检测:判断一个序列中长度不同的位“1”的数目与位“0”的数目是否与理想的随机序列的期望值一样。
3)自相关检测:用于检测待检序列与将其逻辑左移d位后所得新序列的关联程度,这里d取1,2,8,16。一个随机序列应该和将其左移任意位所得的新序列都是独立的,故其关联程度也应该很低。
以上三种检测分别与Golomb随机性的三条假设相吻合,由Golomb随机性假设可知,如果待检测序列通过以上三种检测,则可以认为待检测序列是随机的。
如果熵检测没有通过,则置熵源数据的有效长度为零,否则置为128,并将熵源数据和有效长度传递给数据处理模块。
对传感器和图像多种场景下采集的128字节数据进行评估,汇总成下表,其中传感器每种场景下采集了1000次,图像每种场景下采集了100次:
由检测结果可知,当图像源采集的数据不理想时,熵质量实时评估模块会拒绝次数据,保证熵源数据的高熵。
4、数据处理
数据处理模块用来整理即将送往熵池模块的数据,统计出熵源数据的有效数据、有效长度以及熵总数,结构如图6所示。
数据处理模块统计熵源数据所包含的熵数量。根据熵估计结果、熵源数据,熵源数据的有效长度,就可以估算出来熵数量,如下所示:
熵总数=[图像源数据有效长度×图像源熵估计值+传感器源数据有效长度×传感器源熵估计值]
如果熵源数据的有效长度不为零,则认为该数据为有效数据,并复制到送往熵池数据的缓冲区中,否则丢弃该数据。最终送往熵池的有效数据长度为两个熵源数据的有效长度之和。
如果最终有效长度为零,则反馈给熵采集器,重新采集数据。
数据处理模块会把最终的有效数据、有效长度以及有效数据的熵总数发送给熵池模块。
二、熵池模块
熵池模块包含熵池,及池输入管理、混淆机制和池输出管理三个子模块,结构如图7所示:
熵池需要有内部状态,比如一块连续的存储空间,来存放熵源模块的输出数据,称之为随机池,大小为512字节。随机池设置为128字,即512字节,保证池中能容纳更多的熵。
还需要有一个随机池写入地址,告诉熵池模块需要将数据存放在随机池的何处,它应随输入数据的添加而变化。写入地址add_ptr的范围在[0,511]。熵计数器entropy_counter最大为池空间大小,即随机池中数据满熵,最小为0,即池中无数据,所以entropy_counter的范围在[0,4096]。在初始化时,将为pool申请512字节的空间,并初始化为全0,pre_add_ptr、add_ptr、entropy_counter和mix_counter置为0,从池首端到末端填充。
熵池模块需要随时知道随机池数据中熵数量,通过添加熵计数器来统计。为了避免启动问题,需要将熵池充分混合,用一个变量记录混合次数。
池输入管理模块根据熵计数器的值来判断需不需要将数据添加到随机池,当数据被添加到随机池后,还需要更新熵计数器。
当有熵源数据到达时,池输入管理会先判断熵计数器是否达到了最大值,如果达到了最大值,说明随机池数据已经满熵,不需要再填充新的熵源数据了,所以拒绝熵源数据。假设熵源数据的熵总数为e_s比特,数据长度为1_s字节,如果熵计数器没有达到最大值,则将1_s字节的熵源数据添加到随机池中,同时保存上一次的写入地址,然后再更新本次的写入地址,如果本次写入地址已达到或超出池末尾,则令写入地址从池首端重新开始(需加上超出的部分)。最后由于随机池已经添加了熵源数据,融入了更多的熵,所以要更新熵计数器,加上e_s比特的熵,如果更新后的熵计数器大于最大值,则令熵计数器等于最大值。流程如图8所示。
混淆机制的目的是为了防止随机池中数据的泄露和避免启动问题。它应使用尽可能多的数据来混淆随机池数据。本发明使用如图9的流程来混淆池中数据,假设熵源数据未复制到随机池前的池索引地址为pre_add_ptr,复制完熵源数据之后,池索引地址变为add_ptr:
混淆流程可总结如下:
1)选取pre_add_ptr的前32个字节和后64字节pre_add_ptr-32……pre_add_ptr+63送入SM3中,然后把SM3输出的32字节写入到pre_add_ptr……pre_add_ptr+31。
2)然后pre_add_ptr向前移动32字节,pre_add_ptr=pre_add_ptr+32,并重复执行1),直到pre_add_ptr移动到或者超过add_ptr的位置。当pre_add_ptr移动到随机池末尾时,需把pre_add_ptr重新移动到随机池开始处;
3)熵源数据全部混淆完之后,增加混淆次数mix_counter++,当mix_counter达到100时,便不再增加。
通过上述流程的混淆处理,被SM3输出的每个32字节块都携带了768(96×8)比特状态信息,这意味着随机池中的每个字节都受到其周围32+64个字节的直接影响,而且当迭代次数足够多时,每个字节会间接地受到池中其他每个字节的影响。768比特的状态信息已完全满足国家密码管理局规定的256比特状态信息。
池输出管理模块管理着熵池的输出,主要根据是熵池内部状态的熵计数器和混淆次数。池输出管理的输出流程如图10所示。
如图5-5所示,需要熵池模块输出随机数时,池输出管理会先判断内部状态混淆次数,由于熵源数据最少是128字节,所以最多采集4次熵源数据便可以把512字节的随机池全部混淆,每采集一次数据送往随机池,混淆次数便会加1。所以可以判断混淆是否大于等于4来推断随机池数据有没有充分混合,如果小于4,则通知熵采集器重新采集数据。
因为《密码模块安全技术要求》规定敏感参数必须有256比特熵,所以池输出管理接下来会判断内部状态熵计数器是否大于等于256比特,如果小于,说明随机池内数据熵不足,则通知熵采集器采集数据。
当混淆次数和熵计数器均满足条件时,池输出管理会刷新一次熵池,对池内数据再次用SM3处理混淆,保证熵池内部状态的数据的安全性。刷新熵池之后会输出256比特数据。
最后更新熵计数器,减去输出的256比特熵。
刷新熵池
刷新熵池是将要输出的池数据通过一个抗原像的随机函数进行处理后再输出。刷新熵池的流程如1下图11所示,,刷新熵池的步骤如下:
1)将随机池[0,255]间的数据用SM3处理,输出32字节tmp[32],将tmp[32]添加到随机池[add_ptr,add_ptr+31]间,并将tmp[32]作为SM3′的初始状态;
2)将随机池[256,511]间的数据用SM3′处理,输出32字节赋给tmp[32],将tmp[32]添加到随机池[add_ptr-32,add_ptr]间;
3)将随机池[add_ptr-224(%512),add_ptr+32(%512)]间的数据用SM3′处理,最终输出的32字节作为熵池模块的输出数据。
前两步对随机池再一次做了混淆,并且让随机池[add_ptr-32,add_ptr+31]间的数据受到了全池数据的直接影响,第三步[add_ptr-224(%512),add_ptr+32(%512)]之间的数据包含了[add_ptr-32,add_ptr+31],将其作为SM3′的输入,可以保证最终输出的32字节数据也受到了全池数据的直接影响。
假设刷新熵池前熵池内熵计数器的值为n(n>=256)比特,随机池[0,255]间数据的熵为x比特,[256,511]间数据的熵为y比特,则x+y=n。步骤1)后,随机池[add_ptr,add_ptr+31]间至少包含x(x<=256)比特熵,步骤2)后,随机池[add_ptr-32,add_ptr]间至少包含y(y<=256)比特熵,步骤3)后,输出的数据至少包含(x+y)比特熵,由于x+y=n>=256,所以输出的数据肯定包含256比特熵。
三、随机数序列输出模块
序列输出模块包含伪随机数发生器、输出策略和随机性检测三个子模块,结构如下图12所示。
输出策略的目的是为了防止PRNG始终用同一个种子输出序列,避免被攻击者根据太多输出序列推测出种子。本发明根据调用者需要输出的序列的长度L来决定多久更换一次PRNG的种子。更换种子即通知熵池模块重新输出序列。
伪随机数发生器本发明采用了梅森旋转随机数发生器,可以快速产生高质量的伪随机数。
随机性检测模块,本发明使用NIST SP800-22(密码学应用中的随机数和伪随机数发生器统计测试工具集)来检测随机性。
由于该模块需要大量的数据,而且检测非常耗时,所以也以离线的方式运行。
以下为对采用本发明方法生成的随机数序列进行随机性检测的结果
检测数据:检测数据分为1000组,每组128KB随机数;
判断条件:p_value大于0.01,且通过率要达到98%。
对以下三种场景下发生器的输出进行检测:
1.Android手机在静止状态,只采集传感器数据
检测结果如下表所示:
检测 | p_value | 通过组数/总组数 | 通过率% |
频数检测 | 0.836048 | 992/1000 | 99.2 |
块内频数检验 | 0.033362 | 988/1000 | 98.8 |
游程检验 | 0.745908 | 994/1000 | 99.4 |
块内最长游程检验 | 0.119508 | 986/1000 | 98.6 |
二元矩阵秩检验 | 0.749884 | 988/1000 | 98.8 |
离散傅里叶变换检验 | 0.317565 | 987/1000 | 98.7 |
非重叠模块匹配检验 | 0.399442 | 994/1000 | 99.4 |
重叠模块匹配检验 | 0.645448 | 989/1000 | 98.9 |
Maurer的通用统计检验 | 0.452173 | 991/1000 | 99.1 |
线性复杂度检验 | 0.046568 | 987/1000 | 98.7 |
序列检验 | 0.039073 | 990/1000 | 99.0 |
近似熵检验 | 0.666245 | 996/1000 | 99.6 |
累加和检验1 | 0.494392 | 993/1000 | 99.3 |
累加和检验2 | 0.317565 | 992/1000 | 99.2 |
随机游动检验 | 0.383023 | 637/643 | 99.1 |
随机游动状态频数检验 | 0.766181 | 639/643 | 99.4 |
检测结果显示,在手机静止状态,并且只有传感器源时,随机数发生器输出序列过了全部的检测。
2.Android手机在运动状态,只采集传感器数据
检测的结果如下表所示:
场景2下随机数发生器输出序列检测
检测 | p_value | 通过组数/总组数 | 通过率% |
频数检测 | 0.027497 | 995/1000 | 99.5 |
块内频数检验 | 0.695200 | 987/1000 | 98.7 |
游程检验 | 0.494392 | 991/1000 | 99.1 |
块内最长游程检验 | 0.522100 | 988/1000 | 98.8 |
二元矩阵秩检验 | 0.402219 | 992/1000 | 99.2 |
离散傅里叶变换检验 | 0.502247 | 988/1000 | 98.8 |
非重叠模块匹配检验 | 0.839507 | 991/1000 | 99.1 |
重叠模块匹配检验 | 0.705466 | 987/1000 | 98.7 |
Maurer的通用统计检验 | 0.910091 | 986/1000 | 98.6 |
线性复杂度检验 | 0.083018 | 988/1000 | 98.8 |
序列检验 | 0.337688 | 997/1000 | 99.7 |
近似熵检验 | 0.614226 | 987/1000 | 98.7 |
累加和检验1 | 0.390721 | 996/1000 | 99.6 |
累加和检验2 | 0.691081 | 997/1000 | 99.7 |
随机游动检验 | 0.858847 | 634/643 | 98.6 |
随机游动状态频数检验 | 0.627044 | 636/643 | 98.9 |
检测结果显示,在手机运动状态,并且只有传感器源时,随机数发生器输出序列过了全部的检测。
3.Android手机在运动状态,同时采集传感器和图像数据:
拍摄的均是清晰图像,检测的结果如下表所示:
场景3下随机数发生器输出序列检测
检测 | p_value | 通过组数/总组数 | 通过率% |
频数检测 | 0.230403 | 991/1000 | 99.1 |
块内频数检验 | 0.732044 | 988/1000 | 98.8 |
游程检验 | 0.011972 | 993/1000 | 99.3 |
块内最长游程检验 | 0.562029 | 992/1000 | 99.2 |
二元矩阵秩检验 | 0.502866 | 989/1000 | 98.9 |
离散傅里叶变换检验 | 0.081198 | 998/1000 | 99.8 |
非重叠模块匹配检验 | 0.842769 | 987/1000 | 98.7 |
重叠模块匹配检验 | 0.732044 | 991/1000 | 99.1 |
Maurer的通用统计检验 | 0.487504 | 988/1000 | 98.8 |
线性复杂度检验 | 0.594330 | 986/1000 | 98.6 |
序列检验 | 0.468595 | 989/1000 | 98.9 |
近似熵检验 | 0.373162 | 995/1000 | 99.5 |
累加和检验1 | 0.304179 | 987/1000 | 98.7 |
累加和检验2 | 0.734017 | 990/1000 | 99.0 |
随机游动检验 | 0.781926 | 635/643 | 98.8 |
随机游动状态频数检验 | 0.663542 | 636/643 | 98.9 |
检测结果显示,在手机运动状态,并且同时有传感器源和图像源时,随机数发生器输出序列过了全部的检测。
再对三种场景下的输出数据做多次检测,检测的结果如下表所示:
3种场景下随机数发生器输出序列通过次数检测
检测结果显示,随机数发生器输出序列过了全部的检测。
综合以上三种场景的测试结果,说明本发明随机数发生器的输出序列通过了NIST全部的随机性检测,说明本发明的随机数发生器有着很好的随机性。
Claims (10)
1.一种高质量随机数发生器,包括熵源模块,熵池模块和随机数输出模块,其中,
所述熵源模块,包括熵采集器,从多个熵源中采集熵源数据;熵估计模块,得出各个熵源数据的熵估计值;熵质量实时评估模块,对采集的熵数据进行质量实时检测;以及数据处理模块,根据熵估计模块得出的熵估计值来确定是否重新采集熵,或将通过熵质量实时评估模块的熵源数据发送至熵池模块;
熵池模块,包括熵池,为一连续的存储空间,包括用于标记熵池内数据熵数量的熵计数器、混淆次数和熵池写入地址;输入管理模块,将熵源数据放入熵池直至熵池饱和;混淆模块,将熵源数据充分地均匀地混合到熵池中;和输出管理模块,输出混淆后的熵源数据数据并更新熵池内部状态;
随机数输出模块,包括伪随机发生器,将熵池模块的输出作为种子生成并输出随机数序列;输出策略模块,计算生成随机数所需种子。
2.如权利要求1所述的高质量随机数发生器,其特征在于,所述输出策略模块根据需要输出随机数的长度确定更换种子的周期。
3.如权利要求1所述的高质量随机数发生器,其特征在于,所述随机数输出模块还包括随机性检测模块,检测随机数发生器输出的随机数序列的随机性;所述随机数输出模块只输出通过随机性检测模块检测的随机数序列。
4.如权利要求1-3任一所述的高质量随机数发生器,其特征在于,所述熵采集器并对采集的熵源数据根据熵源种类分别进行预处理,使其符合熵估计模块和熵质量实时评估模块对熵源数据的格式要求。
5.如权利要求1-3任一所述的高质量随机数发生器,其特征在于,所述熵采集器采集Android平台设备的传感器数据和图像数据。
6.权利要求5所述的高质量随机数发生器,其特征在于,所述传感器数据包括加速度传感器数据和陀螺仪数据;所述图像数据为模糊的图像数据。
7.一种采用权利要求1所述高质量随机数发生器的高质量随机数生成方法,其步骤包括:
1)用户调用所述高质量随机数发生器,请求输出n字节随机数;
2)由所述输出策略模块计算n字节随机数需要m个种子;
3)向熵池模块请求种子;
4)通过熵采集器从多个熵源采集熵源数据;
5)通过熵估计模块得出各个熵源数据的熵估计值;通过熵质量实时评估模块对采集的熵数据进行质量实时检测;
6)数据处理模块根据熵估计模块得出的熵估计值来确定是否重新采集熵,或将通过熵质量实时评估模块的熵源数据发送至熵池模块;
7)熵池模块的输入管理模块将熵源数据放入熵池并混淆,直至熵池饱和;
8)通过熵池模块的输出管理模块输出混合后的熵源数据作为种子,由伪随机发生器生成随机数序列;
9)在已经请求了m个种子后,返回n字节随机数给用户。
8.如权利要求7所述的方法,其特征在于,在返回随机数给用户前通过一随机性检测模块,检测随机数发生器输出的随机数序列的随机性;所述随机数输出模块只输出通过随机性检测模块检测的随机数序列。
9.如权利要求7所述的方法,其特征在于,所述熵采集器采集Android平台设备的传感器数据和图像数据。
10.如权利要求7所述的方法,其特征在于,所述传感器数据包括加速度传感器数据和陀螺仪数据;所述图像数据为模糊的图像数据。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811360103 | 2018-11-15 | ||
CN2018113601033 | 2018-11-15 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111190570A true CN111190570A (zh) | 2020-05-22 |
Family
ID=70709109
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911085237.3A Pending CN111190570A (zh) | 2018-11-15 | 2019-11-08 | 一种高质量随机数发生器及一种随机数生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111190570A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897514A (zh) * | 2020-07-23 | 2020-11-06 | 南京低功耗芯片技术研究院有限公司 | 基于随机模型和在线监测的trng评估方法 |
CN112306457A (zh) * | 2020-08-07 | 2021-02-02 | 神州融安科技(北京)有限公司 | 一种随机数生成方法及装置 |
CN112912838A (zh) * | 2020-05-27 | 2021-06-04 | 华为技术有限公司 | 一种随机数生成装置及方法 |
CN113448539A (zh) * | 2020-03-24 | 2021-09-28 | 北京奇虎科技有限公司 | 移动终端的随机数发生器、方法、设备及存储介质 |
CN115603906A (zh) * | 2022-10-12 | 2023-01-13 | 天翼安全科技有限公司(Cn) | 一种数据处理方法、装置、设备及介质 |
CN117971165A (zh) * | 2024-03-21 | 2024-05-03 | 深圳市证通金信科技有限公司 | 一种伪随机数生成方法及装置 |
CN118467274A (zh) * | 2024-07-10 | 2024-08-09 | 山东华翼微电子技术股份有限公司 | 一种连续采集、分析随机数芯片质量的系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609237A (zh) * | 2011-01-06 | 2012-07-25 | 微软公司 | 可扩展的随机数生成 |
US20130136255A1 (en) * | 2011-11-30 | 2013-05-30 | Certicom Corp. | Assessing cryptographic entropy |
CN104025501A (zh) * | 2011-12-29 | 2014-09-03 | 英特尔公司 | 用于不确定性随机位发生器(nrbg)的方法和装置 |
CN105075217A (zh) * | 2013-02-28 | 2015-11-18 | 亚马逊科技公司 | 质量可配置的随机数据服务 |
-
2019
- 2019-11-08 CN CN201911085237.3A patent/CN111190570A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102609237A (zh) * | 2011-01-06 | 2012-07-25 | 微软公司 | 可扩展的随机数生成 |
US20130136255A1 (en) * | 2011-11-30 | 2013-05-30 | Certicom Corp. | Assessing cryptographic entropy |
CN104025501A (zh) * | 2011-12-29 | 2014-09-03 | 英特尔公司 | 用于不确定性随机位发生器(nrbg)的方法和装置 |
CN105075217A (zh) * | 2013-02-28 | 2015-11-18 | 亚马逊科技公司 | 质量可配置的随机数据服务 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113448539A (zh) * | 2020-03-24 | 2021-09-28 | 北京奇虎科技有限公司 | 移动终端的随机数发生器、方法、设备及存储介质 |
CN112912838A (zh) * | 2020-05-27 | 2021-06-04 | 华为技术有限公司 | 一种随机数生成装置及方法 |
CN112912838B (zh) * | 2020-05-27 | 2022-04-22 | 华为技术有限公司 | 一种随机数生成装置及方法 |
CN111897514A (zh) * | 2020-07-23 | 2020-11-06 | 南京低功耗芯片技术研究院有限公司 | 基于随机模型和在线监测的trng评估方法 |
CN112306457A (zh) * | 2020-08-07 | 2021-02-02 | 神州融安科技(北京)有限公司 | 一种随机数生成方法及装置 |
CN112306457B (zh) * | 2020-08-07 | 2023-07-14 | 神州融安数字科技(北京)有限公司 | 一种随机数生成方法及装置 |
CN115603906A (zh) * | 2022-10-12 | 2023-01-13 | 天翼安全科技有限公司(Cn) | 一种数据处理方法、装置、设备及介质 |
CN117971165A (zh) * | 2024-03-21 | 2024-05-03 | 深圳市证通金信科技有限公司 | 一种伪随机数生成方法及装置 |
CN117971165B (zh) * | 2024-03-21 | 2024-06-11 | 深圳市证通金信科技有限公司 | 一种伪随机数生成方法及装置 |
CN118467274A (zh) * | 2024-07-10 | 2024-08-09 | 山东华翼微电子技术股份有限公司 | 一种连续采集、分析随机数芯片质量的系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111190570A (zh) | 一种高质量随机数发生器及一种随机数生成方法 | |
EP1840731B1 (en) | A system and method for generating pseudo-random numbers | |
MX2013014557A (es) | Metodo para proporcionar un generador portatil de numeros aleatorios reales en base a la microestructura y el ruido encontrado en imagenes digitales. | |
Vassilev et al. | The importance of entropy to information security | |
Teh et al. | GPUs and chaos: a new true random number generator | |
CN113448539A (zh) | 移动终端的随机数发生器、方法、设备及存储介质 | |
Marton et al. | Generation and testing of random numbers for cryptographic applications | |
Park et al. | QEC: A quantum entropy chip and its applications | |
CN115686437A (zh) | 随机数生成方法、装置、计算机设备和存储介质 | |
Zhu et al. | A novel iris and chaos-based random number generator | |
AL-khatib et al. | Acoustic lightweight pseudo random number generator based on cryptographically secure LFSR | |
Kadhim et al. | Mouse movement with 3D chaotic logistic maps to generate random numbers | |
Jallouli | Chaos-based security under real-time and energy constraints for the Internet of Things | |
Chan et al. | True random number generator using GPUs and histogram equalization techniques | |
Karimovich et al. | Computer's source based (Pseudo) random number generation | |
KR20170092601A (ko) | 재료 샘플에 존재하는 물리적 변화를 이용하여 난수를 생성하기 위한 시스템 및 방법 | |
Fallis | The reliability of randomized algorithms | |
L’Ecuyer | Random numbers | |
CN113448540A (zh) | 移动终端的随机数发生器、方法、设备及存储介质 | |
Saleem et al. | Robust entropy harvester for analogue noise sources in TRNG | |
Lv et al. | Analysis on Entropy Sources based on Smartphone Sensors | |
Teh et al. | A true random number generator based on hyperchaos and digital sound | |
Raza et al. | PRaCto: Pseudo Random bit generator for Cryptographic application | |
Fischer et al. | Random number generators for cryptography | |
Krhovjak et al. | Generating random and pseudorandom sequences in mobile devices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20200522 |
|
WD01 | Invention patent application deemed withdrawn after publication |