Is there a C++11 CSPRNG?
Is there a C++11 CSPRNG?
众所周知,Mersenne Twister并不是加密安全的:
Mersenne Twister不是加密安全的。(MT是基于线性递归。生成的任意伪随机数序列线性递归是不安全的,因为没有足够长的子序列在输出中,可以预测其余的输出)
但是很多来源,比如Stephan T. Lavavej,甚至这个网站。建议几乎总是(逐字逐句)像这样使用梅森绕口令:
auto engine = mt19937{random_device{}()};
它们有不同的风格,比如使用std::seed_seq
或复杂的方式操纵std::tm
,但这是最简单的方法。
即使std::random_device
并不总是可靠的:
std::random_device
可以用an来实现实现定义的伪随机数引擎不确定源(如硬件设备)不可用实现。在这种情况下,每个std::random_device
对象都可以生成相同的数字序列
/dev/urandom
和/dev/random
的争论还在继续。
但是,虽然标准库提供了一个很好的prng集合,但它似乎没有提供任何csprng。我更喜欢坚持使用标准库,而不是使用POSIX、仅限linux的头文件等。梅森扭扭器能被操纵以使其加密安全吗?
Visual Studio保证random_device
是加密安全且不确定的:https://msdn.microsoft.com/en-us/library/bb982250.aspx
如果您想要更快或跨平台的东西,您可以使用GnuTLS: http://gnutls.org/manual/html_node/Random-number-generation.html它提供可调节质量的随机数。我认为GNUTLS_RND_RANDOM
是你想要的。
正如几个人已经说过的,请忘记MT在密码学上下文中。
- MSVC是否支持C++11样式的属性而不是__declspec
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如何将模板转换为C++11之前的模板
- c++11评估顺序(未定义的行为)
- C++中的VLA,扩展名为std=C++11
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- "类模板示例<int>;"语句对 C++11 是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 如何使用lock_guard在c++11中实现scoped_lock功能
- C++11 中不同类型的对象的 std::array 的替代方案
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- STLPort using C++11
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- Is there a C++11 CSPRNG?