boost检验:多项式随机性检验

booltest的Python项目详细描述


booltest

Build Status

布尔prng测试仪-分析prng的统计特性。

基于我们在Secrypt 2017

发表的论文的随机性测试仪

它是如何工作的?

booltest生成一组布尔函数,计算预期的 对真实随机数据进行评估和比较时的结果分布 这是对测试数据的评估。

PIP安装

booltest可通过pip

pip install booltest

本地安装

从本地目录:

pip install --upgrade --find-links=. .

发动机

booltest使用本机python扩展来完成繁重的工作 bitarray_ph4

使用快速操作有效地执行位数组操作 在C中实现。

实验

首次发射

以下命令生成两个不同的文件: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数据所需的函数和时间。

FunctionRoundTime (sec)
AES42.12984800339
ARIRANG49.43074584007
AURORA50.810596942902
BLAKE30.839290142059
Cheetah70.924134969711
CubeHash336.8423719406
DCH33.34326887131
DECIM751.946573019
DynamicSHA91.33032679558
DynamicSHA2141.14816212654
ECHO42.15773296356
Fubuki41.81450080872
Grain467.9190270901
Grostl52.10276603699
Hamsi37.09616398811
Hermes31.46782112122
JH83.51690793037
Keccak41.31340193748
Lesamnta52.08995699883
LEX50.789785861969
Luffa82.70372700691
MD6112.13406395912
Salsa2040.845487833023
SIMD37.54037189484
Tangle251.43553209305
TEA80.981395959854
TSC-4148.33323192596
Twister91.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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
任务“:app:compiledBugJava”与“;”的java Android执行失败预期   cmd Java找不到主类   应用程序关闭后java还原Android回栈   无法识别Java中通过OutputStream发送到Firefox的HTML代码   Redis hmget的java超时时间   排序java如何生成按字母顺序排序集合的泛型函数   java从何处提取默认编码?   必须指定java Spring引导安全配置authenticationManager   创建目录的java单元测试代码   初始化期间的java空变量   java如何通过同一个交换机编码启用和禁用Wifi、移动数据和GPS?   java将顺序UI作业排队并在UI中显示它们   java JMS连接未连接到远程JBoss,但连接本地实例   swing Java多GUI窗口创建   包装jar的java OSGi服务   java意外字符“ï”,使用Jackson解析JSON