OSDN Git Service

d650c52897fbebad45687ee764f04f02a9d6e3bb
[linuxjm/LDP_man-pages.git] / release / 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 .TH RANDOM 4 2013\-03\-15 Linux "Linux Programmer's Manual"
25 .SH 名前
26 random, urandom \- カーネル乱数ソースデバイス
27 .SH 書式
28 #include <linux/random.h>
29 .sp
30 \fBint ioctl(\fP\fIfd\fP\fB, RND\fP\fIrequest\fP\fB, \fP\fIparam\fP\fB);\fP
31 .SH 説明
32 (Linux 1.3.30 から提供されている) \fI/dev/random\fP 、 \fI/dev/urandom\fP キャラクタスペシャルファイルは
33 カーネル乱数ジェネレータへのインタフェースを提供する。 \fI/dev/random\fP ファイルはメジャーデバイス番号 1 マイナーデバイス番号 8
34 である。 \fI/dev/urandom\fP はメジャーデバイス番号 1 マイナーデバイス番号 9 である。
35 .LP
36 乱数ジェネレータはデバイスドライバやその他の源からの環境ノイズを エントロピー・プールへ集める。
37 また、ジェネレータはエントロピー・プール内のノイズのビット数の推定値を 保持する。 このエントロピー・プールから乱数が生成される。
38 .LP
39 読み込みが行われると、 \fI/dev/random\fP デバイスはエントロピー・プールのノイズビットの数の推定値のうち、 ランダムバイトのみを返す。
40 \fI/dev/random\fP はワンタイムパッド (one\-time pad) や鍵の生成のような
41 非常に高い品質を持った無作為性が必要になる用途に向いているだろう。 エントロピー・プールが空の時は、\fI/dev/random\fP からの読み出しは、
42 更なる環境ノイズが得られるまで、ブロックされる。
43 .LP
44 \fI/dev/urandom\fP デバイスから読み出しでは、 エントロピーがより高くなるのを待つためのブロックは行われない。
45 その結果、もしエントロピー・プールに十分なエントロピーが存在しない場合、 返り値はこのドライバで使われているアルゴリズムに基づく暗号攻撃に対して、
46 論理的には弱くなることになる。 この攻撃をどのように行うかという事については、現在研究論文などの
47 形で入手できる資料はない、しかし、そのような攻撃は論理的に存在可能である。 もし、この事が心配なら、(\fI/dev/urandom\fP ではなく)
48 \fI/dev/random\fP を利用すればいい。
49 .LP
50 Writing to \fI/dev/random\fP or \fI/dev/urandom\fP will update the entropy pool
51 with the data written, but this will not result in a higher entropy count.
52 This means that it will impact the contents read from both files, but it
53 will not make reads from \fI/dev/random\fP faster.
54 .SS 使い方
55 \fI/dev/random\fP と \fI/dev/urandom\fP のどちらを使うべきか迷った場合、たいていは \fI/dev/urandom\fP
56 の方を使いたいと思っているはずだろう。 一般に、長期に渡って使われる GPG/SSL/SSH のキー以外の全てのものに \fI/dev/urandom\fP
57 を使用すべきである。
58
59 下記で推奨しているように再起動の前後で乱数種ファイルが保存される場合 (全ての主な Linux のディストリビューションは少なくとも 2000 年以降は
60 乱数種を保存するようになっている)、起動シーケンスにおいて乱数種が 再ロードされた直後から、その出力はローカルのルートアクセスができない
61 攻撃者に対して暗号的に安全なものとなり、ネットワーク暗号化のセッションキー として使うには完全に最適なものとなる。 \fI/dev/random\fP
62 からの読み出しは停止 (block) する可能性があるので、ユーザは普通 このファイルを非停止 (nonblocking) モードで開こうとし
63 (もしくはタイムアウトを指定して読み出しを実行し)、希望するレベルの エントロピーはすぐには利用できない場合には、何らかの通知を行うことだろう。
64
65 カーネルの乱数ジェネレータは、暗号疑似乱数ジェネレータ (Cryptographic pseudo\-random number generator;
66 CPRNG) の種として使用できる 高品質な乱数種の材料を少し生成するために設計されている。 これは速度ではなく安全性を重視して設計されており、
67 ランダムなデータを大量に生成するのには全くもって適していない。 ユーザは \fI/dev/urandom\fP (と \fI/dev/random\fP)
68 から読み出す乱数種の材料の量をできるだけ節約すべきである。 このデバイスから不必要に大量のデータを読み出すと、このデバイスを使う
69 他のユーザにマイナスの影響を与えてしまうだろう。
70
71 暗号鍵を生成するのに必要な乱数種の材料の量は、鍵の実効サイズと同じである。 例えば、3072 ビットの RSA および Diffie\-Hellman
72 の秘密鍵の実効サイズは 128 ビット (この秘密鍵を破るには 2^128 回の操作が必要ということ) であり、 そのため鍵生成器が
73 \fI/dev/random\fP から読み出す必要がある乱数種の材料の量は 128 ビット (16 バイト) だけである。
74
75 CPRNG アルゴリズムの欠陥に対する保護として、この最小値に対していくらかの 安全上のマージンを取るのはもっともだが、現在利用可能な暗号プリミティブで
76 256 ビットより多くの安全な乱数を必要とするようなものはない。 起動する度に、もしくは乱数種を変更する妥当な間隔 (1 分より短くなることはない)
77 の度に、カーネルの乱数プールから 256 ビット (32 バイト) よりたくさん読み出す
78 ような場合には、そのプログラムの暗号処理がうまく実装されて「いない」可能性が あると考えるべきであろう。
79 .SS Configuration
80 システムにあらかじめ作成された \fI/dev/random\fP と \fI/dev/urandom\fP が存在しないなら、次のようなコマンドで作成できる。
81
82 .nf
83     mknod \-m 644 /dev/random c 1 8
84     mknod \-m 644 /dev/urandom c 1 9
85     chown root:root /dev/random /dev/urandom
86 .fi
87
88 オペレータの操作なしに Linux システムが起動した直後は、 エントロピー・プールは意外性の乏しい均一な状態にあるだろう。
89 これにより、エントロピー・プールの実際のノイズ量は評価値より少なくなる。 この効果を打ち消すために、シャットダウンから (次の) 起動時まで持ち越した
90 エントロピー・プールの情報が助けになる。 エントロピー・プールを持ち越すためには、 Linux システムの起動時に実行される適切なスクリプトに、
91 以下の行を追加すればよい:
92
93 .nf
94     echo "Initializing random number generator..."
95     random_seed=/var/run/random\-seed
96     # 乱数種を今回のスタートアップから次回のスタートアップまで持ち越す。
97     # ロードを行い、その後、全てのエントロピー・プールを保存する。
98     if [ \-f $random_seed ]; then
99         cat $random_seed >/dev/urandom
100     else
101         touch $random_seed
102     fi
103     chmod 600 $random_seed
104     poolfile=/proc/sys/kernel/random/poolsize
105     [ \-r $poolfile ] && bytes=\`cat $poolfile\` || bytes=512
106     dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
107 .fi
108
109 また、Linux システムのシャットダウン時に実行される適切なスクリプトに、 以下の行を追加すればよい:
110
111 .nf
112     # 乱数種を今回のシャットダウンから次回のスタートアップまで持ち越す。
113     # 全てのエントロピー・プールを保存する。
114     echo "Saving random seed..."
115     random_seed=/var/run/random\-seed
116     touch $random_seed
117     chmod 600 $random_seed
118     poolfile=/proc/sys/kernel/random/poolsize
119     [ \-r $poolfile ] && bytes=\`cat $poolfile\` || bytes=512
120     dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
121 .fi
122 .SS "/proc インタフェース"
123 ディレクトリ \fI/proc/sys/kernel/random\fP にあるファイル (2.3.16 から存在する) は、 \fI/dev/random\fP
124 デバイスへのその他のインタフェースを提供する。
125 .LP
126 読み込み専用のファイル \fIentropy_avail\fP は使用可能なエントロピーを表す。 通常、これは 4096 (ビット)
127 になり、エントロピー・プールが満杯の状態である。
128 .LP
129 ファイル \fIpoolsize\fP はエントロピー・プールのサイズを表す。 このファイルの意味はカーネルバージョンにより異なる。
130 .RS
131 .TP  12
132 Linux 2.4:
133 このファイルはエントロピー・プールのサイズを「バイト」単位で規定する。 通常、このファイルの値は 512 になるが、書き込み可能であり、
134 アルゴリズムで利用可能な任意の値に変更できる。 選択可能な値は 32, 64, 128, 256, 512, 1024, 2048 である。
135 .TP 
136 Linux 2.6:
137 このファイルは読み出し専用であり、 エントロピー・プールのサイズを「ビット」単位で規定する。 値は 4096 である。
138 .RE
139 .LP
140 ファイル \fIread_wakeup_threshold\fP は \fI/dev/random\fP
141 からのエントロピーを待って休止しているプロセスを起こすのに必要な エントロピーのビット数を保持している。 デフォルトは 64 である。 ファイル
142 \fIwrite_wakeup_threshold\fP はエントロピーのビット数を保持しており、この値以下になったら \fI/dev/random\fP
143 への書き込みアクセスのために \fBselect\fP(2)  または \fBpoll\fP(2)  を実行するプロセスを起こす。
144 この値はファイルに書き込みを行うことによって変更できる。
145 .LP
146 読み込み専用のファイル \fIuuid\fP と \fIboot_id\fP は 6fd5a44b\-35f4\-4ad4\-a9b9\-6b9be13e1fe9 のような
147 ランダムな文字列を保持している。 前者は読み込みの度に新たに生成され、 後者は 1 度だけ生成される。
148 .SS "ioctl(2) インタフェース"
149 The following \fBioctl\fP(2)  requests are defined on file descriptors
150 connected to either \fI/dev/random\fP or \fI/dev/urandom\fP.  All requests
151 performed will interact with the input entropy pool impacting both
152 \fI/dev/random\fP and \fI/dev/urandom\fP.  The \fBCAP_SYS_ADMIN\fP capability is
153 required for all requests except \fBRNDGETENTCNT\fP.
154 .TP 
155 \fBRNDGETENTCNT\fP
156 Retrieve the entropy count of the input pool, the contents will be the same
157 as the \fIentropy_avail\fP file under proc.  The result will be stored in the
158 int pointed to by the argument.
159 .TP 
160 \fBRNDADDTOENTCNT\fP
161 Increment or decrement the entropy count of the input pool by the value
162 pointed to by the argument.
163 .TP 
164 \fBRNDGETPOOL\fP
165 Removed in Linux 2.6.9.
166 .TP 
167 \fBRNDADDENTROPY\fP
168 Add some additional entropy to the input pool, incrementing the entropy
169 count.  This differs from writing to \fI/dev/random\fP or \fI/dev/urandom\fP,
170 which only adds some data but does not increment the entropy count.  The
171 following structure is used:
172 .IP
173 .nf
174     struct rand_pool_info {
175         int    entropy_count;
176         int    buf_size;
177         __u32  buf[0];
178     };
179 .fi
180 .IP
181 Here \fIentropy_count\fP is the value added to (or subtracted from) the entropy
182 count, and \fIbuf\fP is the buffer of size \fIbuf_size\fP which gets added to the
183 entropy pool.
184 .TP 
185 \fBRNDZAPENTCNT\fP, \fBRNDCLEARPOOL\fP
186 Zero the entropy count of all pools and add some system data (such as wall
187 clock) to the pools.
188 .SH ファイル
189 /dev/random
190 .br
191 .\" .SH AUTHOR
192 .\" The kernel's random number generator was written by
193 .\" Theodore Ts'o (tytso@athena.mit.edu).
194 /dev/urandom
195 .SH 関連項目
196 \fBmknod\fP(1)
197 .br
198 RFC\ 1750, "Randomness Recommendations for Security"
199 .SH この文書について
200 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.51 の一部
201 である。プロジェクトの説明とバグ報告に関する情報は
202 http://www.kernel.org/doc/man\-pages/ に書かれている。