使用/dev/random的文件io花费的时间太长

file io with /dev/random takes too long

本文关键字:时间 文件 dev random 使用 io      更新时间:2023-10-16

我想写一个程序,在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

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

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

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

  • 让像AED这样的音频熵守护进程使用开放式麦克风收集数据中心的噪音,也许可以将其与像VED这样的网络摄像头噪音收集器结合使用。其他来源正在讨论"磁盘设备中空气湍流的密码随机性"。:)
  • 使用熵收集精灵从用户空间程序的随机性中收集较弱的熵