首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用密码弱的伪随机生成器进行模糊测试是不明智的吗?

用密码弱的伪随机生成器进行模糊测试是不明智的吗?
EN

Stack Overflow用户
提问于 2011-03-28 16:19:04
回答 3查看 339关注 0票数 7

在处理大型软件项目时,我经常使用模糊测试作为测试用例的一部分,以帮助消除只有在输入达到一定大小或形状时才会出现的bug。我通常只使用与我正在使用的编程语言捆绑在一起的标准随机数工具来做到这一点。

最近,我开始怀疑,忽略模糊测试的优点或缺点,在进行模糊测试时使用非密码安全的伪随机数生成器是否是一个好主意。弱随机数生成器通常表现出将它们与真正的随机序列区分开来的模式,即使这些模式不是很明显。似乎使用弱PRNG的模糊测试总是无法触发某些潜在的bug,这些bug只在某些情况下才会出现,因为伪随机数可能以一种永远不会触发这些情况的方式相互关联。

使用弱PRNG进行模糊测试本质上是不明智的吗?如果理论上这样做是不合理的,在实践中是否仍然合理呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-28 17:32:18

你混淆了两种不同等级的“弱点”:

  • 统计弱点意味着PRNG的输出表现出统计模式,例如某些序列比其他序列出现得更频繁。在一些罕见的情况下,这实际上可能导致无效的模糊测试。统计上强的Twister).
  • cryptographical是高性能的,并且广泛可用(最突出的是Mersenne的弱点意味着RNG的输出在某种程度上是可预测的,给定种子以外的知识(例如输出本身))。要求用于模糊测试的PRNG具有加密强度是完全没有意义的,因为如果您需要防止精通加密的攻击者预测输出,那么所展示的“模式”几乎就是一个问题。
票数 6
EN

Stack Overflow用户

发布于 2011-03-28 17:16:10

我认为这并不重要,但我无法证明这一点。

模糊测试只会尝试一些输入,在大多数情况下,可能性的比例很小。无论您使用的RNG有多好,它可能会找到破坏代码的输入之一,也可能找不到,这取决于所有可能的输入破坏代码的比例。除非PRNG中的模式非常简单,否则在我看来,它不太可能以任何方式与您正在寻找的“坏”输入中的模式相对应,因此它不会对它造成更多或更少的真正随机。

事实上,如果您知道如何选择RNG以最大化发现错误输入的概率,您可能会使用该知识来帮助更直接地找到bug……

我不认为你应该使用一个非常糟糕的PRNG。例如,rand被允许展示非常简单的模式,比如LSB交替。如果您的代码在内部使用PRNG,那么您可能希望避免在测试中以类似的方式使用相同的PRNG,只是为了确保您不会意外地只使用输入数据与内部生成的数字流匹配的测试用例!当然,风险很小,因为您希望它们使用不同的种子,但仍然如此。

在给定的语言中,通常不难找到加密或至少是安全的哈希库。SHA-1无处不在,并且易于使用来生成流,否则,您自己实现RC4就很简单了。两者都提供了相当好的PRNG,如果没有Blum Blum Shub那么安全的话。我认为主要关注的是速度--例如,如果Mersenne Twister生成模糊测试用例的速度是10倍,并且被测代码相当快,那么它在给定的时间内发现错误输入的机会可能更大,而不管给定624个输出,您可以推断出RNG的完整状态……

票数 4
EN

Stack Overflow用户

发布于 2011-03-29 15:20:19

您不需要不可预测的源(这正是加密安全生成器的含义),您只需要一个具有良好统计属性的源。

因此,使用通用生成器就足够了-它速度快,通常是可重现的(这意味着问题也是可重现的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5456305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档