EN JA
RANDOM(9)
RANDOM(9) FreeBSD Kernel Developer's Manual RANDOM(9)

名称

arc4rand, arc4random, random, read_random, srandom疑似乱数の生成

書式

#include < sys/libkern.h>

void
srandom( u_long seed);

u_long
random( void);

void
arc4rand( void *ptr, u_int length, int reseed);

uint32_t
arc4random( void);


#include < sys/random.h>

int
read_random( void *buffer, int count);

解説

random() 関数は、デフォルトで、 seed (種) として‘ 1’を与えた srandom() の呼び出しによって複製することが可能な、数列を生成します。 srandom() 関数は、少しだけより予測しにくい数を得るために、あらゆる任意の seed の値を与えられて呼び出されることができます。覚えておくべき重要なことは、 random() 関数は完全に予測可能であるということと、そのため、その数列の知識が攻撃者のためになるかもしれない様な場所では使用しないことです。

arc4rand() 関数はとても良い品質の乱数を返し、セキュリティに関連した目的に少しだけ良く合います。 arc4rand() からの乱数は利用可能であればエントロピデバイスから種を得ます。ある時間間隔およびあるバイト数の配送完了後に、自動的な種の再取得が発生します。強制的な種の再取得は reseed 引数に 0 ではない値を渡すことで、強制することが可能です。

read_random() 関数は、エントロピデバイスがロードされていれば、そこから直接的にエントロピを返すために使用されます。エントロピデバイスがロードされていない場合には、 random() によって生成された出力で buffer が埋められます。 buffercount バイトより多くは埋められません。 read_random() を使わずに、代わりに arc4rand() を使うことが、勧められています。

random(), arc4rand() および read_random() によって生成される全てのビットが利用できます。例えば、‘ random()&01’は 2 値の乱数を生成します。

arc4random() は 32 ビットの疑似乱整数を返すために arc4rand() を呼び出す便利な関数です。

戻り値

random() 関数は、0 から (2**31)−1 の範囲の継続的な疑似乱数を返すために、 31 long 整数長のデフォルトテーブルを用いる非線形の付加的なフィードバック乱数発生器を使用します。この乱数発生器の周期は非常に大きく、ほぼ 16*((2**31)−1) です。

arc4rand() 関数は、継続的な疑似ランダムバイトを返すために RC4 アルゴリズムを使用します。 arc4random() 関数は、0 から (2**32)−1 の範囲の疑似乱数を生成するために arc4rand() を使用します。

read_random() 関数は、 buffer に格納されたバイト数を返します。

作者

arc4random() は、 Dan Moschuk によって書かれました。 read_random() は、 Mark R V Murray によって書かれました。
September 25, 2000 FreeBSD