/dev/random から真の乱数を収集しようとしています。これが私の簡単なコードです:
u_char buf[256];
memset(buf, 0, 256);
int dev = open("/dev/random", O_RDONLY);
int nbr = read(dev, buf, 100);
printf("Number of bytes returned : %d\n", nbr);
ご覧のとおり、100 のランダム バイトを要求していますが、このプログラムを実行すると、常に 15 から 30 の範囲の変数nbrに出力が得られます。これは、/dev/random に常に十分なエントロピーがあるとは限らないため理解できますが、 read() の際、/dev/random はバッファが 100 ランダム バイトになるまでブロックする必要がありますが、この場合は発生せず、プログラムはブロックされません。/dev/random の man ページを読みました。それは言う
エントロピー プールが空の場合、 /dev/random からの読み取りは、追加の環境ノイズが収集されるまでブロックされます。
これは文字通り、エントロピー プールが空の場合にのみ /dev/random がブロックされ、必要なバイト数よりも少ないかどうかに関係なく、データ量がある場合はブロックされないことを意味しますか?
どんな助けでも大歓迎です。