【发布时间】:2017-12-05 15:44:18
【问题描述】:
我看到很多人一起谈论安全和std::random_device。
例如,here 第 22 张幻灯片。
根据cppreference,std::random_device:
std::random_device 是一个均匀分布的整数随机数生成器,它产生非确定性随机数。
它没有明确谈论安全性。
是否有任何有效的参考资料明确提到 std::random_device 对密码学来说是安全的?
【问题讨论】:
-
我不能代表安全意义上的产品质量(security.stackexchange.com 可能是获得安全专家意见的更好去处)但
random_device允许下降如果非确定性生成器不可用,则返回确定性值,使其不那么有效。检查您的平台和工具链以获得全面支持。 -
std::random_device没有提供任何保证 - 它的规范太弱以至于基本上没有作为“便携式”CSPRNG 使用。 -
我认为 CPP 参考页面是错误的。根据P0205R0 - Allow Seeding Random Number Engines with std::random_device:"标准库提供了 std::random_device 类型(§ 26.5.6 [rand.device]),一个统一的随机数生成器(§ 26.5.1.3 [rand.req.urng])这应该(但不幸的是,不是必需的)产生一个非确定性的 unsigned int 类型的均匀分布整数序列。” 我的经验是,非确定性是一个棘手/困难的属性。
标签: c++ c++11 random cryptography