*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->HP-UX 11i man pages -> rng (7)              
Title
Content
Arch
Section
 

Contents


 random(7)                                                         random(7)




 NAME    [Toc]    [Back]
      random, urandom, rng - strong random number generator

 SYNOPSIS    [Toc]    [Back]
      #include <sys/random.h>

 DESCRIPTION    [Toc]    [Back]
      The character special files /dev/random and /dev/urandom provide an
      interface to the kernel-resident random number generator, rng.  A
      read() from /dev/random is potentially blocking, as compared to a read
      from /dev/urandom which is always nonblocking.  Data from /dev/urandom
      can potentially have lower entropy than data from /dev/random.

      The rng module is a dynamically loadable kernel module (DLKM). That
      is, it can be dynamically unconfigured or reconfigured by an
      administrator with root authority without rebooting the system.

      A sequence from rng has unlimited entropy.  In contrast, a sequence
      generated computationally by a pseudorandom number generator, such as
      random(3M), has limited entropy, derived only from its initial seed.
      The rng module should be considered a quality source for randomness.
      It has passed extensive statistical testing, including the NIST
      (National Institute of Standards and Technology) tests for randomness.

      The rng module uses the uncertainty in completion times of interrupt
      threads triggered by external events.  The rng module extracts a
      sequence of bits from the interrupt time stamps.  Any existing bit
      bias is removed to yield a sequence with uniform distribution of 0's
      and 1's.  The resulting sequence is divided between the holding
      buffers for the special files /dev/random and /dev/urandom.  For each
      read() on /dev/random and /dev/urandom, data is retrieved from the
      corresponding holding buffer.  A hash function based on AES (Advanced
      Encryption Standard) is applied and the result is placed in the buffer
      provided by the user.  All requests on the holding buffers are
      serialized to ensure that returned random data is not shared between
      different requests even for simultaneous requests on a multiprocessor
      system.

      There is no write() function associated with either /dev/random or
      /dev/urandom, and both devices are read-only by all users.  A single
      ioctl() is defined for /dev/random to facilitate independent
      verification of rng production.

      The file /usr/include/sys/random.h contains the following definitions:

        /* The maximum request size, for read() or ioctl(), in bytes   */
        #define RNG_READMAX    256

        /* ioctl() to retrieve data from the entropy collector directly*/
        #define RNG_GETRAW     _IOR('Q', 0, uint8_t[RNG_READMAX])




 Hewlett-Packard Company            - 1 -   HP-UX 11i Version 2: August 2003






 random(7)                                                         random(7)




      If a read() request is for more than RNG_READMAX bytes, it is treated
      as if it was for exactly RNG_READMAX bytes. This holds for both
      /dev/random and /dev/urandom.

    Specific Information About /dev/random
      When there are a large number of requests on /dev/random within a
      short time interval, the demand on the holding buffer can exceed the
      rate at which data is supplied by rng.  A read() on the /dev/random
      device blocks the requesting thread if the random data stored in the
      holding buffer is too low to complete the request.  The thread blocks
      until the holding buffer has been updated with enough random data to
      complete the request.

      For /dev/random open() flags, only O_NONBLOCK and O_NDELAY have
      device-specific actions.  If neither of these flags is set, a read()
      on /dev/random will block until the amount of data requested, up to
      RNG_READMAX bytes, can be returned.  When the requested number of
      bytes is not available and either of the above flags are set, read()
      returns immediately. If the O_NONBLOCK flag is set, read() returns -1
      and errno is set to EAGAIN.  If O_NONBLOCK is not set and O_NDELAY is
      set, read() returns zero.

      The RNG_GETRAW ioctl() permits an application with superuser privilege
      to fetch RNG_READMAX bytes of data directly from the /dev/random
      holding buffer, after bias has been removed but before the AES hash.
      This interface is not intended to be used for cryptographic
      applications, rather, for statistical testing of the randomness of the
      data in the /dev/random holding buffer.  This RNG_GETRAW ioctl()
      blocks for the same reason as a read on /dev/random.  If the
      requesting thread does not have superuser authority, EACCES is
      returned.

    Specific Information About /dev/urandom
      To address the limited random data collection rate problem, the
      /dev/urandom device is strictly nonblocking.  The /dev/urandom holding
      buffer is regularly updated with random data, yet a high number of
      reads can decrease the entropy in its holding buffer.  Under this
      conditions, the entropy of the data from /dev/urandom will be slightly
      lower that the one from /dev/random, yet /dev/urandom can still be
      considered a good source of random numbers.

      There are no open() flags that result in device-specific actions with
      /dev/urandom read().

 ERRORS    [Toc]    [Back]
      [EAGAIN]       For /dev/random read(), O_NONBLOCK was set when
                     /dev/random was opened, and there is insufficient
                     content in the holding buffer to complete the request.

      [EACCES]       For the /dev/random RNG_GETRAW ioctl(), the requesting
                     thread did not have superuser authority.



 Hewlett-Packard Company            - 2 -   HP-UX 11i Version 2: August 2003






 random(7)                                                         random(7)




 AUTHOR    [Toc]    [Back]
      The random number generator was developed by HP.

      For bias removal, the generator uses an algorithm by Dr. Yuval Perez,
      University of California.

      The secure hashing uses an AES implementation provided by Dr. Brian
      Gladman, UK.

      The NIST statistical tests are available at http://csrc.nist.gov/rng

 FILES    [Toc]    [Back]
      /dev/random
      /dev/urandom


 Hewlett-Packard Company            - 3 -   HP-UX 11i Version 2: August 2003
[ Back ]
 Similar pages
Name OS Title
rand Linux random number generator.
random Linux random number generator.
rand_r OpenBSD bad random number generator
srand FreeBSD bad random number generator
rand_r NetBSD bad random number generator
rand OpenBSD bad random number generator
srand OpenBSD bad random number generator
rand FreeBSD bad random number generator
rand NetBSD bad random number generator
srand NetBSD bad random number generator
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service