Man Linux: Main Page and Category List

NAME

       rngd - Check and feed random data from an entropy source (e.g. hardware
       RNG device) to an entropy sink (e.g. kernel entropy pool)

SYNOPSIS

       rngd [-b | --background | -f | --foreground] [-p file | --pidfile=file]
       [-B  n  |  --rng-buffers=n] [--hrng=name] [-R name | --rng-driver=name]
       [-r file | --rng-device=file]  [-H  n.nnn  |  --rng-entropy=n.nnn]  [-Q
       quality  |  --rng-quality=quality]  [-T n | --rng-timeout=n] [-o file |
       --random-device=file]  [-s  n  |  --random-step=n]  [-W  n  |   --fill-
       watermark=n[%]]   [-t   n   |  --feed-interval=n]  [-?]  [--help]  [-V]
       [--version]

DESCRIPTION

       This daemon feeds entropy from a  trusted  source  of  true  randomness
       (called  an  entropy  source)  such  as  a  hardware true random number
       generator (TRNG), to an entropy sink such as the kernel’s entropy pool.
       It  does  so only after checking the data to ensure that it is suitably
       random.

       Entropy measures the uncertainty (randomness) contained in an  unit  of
       information.   For  the  Linux  kernel, this unit is a binary bit.  The
       kernel keeps all the entropy it gathers from different  sources  in  an
       entropy  pool,  from  which  it  drawns  uncertainty to generate random
       numbers.  The primary purpose of rngd is to keep this pool as  full  of
       randomness as possible.

       rngd  works  on  blocks  of  20000 bits at a time, using the FIPS 140-2
       tests to verify the randomness of the block of data.  If that  data  is
       deemed  random,  the  block is fed back random-step*8 bits at a time to
       the entropy sink, (in the case of the kernel, this is  done  until  the
       kernel’s entropy pool is at least fill-watermark full).

       If  working with the kernel as an entropy sink, and the entropy pool is
       full, the daemon will force-feed the kernel random-step*8 bits of  data
       every  feed-interval seconds, to stir the entropy pool.  If the entropy
       source used by rngd is of very high  quality,  this  will  improve  the
       entropy of the pool.

       The  -f  or  --foreground  options  can  be  used to tell rngd to avoid
       forking on startup.  This is typically used for debugging.  The  -b  or
       --background  options,  which  fork  and  put  rngd into the background
       automatically, are the default.

       The -R or --rng-driver options can  be  used  to  select  the  type  of
       entropy  source.   The -r or --rng-device options can be used to select
       an alternate source of entropy, instead of the default /dev/hwrng.  The
       -o  or  --random-device  options  can  be  used  to select an alternate
       entropy output device, instead of the default /dev/random.   Note  that
       this device must support the Linux kernel’s /dev/random ioctl API.

       The -H or --rng-entropy options should be used to inform rngd about the
       entropy per bit of data received from the input source.

       The -B or --rng-buffers options can be used to  change  the  number  of
       buffers used by rngd.  Each buffer holds a block of 20000 bits of data,
       which  will  be  either  approved  or  discarded  by  the  FIPS  tests.
       Decreasing   the   number   of  buffers  below  3  can  degrade  rngd’s
       performance.  Increasing it above 3 will only help if you have very big
       bursts of entropy usage that a larger number of buffers can accomodate.

OPTIONS

       -b, --background
              Become a daemon (default).

       -f, --foreground
              Do not fork, nor detach from the controlling terminal.

       -R name, --rng-driver=name (default: stream)
              Entropy source driver.  stream is a general purpose Unix  stream
              input driver, capable of receiving data from a file, named pipe,
              or Unix character device.  viapadlock is  an  user-space  driver
              for the TRNG embedded on some VIA CPUs that have the VIA PadLock
              security engine.

       -o file, --random-device=file (default: /dev/random)
              Kernel device used for entropy output.

       -r file, --rng-device=file (default: /dev/hwrng)
              Kernel device, fifo or file used for entropy input by the stream
              entropy source driver.

       --hrng=name
              Selects  known-good  defaults  for  some  HRNGs.  help lists all
              known HRNGs.  You can override these defaults  selectively  with
              the other options.

       -H n.n, --rng-entropy=n.n (default: 1.0)
              Entropy  per bit of input data.  This is a floating point number
              between 0 and 1 (inclusive).

       -Q quality, --rng-quality=quality
              Selects the quality of the random data an  entropy  source  will
              generate.  Quality is: default, low, medium or high.  Do not use
              anything but high if the entropy sink will use the  random  data
              directly,  instead  of  using  it  to  seed a PRNG/entropy pool.
              Ignored by the stream entropy source driver.

       -B n, --rng-buffers=n (default: 3)
              Number of 20000 bit buffers to use.

       -s n, --random-step=n (default: 64)
              Number of bytes written to random-device at a time.  This number
              should  be  even,  and  between 8 and 2500.  Setting it too high
              will cause rngd to dominate the contents of  the  entropy  pool.
              Values above 256 are unlikely to increase performance.

       -W n, --fill-watermark=n[%] (default: 50%)
              Once  we  start doing it, feed entropy to random-device until at
              least fill-watermark  bits  of  entropy  are  available  in  its
              entropy pool.  Setting this too high will cause rngd to dominate
              the contents of the entropy pool.  Low values will  hurt  system
              performance  during  entropy  starves.   fill-watermark  can  be
              specified either  as  an  absolute  number  of  bits,  or  as  a
              percentage of the total size of the entropy pool.

       -t n, --feed-interval=n (default: 60)
              If  feed-interval  is  not zero, rngd will force-feed entropy to
              the random device even when the entropy pool is full every feed-
              interval  seconds.   Setting  this  too  low  may  cause rngd to
              dominate the contents of the entropy pool.

       --timeout=n
              Deprecated, use --feed-interval instead.

       -T n, --rng-timeout=n (default: 10)
              Time to wait for data to start coming from the  entropy  source,
              before   giving   up   and   aborting.    Zero   disables   this
              functionality, and will cause  rngd  to  wait  forever  for  the
              entropy source.

       -p file, --pidfile=file (default: /var/run/rngd.pid)
              File to write PID to when running in background mode.

       -?, --help
              Give a short summary of all program options.

       -V, --version
              Print program version.

