]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/man/man4/random.4
Remove the Yarrow PRNG algorithm option in accordance with due notice
[FreeBSD/FreeBSD.git] / share / man / man4 / random.4
1 .\" Copyright (c) 2001-2015     Mark R V Murray.  All rights reserved.
2 .\"
3 .\" Redistribution and use in source and binary forms, with or without
4 .\" modification, are permitted provided that the following conditions
5 .\" are met:
6 .\" 1. Redistributions of source code must retain the above copyright
7 .\"    notice, this list of conditions and the following disclaimer.
8 .\" 2. Redistributions in binary form must reproduce the above copyright
9 .\"    notice, this list of conditions and the following disclaimer in the
10 .\"    documentation and/or other materials provided with the distribution.
11 .\"
12 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22 .\" SUCH DAMAGE.
23 .\"
24 .\" $FreeBSD$
25 .\"
26 .Dd August 26, 2018
27 .Dt RANDOM 4
28 .Os
29 .Sh NAME
30 .Nm random
31 .Nd the entropy device
32 .Sh SYNOPSIS
33 .Cd "device random"
34 .Cd "options RANDOM_LOADABLE"
35 .Cd "options RANDOM_ENABLE_UMA"
36 .Sh DESCRIPTION
37 The
38 .Nm
39 device
40 returns an endless supply of random bytes when read.
41 It also accepts and reads data
42 as any ordinary file.
43 .Pp
44 The generator will start in an
45 .Em unseeded
46 state, and will block reads until
47 it is seeded for the first time.
48 This may cause trouble at system boot
49 when keys and the like
50 are generated from
51 .Nm
52 so steps should be taken to ensure a
53 seeding as soon as possible.
54 .Pp
55 It is also possible
56 to read random bytes
57 by using the KERN_ARND sysctl.
58 On the command line
59 this could be done by
60 .Pp
61 .Dl "sysctl -x -B 16 kern.arandom"
62 .Pp
63 This sysctl will not return
64 random bytes unless
65 the
66 .Nm
67 device is seeded.
68 .Pp
69 This initial seeding
70 of random number generators
71 is a bootstrapping problem
72 that needs very careful attention.
73 In some cases,
74 it may be difficult
75 to find enough randomness
76 to seed a random number generator
77 until a system is fully operational,
78 but the system requires random numbers
79 to become fully operational.
80 It is (or more accurately should be)
81 critically important that the
82 .Nm
83 device is seeded
84 before the first time it is used.
85 In the case where a dummy or "blocking-only"
86 device is used,
87 it is the responsibility
88 of the system architect
89 to ensure that no blocking reads
90 hold up critical processes.
91 .Pp
92 To see the current settings of the software
93 .Nm
94 device, use the command line:
95 .Pp
96 .Dl "sysctl kern.random"
97 .Pp
98 which results in something like:
99 .Bd -literal -offset indent
100 kern.random.fortuna.minpoolsize: 64
101 kern.random.harvest.mask_symbolic: [HIGH_PERFORMANCE], ... ,CACHED
102 kern.random.harvest.mask_bin: 00111111111
103 kern.random.harvest.mask: 511
104 kern.random.random_sources: 'Intel Secure Key RNG'
105 .Ed
106 .Pp
107 Other than
108 .Dl kern.random.fortuna.minpoolsize
109 and
110 .Dl kern.random.harvest.mask
111 all settings are read-only.
112 .Pp
113 The
114 .Pa kern.random.fortuna.minpoolsize
115 sysctl is used
116 to set the seed threshold.
117 A smaller number gives a faster seed,
118 but a less secure one.
119 In practice,
120 values between 64 and 256
121 are acceptable.
122 .Pp
123 The
124 .Va kern.random.harvest.mask
125 bitmask is used to select
126 the possible entropy sources.
127 A 0 (zero) value means
128 the corresponding source
129 is not considered
130 as an entropy source.
131 Set the bit to 1 (one)
132 if you wish to use
133 that source.
134 The
135 .Va kern.random.harvest.mask_bin
136 and
137 .Va kern.random.harvest.mask_symbolic
138 sysctls
139 can be used to confirm
140 that the choices are correct.
141 Note that disabled items
142 in the latter item
143 are listed in square brackets.
144 See
145 .Xr random_harvest 9
146 for more on the harvesting of entropy.
147 .Pp
148 When
149 .Cd "options RANDOM_LOADABLE"
150 is used,
151 the
152 .Pa /dev/random
153 device is not created
154 until an "algorithm module"
155 is loaded.
156 The only module built by default is
157 .Em random_fortuna .
158 The
159 .Em random_yarrow
160 module was removed in
161 .Fx 12 .
162 Note that this loadable module
163 is slightly less efficient
164 than its compiled-in equivalent.
165 This is because some functions
166 must be locked against
167 load and unload events,
168 and also must be indirect calls
169 to allow for removal.
170 .Pp
171 When
172 .Cd "options RANDOM_ENABLE_UMA"
173 is used,
174 the
175 .Pa /dev/random
176 device will obtain entropy
177 from the zone allocator.
178 This is potentially very high rate,
179 and if so will be of questionable use.
180 If this is the case,
181 use of this option
182 is not recommended.
183 Determining this is not trivial,
184 so experimenting and measurement
185 using tools such as
186 .Xr dtrace 1
187 will be required.
188 .Sh RANDOMNESS
189 The use of randomness in the field of computing
190 is a rather subtle issue because randomness means
191 different things to different people.
192 Consider generating a password randomly,
193 simulating a coin tossing experiment or
194 choosing a random back-off period when a server does not respond.
195 Each of these tasks requires random numbers,
196 but the random numbers in each case have different requirements.
197 .Pp
198 Generation of passwords, session keys and the like
199 requires cryptographic randomness.
200 A cryptographic random number generator should be designed
201 so that its output is difficult to guess,
202 even if a lot of auxiliary information is known
203 (such as when it was seeded, subsequent or previous output, and so on).
204 On
205 .Fx ,
206 seeding for cryptographic random number generators is provided by the
207 .Nm
208 device,
209 which provides real randomness.
210 The
211 .Xr arc4random 3
212 library call provides a pseudo-random sequence
213 which is generally reckoned to be suitable for
214 simple cryptographic use.
215 The OpenSSL library also provides functions for managing randomness
216 via functions such as
217 .Xr RAND_bytes 3
218 and
219 .Xr RAND_add 3 .
220 Note that OpenSSL uses the
221 .Nm
222 device for seeding automatically.
223 .Pp
224 Randomness for simulation is required in engineering or
225 scientific software and games.
226 The first requirement of these applications is
227 that the random numbers produced conform to some well-known,
228 usually uniform, distribution.
229 The sequence of numbers should also appear numerically uncorrelated,
230 as simulation often assumes independence of its random inputs.
231 Often it is desirable to reproduce
232 the results of a simulation exactly,
233 so that if the generator is seeded in the same way,
234 it should produce the same results.
235 A peripheral concern for simulation is
236 the speed of a random number generator.
237 .Pp
238 Another issue in simulation is
239 the size of the state associated with the random number generator, and
240 how frequently it repeats itself.
241 For example,
242 a program which shuffles a pack of cards should have 52!\& possible outputs,
243 which requires the random number generator to have 52!\& starting states.
244 This means the seed should have at least log_2(52!) ~ 226 bits of state
245 if the program is to stand a chance of outputting all possible sequences,
246 and the program needs some unbiased way of generating these bits.
247 Again,
248 the
249 .Nm
250 device could be used for seeding here,
251 but in practice, smaller seeds are usually considered acceptable.
252 .Pp
253 .Fx
254 provides two families of functions which are considered
255 suitable for simulation.
256 The
257 .Xr random 3
258 family of functions provides a random integer
259 between 0 to
260 .if t 2\u\s731\s10\d\(mi1.
261 .if n (2**31)\(mi1.
262 The functions
263 .Xr srandom 3 ,
264 .Xr initstate 3
265 and
266 .Xr setstate 3
267 are provided for deterministically setting
268 the state of the generator and
269 the function
270 .Xr srandomdev 3
271 is provided for setting the state via the
272 .Nm
273 device.
274 The
275 .Xr drand48 3
276 family of functions are also provided,
277 which provide random floating point numbers in various ranges.
278 .Pp
279 Randomness that is used for collision avoidance
280 (for example, in certain network protocols)
281 has slightly different semantics again.
282 It is usually expected that the numbers will be uniform,
283 as this produces the lowest chances of collision.
284 Here again,
285 the seeding of the generator is very important,
286 as it is required that different instances of
287 the generator produce independent sequences.
288 However, the guessability or reproducibility of the sequence is unimportant,
289 unlike the previous cases.
290 .Pp
291 .Fx
292 does also provide the traditional
293 .Xr rand 3
294 library call,
295 for compatibility purposes.
296 However,
297 it is known to be poor for simulation and
298 absolutely unsuitable for cryptographic purposes,
299 so its use is discouraged.
300 .Sh FILES
301 .Bl -tag -width ".Pa /dev/random"
302 .It Pa /dev/random
303 .El
304 .Sh SEE ALSO
305 .Xr arc4random 3 ,
306 .Xr drand48 3 ,
307 .Xr rand 3 ,
308 .Xr RAND_add 3 ,
309 .Xr RAND_bytes 3 ,
310 .Xr random 3 ,
311 .Xr sysctl 8 ,
312 .Xr random 9
313 .Rs
314 .%A Ferguson
315 .%A Schneier
316 .%A Kohno
317 .%B Cryptography Engineering
318 .%I Wiley
319 .%O ISBN 978-0-470-47424-2
320 .Re
321 .Sh HISTORY
322 A
323 .Nm
324 device appeared in
325 .Fx 2.2 .
326 The current software implementation,
327 introduced in
328 .Fx 10.0 ,
329 is by
330 .An Mark R V Murray ,
331 and is an implementation of the
332 .Em Fortuna
333 algorithm by Ferguson
334 .Em et al .
335 It replaces the previous
336 .Em Yarrow
337 implementation,
338 introduced in
339 .Fx 5.0 .
340 The Yarrow algorithm
341 is no longer supported
342 by its authors,
343 and is therefore no longer available.