转载自厦门理工学院李沛林研究生
一、安装
1. 安装VMware虚拟机
(1)软件
Vmware-workstation-full-15.5.0-14665864.exe
(2)下载安装流程
可参考VM虚拟机下载及安装教程
2. 安装Linux系统
(1)软件
CentOS-7-x86_64-Minimal-1810.iso
(2)下载安装流程
(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)下载安装流程
**(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 Results 、dieharder
(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