5

我想在linux上编写一个程序来生成真正的随机数/dev/random,但后来我发现它的运行时间偶尔会非常不可接受。它的 C 版本始终运行得很快。

#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char*argv[])
{
    ifstream random("/dev/random", ios_base::in);
    int t;
    random.read(reinterpret_cast<char*>(&t), sizeof(t));
    cout << t << endl;
    random.close();
    return 0;
}

运行时间的时间统计

$: time ./random 
-1040810404

real    0m0.004s
user    0m0.000s
sys 0m0.000s

$: time ./random 
-1298913761

real    0m4.119s
user    0m0.000s
sys 0m0.000s
4

1 回答 1

7

您可能已经耗尽了熵池。创建(确定收获)熵是基于设备驱动程序,这些设备驱动程序对物理世界的质量进行采样,这些质量大多是不可预测的。但是,如果这些设备不是很活跃,或者如果产生熵的算法停止,那么您的读取/dev/random也将如此。

你能用/dev/urandom吗?如果没有,您应该研究以更确定的方式产生更多熵的方法。

以下是有关类似问题的文章的一些建议:

  • 让 AED 之类的音频熵守护程序使用开放式麦克风从您的数据中心收集噪音,或者将其与 VED 之类的网络摄像头噪音收集器结合使用。其他消息来源正在谈论“磁盘设备中空气湍流的加密随机性”。:)
  • 使用 Entropy Gathering Daemon 从用户空间程序的随机性中收集较弱的熵。
于 2013-07-17T04:44:58.920 回答