boost检验:多项式随机性检验
booltest的Python项目详细描述
booltest
布尔prng测试仪-分析prng的统计特性。
基于我们在Secrypt 2017
发表的论文的随机性测试仪它是如何工作的?
booltest生成一组布尔函数,计算预期的 对真实随机数据进行评估和比较时的结果分布 这是对测试数据的评估。
PIP安装
booltest可通过pip:
pip install booltest
本地安装
从本地目录:
pip install --upgrade --find-links=. .
实验
首次发射
以下命令生成两个不同的文件:random和 零填充。两者都经过测试,文件之间的差异应该是 很明显。
dd if=/dev/urandom of=random-file.bin bs=1024 count=$((1024*10)) dd if=/dev/zero of=zero-file.bin bs=1024 count=$((1024*10)) booltest --degree 2 --block 256 --top 128 --tv $((1024*1024*10)) --rounds 0 random-file.bin booltest --degree 2 --block 256 --top 128 --tv $((1024*1024*10)) --rounds 0 zero-file.bin
Java随机
分析java.util.Random的输出,仅使用 指定的文件。分析100 MB的数据:
booltest --degree 2 --block 512 --top 128 --tv $((1024*1024*100)) --rounds 0 \ --poly-file data/polynomials/polynomials-randjava_seed0.txt \ randjava_seed0.bin
参考统计
为了测试测试的参考统计量,我们计算了多项式 对由^{tt3}生成的输入向量的测试$ -被认为是随机数据源。使用了randverif.py。
首先要验证的假设是:在零假设下 (统一输入数据),zscore测试是输入数据大小不变的。在其他方面 换句话说,测试的zscore结果不受数据量的影响 处理。
为了验证第一个假设,我们分析了1000个不同的测试向量 大小为1和10 MB,用于各种设置 (block \in {128, 256} x deg \in {1, 2, 3} x comb_deg \in {1, 2, 3}) 并比较结果。测试是用 assets/test-aes-size.sh。
第二个测试是确定随机数据的参考zscore值。为了 我们总共对10mb aes输入向量进行了100次不同的测试 测试组合: block \in {128, 256, 384, 512} x deg \in {1, 2, 3} x comb_deg \in {1, 2, 3}。
光环试验台
测试台=一组功能(例如,estream、sha3候选项等) 用各种多项式参数进行测试(例如, block \in {128, 256, 384, 512} x deg \in {1, 2, 3} x comb_deg \in {1, 2, 3})。
在测试期间调用eacirc生成器以从 电池功能。如果使用开关--data-dir,则testbed.py将 先查一下输出。
为了启动eacirc生成器,您可能需要在 你想测试的机器。编译说明在 页面底部。为了调用生成器,需要设置 环境
module add mpc-0.8.2 module add gmp-4.3.2 module add mpfr-3.0.0 module add cmake-3.6.2 export PATH=~/local/gcc-5.2.0/bin:$PATH export LD_LIBRARY_PATH=~/local/gcc-5.2.0/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=~/local/gcc-5.2.0/lib64:$LD_LIBRARY_PATH
为了启动testbed.py,有一个脚本 assets/aura-para.sh。它执行env设置,准备 目录,生成多个测试进程。
并行化以一种简单的方式完成。每个测试都有一个索引。这个 顺序是随机的,批处理中的每个进程都接受 属于他(例如,10个过程,每5个工作需要5个过程)。如果 排序在某种程度上不利于(例如,一个过程是 做了太多繁重的工作-deg3,combdeg 3)只是改变了 测试随机化器。
每个测试的结果都存储在一个单独的文件中。
标准功能-电池
本实验的目的是评估标准测试电池(例如, nist,diehard,testu01)他们在圆形电池上的表现如何 约化函数(例如,estream,sha3候选函数,…)
对于测试,我们使用来自eacirc的随机性测试工具包(rtt)。 项目。testbatteries.py为要测试的函数准备数据 以及向rtt提交测试的主bash脚本。
python booltest/testbatteries.py --email ph4r05@gmail.com --threads 3 \ --generator-path ~/eacirc/generator/generator \ --result-dir ~/_nni/home/ph4r05/testdata/ \ --data-dir ~/_nni/home/ph4r05/testdata/ \ --script-data /home/ph4r05/testdata \ --matrix-size 1 10 100 1000
兰迪
在randc上测试发现1000种不同随机种子的区分:
python booltest/randverif.py --test-randc \ --block 384 --deg 2 \ --tv $((1024*1024*10)) --rounds 0 --tests 1000 \ --poly-file polynomials-randc-linux.txt \ > ~/output.txt
为了从输出生成csv:
python csvgen.py output.txt > data.csv
Java测试-版本
openjdk version "1.8.0_121" OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-0ubuntu1.16.04.2-b13) OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) Ubuntu 16.04.1 LTS (Xenial Xerus)
发电机速度基准
表总结了生成10 MB数据所需的函数和时间。
Function | Round | Time (sec) |
---|---|---|
AES | 4 | 2.12984800339 |
ARIRANG | 4 | 9.43074584007 |
AURORA | 5 | 0.810596942902 |
BLAKE | 3 | 0.839290142059 |
Cheetah | 7 | 0.924134969711 |
CubeHash | 3 | 36.8423719406 |
DCH | 3 | 3.34326887131 |
DECIM | 7 | 51.946573019 |
DynamicSHA | 9 | 1.33032679558 |
DynamicSHA2 | 14 | 1.14816212654 |
ECHO | 4 | 2.15773296356 |
Fubuki | 4 | 1.81450080872 |
Grain | 4 | 67.9190270901 |
Grostl | 5 | 2.10276603699 |
Hamsi | 3 | 7.09616398811 |
Hermes | 3 | 1.46782112122 |
JH | 8 | 3.51690793037 |
Keccak | 4 | 1.31340193748 |
Lesamnta | 5 | 2.08995699883 |
LEX | 5 | 0.789785861969 |
Luffa | 8 | 2.70372700691 |
MD6 | 11 | 2.13406395912 |
Salsa20 | 4 | 0.845487833023 |
SIMD | 3 | 7.54037189484 |
Tangle | 25 | 1.43553209305 |
TEA | 8 | 0.981395959854 |
TSC-4 | 14 | 8.33323192596 |
Twister | 9 | 1.38356399536 |
安装
带PIP
的SCIPY安装pip install pyopenssl pip install pycrypto pip install git+https://github.com/scipy/scipy.git pip install --upgrade --find-links=. .
虚拟环境
通常建议为 项目:
virtualenv ~/pyenv source ~/pyenv/bin/activate pip install --upgrade pip pip install --upgrade --find-links=. .
FI MU上的AURA/AISA
module add cmake-3.6.2 module add gcc-4.8.2
Python2.7.14
booltest不适用于较低的python版本。使用pyenv到 安装新的python版本。它在内部下载python源代码 将其安装到~/.pyenv。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc exec $SHELL pyenv install 2.7.14 pyenv local 2.7.14
合同一般条件5.2
< >安装一个具有C++ 11支持的新的GCC。 http://bakeronit.com/2015/11/04/install_gcc/wget http://ftp.gnu.org/gnu/gcc/gcc-5.2.0/gcc-5.2.0.tar.bz2 tar -xjvf gcc-5.2.0.tar.bz2 module add mpc-0.8.2 module add gmp-4.3.2 module add mpfr-3.0.0 mkdir -p ~/local/gcc-5.2.0 cd local mkdir gcc-build # objdir cd gcc-build ../../gcc-5.2.0/configure --prefix=~/local/gcc-5.2.0/ --enable-languages=c,c++,fortran,go --disable-multilib make -j4 # spend a long time make install # Add either to ~/.bashrc or just invoke on shell export PATH=~/local/gcc-5.2.0/bin:$PATH export LD_LIBRARY_PATH=~/local/gcc-5.2.0/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=~/local/gcc-5.2.0/lib64:$LD_LIBRARY_PATH
在aura/aisa上编译eacirc生成器
module add mpc-0.8.2 module add gmp-4.3.2 module add mpfr-3.0.0 module add cmake-3.6.2 export PATH=~/local/gcc-5.2.0/bin:$PATH export LD_LIBRARY_PATH=~/local/gcc-5.2.0/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=~/local/gcc-5.2.0/lib64:$LD_LIBRARY_PATH cd ~/eacirc mkdir -p build && cd build CC=gcc CXX=g++ cmake .. make