Use randomness not entropy
authorRich Salz <rsalz@openssl.org>
Mon, 26 Jun 2017 16:02:57 +0000 (12:02 -0400)
committerRich Salz <rsalz@openssl.org>
Tue, 27 Jun 2017 16:14:49 +0000 (12:14 -0400)
Reviewed-by: Ben Kaduk <kaduk@mit.edu>
(Merged from https://github.com/openssl/openssl/pull/3773)

16 files changed:
apps/app_rand.c
apps/speed.c
doc/man3/OPENSSL_instrument_bus.pod
doc/man3/RAND_add.pod
doc/man3/RAND_bytes.pod
doc/man3/RAND_egd.pod
doc/man3/RAND_set_rand_method.pod
e_os.h
include/openssl/rand.h
test/dhtest.c
test/dsatest.c
test/ecdsatest.c
test/ectest.c
test/recipes/25-test_req.t
test/recipes/80-test_ssl_old.t
test/ssltest_old.c

index 8a85cc9114045f42fc6b6b93542b2df39d441cbc..21445ac0f9456e0da8d7a32df427337376a7df43 100644 (file)
@@ -93,13 +93,14 @@ int app_RAND_write_file(const char *file)
 {
     char buffer[200];
 
-    if (egdsocket || !seeded)
+    if (egdsocket || !seeded) {
         /*
-         * If we did not manage to read the seed file, we should not write a
-         * low-entropy seed file back -- it would suppress a crucial warning
-         * the next time we want to use it.
+         * If we didn't manage to read the seed file, don't write a
+         * file out -- it would suppress a crucial warning the next
+         * time we want to use it.
          */
         return 0;
+    }
 
     if (file == NULL)
         file = RAND_file_name(buffer, sizeof buffer);
index c2787a0eccc37d7273330df54fcdd5abe4f1bdd1..bd32786014b6a15504f2437a326e4e91f63b7aa9 100644 (file)
@@ -249,7 +249,7 @@ static double ecdh_results[EC_NUM][1];
 
 #if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_EC)
 static const char rnd_seed[] =
-    "string to make the random number generator think it has entropy";
+    "string to make the random number generator think it has randomness";
 #endif
 
 #ifdef SIGALRM
index 14072610354f57dae870da939be28d8ed9517920..b031c4d88e9c683d9df6783c9c565c4c82fc0813 100644 (file)
@@ -16,7 +16,7 @@ OPENSSL_instrument_bus, OPENSSL_instrument_bus2 - instrument references to memor
 It was empirically found that timings of references to primary memory
 are subject to irregular, apparently non-deterministic variations. The
 subroutines in question instrument these references for purposes of
-gathering entropy for random number generator. In order to make it
+gathering randomness for random number generator. In order to make it
 bus-bound a 'flush cache line' instruction is used between probes. In
 addition probes are added to B<vector> elements in atomic or
 interlocked manner, which should contribute additional noise on
index 62ff79444a464b30be757856fb4e2ad0c89f3c0b..c62d1407e7834f00b3c05a14a02759394d6e5bf1 100644 (file)
@@ -3,7 +3,7 @@
 =head1 NAME
 
 RAND_add, RAND_seed, RAND_status, RAND_event, RAND_screen - add
-entropy to the PRNG
+randomness to the PRNG
 
 =head1 SYNOPSIS
 
@@ -11,7 +11,7 @@ entropy to the PRNG
 
  void RAND_seed(const void *buf, int num);
 
- void RAND_add(const void *buf, int num, double entropy);
+ void RAND_add(const void *buf, int num, double randomness);
 
  int  RAND_status(void);
 
@@ -27,10 +27,10 @@ if the data at B<buf> are unpredictable to an adversary, this
 increases the uncertainty about the state and makes the PRNG output
 less predictable. Suitable input comes from user interaction (random
 key presses, mouse movements) and certain hardware events. The
-B<entropy> argument is (the lower bound of) an estimate of how much
-randomness is contained in B<buf>, measured in bytes. Details about
-sources of randomness and how to estimate their entropy can be found
-in the literature, e.g. RFC 1750.
+B<randomness> argument is an estimate of how much randomness is contained in
+B<buf>, in bytes, and should be a number between zero and B<num>.
+Details about sources of randomness and how to estimate their randomness
+can be found in the literature; for example IETF RFC 4086.
 
 RAND_add() may be called with sensitive data such as user entered
 passwords. The seed values cannot be recovered from the PRNG output.
@@ -42,7 +42,7 @@ application is responsible for seeding the PRNG by calling RAND_add(),
 L<RAND_egd(3)>
 or L<RAND_load_file(3)>.
 
-RAND_seed() is equivalent to RAND_add() when B<num == entropy>.
+RAND_seed() is equivalent to RAND_add() with B<randomness> set to B<num>.
 
 RAND_event() and RAND_screen() are deprecated and should not be called.
 
index 58aa9625720aaee46306a8aa48689b32f83941ff..9c2f9e19a6c294a9d5317527ab698939097a4f93 100644 (file)
@@ -24,9 +24,6 @@ enough randomness to ensure an unpredictable byte sequence.
 
 RAND_pseudo_bytes() has been deprecated; use RAND_bytes() instead.
 
-The contents of B<buf> is mixed into the entropy pool before retrieving
-the new pseudo-random bytes unless disabled at compile time (see FAQ).
-
 =head1 RETURN VALUES
 
 RAND_bytes() returns 1 on success, -1 if not supported by the current
index 1dc1321eaede891b7991b37b7b07446a1d4ab825..956362dff2eeadf768c1bc2d3071db4ab2bff3ce 100644 (file)
@@ -15,18 +15,18 @@ RAND_egd, RAND_egd_bytes, RAND_query_egd_bytes - query entropy gathering daemon
 
 =head1 DESCRIPTION
 
-RAND_egd() queries the entropy gathering daemon EGD on socket B<path>.
+RAND_egd() queries the Entropy Gathering Daemon (EGD) on socket B<path>.
 It queries 255 bytes and uses L<RAND_add(3)> to seed the
 OpenSSL built-in PRNG. RAND_egd(path) is a wrapper for
 RAND_egd_bytes(path, 255);
 
-RAND_egd_bytes() queries the entropy gathering daemon EGD on socket B<path>.
+RAND_egd_bytes() queries EGD on socket B<path>.
 It queries B<bytes> bytes and uses L<RAND_add(3)> to seed the
 OpenSSL built-in PRNG.
 This function is more flexible than RAND_egd().
 When only one secret key must
 be generated, it is not necessary to request the full amount 255 bytes from
-the EGD socket. This can be advantageous, since the amount of entropy
+the EGD socket. This can be advantageous, since the amount of randomness
 that can be retrieved from EGD over time is limited.
 
 RAND_query_egd_bytes() performs the actual query of the EGD daemon on socket
@@ -36,28 +36,28 @@ OpenSSL built-in PRNG using L<RAND_add(3)>.
 
 =head1 NOTES
 
-On systems without /dev/*random devices providing entropy from the kernel,
-the EGD entropy gathering daemon can be used to collect entropy. It provides
-a socket interface through which entropy can be gathered in chunks up to
+On systems without /dev/*random devices providing randomness from the kernel,
+EGD provides
+a socket interface through which randomness can be gathered in chunks up to
 255 bytes. Several chunks can be queried during one connection.
 
 EGD is available from http://www.lothar.com/tech/crypto/ (C<perl
 Makefile.PL; make; make install> to install). It is run as B<egd>
 I<path>, where I<path> is an absolute path designating a socket. When
 RAND_egd() is called with that path as an argument, it tries to read
-random bytes that EGD has collected. RAND_egd() retrieves entropy from the
+random bytes that EGD has collected. RAND_egd() retrieves randomness from the
 daemon using the daemon's "non-blocking read" command which shall
 be answered immediately by the daemon without waiting for additional
-entropy to be collected. The write and read socket operations in the
+randomness to be collected. The write and read socket operations in the
 communication are blocking.
 
 Alternatively, the EGD-interface compatible daemon PRNGD can be used. It is
 available from
 http://prngd.sourceforge.net/ .
 PRNGD does employ an internal PRNG itself and can therefore never run
-out of entropy.
+out of randomness.
 
-OpenSSL automatically queries EGD when entropy is requested via RAND_bytes()
+OpenSSL automatically queries EGD when randomness is requested via RAND_bytes()
 or the status is checked via RAND_status() for the first time, if the socket
 is located at /var/run/egd-pool, /dev/egd-pool or /etc/egd-pool.
 
index 7ebb72c1b33379c6810015f69522f8bcc6efb7b2..12075d252ad88869af2e8c176a9fcecbb4b8ed4a 100644 (file)
@@ -40,7 +40,7 @@ API is being used, so this function is no longer recommended.
      void (*seed)(const void *buf, int num);
      int (*bytes)(unsigned char *buf, int num);
      void (*cleanup)(void);
-     void (*add)(const void *buf, int num, int entropy);
+     void (*add)(const void *buf, int num, int randomness);
      int (*pseudorand)(unsigned char *buf, int num);
      int (*status)(void);
  } RAND_METHOD;
diff --git a/e_os.h b/e_os.h
index d331044eadaf01dae18821bd95c8f4edc6d8a71e..7138c7a181d19cb6c226c564bba2659d31191b1e 100644 (file)
--- a/e_os.h
+++ b/e_os.h
@@ -75,7 +75,7 @@ extern "C" {
 
 # ifndef DEVRANDOM
 /*
- * set this to a comma-separated list of 'random' device files to try out. My
+ * set this to a comma-separated list of 'random' device files to try out. By
  * default, we will try to read at least one of these files
  */
 #  define DEVRANDOM "/dev/urandom","/dev/random","/dev/srandom"
@@ -84,7 +84,7 @@ extern "C" {
 /*
  * set this to a comma-separated list of 'egd' sockets to try out. These
  * sockets will be tried in the order listed in case accessing the device
- * files listed in DEVRANDOM did not return enough entropy.
+ * files listed in DEVRANDOM did not return enough randomness.
  */
 #  define DEVRANDOM_EGD "/var/run/egd-pool","/dev/egd-pool","/etc/egd-pool","/etc/entropy"
 # endif
index 157d1ef916783db14e8ddc53231c418b3b831995..5cda71b7927df776203c0069d1f8966eed584850 100644 (file)
 extern "C" {
 #endif
 
-/* Already defined in ossl_typ.h */
-/* typedef struct rand_meth_st RAND_METHOD; */
-
 struct rand_meth_st {
     int (*seed) (const void *buf, int num);
     int (*bytes) (unsigned char *buf, int num);
     void (*cleanup) (void);
-    int (*add) (const void *buf, int num, double entropy);
+    int (*add) (const void *buf, int num, double randomness);
     int (*pseudorand) (unsigned char *buf, int num);
     int (*status) (void);
 };
@@ -50,7 +47,7 @@ void RAND_seed(const void *buf, int num);
 #if defined(__ANDROID__) && defined(__NDK_FPABI__)
 __NDK_FPABI__  /* __attribute__((pcs("aapcs"))) on ARM */
 #endif
-void RAND_add(const void *buf, int num, double entropy);
+void RAND_add(const void *buf, int num, double randomness);
 int RAND_load_file(const char *file, long max_bytes);
 int RAND_write_file(const char *file);
 const char *RAND_file_name(char *file, size_t num);
index 618b84e7733b52929b5f245dd522344d5401e734..303f40fd53f2e9ac769f07b4c462356b72b79326 100644 (file)
@@ -31,7 +31,7 @@ int main(int argc, char *argv[])
 static int cb(int p, int n, BN_GENCB *arg);
 
 static const char rnd_seed[] =
-    "string to make the random number generator think it has entropy";
+    "string to make the random number generator think it has randomness";
 
 static int dh_test(void)
 {
index 579e57c382af1eae8b17d462c9b6d12c7eaacf8c..9c5afa3c4673186dc21bf4846507d2b0cb36516a 100644 (file)
@@ -64,7 +64,7 @@ static unsigned char out_g[] = {
 static const unsigned char str1[] = "12345678901234567890";
 
 static const char rnd_seed[] =
-    "string to make the random number generator think it has entropy";
+    "string to make the random number generator think it has randomness";
 
 static int dsa_test(void)
 {
index 841934e51c69e544d8247aaa41dc30c9aad7bacf..8a245b5d7421870faaee0c2ac0ac0a765c0584b7 100644 (file)
@@ -28,8 +28,8 @@
 # include <openssl/rand.h>
 # include "testutil.h"
 
-static const char rnd_seed[] = "string to make the random number generator "
-    "think it has entropy";
+static const char rnd_seed[] =
+    "string to make the random number generator think it has randomness";
 
 
 /* functions to change the RAND_METHOD */
index 84e099716948a068d3e844e98271c4c74a3c50ae..351fefd994b38d3158ef4f282dd872a1641c215e 100644 (file)
@@ -1427,7 +1427,7 @@ static int parameter_test(void)
 }
 
 static const char rnd_seed[] =
-    "string to make the random number generator think it has entropy";
+    "string to make the random number generator think it has randomness";
 #endif
 
 int test_main(int argc, char *argv[])
index bcc10257d46875471bacc90f3da2dd149feef2ca..82b9bf8aecbd8a49ba5ae1ac396a347b8f42c76a 100644 (file)
@@ -20,7 +20,7 @@ plan tests => 4;
 require_ok(srctop_file('test','recipes','tconversion.pl'));
 
 open RND, ">>", ".rnd";
-print RND "string to make the random number generator think it has entropy";
+print RND "string to make the random number generator think it has randomness";
 close RND;
 subtest "generating certificate requests" => sub {
     my @req_new;
index 501009384a8b28ab3508f0ce5276bccaceb45faa..ea7623125cd64ddae19b3ee060d3bc4b1a5a63a6 100644 (file)
@@ -101,7 +101,7 @@ testssl("keyU.ss", $Ucert, $CAcert);
 # subtest functions
 sub testss {
     open RND, ">>", ".rnd";
-    print RND "string to make the random number generator think it has entropy";
+    print RND "string to make the random number generator think it has randomness";
     close RND;
 
     my @req_dsa = ("-newkey",
index 01cf4f1134352d89b0410cc908ddb479cae7844d..acadb669d2eb353dd3bf543b85b6fe67696fcfa4 100644 (file)
@@ -614,7 +614,7 @@ static char *cipher = NULL;
 static int verbose = 0;
 static int debug = 0;
 static const char rnd_seed[] =
-    "string to make the random number generator think it has entropy";
+    "string to make the random number generator think it has randomness";
 
 int doit_localhost(SSL *s_ssl, SSL *c_ssl, int family,
                    long bytes, clock_t *s_time, clock_t *c_time);