Oberon ||
Library ||
Module Index ||
Search Engine ||
Definition ||
Module

# Ulm's Oberon Library:

BBS

## NAME

BBS - implementation of the Blum, Blum, and Shub pseudo random number generator
## SYNOPSIS

PROCEDURE CreateSequence(VAR sequence: RandomGenerators.Sequence;
blumInt: IntOperations.Operand;
seed: IntOperations.Operand);

## DESCRIPTION

`BBS`
offers a cryptographically secure implementation of `Random`. The
implementation uses a quadratic residue generator developed by Blum, Blum, and
Shub. For references look at SIAM Journal on Computing, v. 15,n. 2, 1986, pp.
364-383: L. Blum, M. Blum, and M. Shub,
`A Simple Unpredictable Pseudo-Random Number Generator` or RFC 1750, 6.3.2. This pseudo random generator is the most
simple and efficient one for the generation of cryptographically secure random
values. It is comparatively slow and less useful for stream ciphers, but for
high security applications, like key generation, the generator is the best
known. `BBS` does not replace the predefined sequence
`RandomGenerators.std`.
`CreateSequence`
creates and initializes a new sequence of pseudo random numbers. The sequence
of random numbers depends on `seed` and on the given Blum integer
`blumInt`.

A Blum integer is defined as the product of two large prime numbers which are
congruent to 3 modulo 4. For cryptographically secure applications the Blum
integer must have an appropriate length because the security rests on the
difficulty of factoring the Blum integer. In Douglas R. Stinson, `Cryptography`,
4.4 and 4.8 at least 200 decimals (about 650 bit) are recommended but the
larger the better. If `blumInt` is not given, then a default 128 bit Blum
integer is used.

`seed` is expected to be a random integer which is relatively prime to
`blumInt`. Relatively prime means that the greatest common divisor of
`seed` and `blumInt` is 1. Good, hardly reproducible seed values are
available in `RandomGenerators.seed`,
for example by using `UnixSeeds`.

## DIAGNOSTICS

`BBS` asserts `seed` to be not **NIL** and checks whether `seed`
is relatively prime to `blumInt` or not. If not, then `seed` is slightly
corrected.
## SEE ALSO

`IntOperations`-
generic interface for arithmetic integer operations
`RandomGenerators`-
general abstraction for pseudo random number generators
`UnixSeeds`-
generation of seed values in the UNIX operating system

## AUTHOR

Frank B.J. Fischer

Edited by: borchert, last change: 1997/04/16, revision: 1.1, converted to HTML: 1997/04/28

Oberon ||
Library ||
Module Index ||
Search Engine ||
Definition ||
Module