我们知道,Mersenne Twister 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
可以用来实现 实现定义的伪随机数引擎,如果a 非确定性源(例如硬件设备)不可用 实施。在这种情况下,每个std::random_device
对象都可以 生成相同的数字序列。
/dev/urandom
与/dev/random
辩论rages on。
虽然标准库提供了很好的PRNG集合,但似乎并没有提供任何CSPRNG。我更喜欢坚持使用标准库,而不是使用POSIX,仅限Linux的标题库等.Mersenne Twister可以被操作以使其加密安全吗?