summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--WARNING.RNG80
-rw-r--r--configure.in17
3 files changed, 100 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index a0cc51185..d493affb6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
120001025
2 - (djm) Added WARNING.RNG file and modified configure to ask users of the
3 builtin entropy code to read it.
4 - (djm) Prefer builtin regex to PCRE.
5
120001020 620001020
2 - (djm) Don't define _REENTRANT for SNI/Reliant Unix 7 - (djm) Don't define _REENTRANT for SNI/Reliant Unix
3 - (bal) Imported NEWS-OS waitpid() macros into NeXT. Since implementation 8 - (bal) Imported NEWS-OS waitpid() macros into NeXT. Since implementation
diff --git a/WARNING.RNG b/WARNING.RNG
new file mode 100644
index 000000000..5f129f402
--- /dev/null
+++ b/WARNING.RNG
@@ -0,0 +1,80 @@
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
diff --git a/configure.in b/configure.in
index ed4d05199..90e75bef4 100644
--- a/configure.in
+++ b/configure.in
@@ -266,8 +266,14 @@ AC_ARG_WITH(libs,
266# Checks for libraries. 266# Checks for libraries.
267AC_CHECK_LIB(z, deflate, ,AC_MSG_ERROR([*** zlib missing - please install first ***])) 267AC_CHECK_LIB(z, deflate, ,AC_MSG_ERROR([*** zlib missing - please install first ***]))
268AC_CHECK_LIB(util, login, AC_DEFINE(HAVE_LIBUTIL_LOGIN) LIBS="$LIBS -lutil") 268AC_CHECK_LIB(util, login, AC_DEFINE(HAVE_LIBUTIL_LOGIN) LIBS="$LIBS -lutil")
269AC_CHECK_LIB(pcre, pcre_info, 269
270 AC_DEFINE(HAVE_LIBPCRE) LIBS="$LIBS -lpcreposix -lpcre") 270AC_CHECK_FUNC(regcomp,
271 [],
272 [
273 AC_CHECK_LIB(pcre, pcre_info,
274 AC_DEFINE(HAVE_LIBPCRE) LIBS="$LIBS -lpcreposix -lpcre")
275 ]
276)
271 277
272if test -z "$no_libsocket" ; then 278if test -z "$no_libsocket" ; then
273 AC_CHECK_LIB(nsl, yp_match, , ) 279 AC_CHECK_LIB(nsl, yp_match, , )
@@ -1531,6 +1537,7 @@ else
1531 RAND_MSG="EGD ($EGD_SOCKET)" 1537 RAND_MSG="EGD ($EGD_SOCKET)"
1532 else 1538 else
1533 RAND_MSG="Builtin (timeout $entropy_timeout)" 1539 RAND_MSG="Builtin (timeout $entropy_timeout)"
1540 BUILTIN_RNG=1
1534 fi 1541 fi
1535fi 1542fi
1536 1543
@@ -1574,3 +1581,9 @@ echo " Libraries: ${LIBS}"
1574 1581
1575echo "" 1582echo ""
1576 1583
1584if test ! -z "$BUILTIN_RNG" ; then
1585 echo "WARNING: you are using the builtin random number collection service."
1586 echo "Please read WARNING.RNG and request that your OS vendor includes"
1587 echo "/dev/random in future versions of their OS."
1588 echo ""
1589fi