众所周知,梅森扭转者加密上不安全 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/efaq.html:
Mersenne Twister 不具有加密安全性。 (MT 是基于
线性递归。任何由 a 生成的伪随机数序列
线性递归是不安全的,因为从足够长的子序列
的输出,我们可以预测其余的输出。)
但有很多来源,比如斯蒂芬·T·拉瓦韦杰 //channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful乃至这个网站 //stackoverflow.com/a/7114482/5287986。建议几乎总是(逐字)像这样使用 Mersenne Twister:
auto engine = mt19937{random_device{}()};
They come in different flavors, like using std::seed_seq
or complicated ways of manipulating std::tm
, but this is the simplest approach.
虽然std::random_device
并不总是可靠的 http://en.cppreference.com/w/cpp/numeric/random/random_device:
std::random_device
可以按照以下方式实施
实现定义的伪随机数引擎,如果
不确定源(例如硬件设备)不可用于
实施。在这种情况下每个std::random_device
对象可能
生成相同的数列。
The /dev/urandom
vs /dev/random
debate rages on http://www.2uo.de/myths-about-urandom/.
但是,虽然标准库提供了很好的 PRNG 集合,但它似乎没有提供任何 CSPRNG。我更喜欢坚持使用标准库,而不是使用 POSIX、仅限 Linux 的标头等。可以操纵 Mersenne Twister 以使其在加密上安全吗?
Visual Studio 保证random_device
是加密安全且不确定的:https://msdn.microsoft.com/en-us/library/bb982250.aspx https://msdn.microsoft.com/en-us/library/bb982250.aspx
如果您想要更快或跨平台的东西,您可以使用 GnuTLS:http://gnutls.org/manual/html_node/Random-number- Generation.html http://gnutls.org/manual/html_node/Random-number-generation.html它提供质量可调的随机数。GNUTLS_RND_RANDOM
我想这就是你想要的。
正如一些人已经说过的那样,请忘记加密环境中的机器翻译。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)