2000-10-14 16:16:42 +00:00
|
|
|
.\"
|
|
|
|
.\" Copyright (c) 2000
|
|
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
|
|
.\" modification, are permitted provided that the following conditions
|
|
|
|
.\" are met:
|
|
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
|
|
.\"
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
|
|
|
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
|
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
|
|
.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
|
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
|
|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
|
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
.\"
|
|
|
|
.\" $FreeBSD$
|
|
|
|
.\" "
|
|
|
|
.Dd September 25, 2000
|
|
|
|
.Os
|
|
|
|
.Dt RANDOM 9
|
|
|
|
.Sh NAME
|
2002-11-29 11:39:20 +00:00
|
|
|
.Nm arc4rand ,
|
2000-11-13 13:12:44 +00:00
|
|
|
.Nm arc4random ,
|
|
|
|
.Nm random ,
|
|
|
|
.Nm read_random ,
|
|
|
|
.Nm srandom
|
2001-04-18 15:54:10 +00:00
|
|
|
.Nd supply pseudo-random numbers
|
2000-10-14 16:16:42 +00:00
|
|
|
.Sh SYNOPSIS
|
2001-10-01 16:09:29 +00:00
|
|
|
.In sys/libkern.h
|
2000-10-14 16:16:42 +00:00
|
|
|
.Ft void
|
|
|
|
.Fn srandom "u_long seed"
|
|
|
|
.Ft u_long
|
|
|
|
.Fn random "void"
|
2002-10-11 13:13:08 +00:00
|
|
|
.Ft void
|
|
|
|
.Fn arc4rand "void *ptr" "u_int length" "int reseed"
|
2000-10-14 16:16:42 +00:00
|
|
|
.Ft u_int32_t
|
|
|
|
.Fn arc4random "void"
|
|
|
|
.Pp
|
2001-10-01 16:09:29 +00:00
|
|
|
.In sys/random.h
|
2002-04-12 05:19:12 +00:00
|
|
|
.Ft int
|
|
|
|
.Fn read_random "void *buffer" "int count"
|
2000-10-14 16:16:42 +00:00
|
|
|
.Sh DESCRIPTION
|
|
|
|
The
|
|
|
|
.Fn random
|
|
|
|
function will by default produce a sequence of numbers that can be duplicated
|
|
|
|
by calling
|
|
|
|
.Fn srandom
|
2000-11-13 13:12:44 +00:00
|
|
|
with
|
2000-10-14 16:16:42 +00:00
|
|
|
.Ql 1
|
|
|
|
as the
|
2002-11-29 11:39:20 +00:00
|
|
|
.Fa seed .
|
2000-10-14 16:16:42 +00:00
|
|
|
The
|
|
|
|
.Fn srandom
|
|
|
|
function may be called with any arbitrary
|
2002-11-29 11:39:20 +00:00
|
|
|
.Fa seed
|
2000-11-13 13:12:44 +00:00
|
|
|
value to get slightly more unpredictable numbers.
|
2000-10-14 16:16:42 +00:00
|
|
|
It is important to remember that the
|
|
|
|
.Fn random
|
|
|
|
function is entirely predictable, and is therefore not of use where
|
|
|
|
knowledge of the sequence of numbers may be of benefit to an attacker.
|
|
|
|
.Pp
|
|
|
|
The
|
2002-10-11 13:13:08 +00:00
|
|
|
.Fn arc4rand
|
2000-10-14 16:16:42 +00:00
|
|
|
function will return very good quality random numbers, slightly better
|
|
|
|
suited for security-related purposes.
|
|
|
|
The random numbers from
|
2002-10-11 13:13:08 +00:00
|
|
|
.Fn arc4rand
|
2000-10-14 16:16:42 +00:00
|
|
|
are seeded from the entropy device if it is available.
|
2002-10-11 13:13:08 +00:00
|
|
|
Automatic reseeds happen after a certain timeinterval and after a
|
|
|
|
certain number of bytes have been delivered.
|
|
|
|
A forced reseed can be forced by passing a non-zero value in the
|
2002-11-29 11:39:20 +00:00
|
|
|
.Fa reseed
|
2002-10-11 13:13:08 +00:00
|
|
|
argument.
|
2000-10-14 16:16:42 +00:00
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fn read_random
|
|
|
|
function is used to return entropy directly from the entropy device
|
|
|
|
if it has been loaded. If the entropy device is not loaded, then
|
|
|
|
the
|
2002-11-29 11:39:20 +00:00
|
|
|
.Fa buffer
|
2000-10-14 16:16:42 +00:00
|
|
|
is filled with output generated by
|
|
|
|
.Fn random .
|
|
|
|
The
|
2002-11-29 11:39:20 +00:00
|
|
|
.Fa buffer
|
2000-10-14 16:16:42 +00:00
|
|
|
is filled with no more than
|
2002-11-29 11:39:20 +00:00
|
|
|
.Fa count
|
2000-10-14 16:16:42 +00:00
|
|
|
bytes. It is advised that
|
|
|
|
.Fn read_random
|
|
|
|
is not used; instead use
|
2002-11-29 11:39:20 +00:00
|
|
|
.Fn arc4rand
|
2000-10-14 16:16:42 +00:00
|
|
|
.Pp
|
|
|
|
All the bits generated by
|
|
|
|
.Fn random ,
|
2002-10-11 13:13:08 +00:00
|
|
|
.Fn arc4rand
|
2000-10-14 16:16:42 +00:00
|
|
|
and
|
|
|
|
.Fn read_random
|
2003-10-23 02:33:03 +00:00
|
|
|
are usable.
|
|
|
|
For example,
|
2000-10-14 16:16:42 +00:00
|
|
|
.Sq Li random()&01
|
|
|
|
will produce a random binary value.
|
2002-10-11 13:13:08 +00:00
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fn arc4random
|
|
|
|
is a convenience function which calls
|
|
|
|
.Fn arc4rand
|
|
|
|
to return a 32 bit pseudo-random integer.
|
2000-10-14 16:16:42 +00:00
|
|
|
.Sh RETURN VALUES
|
|
|
|
The
|
|
|
|
.Fn random
|
|
|
|
function
|
|
|
|
uses a non-linear additive feedback random number generator employing a
|
|
|
|
default table of size 31 long integers to return successive pseudo-random
|
|
|
|
numbers in the range from 0 to
|
|
|
|
.if t 2\u\s731\s10\d\(mi1.
|
|
|
|
.if n (2**31)\(mi1.
|
|
|
|
The period of this random number generator is very large, approximately
|
|
|
|
.if t 16\(mu(2\u\s731\s10\d\(mi1).
|
|
|
|
.if n 16*((2**31)\(mi1).
|
|
|
|
.Pp
|
|
|
|
The
|
2002-10-11 13:13:08 +00:00
|
|
|
.Fn arc4rand
|
|
|
|
function uses the RC4 algorithm to generate successive pseudo-random
|
|
|
|
bytes.
|
|
|
|
The
|
2000-10-14 16:16:42 +00:00
|
|
|
.Fn arc4random
|
|
|
|
function
|
2002-11-29 11:39:20 +00:00
|
|
|
uses
|
2002-10-11 13:13:08 +00:00
|
|
|
.Fn arc4rand
|
|
|
|
to generate pseudo-random numbers in the range from 0 to
|
2000-10-14 16:16:42 +00:00
|
|
|
.if t 2\u\s732\s10\d\(mi1.
|
|
|
|
.if n (2**32)\(mi1.
|
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fn read_random
|
|
|
|
function returns the number of bytes placed in
|
2002-11-29 11:39:20 +00:00
|
|
|
.Fa buffer .
|
2000-10-14 16:16:42 +00:00
|
|
|
.Sh AUTHORS
|
|
|
|
.An Dan Moschuk
|
|
|
|
wrote
|
|
|
|
.Fn arc4random .
|
|
|
|
.An Mark R V Murray
|
|
|
|
wrote
|
|
|
|
.Fn read_random .
|