]> andersk Git - openssh.git/blame - WARNING.RNG
- (djm) Added WARNING.RNG file and modified configure to ask users of the
[openssh.git] / WARNING.RNG
CommitLineData
48e7916f 1This document contains a description of portable OpenSSH's random
2number collection code. An alternate reading of this text could
3well be titled "Why I should pressure my system vendor to supply
4/dev/random in their OS".
5
6Why is this important? OpenSSH depends on good, unpredictable numbers
7for generating keys, performing digital signatures and forming
8cryptographic challenges. If the random numbers that it uses are
9predictable, then the strength of the whole system is compromised.
10
11A particularly pernicious problem arises with DSA keys (used by the
12ssh2 protocol). Performing a DSA signature (which is required for
13authentication), entails the use of a 160 bit random number. If an
14attacker can predict this number, then they can deduce your *private*
15key and impersonate you.
16
17If you are using the builtin random number support (configure will
18tell you if this is the case), then read this document in its entirety
19and consider disabling ssh2 support (by adding "Protocol 1" to
20sshd_config and ssh_config).
21
22Please also request that your OS vendor provides a kernel-based random
23number collector (/dev/random) in future versions of your operating
24systems.
25
26On to the description...
27
28The portable OpenSSH contains random number collection support for
29systems which lack a kernel entropy pool (/dev/random).
30
31This collector operates by executing the programs listed in
32($etcdir)/ssh_prng_cmds, reading their output and adding it to the
33PRNG supplied by OpenSSL (which is hash-based). It also stirs in the
34output of several system calls and timings from the execution of the
35programs that it runs.
36
37The ssh_prng_cmds file also specifies a 'rate' for each program. This
38represents the number of bits of randomness per byte of output from
39the specified program.
40
41The random number code will also read and save a seed file to
42~/.ssh/prng_seed. This contents of this file are added to the random
43number generator at startup.
44
45This approach presents two problems:
46
471. It is slow.
48
49Executing each program in the list can take a large amount of time,
50especially on slower machines. Additionally some program can take a
51disproportionate time to execute.
52
53This can be tuned by the administrator. To debug the entropy
54collection is great detail, turn on full debugging ("ssh -v -v -v" or
55"sshd -d -d -d"). This will list each program as it is executed, how
56long it took to execute, its exit status and whether and how much data
57it generated. You can the find the culprit programs which are causing
58the real slow-downs.
59
60The entropy collector will timeout programs which take too long
61to execute, the actual timeout used can be adjusted with the
62--with-entropy-timeout configure option. OpenSSH will not try to
63re-execute programs which have not been found, have had a non-zero
64exit status or have timed out more than a couple of times.
65
662. Estimating the real 'rate' of program outputs is non-trivial
67
68The shear volume of the task is problematic: there are currently
69around 50 commands in the ssh_prng_cmds list, portable OpenSSH
70supports at least 12 different OSs. That is already 600 sets of data
71to be analysed, without taking into account the numerous differences
72between versions of each OS.
73
74On top of this, the different commands can produce varying amounts of
75usable data depending on how busy the machine is, how long it has been
76up and various other factors.
77
78To make matters even more complex, some of the commands are reporting
79largely the same data as other commands (eg. the various "ps" calls).
80
This page took 0.049225 seconds and 5 git commands to generate.