虚拟机上的随机数测试软件(NIST、Diehard、TestU01)的安装与测试

2,850 阅读9分钟

转载自厦门理工学院李沛林研究生

一、安装

1. 安装VMware虚拟机

(1)软件

Vmware-workstation-full-15.5.0-14665864.exe

(2)下载安装流程

可参考VM虚拟机下载及安装教程

2. 安装Linux系统

(1)软件

CentOS-7-x86_64-Minimal-1810.iso

(2)下载安装流程

可参考VMware虚拟机安装详细教程

(3)细微区别之处:

1. 处理器配置部分:处理器与内核数量根据机器配置与需求配置,如果电脑配置不高或者需求不强,对centos7而言,选择1处理器1内核或者1处理器2内核即可

2. 配置完密码后,用户可不用创建,默认登录名为root,密码为刚刚填写的密码,之后等待安装完成,选择reboot,输入用户名root与刚刚设置的密码(输入时不可见,且数字密码需要键盘字母上方的0-9输入,用小键盘会显示输入错误)

成功如图所示:

3. 网络配置

详细了解可参考:虚拟机网络适配器的三种模式详解及其配置

a. 首先查看NAT网段

b. 输入 vi /etc/sysconfig/network-scripts/ ifcfg-ens33

(注:vi相关操作,vi打开文件后,按i或者o进入编辑模式,修改完毕后,按ESC退出编辑模式,之后输入 :wq 确认修改,若输入 :q!则为放弃修改)

c. 输入:wq保存之后输入reboot重启,可Ping通网络或者连接得上x-shell即为配置完成。 输入ping www.baidu.com ping通即代表可连接网络,按Ctrl+C终止Ping进程。

3. 安装Xshell7与Xftp7

Xshell用于远程登录位于公网的远程的虚拟机,用于执行linux指令

Xftp用于与位于公网的远程的虚拟机进行文件的上传和下载。

(1)软件

Xshell-7.0.0054p.exe、xftp-7.0.0054p.exe

(2)下载安装流程

可参考:Xshell7 Xftp7的下载、安装、使用

**(3)**细微区别之处:

(前提:虚拟机需在vmware内能ping通网络) 

1. 使用 ip add 在linux的终端中查询ip地址

2. 打开Xshell7选择左上方菜单栏文件->新建

3. 之后会弹出SSH安全警告,选择保存并接受即可       

4. 安装相关工具

(1)安装ntpdate(时间同步)与vim

[root@random0 ~]# yum install ntpdate vim -y

出现Complete即为安装成功 ,其它安装同理,如下图所示

(2)安装zip解压工具包

[root@random0 ~]# yum install zip unzip -y

(3)安装gcc编译器与make工具

[root@random0 ~]# yum -y install gcc automake autoconf libtool make 

(4)安装dieharder关联库

 [root@random0 ~]# yum install gsl-devel -y  

5. 安装NIST

软件:sts-2_1_2.zip,NIST下载地址

(1)创建软件存放目录

 [root@random0 ~]# mkdir -p /opt/random/NIST 

[root@random0 ~]# mkdir -p /opt/random/testU01

 [root@random0 ~]# mkdir -p /opt/random/DieHarder

 用ls命令查看random文件夹是否有三个软件目录  

(2)传输文件

   Xshell连接上虚拟机后在上方打开xftp(也可以用xftp快捷方式打开) 

       物理机与虚拟机选择相应的文件路径,将右键压缩包,将压缩包传输到虚拟机上,右边出现压缩包即为传输成功 

**(3)**到安装路径下

[root@random0 ~]# cd /opt/random/NIST/

(4)解压缩

[root@random0 NIST]# unzip sts-2_1_2.zip

(注:linux shell 有命令补全功能,由于该文件夹下只有一个文件,所以输入unzip后,再输入一个空格隔开命令,再按下Tab键,即可自动补全文件名。其它命令同理,只要保证唯一性,即可自动补全。E.g:假如一个文件下有一个 abc_01dad 与abc_11fafe两个文件夹,假设你要用ls命令查看abc_01dad文件夹下的文件,你只要要输入 ls abc_0之后按下Tab键即可自动补全为abc_01dad)

(5)判断解压是否完成,进入解压文件夹

ls ./

(注:./代表当前路径,查看是否出现sts-2.1.2文件夹,判断是否解压完成)

 [root@random0 NIST]# cd sts-2.1.2/sts-2.1.2/  

(注:进入解压后的文件安装目录)

(6)编译安装

NIST [root@random0 sts-2.1.2]# make 

 运行NIST,出现以下命令即为安装成功(因为没带参数,所以肯定是运行失败的啦~) [root@random0 sts-2.1.2]# ./assess

6. 安装Diehard

软件:dieharder-3.31.0.tgz,Diehard下载地址

**(1)**到安装路径下

[root@random0 TestU01-1.2.3]# cd /opt/random/DieHarder/

(2)传输文件

(3)解压缩

[root@random0 DieHarder]# tar zxvf dieharder-3.31.0.tgz 

(4)进入解压文件夹

[root@random0 DieHarder]# cd dieharder-3.31.0 

(5)编译安装

 [root@random0 dieharder-3.31.0]# ./configure

 [root@random0 dieharder-3.31.0]# make

 [root@random0 dieharder-3.31.0]# make install 

成功如下图所示:

(6)验证

在任意目录,输入die再按下Tab键,能自动补全命令即为安装成功

7. 安装TestU01

软件:TestU01.zip,下载地址

**(1)**到安装路径下

[root@random0 TestU01-1.2.3]# cd /opt/random/testU01/

(2)传输文件

(3)解压缩

[root@random0 DieHarder]# unzip TestU01.zip

(4)进入解压文件夹

