OSDN Git Service

LDP: Release pages from LDP 5.10
[linuxjm/jm.git] / manual / LDP_man-pages / release / man4 / random.4
index 39437c3..b8d69fa 100644 (file)
@@ -13,8 +13,6 @@
 .\" 2004-04-08, AEB, Improved description of read from /dev/urandom
 .\" 2008-06-20, George Spelvin <linux@horizon.com>,
 .\"             Matt Mackall <mpm@selenic.com>
-.\"     Add a Usage subsection that recommends most users to use
-.\"     /dev/urandom, and emphasizes parsimonious usage of /dev/random.
 .\"
 .\"*******************************************************************
 .\"
 .\" Updated 2008-08-13, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.05
 .\" Updated 2013-05-07, Akihiro MOTOKI <amotoki@gmail.com>
 .\"
-.TH RANDOM 4 2015\-02\-01 Linux "Linux Programmer's Manual"
+.TH RANDOM 4 " 2017\-09\-15" Linux "Linux Programmer's Manual"
 .SH 名前
 random, urandom \- カーネル乱数ソースデバイス
 .SH 書式
 #include <linux/random.h>
-.sp
+.PP
 \fBint ioctl(\fP\fIfd\fP\fB, RND\fP\fIrequest\fP\fB, \fP\fIparam\fP\fB);\fP
 .SH 説明
 (Linux 1.3.30 から提供されている) \fI/dev/random\fP 、 \fI/dev/urandom\fP キャラクタースペシャルファイルは
 カーネル乱数ジェネレーターへのインターフェースを提供する。 \fI/dev/random\fP ファイルはメジャーデバイス番号 1 マイナーデバイス番号 8
-である。 \fI/dev/urandom\fP はメジャーデバイス番号 1 マイナーデバイス番号 9 である。
-.LP
\81§ã\81\82ã\82\8bã\80\82 \fI/dev/urandom\fP ã\83\95ã\82¡ã\82¤ã\83«ã\81¯ã\83¡ã\82¸ã\83£ã\83¼ã\83\87ã\83\90ã\82¤ã\82¹ç\95ªå\8f· 1 ã\83\9eã\82¤ã\83\8aã\83¼ã\83\87ã\83\90ã\82¤ã\82¹ç\95ªå\8f· 9 ã\81§ã\81\82ã\82\8bã\80\82
+.PP
 乱数ジェネレーターはデバイスドライバやその他の源からの環境ノイズを エントロピープールへ集める。
 また、ジェネレーターはエントロピープール内のノイズのビット数の推定値を 保持する。 このエントロピープールから乱数が生成される。
