我需要在 c++11 中生成加密安全的随机数据,我担心对所有数据使用 random_device 会严重限制性能(参见 Stephan T. Lavavej 的“ rand()被认为是有害的”幻灯片 23,他说当他(在他的系统上)测试它时,random_device 为 1.93 MB/s,mt19937 为 499 MB/s)因为此代码将在移动设备(通过 JNI 和 iOS 的 Android)上运行,这可能比上面的数字慢。
此外,我知道 mt19937 不是加密安全的,来自维基百科:“观察足够数量的迭代(在 MT19937 的情况下为 624,因为这是产生未来迭代的状态向量的大小)允许一个人预测所有未来的迭代”。
考虑到以上所有信息,我是否可以通过每 624 次 mt19937 迭代从 random_device 生成一个新的随机种子来生成密码安全的随机数据?或者(可能)更好的是,每 X 次迭代,其中 X 是 1 到 624 之间的随机数(来自 random_device 或由 random_device 播种的 mt19937)?