随机数发生器分析及其在安全信息系统中的应用_薛英花
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息安全的很多关键问题属密码学的范畴。
好的加密算法往往只有在知道密钥的情况下才能破译(加密算法可以是公开的)。
这时候,加密算法的安全性是以密钥的安全性为基础的。
安全的密钥指的是这个密钥必须是随机数。
如果它们不随机,或如果在产生随机数过程中有一点偏差,破译者就能利用这个偏差对保密信息进行破译。
随机性
1 在密码学中,对一个序列的随机性是这样定义的:
看起来是随机的,即能通过我们所能找到的所有正
(1) 确的随机性检验。
这个序列是不可预测的,也就是说,即使给出产生
(2) 序列的算法或者硬件设计和以前产生序列的所有知识,也不
可能通过计算来预测下一个比特是什么。
这个序列不能重复产生,即使在完全相同的操作条
(3) 件下用完全相同的输入对序列发生器操作两次,也将得到两
个完全不同的、毫不相关的位序列。
随机性在密码学中占有重要的地位,几乎所有的密码算
法和协议都要用到一些对攻击者来说必须是秘密的数据,比
如对一个密码算法来说,如果将秘密寓于密钥之中,那么密
钥就是秘密,包括对称密码算法(、、等)
DES AES IDEA 的密钥和非对称密码算法(、、等)
RSA DSA Diffie-Hellman 的密钥对等等,而这些密钥必须是随机数。
对于唯一已经证
明了的完善保密系统一次一密系统来说,其安全性就依赖于
密钥,其密钥必须是随机的,而且是真随机。
既然随机数如此重要,那么随机数生成器的地位也就不言而喻了。
随机数生成器用来产生一个位序列,这个位序列必须是随机的。
随机数生成器有真随机和伪随机之分。
真随机数生成器
就是满足以上点的随机数生成器,其产生的随机数是不可
3重现的,即使是你自己也无法再次产生同样的随机数。
伪随
机数生成器是满足前两点的随机数产生器,它是一个确定性
算法,用一个长度为的二进制序列作为输入,算法就能产k 生长度为()的随机数序列,伪随机生成器的输入m m>>k 称为产生器的种子。
实际上,伪随机数生成器产生的随机数并不是真的随机,且具有周期性,也就是说,其产生的随机数序列总会产生重复,不过如果产生器的周期足够长(至少要远远大于可能采集的随机数的长度),那么这个随机数生成器产生的局部的随机序列也就和真随机序列看起来没有什么区别了。
传统的伪随机数生成器2 (PRNG) 当程序员需要一个或一组随机数时,必须通过各种方式近似地生成随机数。
现在,许多程序员通过调用函random()数来得到随机序列。
通常,调用实际上是调用伪 random() 随机数生成器。
伪随机数生成器的工作原理2.1 常见情况下,伪随机数生成器生成到之间的一个 0 N 整数,这里每一整数出现的几率相同,将返回的整数再除以,得到的数字总是处于和之间。
对生成器随后的调 N 0 1 用采用第一次运行产生的整数,并将它传给一个函数,以生成到之间的一个新整数,然后再将新整数除以返 0 N N 回。
在大多数常见的随机数生成器中,是位的二进制N 32数(大约等于亿),换句话说,这类生成器至多能够生 40 成亿个可能值。
40 伪随机数生成器的优点
2.2 一个编写得很好的可以创建一个序列,而这个
PRNG 随机数发生器分析及其在安全信息系统中的应用
薛英花1,2,吕述望1,郭圣权2
(中国科学院研究生院信息安全国家重点实验室,北京;华北工学院自动控制系,太原1. 100039 2. 030051)
摘要: 随机数在密码学和安全信息系统中有着广泛的应用,它的主要用途之一是用作密钥。
该文分析了几种主要的随机数生成器,介绍并比较了它们在安全领域的应用。
最后,对随机数生成器的发展前景作出展望。
关键词:随机数;随机数生成器;密钥
Analysis of Random Number Generators and Their Applications in
Secure Information System
XUE Yinghua 1,2, LU Shuwang 1
,GUO Shengquan 2
(1. State Key Laboratory of Information Security, Graduate School of the Chinese Academy of Sciences, Beijing 100039;
2. Department of Automation Control, North China Institute of Technology, Taiyuan 030051)
【】Abstract Random number is widely used in cryptography and secure information system, which is mainly used as key. Several principal random number generators are analyzed in this paper, and their applications in security field are also introduced and compared. Development of random number generator is prospected in the end.
【】Key words ;;Random number Random number generator Key
第29卷 第3期Vol.29 № 3
计 算 机 工 程Computer Engineering
2003年3月 March 2003
・ 基金项目论文・
中图分类号: TN918.1
文章编号:1000—3428(2003)03 —0042—03
文献标识码:A
—42—
序列的属性与许多真随机数序列的属性是一样的。
例如:
可以以相同几率在一个范围内生成任何数字。
(1) PRNG
可以生成带任何统计分布的流。
(2) PRNG
由生成的数字流不具备可辨别的模式。
(3) PRNG
同时,伪随机数生成器具有产生随机数速率高的优点。
伪随机数生成器的缺点2.3 由伪随机数生成器的工作原理可以看出,伪随机数生成器将作为种子的数,当作初始整数传给函数,这样返回的""每一个值完全由它返回的前一个值所决定。
最终,该种子决定了一切。
如果知道用于计算任何一个值的那个整数,那么就可以算出从这个生成器返回的下一个值。
我们看到,对这种传统的伪随机数生成器,如果知道种子和算法,就可以很容易地推算出这个序列。
一个好的应具备的条件
2.4 PRNG 基于历史先例,的种子通常是参照系统时钟生成
PRNG 的。
这个想法是使用系统时间的某一点来作为种子。
这意味
着如果能算出生成器什么时间发生,那么就可以知道由生成
器生成的每一个值。
可见,用时钟播种的伪随机数,所有结果不是不可预测的。
如果想要安全性,必须为数字生成器播种一个真正的随机数。
使用真正的随机数来作为位的种子,会使得 64 PRNG 这较难被攻破,因为,即使有极高运算能力的计算机,破解位可能也需要花费数月。
如果使用好的位的 64 128 和真正的随机种子,那么它可以提供的足够大的搜索PRNG 空间,可以排除蛮力攻击的可能。
此外,我们应该认识到,生成器可能会受到其它类型的攻击。
它取决于该生成器生成随机数的算法。
线性拟合生成
器易于受到攻击,因此要不惜一切代价避免。
伪随机数生成器的应用2.5 一方面,伪随机数生成器有许多有用的应用方面用途,
它们对于蒙特卡罗仿真(一组使用随机数来仿真物理事件或
解决数学问题的方法)和其它统计采样或仿真模型很适用。
这些应用通常只需要它们有中度复杂程度的随机性,并且
""序列中的模式不与自然发生的序列相混即可。
另一方面,在那种需要不可预测性(如洗虚拟牌或加密
数据)的应用中,伪随机数生成器很难以一种安全的方式来
使用。
不正确地使用伪随机数生成器会导致惊人的安全性问
题。
众所周知,早前的大量安全漏洞直接
Netscape Navigator 就是来自于不适当的随机数生成器。
另一个比较典型的例子
是的因特网赌博揭秘事件,这
Reliable Software Technology 个揭秘允许欺骗性的玩家可以实时计算每人手中确切的牌。
它的缺陷存在于用来生成每副牌的洗牌算法中。
在这段代码中,调用在每副牌生成前生成一副随机牌。
随 randomize() 机数生成器的种子是按照系统时钟,用午夜后的毫秒数选取的。
这意味着随机数生成器的输出是容易预测的。
正如所讨论的,可预测的随机数生成器是一个很严重的安全性问题。
通过硬件构建真随机数生成器
3 通过对伪随机数生成器的分析,我们知道伪随机数通常会产生很重要的安全性后果。
原因是确定性的机器很难实现随机。
真随机数生成器必须是非确定的,作为旁观者即使知道设备使用的算法也永远无法以任何一致性猜测到设备的输
出。
例如,如果设备输出一系列和,和在任何特定
0 10 1 输出中出现的机会应该相等。
即使掌握了设备内部工作的全部知识,任何猜中的可能性也只有左右。
50% 构建真随机数生成器的最佳办法就是使用好的物理度量
来生成随机数。
许多自然现象就具备这种条件。
其诀窍就是它们必须有一些可测量的特性,而且行为至少要尽可能随机。
收集随机性的真正硬件设备是基于测量诸如原子的放射性衰变或热辐射中的波动之类的现象。
真随机数生成器的工作原理
3.1 常用的随机数最佳来源是测量放射性衰变。
它根本不易产生偏差,只会带来相对较小的自然偏差。
另一个好的来源是测量半导体二极管散发的热噪声。
在计算机上执行非确定性事情的唯一方法是从一些自然的随机过程中收集数据。
真随机数生成器常用的一种方法是
使用电子计数器,每次当它检测到放射性衰变时, Geiger 它就会生成一个脉冲。
衰变之间的时间是一个实足的、纯粹
的随机部分。
尤其是,没有人可以预测到下一次衰变的时间大于还是小于自上次衰变以来的时间,那就产生了一位随机信息。
消除偏差,混淆相关性3.2 任何源都有潜在的偏差。
检查了一种流行的硬件发生器,发现它返回的概率是,这表示发生器的偏差 1 49.81%非常小,趋向于零。
或许基本自然现象的偏差也是这样,但
通常是由于测量工具尚有不足之处。
消除偏差的一种常用方法是异或()位。
如果某XOR 一位是的概率是,那么当我们同时从一个发生器
0 0.5 + c 中两位时,概率就变成 XOR 0.5+2c 2。
如果我们更多 XOR 位,概率就会越来越接近均匀。
上述消除偏差的技术的一个潜在问题是即使在执行了
之后,两个连续位(或甚至是两个不相邻的位)之间XOR 有相关性,而攻击者也许会利用这一点。
实际上,可XOR 以帮助消除任何偏差,但它放大了位之间的相关性。
如何消除这种相关性呢?一个解决方案就是采用多个随机数据源,并且将数据流到一起。
在理论上,偏差会 XOR 使攻击者的工作变得更容易。
然而,实际上,小的偏差并不太可能导致系统破坏。
例如,留意到即使发Bruce Schneier 生器产生的数字中都是,每位仍然能产生位 55% 0 0.99277 的平均信息量。
那意味着,精确导向地强力搜索位密 168 钥,平均起来,次尝试中会成功一次,而不是如果不2109 存在偏差时所预期的次尝试中成功一次。
2111 一种通过消除偏差而解决上述所有问题的常用解决方案是对随机字节流应用压缩算法和散列函数,自然地消除任何统计趋势。
通过软件设计随机数生成器4 硬件是安全随机数的最佳来源,因为它天生就是随机""的,并能很快生成数字用于高安全性要求。
然而,这种生成随机数的硬件耗资昂贵,并在短期内往往无法应用到每个用户的桌面。
在此,将讨论另一类伪随机数发生器,并讨论如何在不借助于硬件的情况下从好的来源中收集随机性。
软件解决方案
4.1 一种常见基于软件的解决方案是将用户的键盘或鼠标事件采样,并根据时间或位置数据来派生出随机性。
在软件解决方案中,生成良好随机数的想法是收集尽可能多的包含熵的数据,例如鼠标和键盘事件,然后将它完全混合到能够产生随机数的随机池中。
除了测定具有明显熵的物理事件以外,还可以测定计算机中快速更改的其它信息,
—43—
然后同样将它加到池中。
基于软件的解决方案通常每秒平均只能得到几个字节的高质量随机信息,这意味着利用软件来生成随机数的速度不够理想。
使用适当的得到好的随机性
4.2 OS 高级操作系统正逐步直接在级别解决随机性的问 OS 题。
一个很好的例子就是。
Linux 操作系统(以上)提供本质上随机(或者至Linux 1.3.30少具有强烈随机性的部件)的库数据。
这些数据通常来自于设备驱动程序。
例如,键盘驱动程序收集两个按键之间时间的信息,然后将这个环境噪声填入随机数发生器库。
随机数据存储在熵池中,它在每次有新数据进入时进行搅拌。
这""种搅拌实际上是一种数学转换,帮助提高随机性。
当数据添加到熵池中后,系统估计获得了多少真正随机位。
从 /dev/中读取字节后,熵池就使用算法进行密码散random MD5 列,该散列中的各个字节被转换成数字,然后返回。
如果在熵池中没有可用的随机性位,作为熵池的另一个接口/dev/也总是返回随机数。
urandom 发生器
4.3 Blum Blum Shub 一种不依赖于散列函数的伪随机数发生器是 Blum Blum 发生器。
为获得最好效果,这种发生器要求使用基于Shub 随机输入的某些数据产生它。
算法与
Blum Blum Shub RSA 公钥算法非常相似,它们都是基于大数分解的难度来获得安全性的。
三种随机数生成器的比较
5 由以上对种随机数生成器的讨论,可以看出,传统的3伪随机数生成器,具有随机数产生速率高的优点,但它很容易被攻破,因此不适合对安全性要求高的场合。
利用软件来生成随机数有相对较好的随机性,但它们的生成速度比较慢,已越来越不能够适应我们的要求。
而基于硬件的随机数
发生器,它可以执行非常好的性能,却往往由于其昂贵的价格或缺少普遍可用性而不实用。
结束语
6 随着计算机技术和半导体集成技术的日益发展,利用硬件来构件真随机数生成器已经逐渐成为新的发展方向。
目前世界上已经有一些真随机数产生器,比如公司的根据热Intel 噪声制作的真随机数产生器和瑞士日内瓦大学根据量子效应制作的真随机数产生器,我国的中科院研究生院信息安全国家重点实验室也已研制出真随机数产生器DCS&DSTWNG-,目前正在研制更高频率的真随机数产生器。
4随着计算技术的发展,密码算法要求的密钥越来越长,特别是某些非对称密码体制和认证算法中以及在通信量信息保护中对密钥的长度和随机性提出了更高的要求,也就要求随机数生成器必须具备更好的随机性和更高的速率;与此同时,我国的半导体技术近年得到了很大发展。
因此,用硬件来实现真随机数生成器必将有广阔的发展前景。
参考文献
1 Knuth D E. The Art of Computer Programming.Addison-Wesley: Reading, MA, 1997
2 Hellekalek P. Inversive Pseudorandom Number Generators: Concepts, Results, and Links. Proceedings of the 1995 Winter Simulation Conference, 1995
—3 Schneier B.Applied Cryptography Protocols, Algorithms and Source Code in C. John Wiley & Sons, 1994
4 Michael G F. Concept for a High Performance Random Number Generator Based on Physical Random Phenomena. 1985
5 Eastlake D S, Crocker J, Schiller J. Randomness Recommendations for Security. Internet Engineering Task Force, RFC 1750, 1994
(上接第页)
15是开放的:可以是层次型的,也可以是关系型的,或者任何自定义的结构,甚至也可以是完全松散的。
无疑,的XML 数据检索、查询是非常重要的一个应用领域,本文所提到的应用方法还仅仅是其中一种很初步的方法。
但即使是这种初步方法,目前也还存在一些问题。
首先,在上应用必须形成规范。
目前,DOM XPath W3C 正在讨论一个草案,准备在中增加的接口DOM 3XPath [4]。
这个草案明确了在上执行表达式的运算对象和运DOM XPath 算结果,澄清了节点和节点之间一些不一致的地DOM XPath 方,还考虑了数据的动态性,提供了静态保持运算结DOM 果的方法。
其次,下列的几个问题也是必须考虑的:
・如果文档中用指定样式表,如何创XML xsl-styelsheet XSLT 建和访问这个?
XSLT DOM ・如何在中动态地改变所联系的样式表?
XML DOM XSLT ・如何动态地让根据所联系的进行转XML DOM XSLT DOM 换?本文例子使用的是私有的方法,必须有规范的、统一的方法。
其实,用表达式进行数据查询只是现阶段可实际XPath 应用的一种过渡手段。
从长远看,应该有一种类似于关系数据库语言的查询语言。
有一个工作组正在起草一SQL W3C 种数据库的查询语言XML XQuery [5],这种语言利用的
XPath 路径表达式定位中的节点,有条件表达式和分支语句XML (………,也有循环控制语句……,if then else )(for where .)有排序子句,还有一套内置的函数可用于求和、求(sortby)平均值、求最大最小值等运算,可以实现条件查询、排序、过滤、联结、分类汇总等数据库操作。
目前尚未成XQuery 为的正式建议,开发这方面的应用程序为时尚早,但W3C 一旦形成正式建议并有了实现该规范的工具软件,相信将会很快获得广泛的应用。
参考文献
1 World Wide Web Consortium. Document Object Model (DOM) Level
2 Specification. W3C Recommendation, 2000-11-13
2 World Wide Web Consortium. XSL Transformations (XSLT) Version 1.0. W3C Recommendation,1999-11-16
3 World Wide Web Consortium. XML Path Language (XPath) Version 1.0. W3C Recommendation, 1999-11-16
4 World Wide Web Consortium. Document Object Model (DOM) Level 3 XPath Specification Version 1.0. W3C Working Draft , 2001-10-31
5 World Wide Web Consortium. XQuery 1.0: An XML Query Language. W3C Working Draft, 2001-06-07
—44—
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆。