【问题标题】:Prediction of the next number generated by C (glibc) rand()C (glibc) rand() 生成的下一个数字的预测
【发布时间】:2013-03-18 15:39:55
【问题描述】:

给定由 rand() 生成的一系列数字,我如何预测下一个值?蛮力是不可能的。 我知道 rand() 基本上是一个线性同余生成器,但也会进行位移。我可以用什么理论来破解它?任何提示都将受到欢迎:)

【问题讨论】:

  • 我在某处读到(维基百科???)您需要 650 个(?)结果来识别 PRNG 序列以及您在其中的位置。您可能会喜欢维基百科文章"Random number generator attack"
  • 这可能是剧透,但您当然可以从reading the code 开始了解会发生什么...
  • Iirc glibs 对 rand_r() 和别名 rand()/random() 使用简单的 LCG ==> 尝试 rand_r()。
  • 如果您与生成序列的系统在同一个系统上,您可以使用 srand() 将最新数字设置为种子,并使用 rand()“预测”下一个数字。

标签: c random generator glibc prediction


【解决方案1】:

@unwind:感谢您的建议!我在某些地方错了,文档让我走上了正轨。

实际上,当您知道 30 个(左右)数字的序列时,预测就是小菜一碟。在 50% 的情况下,“计算”的答案是正确的。更多详细信息请参见 unwind 提供的链接或简化代码:http://www.mathstat.dal.ca/~selinger/random/

【讨论】:

  • 我是来回答的。仅查看代码后,严格,准确的答案就很明显了。我决定留下一个有用的链接,而不是直接回复。经过简短的讲座后,这个问题从字面上解决了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
相关资源
最近更新 更多