Main Content

The Chernobyl Dice is a quantum random number generator [0] that uses nuclear decays from a weakly radioactive sample as a source of entropy. It consists of four primary components:

- An Arduino Nano microcontroller
- A Geiger counter
- Six uranium glass marbles
- Nixie tube display
- Geiger counter events (“clicks”) are converted into random bits using the following algorithm:

In a ring buffer, for each millisecond record either a 0 or a 1, depending on whether or not a Geiger event occurred
- Perform an initial de-bias of this 0-dominated stream using von Neumann’s method [0]
- Further de-bias by XOR-ing bits generated in the previous step with the mod2 of elapsed 4 microsecond intervals since since the device was powered on
- The uranium glass sample is illuminated by an array of ultraviolet LEDs at each Geiger event, which makes them fluoresce bright green. This has nothing to do with the radioactivity of the sample, but it does, however, look really cool.

The device has three modes of operations, which can be selected via the rotary switch:

Clock Mode

Displays the current time, with the Geiger board unpowered. The time can be set by flipping the toggle switches on and off (the ‘16’ toggle increments the hour, the ‘8’ toggle increments 10 minutes, the ‘4’ toggle increments 1 minute, and the ‘1’ toggle resets the seconds).

Streaming Mode

Repeatedly generates random numbers of a size specified by the toggles (or random bytes from 0-255 if no toggles are set). Numbers generated in this mode are transmitted over serial via USB. This mode also has a “turbo” setting to facilitate statistical testing, which can be enabled by holding down the pushbutton. When “turbo” is enabled bit generation will be indicated by LEDs in the display, and the Geiger “clicks” will be silent.

Dice Mode

In dice mode random number generation is initiated via the pushbutton, and the size of the random number to be generated is set by the sum of the toggled switches (no switches are set the device will generate random byte in the range 0-255). Press once to generate the number, and once again to clear the display. The size of the number to be generated is displayed in blinking digits.”

Link to article