-.LP
-読み込みが行われると、 \fI/dev/random\fP デバイスはエントロピープールのノイズビットの数の推定値のうち、 ランダムバイトのみを返す。
-\fI/dev/random\fP はワンタイムパッド (one\-time pad) や鍵の生成のような
-非常に高い品質を持った無作為性が必要になる用途に向いているだろう。 エントロピープールが空の時は、\fI/dev/random\fP からの読み出しは、
-更なる環境ノイズが得られるまで、ブロックされる。 \fBopen\fP(2) が \fI/dev/random\fP に対して \fBO_NONBLOCK\fP
-フラグ付きで呼ばれると、 それ以降の \fBread\fP(2) は要求したバイト数のデータが利用可能になるまで停止しない。 その代わり、
-利用可能なデータが返される。 利用可能なバイトが全くない場合、 \fBread\fP(2) は \-1 を返し、 \fIerrno\fP に \fBEAGAIN\fP
-が設定される。
-.LP
-\fI/dev/urandom\fP デバイスから読み出しでは、 エントロピーがより高くなるのを待つためのブロックは行われない。
-十分なエントロピーがない場合、 要求されたバイトを作成するのに疑似乱数生成器が使用される。 その結果、
-この場合の返り値はこのドライバで使われているアルゴリズムに基づく暗号攻撃に対して、 論理的には弱くなることになる。
-この攻撃をどのように行うかという事については、現在研究論文などの 形で入手できる資料はない、しかし、そのような攻撃は論理的に存在可能である。
-もし、この事が心配なら、(\fI/dev/urandom\fP ではなく)  \fI/dev/random\fP を利用すればいい。 \fBO_NONBLOCK\fP は
-\fI/dev/urandom\fP をオープンする際には効果がない。 デバイス \fI/dev/urandom\fP に対して \fBread\fP(2)
-を呼び出した際、 要求されたランダムバイトが生成されるまでシグナルは処理されない。
-.LP
+.PP
+Linux 3.17 and later provides the simpler and safer \fBgetrandom\fP(2)
+interface which requires no special files; see the \fBgetrandom\fP(2)  manual
+page for details.
+.PP
+When read, the \fI/dev/urandom\fP device returns random bytes using a
+pseudorandom number generator seeded from the entropy pool.  Reads from this
+device do not block (i.e., the CPU is not yielded), but can incur an
+appreciable delay when requesting large amounts of data.
+.PP
+.\" This is a real problem; see
+.\" commit 9b4d008787f864f17d008c9c15bbe8a0f7e2fc24
+When read during early boot time, \fI/dev/urandom\fP may return data prior to
+the entropy pool being initialized.  If this is of concern in your
+application, use \fBgetrandom\fP(2)  or \fI/dev/random\fP instead.
+.PP
+The \fI/dev/random\fP device is a legacy interface which dates back to a time
+where the cryptographic primitives used in the implementation of
+\fI/dev/urandom\fP were not widely trusted.  It will return random bytes only
+within the estimated number of bits of fresh noise in the entropy pool,
+blocking if necessary.  \fI/dev/random\fP is suitable for applications that
+need high quality randomness, and can afford indeterminate delays.
+.PP
+エントロピープールが空の時は、\fI/dev/random\fP からの読み出しは、 更なる環境ノイズが得られるまで、ブロックされる。 \fBopen\fP(2)
+が \fI/dev/random\fP に対して \fBO_NONBLOCK\fP フラグ付きで呼ばれると、 それ以降の \fBread\fP(2)
+は要求したバイト数のデータが利用可能になるまで停止しない。 その代わり、 利用可能なデータが返される。 利用可能なバイトが全くない場合、
+\fBread\fP(2) は \-1 を返し、 \fIerrno\fP に \fBEAGAIN\fP が設定される。
+.PP
+The \fBO_NONBLOCK\fP flag has no effect when opening \fI/dev/urandom\fP.  When
+calling \fBread\fP(2)  for the device \fI/dev/urandom\fP, reads of up to 256 bytes
+will return as many bytes as are requested and will not be interrupted by a
+signal handler.  Reads with a buffer over this limit may return less than
+the requested number of bytes or fail with the error \fBEINTR\fP, if
+interrupted by a signal handler.
+.PP
+.\" commit 79a8468747c5f95ed3d5ce8376a3e82e0c5857fc
+.\" SEC_XFER_SIZE in drivers/char/random.c
+Since Linux 3.16, a \fBread\fP(2)  from \fI/dev/urandom\fP will return at most 32\ MB.  A \fBread\fP(2)  from \fI/dev/random\fP will return at most 512 bytes (340
+bytes on Linux kernels before version 2.6.12).
+.PP
 \fI/dev/random\fP や \fI/dev/urandom\fP に書き込みを行うと、 書き込まれたデータでエントロピープールが更新される。 しかし、
 エントロピーカウントが増えるわけではない。 つまり、 \fI/dev/random\fP と \fI/dev/urandom\fP
 の両方のファイルから読み出される内容に影響があるが、 \fI/dev/random\fP からの読み出しが早くなるわけではないということだ。
 .SS 使い方
