英语法语西班牙文

OnWorks 网站图标

dieharder - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 dieharder

这是命令 dieharder,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


顽固的人 - A 测试 标杆 工具 随机 发电机。

概要


dieharder [-a] [-d dieharder 测试编号] [-f 文件名] [-B]
[-D 输出标志 [-D 输出标志] ... ] [-F] [-c 分隔符]
[-g 生成器编号或 -1] [-h] [-k ks_flag] [-l]
[-L 重叠] [-m multiply_p] [-n 元组]
[-p 个样本的数量] [-P Xoff]
[-o 文件名] [-s 种子策略] [-S 随机数种子]
[-n ntuple] [-p 样本数] [-o 文件名]
[-s 种子策略] [-S 随机数种子]
[-t 测试样本数] [-v 详细标志]
[-W 弱] [-X 失败] [-Y Xtrategy]
[-x x值] [-y y值] [-z z值]

顽固的人 配置


-a 使用标准/默认选项运行所有测试以创建一个
用户可控的报告。 要控制报告的格式,请参阅下面的 -D。
控制测试的功效(它使用 tsamples 的默认值
通常不能改变,并且 psample 通常可以)将下面的 -m 视为
默认 psamples 数量的“乘数”(仅在 -a 运行中使用)。

-d test number - 选择特定的顽固测试。

-f 文件名 - 生成器 201 或 202 允许原始二进制或
要从文件中读取的格式化 ASCII 数字以进行测试。 生成器 200 次读取
来自标准输入的原始二进制数。 请注意:许多带有默认参数的测试
需要很多兰特! 查看 ASCII 的(必需)标头示例
格式化输入,运行

dieharder -o -f 例子.input -t 10

然后检查example.input的内容。 原始二进制输入读取 32 位
指定数据流的增量。 stdin_input_raw 接受来自原始数据的管道
二进制流。

-B 二进制模式(与下面的 -o 一起使用)导致输出 rands 以原始二进制写入,而不是
格式化的 ascii。

-D 输出标志 - 允许选择字段以包含在
顽固的输出。 每个标志都可以作为一个二进制数输入
特定的输出字段或标题或标志名称; 标志是聚合的。 查看全部
当前已知的标志使用 -F 命令。

-F - 按名称和编号列出所有已知标志。

-c 表分隔符 - 其中分隔符是例如 ',' (CSV) 或 ' '(空格)。

-g 生成器编号 - 选择特定的生成器进行测试。 使用
-g -1 将所有已知的生成器打印到显示器上。

-h 打印上下文相关的帮助——通常是用法(此消息)或
如果输入为例如 dieharder -d 3 -h,则测试概要。

-k ks_flag - ks_flag

0 很快,但对于 psamples > 4999(默认值)来说有点马虎。

1 慢得多,但对于更多的 psamples 更准确。

2 仍然较慢,但(我们希望)准确到任意数量的机器精度
psamples 高达一些未知的数值上限(它已被测试到
至少几十万)。

3 是 kuiper ks,速度快,对于小样本非常不准确,已弃用。

-l 列出所有已知的测试。

-L重叠

1(使用重叠,默认)

0(不使用重叠)

在 operm5 或其他支持重叠和非重叠样本模式的测试中。

-m 乘法_p - 乘以 -a(ll) 中的默认 psamples # 运行以启动
解决失败的问题。 -n ntuple - 为短位测试设置 ntuple 长度
允许长度变化的字符串(例如 rgb bitdist)。

-o 文件名 - 输出 -t 计算从当前生成器到文件的随机数。

-p count - 设置每次测试的 p 值样本数(默认为 100)。

-P Xoff - 设置在决定之前将累积的 psamples 的数量
发电机是“好”的,真的,甚至可以通过 -Y 2 T2D 运行。 目前
默认值为 100000; 最终它将从 AES 衍生的 T2D 测试失败中设置
全自动可靠操作的阈值,但就目前而言,它更像是一个
“无聊”阈值由人们可能合理地等待任何给定的时间设置
测试运行。

-S 种子 - 其中种子是一个单位。 覆盖默认的随机种子
选择。 忽略文件或标准输入。

