perlab-uc3m/randlab

GitHub: perlab-uc3m/randlab

集成多种随机数生成器质量测试套件的CLI工具。

Stars: 0 | Forks: 0

# randlab ### 安装 安装程序在存在时重用管理的源缓存,或者从官方GitHub仓库克隆。它运行 `configure` 和 `make`,然后构建 `.randlab/tools/testu01/testu01_file_runner`,这是一个小的C程序,它静态链接到构建的TestU01库,并调用官方的文件电池函数,而不修改上游源。 ### 数据大小要求 TestU01文件电池需要一个二进制文件和一定数量的位来测试。对于每个测试,TestU01将文件重置并从开头开始;如果请求的位数超过文件大小,TestU01将使用可用的位。包装器从活动配置文件中选择一个固定的位数: | 配置文件 | 测试位数 | 最小输入 | |---------|-------------|---------------| | `quick` | 2^20 bits | 131,072 bytes | | `nist-minimum` | 2^25 bits | 4,194,304 bytes | | `paper` | 2^30 bits | 134,217,728 bytes | `Rabbit` 是广泛的二进制位流电池。`Alphabit` 特别针对硬件随机位发生器,并测试重叠的位模式。`BlockAlphabit` 在位块重新排序后重复 Alphabit,因此是三者中最慢的。 ### 输出和指标 适配器抑制了TestU01的每个测试的详细输出,并解析最终的总结报告。它记录电池名称、测试位数、统计数量以及TestU01报告的每个p值,这些p值在它的怀疑区间 `[0.001, 0.9990]` 之外。如果出现任何可疑的p值,则标记套件为 `failed`,如果总结报告说所有测试都通过,则标记为 `passed`。 ### 运行 ``` # 快速烟雾测试(2^20位 / 128 KiB 输入) randlab run --input sample.bin --format raw --suite testu01-rabbit --profile quick --out results/testu01-smoke # 更大的二进制文件电池 randlab run --input sample.bin --format raw --profile paper \ --suite testu01-rabbit --suite testu01-alphabit --suite testu01-block-alphabit \ --out results/testu01-001 # 使用一条命令运行所有注册的套件;跳过缺失的可选工具。 randlab run --input sample.bin --format raw --suite all --profile paper --out results/full-001 ``` ## gjrand testunif/mcp [gjrand](https://gjrand.sourceforge.net/) 包含一个名为 `testunif/mcp` 的均匀位统计套件。3.4.4存档被保存在共享顶级 `dependencies/` 目录下,因为它是请求的SourceForge包,但其README明确说明测试套件被省略在该回溯版本中。因此,包装器从 gjrand 4.3.0 构建了 `testunif/mcp` 套件,这是包含这些程序的最新存档。 ### 安装 gjrand 是默认安装集的一部分: ``` randlab deps install ``` 如果需要,安装程序从 SourceForge 下载 `gjrand.4.3.0.tar.bz2`,将其提取到管理的源缓存中,使用包的 POSIX shell 编译脚本构建 gjrand 库和 `testunif` 二进制文件,并将可运行的套件安装到 `.randlab/tools/gjrand/testunif/`。 ### 数据大小要求 `mcp` 从 stdin 读取原始二进制字节,并在子测试之间重置 stdin,因此包装器直接将输入文件作为可寻址的 stdin 处理打开。配置文件选择 mcp 大小参数: | 配置文件 | mcp 大小 | 最小输入 | |---------|----------|---------------| | `quick` | `10M` (`--tiny`) | 10,485,760 bytes | | `nist-minimum` | `100M` (`--small`) | 104,857,600 bytes | | `paper` | `1G` (`--standard`) | 1,073,741,824 bytes | 低于所选配置文件最小值的输入仍然通过常见的警告路径传递,但如果子测试无法读取它期望的字节,`mcp` 本身会报告问题。 ### 输出和指标 `mcp` 运行 13 个均匀位子测试,并打印单侧 P 值,其中较小的数字更差。适配器记录每个子测试 P 值以及最终总结行中的 `overall_p_value`: ``` Overall summary one sided P-value (smaller numbers bad) P = 0.948 : ok ``` 如果最终 P 值在或低于 `1e-6`,则标记套件为 `failed`;如果它在或低于 `0.1`,则仅发出警告;否则,标记为 `passed`。如果单个子测试 P 值在或低于 `0.1`,则作为警告发出,但不会使套件失败,除非最终 P 值超过失败阈值。 ### 运行 ``` # 快速烟雾测试(10 MB 输入) randlab run --input sample.bin --format raw --suite gjrand-mcp --profile quick --out results/gjrand-smoke # 论文配置文件(1 GiB 输入要求) randlab run --input sample.bin --format raw --suite gjrand-mcp --profile paper --out results/gjrand-001 ``` ## PractRand [PractRand](https://pracrand.sourceforge.net/) 是一个读取 stdin 中的原始字节并评估它们在可配置的上限(`tlmax`)内增加的数据大小的 C++ 统计测试电池。 与 NIST SP 800-22 不同,它不需要预先分割成位流,并且可以使用大量更少的数据检测到弱生成器。 ### 安装 PractRand 是默认安装集的一部分。不需要额外的标志: ``` randlab deps install # downloads, extracts, and compiles PractRand automatically ``` 首次运行时,安装程序: 1. 从 SourceForge 下载 `PractRand_0.96.zip` 到管理的源缓存。 2. 在该缓存中提取源树。 3. 使用 `g++` 编译静态库和 `RNG_test` 二进制文件。 4. 将二进制文件放置在 `.randlab/tools/practrand/RNG_test`。 后续调用如果源已存在,则跳过下载和提取。 先决条件:PATH 上的 `g++` (`sudo apt-get install g++` 或 `randlab deps install --install-system`)。 ### 数据大小要求 包装器通过 stdin 管道将原始字节喂给 `RNG_test stdin`,并通过 `-tlmax` 传递以限制消耗的总字节数。配置文件确定 `tlmax`: | 配置文件 | `tlmax` | 报告的检查点 | |---------|---------|---------------------| | `quick` | 1 MB (1,048,576 bytes) | 256 KB, 512 KB, 1 MB | | `nist-minimum` | 64 MB (67,108,864 bytes) | 8 MB, 16 MB, 32 MB, 64 MB | | `paper` | 256 MB (268,435,456 bytes) | 32 MB, 64 MB, 128 MB, 256 MB | `-tlmin` 设置为 `max(256 KB, tlmax / 8)`,以确保至少有两个中间检查点。 输入文件必须包含 **至少** `tlmax` 字节;`RNG_test` 读取这么多字节后才会生成其最终报告。 ### 输出和指标 PractRand 在消耗数据量加倍后打印检查点行和异常行(如果有): ``` length= 256 megabytes (2^28 bytes), time= 4.1 seconds no anomalies in 1520 test result(s) ``` 适配器将每行异常解析为 `Metric`: | 字段 | 内容 | |-------|---------| | `name` | PractRand 测试 ID,例如 `!BirthdaySpacings`,`BCFN(2+2,13-1,T)` | | `value` | 报告的 p 值 | | `passed` | 对于 `mildly suspicious`/`suspicious` 为 `True`;对于 `FAIL` 为 `False` | | `details` | `{"assessment": "...", "checkpoint": "256 megabytes"}` | 总是附加一个 `total_tests_at_final_checkpoint` 摘要指标。如果找到任何 `FAIL` 级别的异常,则整体套件状态为 `failed`;`suspicious` 和 `very suspicious` 异常产生警告,但不会使套件失败。 ### 运行 ``` # 论文配置文件(256 MB 输入要求) randlab run --input sample.bin --format raw --suite practrand --profile paper --out results/practrand-001 # 快速烟雾测试(1 MB 输入) randlab run --input sample.bin --format raw --suite practrand --profile quick --out results/practrand-smoke # 与其他套件结合运行 randlab run --input sample.bin --format raw --profile paper \ --suite practrand --suite nist-sts --suite entropy-iid \ --out results/combined-001 ```
标签:AIS 20/31, API安全, CSV输出, Cutter, C程序, Dieharder, GM/T 0005-2021, JSON输出, NIST标准, pocsuite3, PractRand, p值分析, SP 800-90B, TestU01, 事件追踪, 二进制文件, 代码库管理, 安全测试, 性能测试, 攻击性安全, 数据质量, 文件测试, 测试失败, 测试套件, 测试工具, 测试结果, 测试统计, 测试输出, 测试通过, 测试配置, 硬件随机数发生器, 软件测试, 逆向工具, 随机数生成, 静态链接