ISAAC (indirection, shift, accumulate, add, and count) is a
cryptographically secure pseudorandom number generator
A cryptographically secure pseudorandom number generator (CSPRNG) or cryptographic pseudorandom number generator (CPRNG) is a pseudorandom number generator (PRNG) with properties that make it suitable for use in cryptography. It is also loosely kno ...
and a
stream cipher
stream cipher is a symmetric key cipher where plaintext digits are combined with a pseudorandom cipher digit stream ( keystream). In a stream cipher, each plaintext digit is encrypted one at a time with the corresponding digit of the keystream ...
designed by
Robert J. Jenkins Jr. in 1993. The
reference implementation
In the software development process, a reference implementation (or, less frequently, sample implementation or model implementation) is a program that implements all requirements from a corresponding specification. The reference implementation ...
source code
In computing, source code, or simply code, is any collection of code, with or without comment (computer programming), comments, written using a human-readable programming language, usually as plain text. The source code of a Computer program, p ...
was dedicated to the
public domain
The public domain (PD) consists of all the creative work to which no exclusive intellectual property rights apply. Those rights may have expired, been forfeited, expressly waived, or may be inapplicable. Because those rights have expired, ...
.
Operation
The ISAAC
algorithm
In mathematics and computer science, an algorithm () is a finite sequence of rigorous instructions, typically used to solve a class of specific problems or to perform a computation. Algorithms are used as specifications for performing ...
has similarities with
RC4
In cryptography, RC4 (Rivest Cipher 4, also known as ARC4 or ARCFOUR, meaning Alleged RC4, see below) is a stream cipher. While it is remarkable for its simplicity and speed in software, multiple vulnerabilities have been discovered in RC4, ren ...
. It uses an
array
An array is a systematic arrangement of similar objects, usually in rows and columns.
Things called an array include:
{{TOC right
Music
* In twelve-tone and serial composition, the presentation of simultaneous twelve-tone sets such that the ...
of 256 four-octet
integers
An integer is the number zero (), a positive natural number (, , , etc.) or a negative integer with a minus sign ( −1, −2, −3, etc.). The negative numbers are the additive inverses of the corresponding positive numbers. In the language ...
as the internal state, writing the results to another 256 four-octet integer array, from which they are read one at a time until empty, at which point they are recomputed. The computation consists of altering ''i''-element with (''i''⊕128)-element, two elements of the state array found by indirection, an accumulator, and a counter, for all values of ''i'' from 0 to 255. Since it only takes about 19 32-bit operations for each 32-bit output word, it is very fast on 32-bit computers.
Cryptanalysis
Cryptanalysis has been undertaken by Marina Pudovkina (2001). Her attack can recover the initial state with a complexity that is approximated to be less than the time needed for searching through the square root of all possible initial states. In practice this means that the attack needs
instead of
. This result has had no practical impact on the security of ISAAC.
In 2006 Jean-Philippe Aumasson discovered several sets of weak states. The fourth presented (and smallest) set of weak states leads to a highly biased output for the first round of ISAAC and allows the derivation of the internal state, similar to a
weakness in RC4. It is not clear if an attacker can tell from just the output whether the generator is in one of these weak states or not. He also shows that a previous attack is flawed, since the
Paul
Paul may refer to:
*Paul (given name), a given name (includes a list of people with that name)
* Paul (surname), a list of people
People
Christianity
* Paul the Apostle (AD c.5–c.64/65), also known as Saul of Tarsus or Saint Paul, early Chr ...
-
Preneel attack is based on an erroneous algorithm rather than the real ISAAC.
An improved version of ISAAC is proposed, called ISAAC+.
Usage outside cryptography
Many implementations of ISAAC are so fast that they can compete with other high speed PRNGs, even with those designed primarily for speed not for security. Only a few other generators of such high quality and speed exist in usage.
ISAAC is used in the Unix tool
shred to securely overwrite data.
Also ISAAC algorithm is implemented in Java Apache Commons Math library.
Apache Commons Math reference
/ref>
References
External links
Multiple ISAAC implementations at Rosetta Code
Math::Random::ISAAC
a Perl module implementation of the algorithm
isaac.js
a JavaScript implementation
{{DEFAULTSORT:Isaac (Cipher)
Cryptographically secure pseudorandom number generators
Stream ciphers
Public-domain software with source code