WARNING

       Depending on its settings, rngd can dominate the kernel’s entropy pool,
       by feeding it so much data, so often, that other sources of entropy are
       mostly  ignored or lost.  Do not to that unless you trust rngd’s source
       of random data ultimately.

       Also, there is only so much bandwidth available from a HRNG, and it  is
       often  not much.  Don’t drain too much with too low a feed-interval, or
       rngd may not have enough data on its buffers when the kernel  gets  low
       on entropy.

STATISTICS

       rngd  will  dump  some statistics to its output channel hourly, or when
       sent a SIGUSR1 signal.  The output channel is  either  stderr  when  in
       foreground mode, or syslog when in background mode.

       Bits  received  from HRNG source is the number of bits received by rngd
       from the entropy source.  Bits sent to kernel pool  is  the  number  of
       bits  sent  by  rngd to the kernel, and Entropy added to kernel pool is
       the number of bits of entropy in that mass of data that was informed to
       the kernel.

       FIPS  140-2  successes  and  FIPS  140-2  failures counts the number of
       20000-bit blocks either accepted or rejected by the FIPS  140-2  tests.
       The  other  statistics  show  a breakdown of the FIPS 140-2 failures by
       FIPS 140-2 test.  See the FIPS 140-2 document for more information.

       HRNG source speed measures the speed of the entropy source, for reading
       a  20000-bit block of data.  FIPS tests speed measures the speed of the
       FIPS 140-2 tests for a 20000-bit block of data.

       Lowest ready-buffers level records the lowest number of  ready  buffers
       (i.e.  that  can be fed to the kernel) hit so far.  If it gets to zero,
       you may want to increase rng-buffers.  If it is always above 1, you may
       want to decrease rng-buffers.

       Entropy  starvations  counts  the number of times the kernel asked rngd
       for entropy, and rngd had  none  to  give.   Time  spent  starving  for
       entropy  records  the time spent by rngd waiting for a buffer with good
       entropy to become available, during such an episode.

SIGNALS

       rngd is multithreaded.  If the threading  implementation  shows  up  as
       multiple  rngd  processes, signals should be sent to the process listed
       in the pidfile.

       SIGTERM terminates rngd cleanly.

       SIGUSR1 causes rngd to dump  some  statistics  to  its  output  channel
       immediately.

EXIT STATUS

       0 if no errors happen.

       1 if rng-source is misbehaving.

       10  if there are problems with the parameters, or if rngd fails to lock
       the pidfile, or if rng-device cannot be opened.

       11 if an input/output error happens.

       12 if an operating system or resource starvation error happens.

BUGS

       The  /dev/random  driver  in  Linux kernels up to 2.4.28 inclusive (and
       probably later ones too) has broken entropy accounting, and fails to do
       catrastrophic reseeds correctly.  This has been fixed in Linux 2.6.

       It is a very bad idea to shrink the capacity of the kernel entropy pool
       with rngd running, as it may misbehave the next time the  pool  drains.
       Please restart rngd every time the kernel entropy pool size is changed.

FILES

       /dev/random,               /dev/hwrng,               /var/run/rngd.pid,
       /proc/sys/kernel/random/poolsize
       /proc/sys/kernel/random/write_wakeup_threshold

SEE ALSO

       random(4), rngtest(1)

       FIPS PUB 140-2 Security Requirements for Cryptographic Modules; NIST;
              http://csrc.nist.gov/cryptval/140-2.htm

       NIST Special Publication 800-22; NIST;
              http://csrc.nist.gov/rng/rn.html

       The Intel(R) Random  Number  Generator;  Cryptography  Research,  Inc.;
       1999;
              http://developer.intel.com/design/chipsets/rng/CRIwp.htm

       Evaluation of VIA C3 Nehemiah Random Number Generator;
              Cryptography Research, Inc.; 2003; http://www.cryptography.com/

AUTHORS

       Philipp Rumpf
       Jeff Garzik <jgarzik@pobox.com>
       Matt Sottek
       Henrique de Moraes Holschuh <hmh@debian.org>