【问题标题】:Can the uncommon maths library be trusted? [closed]不常见的数学库可以信任吗? [关闭]
【发布时间】:2010-10-07 14:29:28
【问题描述】:

有一个名为Uncommon Maths 的Java 库声称提供比Sun 和(可能)甚至是BouncyCastle 更好的随机数生成器。如何确定他们的图书馆是否可信?我信任 Sun 和 BouncyCastle,因为很多重要的公司都使用他们的东西。目前尚不清楚 Uncommon Maths 是否属于同一类别。有什么想法吗?

【问题讨论】:

  • 可以自行询问开发者:stackoverflow.com/users/5171/dan-dyer
  • Uncommon Maths 源自 Watchmaker Framework,这是一个进化计算库,也是由 Dan Dyer 编写的。它已经存在了很长时间,并且被用于几个 Apache 项目。我认为它的社区信任历史证明了它的价值。

标签: java random


【解决方案1】:

好问题;)

所有的 RNG 算法都是比我聪明的人发明的著名算法。我是程序员,不是数学家。我刚刚移植了原始的 C 代码。所以你必须希望我没有在转换中引入任何错误。

与大多数开源软件一样,没有任何保证。如果你想用它来模拟,我认为这是一个非常好的选择。如果您想将其用于加密,Fortuna 之类的会更好。

Uncommons Maths 没有像某些库那样广泛使用。它每周有 5 到 20 次下载。我不知道其中有多少人实际上继续在严肃的应用程序中使用它。我将它用于evolutionary computation 和一些我一直在玩的与扑克相关的琐碎程序。

我在每个 RNG 实现上都运行了 Diehard,它没有突出任何缺陷。也就是说,Diehard 的结果并不是最容易解释的:

因此,您不应该感到惊讶 偶尔接近 0 或 1 的 p 值,例如 作为 .0012 或 .9983。当一个比特流 真的失败了,你会得到 ps of 0 or 1 to six or more places. By all means, do not, as a Statistician might, think that a p < .025 or p> .975 means that the RNG has "failed the test at the .05 level". Such ps 在数百个中发生 DIEHARD 生产的,即使是好的 随机数生成器。所以请记住“p 发生”。

Uncommons Math RNG 都满足这种对成功的模糊定义。在 0.025 .. 0.975 范围之外有一两个 p 值,但没有一个“失败”。这与使用 Java 的 SecureRandom 获得的结果相当(并且优于 java.util.Random,后者确实“大失败”)。

如果你想自己测试一下,发行版中有一个名为DiehardInputGenerator 的类。这会生成运行 Diehard 所需的 12mb 文件。

【讨论】:

  • 有将 Fortuna 移植到 Java 的计划吗? :) FSF 推出了 Java 版本,但它是 GPL 并且为方便起见没有扩展 java.util.Random:docjar.com/html/api/gnu/javax/crypto/prng/Fortuna.java.html
  • +1 - 很棒的工作,丹。做得很好。
  • Fortuna 是真正的腰带和大括号的东西。它管理多个熵源并从妥协中恢复。 Uncommons Maths AESCounterRNG 是 Fortuna 使用的核心 PRNG,但它省略了熵池、自动重新播种和种子文件管理。
  • 我已经为以前的项目(除了种子文件管理)用 Java 实现了 Fortuna 的变体。我们使用硬件 RNG(通过 JNI)来获取熵。这对于 Uncommons Maths 来说太过分了。重点不是密码学。
【解决方案2】:

Uncommon Maths 声称通过了Diehard tests。据我所知,这是可靠的。

您始终可以成为一名科学家,并为自己重新运行这些测试作为独立检查。

【讨论】:

    【解决方案3】:

    编写您自己的测试。

    可以使用chi-square test 对随机数生成器进行基本检查

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多