-s 策略 - 如果策略是(默认)0,顽固的重播(或
在选择随机数生成器时在开始时倒带一次,并且
然后再也不会了。 如果策略不为零,则生成器在以下位置重新播种或倒带
每个测试的开始。 如果指定了 -S 种子,或者使用了文件,则此
意味着每个测试都应用于相同的序列(这对验证很有用
和测试顽固者,但不是测试 rngs 的好方法)。 否则一个新的随机
为每个测试选择种子。

-t count - 设置每次测试中使用的随机实体的数量,其中
可能的。 请注意——一些测试有固定的样本量; 其他是可变的,但
有实用的最小尺寸。 建议您从 -a 中使用的值开始
并在逐个测试的基础上仔细进行实验。

-W 弱 - 设置“弱”阈值以使测试或多或少
在例如测试到销毁运行期间宽容。 当前默认值为 0.005。

-X fail - 设置“失败”阈值以使测试或多或少
在例如测试到销毁运行期间宽容。 当前默认值为 0.000001,
这基本上是“零假设的某些失败”,所需的模式
可重现的发电机故障。

-Y Xtrategy - Xtrategy 标志控制新的“测试失败”(T2F)
模式。 这些标志及其模式的作用如下:

0 - 只用指定数量的 tsamples 和 psamples 运行 dieharder,不要
根据结果​​动态修改运行。 这是它一直运行的方式,并且
是默认值。

1 - “解决歧义”(RA)模式。 如果测试返回“弱”,这是一个
不希望的结果。 这到底是什么意思? 如果你运行一个很长的测试系列,
你会偶尔看到完美生成器的微弱回报,因为 p 是
均匀分布,并且会不时出现在任何有限区间内。
即使测试运行返回多个弱结果,您也不能确定
发电机出现故障。 RA 模式添加 psamples(通常以 100 个为块)直到
测试结果最终稳固不弱或进展到明确的失败。 这个
在道德上等同于多次运行测试以查看弱结果是否
可重复,但消除了过程中个人判断的偏见,因为
默认的失败阈值非常小,并且不太可能达到
即使在多次运行中也是随机的。

本篇 选项 应该 仅由 be 用过的 - -k 2.

2 - “测试破坏”模式。 有时您只想知道在哪里或是否有
生成器将 .I 曾经失败过测试(或测试系列)。 -Y 2 导致 psamples 为
一次添加 100,直到测试返回低于失败的总体 pvalue
阈值或达到指定的最大 psample 数(参见 -P)。

注意好! 在这种模式下,很可能会失败,因为 备用 零假设 -
测试本身是一个糟糕的测试并且失败了! 许多顽固的测试,尽管我们做得最好
努力,在数值上不稳定或只有大约已知的目标
统计数据或者是直线渐近的结果,最终会返回一个
即使对于黄金标准生成器(例如 AES),或对于
使用 AES、threefish、kiss 对 XOR 生成器进行了高度谨慎的处理,所有这些都同时加载并且
异或在一起。 因此使用这种模式是最安全的。我比较,
在 AES 上执行 T2D 运行以了解测试失败阈值
(我最终会做的事情并在网上发布,这样每个人都不必
独立完成),然后在您的目标生成器上运行它。 失败
AES 阈值数量级内的 psamples 数量应该是
可能被认为是可能的测试故障,而不是发电机故障。 失败在
水平明显低于已知的黄金标准发电机故障阈值
当然,可能是发电机的故障。

本篇 选项 应该 仅由 be 用过的 - -k 2.

-v 详细标志——控制调试输出的详细程度
只要。 可能对非开发人员用处不大,开发人员可以阅读
dieharder.h 中的 enum(s) 和测试源以查看哪些标志值打开输出
在哪些例程上。 1 是程序活动的非常详细的跟踪结果。

-x,-y,-z number - 一些测试的参数可以安全地改变
从他们的默认值。 例如,在顽固的生日测试中,可以改变
长度的数量,也可以变化。 -x 2048 -y 30 改变这两个
值,但仍应运行良好。 这些参数应该在内部记录
(它们存在的地方)在例如 -d 0 -h 可见注释中。

注意 好: 事实上,对 rngs 的评估可能完全不正确或
误导。 尽管我们正在努力,但顽固派仍然存在“糟糕的测试”
修复和改进它们(并尝试在可见的测试描述中记录它们
与 -g 测试编号 -h)。 特别是,“弱”pvalues 应该在两次测试中出现一次
一百,并且“失败”pvalues 应该发生百万分之一的测试,默认情况下
阈值 - 这就是 p 的意思。 使用它们的风险自负! 被警告!

或者更好的是,使用新的 -Y 1 和 -Y 2 解决歧义或破坏测试
上面的模式,与其中一种类似的运行方式相比
密码生成器,AES 或三鱼。

商品描述


顽固的人

欢迎使用顽固随机数测试器的当前快照。 它封装了
所有 Gnu 科学图书馆 (GSL) 随机数生成器 (rngs) 以及
来自 R 统计库的生成器数量,硬件来源,例如
/ dev /*随机,“黄金标准”密码质量生成器(用于测试
顽固的人,为了与新发电机进行比较)以及发电机
由用户贡献或在文献中找到 马具 可以给他们计时
并对它们进行各种随机性测试。 这些测试不同地来自
George Marsaglia 的“顽固的随机数测试电池”,NIST 统计测试
套件,并再次来自其他来源,例如个人发明、用户贡献、其他
(开源)测试套件,或文献。

dieharder 的主要目的是使计时和测试(伪)随机数变得容易
生成器,包括软件和硬件 rngs,以及一个完全开源的工具。 在
除了提供对所有内置生成器的“即时”访问测试之外,用户还可以
选择以下三种方法之一来测试自己的随机数生成器或源:unix
原始二进制(假定随机)比特流的管道; 包含(假定随机)的文件
原始二进制比特流或格式化的 ascii uint 或浮点数; 并将您的生成器嵌入
dieharder 的 GSL 兼容 rng 线束并将其添加到内置生成器列表中。
标准输入和文件输入方法在下面它们自己的部分中描述,正如建议的那样
随机数生成器测试新手的“最佳实践”。

使用 dieharder 的一个重要动机是整个测试套件完全是 Gnu
公共许可证 (GPL) 开源代码,因此而不是被禁止“查看
在引擎盖下”公开鼓励所有用户批判性地检查顽固分子
错误代码,添加新的测试或生成器或用户界面,或按原样自由使用
测试自己喜欢的候选 rngs 仅受 GPL 的约束。 作为一个
由于其开放性,数以百计的改进和错误修复已经
迄今为止由用户贡献,产生了一个更强大、更可靠的测试套件
比封闭和锁定源甚至开放源可能
(如 STS)缺乏动态反馈机制,允许更正
共享。

即使测试统计中的小错误也允许 替代 (通常未说明) null
假设成为 rng 测试的一个重要因素——不受欢迎的可能性
你的发电机很好,但它是 test 那是失败。 一个非常有用
顽固分子的特点是它至少是适度的 证实。 使用“金
标准”aes和threefish密码生成器,你可以观察这些生成器如何
在顽固的运行中执行与您希望在其上使用的一般精度相同的精度
您正在测试的发电机。 一般来说,顽固的测试在任何情况下都始终失败
两个黄金标准 rng 的给定精度水平(例如使用 -a -m 10 选择)
(和/或更好的 GSL 生成器,mt19937、gfsr4、taus)可能不可靠
精度,如果它们也使您的发电机出现故障也就不足为奇了。

鼓励统计专家尝试该套件,也许使用任何
示例首先调用下面,然后在自己的生成器上自由使用它或作为
用于添加自己的测试。 新手(无论是统计还是随机数
发电机测试)是 非常 鼓励阅读下一节关于 p 值和
零假设并使用更详细的输出报告运行测试套件几次
了解整个过程是如何运作的。

主页 示例


下面给出了如何设置管道或文件输入的示例。 不过建议
用户可以使用一些内置的生成器来熟悉 dieharder
在处理自己喜欢的生成器或充满可能的文件之前的报告和测试
随机数。

简单地查看 dieharder 为其默认生成器 (mt19937) 的默认标准测试报告
跑:

顽固分子-a

要提高标准 -a(ll) 测试可能失败的分辨率,请使用 -m
测试默认 pvalues 数的“乘数”(选择更多以制作
完整的测试运行需要一个小时左右而不是几天,因为它确实是一个详尽的
测试序列)运行:

顽固分子 -a -m 10

要测试不同的生成器(比如黄金标准 AES_OFB),只需指定生成器
在带有标志的命令行上:

顽固分子 -g 205 -a -m 10

参数可以按任何顺序排列。 也可以按名称选择生成器:

顽固的-g AES_OFB -a

申请 仅由 AES_OFB 生成器的顽固 opso 测试,按名称指定测试或
数:

顽固的-g 205 -d 5

or

顽固分子 -g 205 -d diehard_opso

dieharder 输出报告格式中的几乎每个方面或领域都可由用户选择
显示选项标志的方式。 另外,可以选择字段分隔符
由用户使输出特别容易解析 (-c ' ') 或导入
电子表格(-c ',')。 尝试:

dieharder -g 205 -d diehard_opso -c ',' -D test_name -D pvalues

查看极其简洁、易于导入的报告或

dieharder -g 205 -d diehard_opso -c ' ' -D 默认 -D 直方图 -D 描述

查看适合“初学者”的详细报告,其中包括每个的完整描述
测试自己。

最后,即使手册页不是
可用的。 所有用户都应该尝试以下命令,看看他们做了什么:

顽固的人 -h

(像上面一样打印命令概要)。

顽固分子 -a -h
顽固分子 -d 6 -h

(仅打印 -a(ll) 测试或指定的特定测试的测试描述)。

顽固分子 -l

(列出所有已知的测试,包括 rgb 认为它们在当前情况下的可靠性)。

顽固分子 -g -1

(列出所有已知的 rng)。

顽固分子-F

(列出与 -D 一起使用的所有当前已知的显示/输出控制标志)。

初学者和专家都应该知道,由顽固派提供的评估在
它的标准报告应该受到极大的怀疑。 完全有可能
一个生成器可以“通过”所有测试,就其各自的 p 值而言,但
将它们放在一起考虑时完全失败。 同样,它是 可能 那是一个
在典型的 -a(ll) 运行中,至少会在 0、1 或 2 次测试中显示为“弱”,并且
甚至可能在 1 次左右的时间内“失败”10 次测试。 要理解为什么会这样,它是
有必要了解一些 RNG 测试, p 值, 假设!

P值 AND 假设


dieharder 返回“p 值”。 要了解什么是 p 值以及如何使用它,它是
必须理解 假设, H0。

随机数生成器测试的零假设是“这个生成器是一个完美的
随机数生成器,并且对于任何选择的种子都会产生一个无限长的、唯一的
具有随机数的所有预期统计特性的数字序列,
到所有订单”。请注意,我们 知道 这个假设在技术上对所有人都是错误的
软件生成器,因为它们是周期性的并且没有正确的熵内容
这句话永远是真实的。 然而,许多 硬件 生成器也先验失败,
由于确定性物理学,它们包含微妙的偏差或相关性
是他们的基础。 大自然经常 变幻莫测 但很少 随机 和这两个词
不要(完全)是同一个意思!

零假设可以是 几乎 然而,这是真的。 无论是软件还是硬件
生成器可以是“随机的” 更多 它们的序列不能与随机区分开来
的,至少不容易或使用可用的工具(包括顽固的工具!)
零假设是一个实际的,而不是理论上纯粹的陈述。

去测试 H0 , 使用有问题的 rng 生成一系列可能是随机的
数字。 使用这些数字可以生成范围广泛的任何一个 test 统计
-- 考虑的经验计算数字 随机 样本 可能是也可能不是
协变服从 H0,取决于随机数的重叠序列是否
用于在生成统计数据时生成连续样本,从已知的
分配。 从统计量的目标分布的知识和
相关的累积分布函数 (CDF) 和 经验 随机值
生成的统计量,可以读出获得经验结果的概率
if 序列 真正 随机, 也就是说,如果原假设为真,并且
有问题的生成器是一个“好”的随机数生成器! 这个概率是“p-
值”的特定测试运行。

例如,要测试一枚硬币(或一系列位),我们可能会简单地计算
一长串翻转的头和尾。 如果我们假设硬币是“完美的
coin”,我们预计正面和反面的数量为 二项式 分布 并且可以很容易地
计算获得任何特定数量的正面和反面的概率。 要是我们
将我们记录的测试系列中正面和反面的数量与此分布进行比较
并发现得到我们得到的计数的概率是 非常 用,说,方式
我们怀疑这枚硬币不是完美的硬币,正面多于反面。 顽固的应用这个
非常测试(在数学上精确)和许多其他在此上运行的测试
由被测试的 rng 产生的随机位串的原理,以提供一个
rng 是多么“随机”的图片。

请注意,通常的教条是,如果 p 值很低——通常小于 0.05——一个
“拒绝”原假设。 总之,不可能得到结果
如果生成器是好的生成器。 如果它是任何其他值,则不会“接受”
发电机一样好,一个“未能拒绝”发电机对于这个特定的来说是坏的
测试。 因此,一个“好的随机数生成器”是我们无法制造的
失败 然而!

当然,这个标准在极端情况下是幼稚的 不能 be 用过的 - 更顽固! It
拒绝 p 值为 0.95 或更大的生成器同样有意义! 两者的
这些 p 值范围是 一样 不会 在任何给定的测试运行中,以及 应该 归还
对于(平均)所有测试运行的 5% 随机数生成器。 发电机
无法产生小于 0.05 的 p 值 5% 的时间用不同的
种子是一个 随机数发生器,一种 失败 零假设的检验。
由于 dieharder 默认返回超过 100 个 pvalues 测试 人们会期望任何
非常好的 rng 以这个标准“失败”这样一个天真的测试大约五次
单一顽固跑!

事实证明,p 值本身就是检验统计量! 就其性质而言,p 值
应均匀分布在 0-1 范围内。 在 100 多次独立测试中
种子,获得 0、1、2 或什至(很少)3 个 p 值不应该感到惊讶
小于 0.01。 另一方面,在 7-0.24 范围内获得 0.25 个 p 值,或者看到
70 个 p 值大于 0.5 应该使生成器高度怀疑! 怎么能
用户确定测试何时产生“过多”的任何特定值范围的 p?
还是太少了?

Dieharder 会自动为您完成。 实际上可以转换一个 将 p 值转化为
通过使用 Kolmogorov-Smirnov 将它们的分布与预期分布进行比较来获得 p 值
测试 p 的预期均匀分布。

这些 通过查看 p 值分布获得的 p 值应该依次为
均匀分布,原则上可以进行更多的 KS 测试
总计的。 a 的 p 值分布 非常好 发电机应该是 幂等的, 甚至
跨不同的测试统计和多次运行。

在任何聚合水平上的 p 值分布失败都会发出问题。 在
事实上,如果任何给定检验的 p 值都经过 KS 检验,并且这些 p 值是
然后进行 KS 测试,当我们向任一级别添加更多 p 值时,我们要么
观察 p 对均匀性的最终分布的幂等性, or 我们会观察
对单个 p 值的幂等性 零! 也就是说,一个好的生成器会产生一个粗略的
p 值的均匀分布,在特定意义上,
p 值的分布本身大致是均匀的,依此类推,而
坏的生成器会产生不均匀的 p 值分布,并且随着更多的 p 值
从非均匀分布中提取的数据被添加到其 KS 测试中,在某个时刻
失败将绝对无误,因为结果 p 值在
限制。 确实有问题!

问题是,有什么问题? 随机数测试本身很复杂
计算对象,并且它们的代码有可能被错误地构架或
舍入或其他数值 - 不是有条理的 - 错误导致
获得的某些 p 值的分布失真。 这不是闲的
观察; 当一个人致力于编写随机数生成器测试程序时,一个是
时刻 用“好的”(我们希望)随机数生成器测试测试本身,以便
零假设的严重失败表明不是一个糟糕的生成器,而是一个错误
测试代码。 上面的零假设是从一个正确的框架 理论
视图,但从 真实 实际 观点应该是:“这个发电机是一个
完美的随机数生成器,对于任意选择的种子都会产生无限长的,
具有随机的所有预期统计特性的唯一数字序列
数字,所有订单 这个测试是一个完美的测试并返回精确正确的 p-
来自测试计算的值。” 观察到此联合零假设的“失败” H0'
可能来自这些不相交组件中的一个或两个的故障,并且来自
第二 在测试开发过程中比第一次更频繁或更频繁​​。 什么时候
将测试的“分辨率”(接下来讨论)提高到发电机开始的位置
测试失败 一个人意识到,或者应该意识到,发展永无止境,新的
测试制度总是会揭示新的失败,不仅是生成器,还有代码。

话虽如此,顽固派最重要的优势之一是控制它
给你一个关键的测试参数。 从上面的注释中,我们可以看出我们
应该觉得 非常 不舒服 关于“失败”任何给定的随机数生成器
以 5% 甚至 1% 的标准为基础,尤其是当我们应用测试时 套房 喜欢
顽固的人返回超过 100 个(并且攀升)不同的测试 p 值,截至上次
快照。 我们希望失败是明确的和可重复的!

为了实现这一点,人们可以简单地提高其分辨率。 如果我们运行任何给定的测试
针对随机数生成器,它返回的 p 值(比如)0.007328,我们会
完全有理由怀疑它是否真的是一个好的发电机。 然而
得到这个结果的可能性并不是那么小——当一个人使用顽固的人时
一次几个小时这样的数字肯定会经常发生并且意味着
没有。 如果一个运行 再次测试(使用不同的种子或部分随机
序列)并得到 0.009122 的 p 值,第三次得到 0.002669——好吧,
那是连续 1 个 XNUMX%(或更少)的投篮,并且 应该只发生百万分之一
次。 那么,明确解决失败的一种方法是 提高 of p值
在测试运行中生成。 如果测试返回的 p 的实际分布是
不统一,KS 测试将 终于 返回一个没有歧义的 p 值
0.035517 而是 0.000000,后者在我们重新运行时一次又一次地产生。

出于这个原因,顽固的人是 非常 保守的 关于宣布rng“弱点”或
相对于任何给定测试的“失败”。 这些事情的内部标准是
目前 p < 0.5% 或 p > 99.5% 弱点(总水平为 1%)和 相当 更多
失败的严格标准:p < 0.05% 或 p > 99.95%。 请注意,范围是
对称——太高的 p 值与太低一样糟糕(而且不太可能),而且它是
危急 标记它,因为 rng 很有可能是 也有 一般,
并且不生产 更多 在所有顽固的测试中都具有低 p 值。 这是
最终的 kstest 至关重要,“直方图”选项可以在哪里
非常有用,可以帮助您可视化 p 分布中的失败——运行例如:

dieharder [随便] -D 默认 -D 直方图

并且您将看到未通过(或通过)任何给定的 pvalue 的原始 ascii 直方图
测试水平。

初步 -a(ll) 运行中的弱点或边缘失败的分散报告应该
因此不会立即引起恐慌。 相反,它们是要重复和观看的测试
为,更努力地使用 -m 选项来推动 rng 到 -a 或简单地增加 -p 为 a
具体测试。 Dieharder 允许增加生成的 p 值的数量 任何
测试,仅受足够随机数的可用性(用于基于文件的测试)和
时间,使失败明确。 一个测试是 真正 -p 100 弱几乎会
总是在某个较大的 psamples 值下严重失败,无论是 -p 1000 还是 -p 100000。
然而,由于顽固分子是一种研究工具,并且正在不断发展和
测试,是 非常 建议 人们总是考虑替代零假设
-- 失败是顽固的测试代码在某些限制下的失败
大数字——并至少采取一些步骤(例如同时运行相同的测试)
“黄金标准”生成器的解决方案)以确保故障确实可能是
在 rng 而不是顽固的代码中。

缺乏来源 随机数用作参考,验证测试
自己并不容易,总是会留下一些歧义(即使是 aes 或 Threefish)。
在开发过程中,通常可以做的最好的事情就是严重依赖这些“假定好的”
随机数生成器。 我们有许多理论上的生成器
期望非常好并且缺乏与某些已知的相关性的理由
潜在的维度,并且这也非常一致地测试得非常好。 经过
使用多个这样的生成器,而不仅仅是一个,人们可以希望这些生成器具有
(至少) 不同 相关性,并且不应在测试中全部失败
相同的方式和相同数量的 p 值。 当所有这些生成器 始终如一
在给定级别的测试失败,我倾向于怀疑问题出在测试代码中,而不是在测试代码中
发电机,虽然很难 肯定, 和许多错误
顽固的代码已被我自己发现并最终以这种方式修复
其他。

dieharder 的一个优点是它立即拥有许多这样的“好发电机”
可用于比较运行,由 Gnu 科学图书馆和用户提供
贡献(特别是 David Bauer,他善意地封装了 aes 和threefish)。 我用
AES_OFB、Threefish_OFB、mt19937_1999、gfsr4、ranldx2 和 taus2(以及“真随机”
来自 random.org 的数字)为此目的,我试图确保顽固的人会“通过”
特别是 -g 205 -S 1 -s 1 生成器在任何合理的 p 值分辨率下
-p 1000 或更远。

始终如一的测试(例如顽固的 operm5 和 sums 测试) 失败 在这些高
决议被标记为“可疑”——可能的失败 替代
假设——他们是 非常 已弃用! 他们的结果不应该用于测试
随机数生成器有待统计和随机数社区达成一致
这些测试实际上是有效和正确的,以便观察到的故障确实可以安全地
归咎于失败 零假设。

正如我一直强调的(有充分的理由!)顽固者是社区支持的。 我因此
公开请那些精通统计学的顽固用户帮我解决
正在实施的代码或算法。 我希望看到这个测试套件最终成为
验证 由一般统计界在开放环境中硬使用,其中
测试机制本身的每一个可能的故障都受到审查并最终
更正。 通过这种方式,我们最终将获得一套非常强大的工具,
那些很可能为我们提供非常具体的信息,不仅是关于失败,而且是关于
模式 失败以及测试的序列如何偏离随机性。

到目前为止,顽固派已经从社区中受益匪浅。 个人有
公开贡献的测试、要测试的新生成器以及对现有测试的修复
是通过他们自己使用测试仪器的工作来揭示的。 正在努力使
顽固的更便携,因此它将构建在更多平台上,速度更快,以便更多
可以进行彻底的测试。 请随时参与。

文件 INPUT


将 dieharder 与生成原始二进制文件的外部生成器一起使用的最简单方法
(假定是随机的)位是通过管道传输来自这个生成器的原始二进制输出(假定为
是一个 32 位无符号整数的二进制流)直接进入 dieharder,例如:

猫 /dev/urandom | ./死硬派 -a -g 200

继续尝试这个例子。 它将运行整个顽固的测试套件
由 linux 内置生成器 /dev/urandom 生成的流(使用 /dev/random 不是
推荐,因为它太慢而无法在合理的时间内进行测试)。

或者,可以使用 dieharder 来测试候选人生成的数字文件
随机数发生器:

顽固分子-a -g 201 -f random.org_bin

对于原始二进制输入或

死硬者-a -g 202 -f random.org.txt

用于格式化的 ascii 输入。

格式化的 ascii 输入文件可以接受 uint(0 到 2^31-1 范围内的整数,
每行一个)或十进制统一偏差至少有十个有效数字(可以
乘以 UINT_MAX = 2^32 以产生一个不降低精度的 uint),也是一个
每行。 位数较少的浮点数几乎肯定会失败位级测试,尽管
他们可能会通过一些作用于均匀偏差的测试。

最后,可以很容易地将任何生成器包装在同一个 (GSL) 随机数线束中
由 dieharder 内部使用,并以与任何其他内部测试相同的方式对其进行测试
顽固分子认可的发电机。 在可能的情况下强烈建议这样做,
因为顽固的人需要使用 很多 随机数以彻底测试生成器。 一种
内置生成器可以简单地让顽固分子确定它需要多少并生成它们
根据需要,太小的文件将“倒带”并将测试结果呈现在
发生倒带的嫌疑。

请注意,文件输入 rands 是按需交付给测试的,但是如果测试
需要的不仅仅是可用的,它只是简单地倒带文件并再次循环,并且
一次又一次,根据需要。 显然,这显着减少了样本空间,并且可以
导致 p 值直方图的结果完全不正确,除非有足够的
rands 不重复地运行每个测试(重复使用序列是无害的)
不同的测试)。 让用户当心!

最佳 实践


希望测试他们正在使用的发电机的新用户的常见问题
为了乐趣或利润(或两者兼而有之)是“我应该如何将其输出变成顽固的人?” 这是一个
不平凡的问题,因为顽固的消费 巨大 一个完整的随机数
测试周期,然后有像 -m 10 或 -m 100 这样的功能可以让人们毫不费力地
需要 10 或 100 倍的数量才能对新发电机施加更大的压力。

甚至 - 文件 支持 在顽固中,很难提供足够的随机
文件中的数字才能真正让顽固的人感到高兴。 因此是 非常 建议
之一:

a) 编辑随机数生成器的输出阶段并让它写出它的
生产到标准输出作为 随机 -- 基本上创建 32 位无符号随机数
整数并将它们作为例如字符数据或原始二进制直接写入标准输出。 注意
这是 而不去 与编写原始浮点数相同(根本不会是随机的
作为比特流)并且 uint 的“字节序”对于 null 应该无关紧要
“好”生成器的假设,因为随机字节在任何顺序中都是随机的。 曲柄
生成器并将该流送入如上所述的管道中的硬脂机。

b) 使用 GSL-wrapped dieharder rngs 的样本类似地包裹你的生成器(或
调用生成器的硬件接口)。 按照 ./dieharder 中的示例进行操作
源目录将其添加为命令行界面中的“用户”生成器,重建,
并将生成器作为“本机”顽固生成器调用(它应该出现在列表中
正确完成时由 -g -1 生成)。 这样做的好处是你
然后可以(如果您的新生成器非常成功)将其贡献给顽固派
项目,如果你愿意! 更不用说它使测试变得非常容易这一事实。

大多数用户可能至少在开始时会选择选项 a),但请注意 b) 是
可能比你想象的要容易。 顽固的维护者 五月 可以帮到你
如果遇到麻烦,可以使用它,但没有承诺。

警告!


对那些测试随机数文件的人的警告。 dieharder 是一种工具
测试 随机 发电机 而不去 of 随机 数字! 太极端了
试图将随机数文件“证明”为随机是不合适的,因为它
未能“失败”任何顽固的测试,例如顽固的-a 次运行。 说穿,
如果拒绝所有在 0.05 级别(或任何其他级别)未通过任何测试的文件,则
可以肯定的是,有问题的文件是 而不去 随机,作为一个真正的
随机序列将在 0.05% 的时间内在 5 水平上失败任何给定的测试!

换句话说,由 a 生成的任何数字文件 发电机 那个“失败失败”
顽固的套件应该被认为是“随机的”,即使它包含的序列
很可能在某个特定的截止点“失败”任何给定的测试。 人们必须假设通过
对生成器本身进行更广泛的测试,确定了
涉及的测试是 全球 正确分布,以便例如在 0.01 级别失败
平均而言,在许多测试中,发生的时间不超过也不低于 1%。 如果
一个特定文件在此级别产生故障,因此可以安全地假定
那是一个 随机 从生成器可能的数千个类似文件中提取的文件
创建在所有测试级别都具有正确分布的 p 值和
聚合。

总而言之,使用 dieharder 来验证您的生成器(通过来自文件的输入或嵌入式
溪流)。 然后一定要使用您的生成器来生成文件或随机流
数字。 不要将顽固派用作接受/拒绝工具来验证 他们自己!

示例


要演示所有测试,请在默认 GSL rng 上运行,输入:

顽固分子-a

要演示对原始二进制位流的外部生成器的测试,请使用
标准输入(原始)接口:

猫 /dev/urandom | 顽固分子 -g 200 -a

要将其与 ascii 格式的文件一起使用:

顽固分子-g 202 -f testrands.txt -a

(testrands.txt 应该包含一个标题,例如:

#================================================== ==================
# 生成器 mt19937_1999 种子 = 1274511046
#================================================== ==================
类型:d
计数:100000
数量:32
3129711816
85411969
2545911541

等等)。

将它与二进制文件一起使用

顽固分子-g 201 -f testrands.bin -a

or

cat testrands.bin | 顽固分子 -g 200 -a

演示在输出行上使用“前缀”的示例
相对容易过滤输出报告的不同部分并将它们切碎
转换成可在其他程序或电子表格中使用的数字,请尝试:

dieharder -a -c ',' -D 默认 -D 前缀

显示屏玻璃制造 配置


从 3.xx 版本开始,dieharder 有一个生成表格数据的单一输出接口
每个测试,在标题中有共同的信息。 显示控制选项和标志可以
用于根据您的个人特定需求自定义输出。

这些选项由二进制标志控制。 这些标志及其文本版本是
输入时显示:

顽固分子-F

自己就行了。

通过将所有所需的选项标志相加,可以一次性输入所有标志。 为了
例如,可以通过添加 test_name (8) 的标志来选择非常稀疏的输出
和相关的 pvalues (128) 得到 136:

顽固分子 -a -D 136

由于标志是从零开始累积的(除非没有输入标志并且默认值为
使用)您可以通过以下方式完成相同的显示:

顽固分子 -a -D 8 -D pvalues

请注意,您可以按任意组合按值或按名称输入标志。 因为人们使用
更难获取值,然后将它们导出到电子表格中(逗号分隔
值)或过滤器脚本,您可以使用字段分隔符。 为了
例:

dieharder -a -c ',' -D 默认 -D -1 -D -2

产生非常适合导入电子表格的输出(请注意,可以减去
来自默认选项提供的基本字段集的字段值,只要它是
首先给出)。

一个有趣的选项是 -D 前缀标志,它打开一个字段标识符前缀
使过滤掉特定类型的数据变得容易。 然而,同样容易转动
任何特定类型的输出,直接通过
标志。

随机数生成器测试新手感兴趣的另外两个标志是 -D
直方图(打开基础 pvalues 的直方图,每个测试)和 -D 描述
(打开每个测试的完整测试描述)。 这些标志将输出表变成
更多的每个测试的一系列“报告”。

RELEASE 规则


顽固的人 完全是原始代码,任何用户都可以随意修改和使用,
前提是:

a) 保留原始版权声明,并且来源,包括所有
修改,在任何派生出版物时公开提供。 这个
是根据 Gnu 公共许可证的规则和精神的开源软件。
请参阅随附文件 COPYING,该文件也必须随任何重新分发。

b) 代码的主要作者 (Robert G. Brown) 得到了适当的认可,并且
在任何派生出版物中引用。 强烈建议 George Marsaglia 和
Diehard 套件和 Statistical Test Suite 的各个作者是类似的
承认,尽管该套件与这些随机数测试不共享实际代码
套房。

c) 对计划的准确性、适用性和有效性负全部责任
取决于用户和/或修改器。 正如随附文件中明确说明的那样
版权.h:

版权持有人不承担与本软件有关的所有保证,包括所有
适销性和适用性的暗示保证,在任何情况下版权持有人均不承担
对任何特殊、间接或后果性损害或任何损害承担责任
由于使用、数据或利润的损失,无论是在合同行为中,还是疏忽
或其他侵权行为,因使用或执行
本软件。

致谢


本组曲的作者衷心感谢 George Marsaglia(本书的作者)
顽固的测试套件)和 NIST 特别出版物 800-22(其中
描述了用于测试伪随机数生成器的统计测试套件
密码应用程序),对其中的测试进行了很好的描述。 这些
描述使该套件能够使用 GPL 进行开发。

作者还想重申,学术上的正确性和准确性
这些测试的实施是他的唯一责任,而不是作者的责任
Diehard 或 STS 套件。 在他认为适合修改那些的地方尤其如此
从他们严格的原始描述中进行测试。

版权


GPL 2b; 请参阅该程序源代码随附的文件 COPYING。 这是
“标准 Gnu 通用公共许可证版本 2 或任何更高版本”,带有一个未成年人
(幽默)下面列出的“饮料”修改。 注意这个修改大概是
在法律上是不可辩护的,并且可以根据荣誉规则真正遵循。

至于我个人对饮料的喜好,红酒很棒,啤酒很好喝,还有
可乐或咖啡或茶甚至牛奶可以为宗教或个人的人所接受
原因希望避免给我的肝脏带来压力。

这款 饮料 修改 GPL:

本软件的任何满意用户应在与本软件的主要作者会面后
软件第一次在适当的情况下,提出购买他或她
或他们的饮料。 这种饮料可能含酒精也可能不含酒精,这取决于个人
提供者的伦理和道德观点。 饮料费用不超过一美元
(虽然它肯定可能是要约人的心血来潮:-)并且可能被接受或拒绝
要约人没有进一步的义务。 没有必要重复
在第一次见面后提供,但它不会受到伤害......

使用 onworks.net 服务在线使用 dieharder


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad