信息安全基础综合实验讲义(伪随机数产生器)-2012版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二部分 伪随机数产生器实验
在密码技术中,建立单个数是“随机的”并没有意义。对随机性的要求总是基于数的序列而言。真正的随机数符合均匀分布且其生成不能重现。计算机通过算法产生的随机数并不是真正意义上的随机数序列,只能称为伪随机数序列。产生伪随机数序列的算法称为伪随机数产生器。产生高质量的伪随机数序列对信息的安全性具有十分重要的作用,比如密钥产生、数字签名、身份认证和众多的密码学协议等都要用到随机序列。
一、实验目的
熟悉常用的伪随机数产生器算法。运用高级程序设计语言实现一种伪随机数产生器算法的程序,加深对伪随机数产生器算法的理解。
二、实验原理
计算机产生的随机数是使用确定的算法计算出来的。一旦知道了随机数算法和初始种子,就能够知道随机序列中任何一个随机数的值,因此,计算机产生的随机数是一种伪随机数。伪随机数的生成算法称为伪随机数产生器。伪随机数有多种生成算法。
1. 线性同余算法
到目前为止,使用最为广泛的随机数产生技术是由Lehmer 首先提出的称为线性同余算法,即使用下面的线性递推关系产生一个伪随机数列x 1,x 2,x 3,…
这个算法有四个参数,分别是:
a 乘数 0 ≤ a < m
c 增量 0 ≤ c < m
m 模数 m > 0
x 0 初始种子(秘密) 0
≤ x 0 < m 伪随机数序列{ x n }通过下列迭代方程得到:
1()mod n n x ax c m +=+
如果m 、a 、c 和x 0都是整数,那么通过这个迭代方程将产生一系列的整数,其中每个数都在0 ≤ x n < m 的范围内。数值m 、a 和c 的选择对于建立一个好的伪随机数产生器十分关键。为了形成一个很长的伪随机数序列,需要将m 设置为一个很大的数。一个常用准则是将m 选为几乎等于一个给定计算机所能表示的最大非负整数。因而,在一个32位计算机上,通常选择的m 值是一个接近或等于231的整数。此外,为了使得随机数列不易被重现,
可以使用当前时间的毫秒数作为初始种子的设置。
2. Blum Blum Shub算法
Blum Blum Shub(BBS)算法是一个流行的产生安全的伪随机数的方法,由Lenore Blum、Manuel Blum和Michael Shub在1986年提出。BBS的安全性基于对n的因子分解的困难性,即给定n,不能确定它的素因子p和q。BBS算法过程描述如下:
输入:无
输出:生成一个长度为l的伪随机比特序列b1, b2, b3…, b l。
(1)选择两个大素数p和q作为随机种子,要求它们被4除时都余3。即p≡q≡ 3 mod
4。
(2)令n = p x q,选择一个随机数s,使得gcd(s,n) =1。
(3)x0 = s2 mod n。
(4)i从1开始,不断重复以下操作,直到i经过逐次加1后超过l:
(4.1) x i= x i-12 mod n。
(4.2) b i = x i mod 2。 //每次迭代都取出x i最低位的比特。
(4.3) 输出b i。
美国NIST(美国标准与技术研究院)提供15项最新随机数测试标准,每项的测试结果均转换为p-value值进行判断,若p-value>=0.01,则说明该随机数序列具有随机性,否则不具有随机性。这15项测试如表2-1所示:
表2-1美国NIST15提供的最新随机数测试标准
序号名称说明
Test 频率测试
(Monobit)
1 Frequency
2 Frequency Test within a Block 块内频率测试
Test 流程测试
3 Runs
4 Test for the Longest Run of Ones in a Block块内最长游程测试
5 Binary Matrix Rank Test 二进制矩阵测试
Transform (Spectral) Test 离散付利叶测试
6 Discrete
Fourier
非重叠模板匹配测试
Template
7 Non-overlapping
Test
Matching
Test 重叠模板匹配测试
Matching
8 overlapping
Template
9 Maurer’s “Universal Statistical” Test Maurer's普通统计测试
Complexity
Test 线性复杂性测试
10 Linear
Test 连续测试
11 Serial
Test 近似熵测试
12 Approximate
Entropy
13 Cumulative Sums (Cusum) Test 累积和测试
14 Random
Test 自由游程测试
Excursions
Test 自由变量测试
Variant
15 Random
Excursions
三、实验环境
操作系统:Windows 2000/XP/2003或以上版本。应用软件:VC++ 6.0或以上版本。 四、实验内容和任务
本实验要求学生在掌握常用的伪随机数产生器算法的基础上,运用高级程序设计语言实现一种伪随机数产生器的算法,并通过具体运算测试函数的功能。表2-2给出伪随机数产生器算法的函数接口定义,作为编程实现参考。
表2-2 伪随机数产生器函数接口
函数unsigned long randLCG(unsigned long a, unsigned long c, unsigned
long m)
功能线性同余伪随机数产生器函数
输入a、c、m
输出长整型伪随机数
函数unsigned long randBBS(unsigned long n, unsigned int bitCount)
功能Blum Blum Shub伪随机数产生器函数
(两个模4余3的素数的乘积), bitCount (限定伪随机数的bit个数。
输入 n
例如,要产生32bits的随机数就将bitCount设置为32))
输出长整型伪随机数
线性同余伪随机数产生器的界面实例如图2-1所示。点击“线性同余产生器”按钮,选择伪随机数产生器算法产生伪随机数。点击“清空”按钮,可清空输入,以便重新输入测试值。
图2- 1线性同余伪随机数产生器界面
BBS伪随机数产生器的界面实例如图2-2所示。点击“BBS产生器”按钮,选择BBS 伪随机数产生器算法产生伪随机数。点击清空按钮,可“清空”输入,以便重新输入测试值。