【问题标题】:How to test a cryptographically secure random number generator如何测试加密安全的随机数生成器
【发布时间】:2013-04-12 08:10:20
【问题描述】:

或多或少出于好奇,什么定义了随机数生成器在密码学上是安全的?对非密码安全和密码安全生成器的测试会有所不同吗?

相关帖子在这里:How to test a random generator

【问题讨论】:

标签: testing random cryptography


【解决方案1】:

测试通用随机数生成器的质量通常涉及运行各种统计测试,这些测试表明其结果在某些方面没有偏差。 NIST 有一组用于此目的的测试,详见:http://csrc.nist.gov/groups/ST/toolkit/rng/index.html

证明随机数生成器在密码学上是安全的,根本不是测试的问题,而是证明的问题。这通常归结为表明,要从 RNG 的输出样本中预测未来(或猜测过去)的输出(在某些情况下,甚至在控制部分输入时),必须击败密码散列、密码或其他通常被认为难以解决的问题。这是一个基本上由人为驱动的过程;它不能机械地执行。

【讨论】:

  • 我对你的终点“它不能机械地执行”有异议。有许多方法可以显示机械化减少,仅仅因为这些机制往往需要知道机械化的博士并不意味着它们不存在。不过,我同意我敢打赌你的回应——它需要这样一位专家,这意味着标准太高,机械化没有意义。
  • @duskwuff 感谢您的回复。我主要研究统计测试,但对密码测试的研究不多。这个过程不能机械地执行是有道理的,这使得对其进行测试基本上没有意义。
  • 考虑一个程序,它通过使用已知密钥加密序列号来生成“随机数”。这应该通过所有统计测试,但实际上根本不是随机的——如果你知道密钥,你可以解密其中一个数字并预测一切。但是,如果没有密钥,甚至无法检测到正在发生的事情,因此没有标准测试可以证明它是不安全的。
  • 在发布这个问题之前,我通读了这篇关于 RNG (johndcook.com/Beautiful_Testing_ch10.pdf) 统计测试的文章,所以我认为了解更多信息会很有趣,因为我在密码学方面没有做太多工作来拥有一个足够的了解。
  • @tll 很抱歉回答这个老问题,但我遇到了同样的情况,我需要评估 RNG 的随机性。我已经阅读了您提供的章节,但我想知道如果 John Cook 描述的测试没有给出决定性的结果,该怎么办。知道在第 10 章之外的地方吗?
【解决方案2】:

1) 至于“什么构成'加密安全伪随机数生成器' (CSPRNG)?”,维基百科有一个很好的标准列表:

http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator

2) 至于“如何测试”,您可以考虑卡方:

http://en.wikibooks.org/wiki/Algorithm_Implementation/Pseudorandom_Numbers/Chi-Square_Test

【讨论】:

  • 卡方检验不能证明随机数生成器在密码学上是安全的。它所能做的就是证明 RNG 不受某些类型的偏见的影响——但这甚至不足以证明它是一个好的 PRNG,更不用说它是安全的了!
猜你喜欢
  • 2015-09-09
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多