From the lavarand® webpage, how lavarand works
Step 1: Establish a chaotic system (Set up Lava Lite® lamps in a machine room):
  • Lava Lite lamps are very good chaotic sources when operated under conditions recommended by the manufacturer. We use the Eleck-trickTM Lava Lite lamp model, in part because it works well in colder conditions found in machine rooms but more importantly, it comes in rad colors!

Step 2: Digitize the chaotic system (Take digital images of the Lava Lite lamps):
  • An O2camTM digital camera is set up in front of six Lava Lite lamps. The digital camera takes a picture of the Lava Lite lamps every once in a while:

  • Digital cameras are "noisy" by nature. Taking two pictures of the same object will more likely than not produce two different images. Digital cameras add digital noise to the visual signal that they process.

Step 3: Cryptographically hash the digitization of the chaotic system (Feed the digital output through a number munger):
  • The digital output of the image is then munged by an algorithm, which compresses and scrambles it. Thus the 921,600-byte image is transmogrified into an 140-byte "seed."

  • The technogeek explanation :
    We use NIST's Secure Hash Standard rev 1 (SHS-1, sometimes called the Secure Hash Algorithm or SHA-1) to cryptographically hash the digitized image of the chaotic system (Lava Lite lamps) produced in step 2.

  • Our implementation of SHS-1 allows for the production of an n-way hash. An n-way hash produces n hash values, each of which is a hash of a every nth octet. In this example we use a 7-way hash, each of which produces a 160 bit value from every 7th byte of the digitized image. By hashing every 7th byte we avoid hashing the same byte of each pixel.

  • The 7-way SHA-1 hash of a sample digitized image yields the following 140-byte base 16 value:

    90e430da0f4e9275d84250ee39e8c537dcc2b2f147f9d80447bcda8e 515e67402a08cf46b0995526b60de804fa685e74d0a911db24597c84 7f1d0ba6e3bc0199801e5a619ee149b9427fcfe2c004edeb1d6a84e5 da2dda590340b1c07917f13302165ac1191967286fcac23bed15dccb 68e9b4bed303efc3f2e01ce7d4fbd12892d072d7d47928ac97d3aea4

Step 4: Seed a pseudo-random number generator (Feed the 140-byte value through another number munger):
  • The 140-byte value gets fed through the Blum Blum Shub - one of the best available number generators, its quality endorsed by respectable mathematicians everywhere. Think of a roulette game as an analogy - the pseudo-random number generator is the roulette wheel, the seed is how long the roulette wheel spins before it begins to slow down. The slot the ball falls into at the end is the resulting random number. Voila! You have a random number!

  • Here is a sample 128-byte random number (in base 16):

    0abaa8abf2204f775e1edde38f3768858ec9234eae5fb32651374064a76ebc4e 1e2c5ede9264722489fd5dc0de70016c4720a5317d5cd218bf2b76d81d1a81ce 3fca399723f9499e938943be1077113973fd8d1d6e62b505a548f504794c4cb1 b4f06d122253423d29fe019fb3fe44a25e29f810327ec5be3578995ea11ba534

  • NOTE: This random data is provided ``as is''. Obviously the random data generated by these demos is not secure since anyone can see this same data. See our standard disclaimer.

  • The technogeek explanation: We use the Blum Blum Shub pseudo-random number generator, which takes the product of two prime numbers and generates a very long, cryptographically strong sequence of pseudo-random bits.

  • The Blum Blum Shub is based on the low order bits of quadratic residues of a product of two Blum primes. Blum primes are primes that are 3 mod 4. A quadratic residue is the square of a value modulo some value, in this case, modulo a product of two Blum primes. In this example we are using the following 1062-bit product of two Blum primes:

    5360751114622011236087979022735306713592537659947455285353148181 8526455500785383194936281698585494806464721601253386562653528822 5543322562532917886396992291116815877218495559211688377961466145 0857446201926232198015028137924055146650866097197909406089918491 4133568666470293429076893274969016410915119621659901793350665953