EN JA
ARC4RANDOM(3)
ARC4RANDOM(3) FreeBSD Library Functions Manual ARC4RANDOM(3)

名称

arc4random, arc4random_buf, arc4random_uniform, arc4random_stir, arc4random_addrandomarc4 乱数ジェネレータ

ライブラリ

Standard C Library (libc, -lc)

書式

#include < stdlib.h>

uint32_t
arc4random( void);

void
arc4random_buf( void *buf, size_t nbytes);

uint32_t
arc4random_uniform( uint32_t upper_bound);

void
arc4random_stir( void);

void
arc4random_addrandom( unsigned char *dat, int datlen);

解説

arc4random() 関数は、8*8 の 8 ビット S-Box を使用する、arc4 暗号によって採用されたキーストリームジェネレータ (key stream generator) を使用します。 S-Box は、約 (2**1700) の状態を指定することができます。 arc4random() 関数は、0 から (2**32)−1 の範囲で疑似乱数を返します、そのため、 rand(3)random(3) の 2 倍の範囲があります。

arc4random_buf() 関数は、ARC4 から派生させられるランダムデータで長さ nbytes の領域 buf を満たします。

arc4random_uniform() は、 upper_bound より少ない一様に分布する乱数を返します。 arc4random_uniform() は、上限が 2 の冪乗でないとき、"modulo bias"を避ける、“ arc4random() % upper_bound”のような構造で推奨されます。

arc4random_stir() 関数は、 /dev/urandom からデータを読み込み、 arc4random_addrandom() によって S-Box の順序を変更するために、それを使用します。

それらは、自動的にそれら自体を初期化するので、 arc4random() 関数ファミリを使用する前に arc4random_stir() を呼び出す必要はありません。

使用例

次は、 arc4random() を使用して古い rand() と random() 関数のための簡単に作成できる代用品を作り出しています:

#define foo4random() (arc4random() % ((unsigned)RAND_MAX + 1))

歴史

RC4 は、RSA Data Security, Inc. によって設計されました。それは、USENET に匿名で投稿され、オリジナルの暗号にアクセスした数人の関係者によって同等であることが確認されました。かって RC4 は、企業機密だったので、暗号は、現在 ARC4 と呼ばれています。
April 15, 1997 FreeBSD