OSDN Git Service

Address fuzzy in 3.77
[linuxjm/LDP_man-pages.git] / draft / man4 / random.4
1 .\" Copyright (c) 1997 John S. Kallal (kallal@voicenet.com)
2 .\"
3 .\" %%%LICENSE_START(GPLv2+_DOC_ONEPARA)
4 .\" This is free documentation; you can redistribute it and/or
5 .\" modify it under the terms of the GNU General Public License as
6 .\" published by the Free Software Foundation; either version 2 of
7 .\" the License, or (at your option) any later version.
8 .\" %%%LICENSE_END
9 .\"
10 .\" Some changes by tytso and aeb.
11 .\"
12 .\" 2004-12-16, John V. Belmonte/mtk, Updated init and quit scripts
13 .\" 2004-04-08, AEB, Improved description of read from /dev/urandom
14 .\" 2008-06-20, George Spelvin <linux@horizon.com>,
15 .\"             Matt Mackall <mpm@selenic.com>
16 .\"     Add a Usage subsection that recommends most users to use
17 .\"     /dev/urandom, and emphasizes parsimonious usage of /dev/random.
18 .\"
19 .\"*******************************************************************
20 .\"
21 .\" This file was generated with po4a. Translate the source file.
22 .\"
23 .\"*******************************************************************
24 .\"
25 .\" Japanese Version Copyright (c) 1998
26 .\"           ISHIKAWA Mutsumi, all rights reserved.
27 .\" Translated into Japanese Mon Jan 12 03:20:27 JST 1998
28 .\"         by ISHIKAWA Mutsumi <ishikawa@linux.or.jp>
29 .\" Japanese Version Last Modified Thu Feb  5 21:08:33 JST 1998
30 .\"     by ISHIKAWA Mutsumi <ishikawa@linux.or.jp>
31 .\" Updated & Modified Sun Jun  6 14:48:03 JST 2004
32 .\"     by Yuichi SATO <ysato444@yahoo.co.jp>
33 .\" Updated & Modified Tue Jan 18 04:21:16 JST 2005 by Yuichi SATO
34 .\" Updated & Modified Fri Apr 22 03:44:01 JST 2005 by Yuichi SATO
35 .\" Updated 2008-08-13, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.05
36 .\" Updated 2013-05-07, Akihiro MOTOKI <amotoki@gmail.com>
37 .\"
38 .TH RANDOM 4 2015\-01\-10 Linux "Linux Programmer's Manual"
39 .SH 名前
40 random, urandom \- カーネル乱数ソースデバイス
41 .SH 書式
42 #include <linux/random.h>
43 .sp
44 \fBint ioctl(\fP\fIfd\fP\fB, RND\fP\fIrequest\fP\fB, \fP\fIparam\fP\fB);\fP
45 .SH 説明
46 (Linux 1.3.30 から提供されている) \fI/dev/random\fP 、 \fI/dev/urandom\fP キャラクタスペシャルファイルは
47 カーネル乱数ジェネレータへのインタフェースを提供する。 \fI/dev/random\fP ファイルはメジャーデバイス番号 1 マイナーデバイス番号 8
48 である。 \fI/dev/urandom\fP はメジャーデバイス番号 1 マイナーデバイス番号 9 である。
49 .LP
50 乱数ジェネレータはデバイスドライバやその他の源からの環境ノイズを エントロピー・プールへ集める。
51 また、ジェネレータはエントロピー・プール内のノイズのビット数の推定値を 保持する。 このエントロピー・プールから乱数が生成される。
52 .LP
53 When read, the \fI/dev/random\fP device will only return random bytes within
54 the estimated number of bits of noise in the entropy pool.  \fI/dev/random\fP
55 should be suitable for uses that need very high quality randomness such as
56 one\-time pad or key generation.  When the entropy pool is empty, reads from
57 \fI/dev/random\fP will block until additional environmental noise is gathered.
58 If \fBopen\fP(2)  is called for \fI/dev/random\fP with flag \fBO_NONBLOCK\fP, a
59 subsequent \fBread\fP(2)  will not block if the requested number of bytes is
60 not available.  Instead, the available bytes are returned.  If no byte is
61 available \fBread\fP(2)  will return \-1 and \fIerrno\fP will be set to \fBEAGAIN\fP.
62 .LP
63 A read from the \fI/dev/urandom\fP device will not block waiting for more
64 entropy.  If there is not sufficient entropy, a pseudorandom number
65 generator is used to create the requested bytes.  As a result, in this case
66 the returned values are theoretically vulnerable to a cryptographic attack
67 on the algorithms used by the driver.  Knowledge of how to do this is not
68 available in the current unclassified literature, but it is theoretically
69 possible that such an attack may exist.  If this is a concern in your
70 application, use \fI/dev/random\fP instead.  \fBO_NONBLOCK\fP has no effect when
71 opening \fI/dev/urandom\fP.  When calling \fBread\fP(2)  for device
72 \fI/dev/urandom\fP signals will not be handled until after the requested random
73 bytes have been generated.
74 .LP
75 \fI/dev/random\fP や \fI/dev/urandom\fP に書き込みを行うと、 書き込まれたデータでエントロピー・プールが更新される。 しかし、
76 エントロピー・カウントが増えるわけではない。 つまり、 \fI/dev/random\fP と \fI/dev/urandom\fP
77 の両方のファイルから読み出される内容に影響があるが、 \fI/dev/random\fP からの読み出しが早くなるわけではないということだ。
78 .SS 使い方
79 \fI/dev/random\fP と \fI/dev/urandom\fP のどちらを使うべきか迷った場合、たいていは \fI/dev/urandom\fP
80 の方を使いたいと思っているはずだろう。 一般に、長期に渡って使われる GPG/SSL/SSH のキー以外の全てのものに \fI/dev/urandom\fP
81 を使用すべきである。
82
83 下記で推奨しているように再起動の前後で乱数種ファイルが保存される場合 (全ての主な Linux のディストリビューションは少なくとも 2000 年以降は
84 乱数種を保存するようになっている)、起動シーケンスにおいて乱数種が 再ロードされた直後から、その出力はローカルのルートアクセスができない
85 攻撃者に対して暗号的に安全なものとなり、ネットワーク暗号化のセッションキー として使うには完全に最適なものとなる。 \fI/dev/random\fP
86 からの読み出しは停止 (block) する可能性があるので、ユーザは普通 このファイルを非停止 (nonblocking) モードで開こうとし
87 (もしくはタイムアウトを指定して読み出しを実行し)、希望するレベルの エントロピーはすぐには利用できない場合には、何らかの通知を行うことだろう。
88
89 カーネルの乱数ジェネレータは、暗号疑似乱数ジェネレータ (Cryptographic pseudo\-random number generator;
90 CPRNG) の種として使用できる 高品質な乱数種の材料を少し生成するために設計されている。 これは速度ではなく安全性を重視して設計されており、
91 ランダムなデータを大量に生成するのには全くもって適していない。 ユーザは \fI/dev/urandom\fP (と \fI/dev/random\fP)
92 から読み出す乱数種の材料の量をできるだけ節約すべきである。 このデバイスから不必要に大量のデータを読み出すと、このデバイスを使う
93 他のユーザにマイナスの影響を与えてしまうだろう。
94
95 暗号鍵を生成するのに必要な乱数種の材料の量は、鍵の実効サイズと同じである。 例えば、3072 ビットの RSA および Diffie\-Hellman
96 の秘密鍵の実効サイズは 128 ビット (この秘密鍵を破るには 2^128 回の操作が必要ということ) であり、 そのため鍵生成器が
97 \fI/dev/random\fP から読み出す必要がある乱数種の材料の量は 128 ビット (16 バイト) だけである。
98
99 CPRNG アルゴリズムの欠陥に対する保護として、この最小値に対していくらかの 安全上のマージンを取るのはもっともだが、現在利用可能な暗号プリミティブで
100 256 ビットより多くの安全な乱数を必要とするようなものはない。 起動する度に、もしくは乱数種を変更する妥当な間隔 (1 分より短くなることはない)
101 の度に、カーネルの乱数プールから 256 ビット (32 バイト) よりたくさん読み出す
102 ような場合には、そのプログラムの暗号処理がうまく実装されて「いない」可能性が あると考えるべきであろう。
103 .SS Configuration
104 システムにあらかじめ作成された \fI/dev/random\fP と \fI/dev/urandom\fP が存在しないなら、次のようなコマンドで作成できる。
105
106 .nf
107     mknod \-m 644 /dev/random c 1 8
108     mknod \-m 644 /dev/urandom c 1 9
109     chown root:root /dev/random /dev/urandom
110 .fi
111
112 オペレータの操作なしに Linux システムが起動した直後は、 エントロピー・プールは意外性の乏しい均一な状態にあるだろう。
113 これにより、エントロピー・プールの実際のノイズ量は評価値より少なくなる。 この効果を打ち消すために、シャットダウンから (次の) 起動時まで持ち越した
114 エントロピー・プールの情報が助けになる。 エントロピー・プールを持ち越すためには、 Linux システムの起動時に実行される適切なスクリプトに、
115 以下の行を追加すればよい:
116
117 .nf
118     echo "Initializing random number generator..."
119     random_seed=/var/run/random\-seed
120     # 乱数種を今回のスタートアップから次回のスタートアップまで持ち越す。
121     # ロードを行い、その後、全てのエントロピー・プールを保存する。
122     if [ \-f $random_seed ]; then
123         cat $random_seed >/dev/urandom
124     else
125         touch $random_seed
126     fi
127     chmod 600 $random_seed
128     poolfile=/proc/sys/kernel/random/poolsize
129     [ \-r $poolfile ] && bytes=\`cat $poolfile\` || bytes=512
130     dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
131 .fi
132
133 また、Linux システムのシャットダウン時に実行される適切なスクリプトに、 以下の行を追加すればよい:
134
135 .nf
136     # 乱数種を今回のシャットダウンから次回のスタートアップまで持ち越す。
137     # 全てのエントロピー・プールを保存する。
138     echo "Saving random seed..."
139     random_seed=/var/run/random\-seed
140     touch $random_seed
141     chmod 600 $random_seed
142     poolfile=/proc/sys/kernel/random/poolsize
143     [ \-r $poolfile ] && bytes=\`cat $poolfile\` || bytes=512
144     dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
145 .fi
146 .SS "/proc インタフェース"
147 ディレクトリ \fI/proc/sys/kernel/random\fP にあるファイル (2.3.16 から存在する) は、 \fI/dev/random\fP
148 デバイスへのその他のインタフェースを提供する。
149 .LP
150 読み込み専用のファイル \fIentropy_avail\fP は使用可能なエントロピーを表す。 通常、これは 4096 (ビット)
151 になり、エントロピー・プールが満杯の状態である。
152 .LP
153 ファイル \fIpoolsize\fP はエントロピー・プールのサイズを表す。 このファイルの意味はカーネルバージョンにより異なる。
154 .RS
155 .TP  12
156 Linux 2.4:
157 このファイルはエントロピー・プールのサイズを「バイト」単位で規定する。 通常、このファイルの値は 512 になるが、書き込み可能であり、
158 アルゴリズムで利用可能な任意の値に変更できる。 選択可能な値は 32, 64, 128, 256, 512, 1024, 2048 である。
159 .TP 
160 Linux 2.6:
161 このファイルは読み出し専用であり、 エントロピー・プールのサイズを「ビット」単位で規定する。 値は 4096 である。
162 .RE
163 .LP
164 ファイル \fIread_wakeup_threshold\fP は \fI/dev/random\fP
165 からのエントロピーを待って休止しているプロセスを起こすのに必要な エントロピーのビット数を保持している。 デフォルトは 64 である。 ファイル
166 \fIwrite_wakeup_threshold\fP はエントロピーのビット数を保持しており、この値以下になったら \fI/dev/random\fP
167 への書き込みアクセスのために \fBselect\fP(2)  または \fBpoll\fP(2)  を実行するプロセスを起こす。
168 この値はファイルに書き込みを行うことによって変更できる。
169 .LP
170 読み込み専用のファイル \fIuuid\fP と \fIboot_id\fP は 6fd5a44b\-35f4\-4ad4\-a9b9\-6b9be13e1fe9 のような
171 ランダムな文字列を保持している。 前者は読み込みの度に新たに生成され、 後者は 1 度だけ生成される。
172 .SS "ioctl(2) インタフェース"
173 以下の \fBioctl\fP(2) 要求が \fI/dev/random\fP や \fI/dev/urandom\fP
174 に接続されたファイルディスクリプタに対して定義されている。 実行されたすべての要求は、 \fI/dev/random\fP と \fI/dev/urandom\fP
175 に影響を与える入力エントロピー・プールとやり取りを行う。 \fBRNDGETENTCNT\fP 以外のすべての要求には \fBCAP_SYS_ADMIN\fP
176 ケーパビリティが必要である。
177 .TP 
178 \fBRNDGETENTCNT\fP
179 入力エントロピー・プールのカウントを取得する。 取得される内容は proc の \fIentropy_avail\fP ファイルと同じである。
180 結果は引き数が指す整数 (int) に格納される。
181 .TP 
182 \fBRNDADDTOENTCNT\fP
183 入力エントロピー・プールのカウントを引き数が指す値だけ加算または減算する。
184 .TP 
185 \fBRNDGETPOOL\fP
186 Linux 2.6.9 で削除された。
187 .TP 
188 \fBRNDADDENTROPY\fP
189 入力プールに追加のエントロピーを追加し、エントロピー・カウントを増やす。 この要求は \fI/dev/random\fP や \fI/dev/urandom\fP
190 への書き込みとは異なる。 \fI/dev/random\fP や \fI/dev/urandom\fP への書き込みでは、 何らかのデータが追加されるだけで、
191 エントロピー・カウントは増やされない。 以下の構造体が使用される。
192 .IP
193 .nf
194     struct rand_pool_info {
195         int    entropy_count;
196         int    buf_size;
197         __u32  buf[0];
198     };
199 .fi
200 .IP
201 \fIentropy_count\fP はエントロピー・カウントに加算 (または減算) する値である。 \fIbuf\fP は大きさが \fIbuf_size\fP
202 のバッファで、この内容がエントロピー・プールに追加される。
203 .TP 
204 \fBRNDZAPENTCNT\fP, \fBRNDCLEARPOOL\fP
205 すべてのプールのエントロピー・カウントを 0 にし、何らかのシステムデータ (現在の時刻など) をプールに追加する。
206 .SH ファイル
207 /dev/random
208 .br
209 .\" .SH AUTHOR
210 .\" The kernel's random number generator was written by
211 .\" Theodore Ts'o (tytso@athena.mit.edu).
212 /dev/urandom
213 .SH 関連項目
214 \fBmknod\fP(1)
215 .br
216 RFC\ 1750, "Randomness Recommendations for Security"
217 .SH この文書について
218 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.77 の一部
219 である。プロジェクトの説明とバグ報告に関する情報は
220 http://www.kernel.org/doc/man\-pages/ に書かれている。