[root@random0 DieHarder]# cd TestU01-1.2.3/

(5)编译安装

[root@random0 dieharder-3.31.0]# ./configure

[root@random0 dieharder-3.31.0]# make

[root@random0 dieharder-3.31.0]# make install

成功如下图所示:

(6)配置环境变量

[root@random0 TestU01-1.2.3]# vim /etc/profile 

在末尾粘贴入下方内容(shift+g到文件底部,再按o进入编辑模式,再在下方插入) 

export LD_LIBRARY_PATH=/usr/local/lib 

export LIBRARY_PATH=/usr/local/lib 

export C_INCLUDE_PATH=/usr/local/include

之后按ESC退出编辑模式,输入:wq写入并退出

让配置生效 

 [root@random0 TestU01-1.2.3]# source /etc/profile 

二、测试

1. NIST测试

参考文献:NIST数字测试套件使用说明目前最新NIST随机数测试软件下载、安装、及使用教程NIST随机性检测方法及应用要点

(1)创建软连接

a. 返回/root路径(即进入虚拟机一开始的路径)

cd /root 

b. 创建NIST的软连接(类似win的快捷方式)

 ln -s /opt/random/NIST/sts-2.1.2/sts-2.1.2s/ nist 

c. 用ls 命令查看是否创建成功

(2)准备测试数据

      准备了31250个数据(也可是35000或40000),每个数据32位,可以每个数据一行,也可以所有数据一行。

       文件总位长度=每个数据流的位长度*数据流的个数(bitstreamsnum)。

       一般随机数文件在32M以内(2G内存支持),bit streams num(数据流个数)默认输入1。如果文件超过32M那么计算过程中内存不足,因此需要第一步输入文件总长度的1/8、1/16...,然后在此处输入8、16,等价于把源文件划分为等长的几条流,来做随机性检查。

用Xftp传输到虚拟机中或用vi/vim命令在虚拟机中创建并粘贴。

(3)开始测试

如图所示:

1. 到assess所在路径下,并输入每个数据流的位长度

cd /opt/random/sts-2.1.2/sts-2.1.2/

./ assess 1000000

(注:./assess ,程序要求我们输入要测试的每个数据流的长度。一般随机数文件在32M以内,bitstreamsnum数据流个数默认输入1,则第一步输入文件总bit长度=31250*32*1 =1000,000 bits。)

2. 输入0选择测试文件路径(注:此处输入错误想要删除请使用Ctrl+u

3. 输入随机数样本所在地址

/root/array.txt

4. 是否测试所有项目,选1是,否则选0

5. 是否选择默认的参数设置,选0是,选1-6则是修改对应项的参数

可参考:NIST测试结果分析

6. 输入数据流个数

       一般随机数文件在32M以内,bitstreamsnum默认输入1,如果文件超过32M,就把源文件划分为等长的几条流,来做随机性检查,要想在finalAnalysisReport.txt看到PValue值,数据流个数最好不小于10。

7. 询问待测数据的存放格式

[0]ASCII文件数据,ASCII 则是可以用任何文字处理程序阅读的简单文本文件

[1]二进制文件数据,图形文件及文字处理程序等计算机程序都属于二进制文件,这些文件含有特殊的格式及计算机代码 。

我们存在txt文件里,所以是[0]ASCII文件数据。

(4)查看结果

       当数据测试完成后,会在测试包所在目录的experiments->AlgorithmTesting目录下生成两个测试报告文件,他们分别是finalAnalysisReport.txt和freq.txt。 

       每个子项目目录下都有stats.txt 文件中描述的是P-value值,在ALPHA = 0.0100条件下(默认值),这个值大于0.01就表示通过测试,是随机的。

       查看内容可用cat命令,其中./代表当前目录,退出当前目录用 cd ../。

也可将测试结果通过Xftp传送到主机上查看。

2. Diehard测试

(1)参考文献

Dieharder Usage and Resultsdieharder

(2)开始测试

可以直接使用NIST中使用的array.txt作为测试样本

在任意路径下 [root@random0 ~]# dieharder -f /root/array.txt -a 

(-f 后跟测试文件路径, -a代表测试所有项目(时间较长)) 

回车运行,开始测试 ,结果如下

3. TestU01测试

参考文献:使用MinGW进行TestU01测试error: 'for' loop initial declarations are only allowed in C99 mode

(1)进入测试文件夹

[root@random0 TestU01-1.2.3]# cd /root //返回根目录

 [root@random0 ~]# mkdir testu01 //创建测试文件夹

 [root@random0 ~]# cd testu01/ //进入测试文件夹 

则在Xftp上如下图:

(2)准备测试文件

       TestU01直接测试的必须是一个能生成[0,1)之间浮点数的函数或一个能生成32位全随机无符号整数的函数。所以在用的时候你要先定义一个可以输出成32位随机整数的函数。 

**方法1:**在电脑上写好测试程序,通过Xftp传输到测试文件夹/root/testu01

**方法二:**在Xshell上编写测试程序

[root@random0 testu01]# vim mytest.c 

 编写测试程序,按i进入编辑模式,完成后再按ESC退出编辑模式。输入 :wq保存并退出 。

(3)测试

1. 编译C

[root@random0 testu01]# gcc mytest.c -o mytest -ltestu01 -lprobdist -lmylib -lm

2. 运行测试

[root@random0 testu01]# ./mytest

结果如下:

(4)可能出现的错误

使用gcc编译代码出错,如下:

错误处:

原因:gcc基于c89标准,在gcc中直接在for循环中初始化了增量,这语法在gcc中是错误的。

方法一:必须先定义i变量:

方法二:换成C99标准就可以在for循环内定义i变量了:

gcc src.c -std=c99 -o src