]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man7/random.7
ipc_namespaces.7: wfix
[thirdparty/man-pages.git] / man7 / random.7
CommitLineData
0ae2c135
MK
1.\" Copyright (C) 2008, George Spelvin <linux@horizon.com>,
2.\" and Copyright (C) 2008, Matt Mackall <mpm@selenic.com>
3.\" and Copyright (C) 2016, Laurent Georget <laurent.georget@supelec.fr>
4.\" and Copyright (C) 2016, Nikos Mavrogiannopoulos <nmav@redhat.com>
5.\"
6.\" %%%LICENSE_START(VERBATIM)
7.\" Permission is granted to make and distribute verbatim copies of this
8.\" manual provided the copyright notice and this permission notice are
9.\" preserved on all copies.
10.\"
11.\" Permission is granted to copy and distribute modified versions of
12.\" this manual under the conditions for verbatim copying, provided that
13.\" the entire resulting derived work is distributed under the terms of
14.\" a permission notice identical to this one.
15.\"
16.\" Since the Linux kernel and libraries are constantly changing, this
17.\" manual page may be incorrect or out-of-date. The author(s) assume.
18.\" no responsibility for errors or omissions, or for damages resulting.
19.\" from the use of the information contained herein. The author(s) may.
20.\" not have taken the same level of care in the production of this.
21.\" manual, which is licensed free of charge, as they might when working.
22.\" professionally.
23.\"
24.\" Formatted or processed versions of this manual, if unaccompanied by
25.\" the source, must acknowledge the copyright and authors of this work.
26.\" %%%LICENSE_END
27.\"
983c70fc
MK
28.\" The following web page is quite informative:
29.\" http://www.2uo.de/myths-about-urandom/
30.\"
31a1b45e 31.TH RANDOM 7 2017-03-13 "Linux" "Linux Programmer's Manual"
0ae2c135
MK
32.SH NAME
33random \- overview of interfaces for obtaining randomness
34.SH DESCRIPTION
289b177f
MK
35The kernel random-number generator relies on entropy gathered from
36device drivers and other sources of environmental noise to seed
37a cryptographically secure pseudorandom number generator (CSPRNG).
38It is designed for security, rather than speed.
a721e8b2 39.PP
289b177f 40The following interfaces provide access to output from the kernel CSPRNG:
0ae2c135
MK
41.IP * 3
42The
43.I /dev/urandom
44and
45.I /dev/random
46devices, both described in
47.BR random (4).
76d8c32d
MK
48These devices have been present on Linux since early times,
49and are also available on many other systems.
0ae2c135 50.IP *
76d8c32d 51The Linux-specific
0ae2c135
MK
52.BR getrandom (2)
53system call, available since Linux 3.17.
54This system call provides access either to the same source as
55.I /dev/urandom
56(called the
57.I urandom
dce6b796 58source in this page)
0ae2c135
MK
59or to the same source as
60.I /dev/random
61(called the
62.I random
dce6b796 63source in this page).
0ae2c135
MK
64The default is the
65.I urandom
1b9d5819 66source; the
0ae2c135 67.I random
dce6b796 68source is selected by specifying the
0ae2c135
MK
69.BR GRND_RANDOM
70flag to the system call.
f1397035
MK
71(The
72.BR getentropy (3)
73function provides a slightly more portable interface on top of
74.BR getrandom (2).)
0ae2c135
MK
75.\"
76.SS Initialization of the entropy pool
77The kernel collects bits of entropy from the environment.
78When a sufficient number of random bits has been collected, the
0ae2c135 79entropy pool is considered to be initialized.
2b44a168 80.SS Choice of random source
e919912d 81Unless you are doing long-term key generation (and most likely not even
7c896e1e 82then), you probably shouldn't be reading from the
e10dec29 83.IR /dev/random
7c896e1e 84device or employing
0ae2c135
MK
85.BR getrandom (2)
86with the
87.BR GRND_RANDOM
e10dec29 88flag.
7c896e1e 89Instead, either read from the
e10dec29 90.IR /dev/urandom
7c896e1e 91device or employ
0ae2c135
MK
92.BR getrandom (2)
93without the
94.B GRND_RANDOM
e10dec29 95flag.
0ae2c135
MK
96The cryptographic algorithms used for the
97.IR urandom
dce6b796 98source are quite conservative, and so should be sufficient for all purposes.
a721e8b2 99.PP
0ae2c135
MK
100The disadvantage of
101.B GRND_RANDOM
102and reads from
103.I /dev/random
76d8c32d 104is that the operation can block for an indefinite period of time.
0ae2c135
MK
105Furthermore, dealing with the partially fulfilled
106requests that can occur when using
107.B GRND_RANDOM
108or when reading from
109.I /dev/random
110increases code complexity.
111.\"
40f0931c 112.SS Monte Carlo and other probabilistic sampling applications
289b177f
MK
113Using these interfaces to provide large quantities of data for
114Monte Carlo simulations or other programs/algorithms which are
115doing probabilistic sampling will be slow.
116Furthermore, it is unnecessary, because such applications do not
117need cryptographically secure random numbers.
118Instead, use the interfaces described in this page to obtain
119a small amount of data to seed a user-space pseudorandom
120number generator for use by such applications.
0ae2c135
MK
121.\"
122.SS Comparison between getrandom, /dev/urandom, and /dev/random
123The following table summarizes the behavior of the various
124interfaces that can be used to obtain randomness.
125.B GRND_NONBLOCK
126is a flag that can be used to control the blocking behavior of
127.BR getrandom (2).
091ae4d2
MK
128The final column of the table considers the case that can occur
129in early boot time when the entropy pool is not yet initialized.
0ae2c135
MK
130.ad l
131.TS
132allbox;
091ae4d2 133lbw13 lbw12 lbw14 lbw18
0ae2c135
MK
134l l l l.
135Interface Pool T{
136Blocking
137\%behavior
138T} T{
091ae4d2 139Behavior when pool is not yet ready
0ae2c135
MK
140T}
141T{
142.I /dev/random
143T} T{
144Blocking pool
145T} T{
cdfedc03 146If entropy too low, blocks until there is enough entropy again
0ae2c135
MK
147T} T{
148Blocks until enough entropy gathered
149T}
150T{
151.I /dev/urandom
152T} T{
153CSPRNG output
154T} T{
155Never blocks
156T} T{
157Returns output from uninitialized CSPRNG (may be low entropy and unsuitable for cryptography)
158T}
159T{
160.BR getrandom ()
161T} T{
162Same as
163.I /dev/urandom
164T} T{
091ae4d2 165Does not block once is pool ready
0ae2c135
MK
166T} T{
167Blocks until pool ready
168T}
169T{
170.BR getrandom ()
171.B GRND_RANDOM
172T} T{
173Same as
174.I /dev/random
175T} T{
cdfedc03 176If entropy too low, blocks until there is enough entropy again
0ae2c135
MK
177T} T{
178Blocks until pool ready
179T}
180T{
181.BR getrandom ()
182.B GRND_NONBLOCK
183T} T{
184Same as
185.I /dev/urandom
186T} T{
091ae4d2 187Does not block once is pool ready
0ae2c135
MK
188T} T{
189.B EAGAIN
0ae2c135
MK
190T}
191T{
192.BR getrandom ()
193.B GRND_RANDOM
194+
195.B GRND_NONBLOCK
196T} T{
197Same as
198.I /dev/random
199T} T{
200.B EAGAIN
201if not enough entropy available
202T} T{
203.B EAGAIN
0ae2c135
MK
204T}
205.TE
206.ad
207.\"
208.SS Generating cryptographic keys
209The amount of seed material required to generate a cryptographic key
210equals the effective key size of the key.
211For example, a 3072-bit RSA
212or Diffie-Hellman private key has an effective key size of 128 bits
213(it requires about 2^128 operations to break) so a key generator
214needs only 128 bits (16 bytes) of seed material from
215.IR /dev/random .
a721e8b2 216.PP
0ae2c135
MK
217While some safety margin above that minimum is reasonable, as a guard
218against flaws in the CSPRNG algorithm, no cryptographic primitive
219available today can hope to promise more than 256 bits of security,
220so if any program reads more than 256 bits (32 bytes) from the kernel
221random pool per invocation, or per reasonable reseed interval (not less
222than one minute), that should be taken as a sign that its cryptography is
223.I not
224skillfully implemented.
225.\"
226.SH SEE ALSO
227.BR getrandom (2),
7c28a0b6 228.BR getauxval (3),
933ab9c7 229.BR getentropy (3),
0ae2c135
MK
230.BR random (4),
231.BR urandom (4),
232.BR signal (7)