这里随机性意味着伪随机性,如Linux的随机数生成器。例如, 我有100-1000个数组,每个数组包含由Linux伪随机数生成器生成的10000个随机整数。现在给出一个新的整数序列,如果任何机器学习算法如分类或聚类可以检测这个整数序列是否像先前的训练数据一样是伪随机数序列?
出于某种原因,我实际上并不关心给定序列的真正随机性,我只是想知道这个给定的序列是否是由一些特殊的linux伪随机整数生成器生成的。假设Linux RNG确实有一个归纳函数来生成伪随机整数序列,我们能否根据该RNG生成的一些现有随机序列来预测该RNG是否生成了现有的整数序列?
答案 0 :(得分:2)
让我们通过假设您实际上是按照this answer中的建议表示“ / dev / urandom”来阐明“ Linux PRNG”的含义。
现在,它背后的算法是众所周知的-让我们在source注释中阅读它:
当需要随机字节时,可通过取SHA获得 “熵池”内容的哈希值。 SHA哈希避免 暴露熵池的内部状态。据认为是 在计算上无法得出有关 SHA输出的输入。即使可以分析SHA 以某种巧妙的方式,只要从 生成器小于池中的固有熵,输出 数据是完全不可预测的。因此,例行程序减少了 它对“真正随机性”有多少位的内部估计 包含在熵池中,因为它会输出随机数。
如果该估计为零,则例程仍可以生成随机数 数字;但是,攻击者可能(至少在理论上)能够 从先前的输出推断出发电机的未来输出。这个 需要对SHA进行成功的密码分析,这被认为不是 可行,但可能性很小。尽管如此,这些 数字应可用于绝大多数用途。
因此有一个从不同来源获得的随机性池,并定期进行更新;典型的大小似乎是4096位。将“攻击者”替换为“机器学习”,您就会得到答案:
如果池为空(即,在不补充池的情况下,请求了很长的随机字节序列),则问题等同于标识SHA-1的输出。
< / li>如果在抽奖之间补充池,那么问题就更加棘手,因为您可以使用更短的运行时间来检验关于数字产生方式的任何假设。
没有已知的方法可以反转SHA-1或将SHA-1输出与非SHA-1输出区分开。标准分类和聚类肯定会在此任务上失败,并且找到一个成功的算法将非常令人惊讶,因为它将对SHA-1本身提出可行的攻击。并不是说SHA-1是完美的(它已经被弃用,因为碰撞攻击已经described,并且只会变得更好),但是它经受得住了时间。
答案 1 :(得分:1)
这是人们提出的传统问题。有关经典分析,请参阅Donald Knuth的“计算机编程艺术”,第2卷 - “精神数学算法”。
如果您需要更多最先进的测试,http://csrc.nist.gov/groups/ST/toolkit/rng/index.html提供了一个软件套件,其中还包含大量文档。
您也可以考虑阅读维基百科页面:http://en.wikipedia.org/wiki/Statistical_randomness,以了解该领域的内容。