【发布时间】:2015-11-26 13:14:09
【问题描述】:
我们知道,梅森捻线机is not crytographically secure:
Mersenne Twister 不是加密安全的。 (MT基于一个 线性递归。由 a 生成的任何伪随机数序列 线性递归是不安全的,因为从足够长的子序列 的输出,人们可以预测其余的输出。)
但有很多来源,例如 Stephan T. Lavavej 甚至 this website。建议几乎总是(逐字)像这样使用 Mersenne Twister:
auto engine = mt19937{random_device{}()};
它们有不同的风格,例如使用std::seed_seq 或复杂的操作std::tm 的方法,但这是最简单的方法。
尽管std::random_device is not always reliable:
std::random_device可以通过以下方式实现 实现定义的伪随机数引擎,如果 非确定性源(例如硬件设备)不可用于 实施。在这种情况下,每个std::random_device对象可能 生成相同的数列。
/dev/urandom 与 /dev/random 辩论 rages on。
虽然标准库提供了很好的 PRNG 集合,但它似乎没有提供任何 CSPRNG。我更喜欢坚持使用标准库,而不是使用 POSIX、仅限 Linux 的标头等。可以操纵 Mersenne Twister 以使其具有加密安全性吗?
【问题讨论】:
-
是否可以操纵 Mersenne Twister 以使其具有加密安全性? 不能。
-
@dandan78 好的。我什至加入了无协议的 URL 以作为很好的衡量标准
-
链接已损坏,因为它们中的大多数不适用于 https。现已修复
-
@DavidHammen 我使用的链接说:“为了使其安全,您需要使用一些带有 MT 的安全哈希算法。例如,您可以收集每八个字的输出,并将它们压缩成一个word(因此输出序列的长度是原始序列的 1/8)。”你能详细说明或反驳吗?
-
@owacoder “实现你自己的”几乎与“加密安全”相反
标签: c++ c++11 random mersenne-twister