-\fI/dev/random\fP と \fI/dev/urandom\fP のどちらを使うべきか迷った場合、たいていは \fI/dev/urandom\fP
-の方を使いたいと思っているはずだろう。 一般に、長期に渡って使われる GPG/SSL/SSH のキー以外の全てのものに \fI/dev/urandom\fP
-を使用すべきである。
-
-下記で推奨しているように再起動の前後で乱数種ファイルが保存される場合 (全ての主な Linux のディストリビューションは少なくとも 2000 年以降は
-乱数種を保存するようになっている)、起動シーケンスにおいて乱数種が 再ロードされた直後から、その出力はローカルのルートアクセスができない
-攻撃者に対して暗号的に安全なものとなり、ネットワーク暗号化のセッションキー として使うには完全に最適なものとなる。 \fI/dev/random\fP
+The \fI/dev/random\fP interface is considered a legacy interface, and
+\fI/dev/urandom\fP is preferred and sufficient in all use cases, with the
+exception of applications which require randomness during early boot time;
+for these applications, \fBgetrandom\fP(2)  must be used instead, because it
+will block until the entropy pool is initialized.
+.PP
+.\"
+下記で推奨しているように再起動の前後で乱数種ファイルが保存される場合、起動シーケンスにおいて乱数種が
+再ロードされた直後から、その出力はローカルのルートアクセスができない
+攻撃者に対して暗号的に安全なものとなり、ネットワーク暗号化のセッションキーとして使うには完全に最適なものとなる。 (すべての主な Linux
+のディストリビューションは少なくとも 2000 年以降はリブートの前後で乱数種のファイルを保存するようになっている。) \fI/dev/random\fP
 からの読み出しは停止 (block) する可能性があるので、ユーザーは普通 このファイルを非停止 (nonblocking) モードで開こうとし
 (もしくはタイムアウトを指定して読み出しを実行し)、希望するレベルの エントロピーはすぐには利用できない場合には、何らかの通知を行うことだろう。
-
-カーネルの乱数ジェネレーターは、暗号疑似乱数ジェネレーター (Cryptographic pseudo\-random number generator;
-CPRNG) の種として使用できる 高品質な乱数種の材料を少し生成するために設計されている。 これは速度ではなく安全性を重視して設計されており、
-ランダムなデータを大量に生成するのには全くもって適していない。 ユーザーは \fI/dev/urandom\fP (と \fI/dev/random\fP)
-から読み出す乱数種の材料の量をできるだけ節約すべきである。 このデバイスから不必要に大量のデータを読み出すと、このデバイスを使う
-他のユーザーにマイナスの影響を与えてしまうだろう。
-
-暗号鍵を生成するのに必要な乱数種の材料の量は、鍵の実効サイズと同じである。 例えば、3072 ビットの RSA および Diffie\-Hellman
-の秘密鍵の実効サイズは 128 ビット (この秘密鍵を破るには 2^128 回の操作が必要ということ) であり、 そのため鍵生成器が
-\fI/dev/random\fP から読み出す必要がある乱数種の材料の量は 128 ビット (16 バイト) だけである。
-
-CPRNG アルゴリズムの欠陥に対する保護として、この最小値に対していくらかの 安全上のマージンを取るのはもっともだが、現在利用可能な暗号プリミティブで
-256 ビットより多くの安全な乱数を必要とするようなものはない。 起動する度に、もしくは乱数種を変更する妥当な間隔 (1 分より短くなることはない)
-の度に、カーネルの乱数プールから 256 ビット (32 バイト) よりたくさん読み出す
-ような場合には、そのプログラムの暗号処理がうまく実装されて「いない」可能性が あると考えるべきであろう。
 .SS Configuration
 システムにあらかじめ作成された \fI/dev/random\fP と \fI/dev/urandom\fP が存在しないなら、次のようなコマンドで作成できる。
-
-.nf
-    mknod \-m 644 /dev/random c 1 8
-    mknod \-m 644 /dev/urandom c 1 9
-    chown root:root /dev/random /dev/urandom
-.fi
-
+.PP
+.in +4n
+.EX
+ mknod \-m 666 /dev/random c 1 8
+mknod \-m 666 /dev/urandom c 1 9
+chown root:root /dev/random /dev/urandom
+.EE
+.in
+.PP
 オペレータの操作なしに Linux システムが起動した直後は、 エントロピープールは意外性の乏しい均一な状態にあるだろう。
 これにより、エントロピープールの実際のノイズ量は評価値より少なくなる。 この効果を打ち消すために、シャットダウンから (次の) 起動時まで持ち越した
 エントロピープールの情報が助けになる。 エントロピープールを持ち越すためには、 Linux システムの起動時に実行される適切なスクリプトに、
 以下の行を追加すればよい:
-
-.nf
-    echo "Initializing random number generator..."
-    random_seed=/var/run/random\-seed
-    # 乱数種を今回のスタートアップから次回のスタートアップまで持ち越す。
-    # ロードを行い、その後、全てのエントロピープールを保存する。
-    if [ \-f $random_seed ]; then
-        cat $random_seed >/dev/urandom
-    else
-        touch $random_seed
-    fi
-    chmod 600 $random_seed
-    poolfile=/proc/sys/kernel/random/poolsize
-    [ \-r $poolfile ] && bytes=\`cat $poolfile\` || bytes=512
-    dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
-.fi
-
-また、Linux システムのシャットダウン時に実行される適切なスクリプトに、 以下の行を追加すればよい:
-
-.nf
-    # 乱数種を今回のシャットダウンから次回のスタートアップまで持ち越す。
-    # 全てのエントロピープールを保存する。
-    echo "Saving random seed..."
-    random_seed=/var/run/random\-seed
+.PP
+.in +4n
+.EX
+echo "Initializing random number generator..."
+random_seed=/var/run/random\-seed
+# 乱数種を今回のスタートアップから次回のスタートアップまで持ち越す。
+# ロードを行い、その後、全てのエントロピープールを保存する。
+if [ \-f $random_seed ]; then
+    cat $random_seed >/dev/urandom
+else
     touch $random_seed
-    chmod 600 $random_seed
-    poolfile=/proc/sys/kernel/random/poolsize
-    [ \-r $poolfile ] && bytes=\`cat $poolfile\` || bytes=512
-    dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
-.fi
+fi
+chmod 600 $random_seed
+poolfile=/proc/sys/kernel/random/poolsize
+[ \-r $poolfile ] && bits=$(cat $poolfile) || bits=4096
+bytes=$(expr $bits / 8)
+dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
+.EE
+.in
+.PP
+また、Linux システムのシャットダウン時に実行される適切なスクリプトに、 以下の行を追加すればよい:
+.PP
+.in +4n
+.EX
+# 乱数種を今回のシャットダウンから次回のスタートアップまで持ち越す。
+# 全てのエントロピープールを保存する。
+echo "Saving random seed..."
+random_seed=/var/run/random\-seed
+touch $random_seed
+chmod 600 $random_seed
+poolfile=/proc/sys/kernel/random/poolsize
+[ \-r $poolfile ] && bits=$(cat $poolfile) || bits=4096
+bytes=$(expr $bits / 8)
+dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
+.EE
+.in
+.PP
+.\"
+In the above examples, we assume Linux 2.6.0 or later, where
+\fI/proc/sys/kernel/random/poolsize\fP returns the size of the entropy pool in
+bits (see below).
 .SS "/proc インターフェース"
-ディレクトリ \fI/proc/sys/kernel/random\fP にあるファイル (2.3.16 から存在する) は、 \fI/dev/random\fP
-デバイスへのその他のインターフェースを提供する。
-.LP
-読み込み専用のファイル \fIentropy_avail\fP は使用可能なエントロピーを表す。 通常、これは 4096 (ビット)
-になり、エントロピープールが満杯の状態である。
-.LP
-ファイル \fIpoolsize\fP はエントロピープールのサイズを表す。 このファイルの意味はカーネルバージョンにより異なる。
+ディレクトリ \fI/proc/sys/kernel/random\fP にあるファイル (2.3.16 以降で存在する) で、 \fI/dev/random\fP
+デバイスに関する追加の情報を参照できる。
+.TP 
+\fIentropy_avail\fP
+この読み込み専用のファイルは使用可能なエントロピーをビット単位で表示する。値は 0 から 4096 までの範囲の数字である。
+.TP 
+\fIpoolsize\fP
+このファイルはエントロピープールのサイズを示す。 このファイルの意味はカーネルバージョンにより異なる。
 .RS
-.TP  12
+.TP 
 Linux 2.4:
 このファイルはエントロピープールのサイズを「バイト」単位で規定する。 通常、このファイルの値は 512 になるが、書き込み可能であり、
 アルゴリズムで利用可能な任意の値に変更できる。 選択可能な値は 32, 64, 128, 256, 512, 1024, 2048 である。
 .TP 
-Linux 2.6:
+Linux 2.6 以降:
 このファイルは読み出し専用であり、 エントロピープールのサイズを「ビット」単位で規定する。 値は 4096 である。
 .RE
-.LP
-ファイル \fIread_wakeup_threshold\fP は \fI/dev/random\fP
-からのエントロピーを待って休止しているプロセスを起こすのに必要な エントロピーのビット数を保持している。 デフォルトは 64 である。 ファイル
-\fIwrite_wakeup_threshold\fP はエントロピーのビット数を保持しており、この値以下になったら \fI/dev/random\fP
+.TP 
+\fIread_wakeup_threshold\fP
+This file contains the number of bits of entropy required for waking up
+processes that sleep waiting for entropy from \fI/dev/random\fP.  The default
+is 64.
+.TP 
+\fIwrite_wakeup_threshold\fP
+ファイル \fIwrite_wakeup_threshold\fP はエントロピーのビット数を保持しており、この値以下になったら \fI/dev/random\fP
 への書き込みアクセスのために \fBselect\fP(2)  または \fBpoll\fP(2)  を実行するプロセスを起こす。
 この値はファイルに書き込みを行うことによって変更できる。
-.LP
-読み込み専用のファイル \fIuuid\fP と \fIboot_id\fP は 6fd5a44b\-35f4\-4ad4\-a9b9\-6b9be13e1fe9 のような
-ランダムな文字列を保持している。 前者は読み込みの度に新たに生成され、 後者は 1 度だけ生成される。
+.TP 
+\fIuuid\fP and \fIboot_id\fP
+.\"
+これらの読み込み専用のファイルは 6fd5a44b\-35f4\-4ad4\-a9b9\-6b9be13e1fe9 のような ランダムな文字列を保持している。
+前者は読み込みの度に新たに生成され、 後者は 1 度だけ生成される。
 .SS "ioctl(2) インターフェース"
 以下の \fBioctl\fP(2) 要求が \fI/dev/random\fP や \fI/dev/urandom\fP
 に接続されたファイルディスクリプターに対して定義されている。 実行されたすべての要求は、 \fI/dev/random\fP と
@@ -184,13 +214,15 @@ Linux 2.6.9 で削除された。
 への書き込みとは異なる。 \fI/dev/random\fP や \fI/dev/urandom\fP への書き込みでは、 何らかのデータが追加されるだけで、
 エントロピーカウントは増やされない。 以下の構造体が使用される。
 .IP
-.nf
-    struct rand_pool_info {
-        int    entropy_count;
-        int    buf_size;
-        __u32  buf[0];
-    };
-.fi
+.in +4n
+.EX
+ struct rand_pool_info {
+    int    entropy_count;
+    int    buf_size;
+    __u32  buf[0];
+};
+.EE
+.in
 .IP
 \fIentropy_count\fP はエントロピーカウントに加算 (または減算) する値である。 \fIbuf\fP は大きさが \fIbuf_size\fP
 のバッファーで、この内容がエントロピープールに追加される。
@@ -198,17 +230,22 @@ Linux 2.6.9 で削除された。
 \fBRNDZAPENTCNT\fP, \fBRNDCLEARPOOL\fP
 すべてのプールのエントロピーカウントを 0 にし、何らかのシステムデータ (現在の時刻など) をプールに追加する。
 .SH ファイル
-/dev/random
+ \fI/dev/random\fP
 .br
+ \fI/dev/urandom\fP
+.SH 注意
+For an overview and comparison of the various interfaces that can be used to
+obtain randomness, see \fBrandom\fP(7).
+.SH バグ
 .\" .SH AUTHOR
 .\" The kernel's random number generator was written by
 .\" Theodore Ts'o (tytso@athena.mit.edu).
-/dev/urandom
+During early boot time, reads from \fI/dev/urandom\fP may return data prior to
+the entropy pool being initialized.
 .SH 関連項目
-\fBgetrandom\fP(2), \fBmknod\fP(1)
-.br
+ \fBmknod\fP(1), \fBgetrandom\fP(2), \fBrandom\fP(7)
+.PP
 RFC\ 1750, "Randomness Recommendations for Security"
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
-である。プロジェクトの説明とバグ報告に関する情報は
-http://www.kernel.org/doc/man\-pages/ に書かれている。
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
+\%https://www.kernel.org/doc/man\-pages/ に書かれている。