

Geiger entropy
A dedicated Bitcoin seed phrase generator that uses radioactive decay as an entropy source. Completely open source and designed to be simple, auditable, and built by anyone with readily available components.
- Size
- 112 × 63 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 36
- Nets
- 49
- Pads
- 137
- Tracks, vias
- 135, 308
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 25 Aug 2026
- Updated
- 18 Sep 2026
Overview
Geiger entropy is an open-source printed circuit board by captainchapster, from the captainchapster/Entropy32 repository on GitHub, published under the MIT licence. It is a 2-layer board of 112 × 63 mm with 36 parts on 49 nets, routed with 135 tracks and 308 vias.
It is built around the ATMEGA328-PU, L7805 and LM393. Its parts include 10 capacitors, 10 resistors, 4 connectors, 3 ICs and 3 switches. It belongs with the sensors and measurement boards and the AVR (ATmega, ATtiny) boards of this library.
Main components
3ATMEGA328-PU
PDIP-28-40℃~+85℃ 1.8V~5.5V 10bit 1KB 20MHz 23 2KB 32KB 8 Bit AVR Built-in FLASH PDIP-28 Microcontrollers (MCU/MPU/SOC) ROHSMicrochip TechnologyMicrocontrollers (MCU/MPU/SOC)L7805
TO-220ST0℃~+125℃@(Tj) 1 1.2A 20V 2V@(1A) 42uV 500uA 5V 73dB@(120Hz) Fixed Positive Short Circuit Protection TO-220ST Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSOSENVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsLM393
SOP-8-16V~16V 0℃~+70℃ 2 2.5mA 250nA 2V~36V 36V 5mV 5nA Fail-safe function Open-drain SOP-8 Comparators ROHSMSKSEMIComparators
README
README.mdEntropy32

Entropy32 (aka The Universe Bifurcator) is a dedicated Bitcoin seed phrase generator that uses radioactive decay as its entropy source. It's completely open source and designed to be simple, auditable, and buildable by anyone with readily available components.
Why radioactive decay?
Pseudo-random number generators are deterministic — given the same seed, they always produce the same output. True randomness for something as consequential as a Bitcoin wallet's seed phrase should come from a physical process nobody can predict or manipulate. Radioactive decay is quantum-mechanically random: the timing of individual decay events is fundamentally unpredictable, making it an ideal entropy source for generating cryptographic secrets.
How it works
- A Geiger counter detects decay events from a radioactive source (or background) and outputs a pulse via a 3.5mm audio jack.

- An LM393 comparator IC then takes the 0-1.5V pulse and compares it to a bias of ~0.5V via a voltage divider such that if V>0.5V we get HIGH else LOW.

- The timing between events is captured and compared in non-overlapping pairs (each inter-arrival time feeds exactly one comparison, so adjacent output bits never share an input interval). Each resulting bit passes two continuous NIST SP 800-90B health tests (Repetition Count Test and Adaptive Proportion Test) before it's fed through SHA-256 conditioning to whiten the raw entropy and remove any bias — if either test trips, the device halts rather than generating a seed from a degraded source.
- The conditioned entropy is mapped to words from the standard BIP39 English wordlist.
- A simple button-driven, state-machine UI walks you through generating and displaying your seed phrase — entirely offline, with no wireless connectivity, no persistent storage of the seed, and no software dependencies beyond the device itself.
Hardware
- Custom PCB built around an ATmega328P microcontroller, designed in KiCad
- Geiger counter module as the entropy source (currently designed to take the 3.5mm output of the GQ Electronics GMC-320S)
- LM393 comparator IC
- Push-button interface for on-device operation
- Serveral common passives i.e. resistors, capacitors, and LEDs
- 7805 voltage regulator
- 16MHZ crystal oscillator
- 16x2 LCD display with I2C adaptor
- PJ320E 3.5mm audio jack
- DC barrel jack
- header pins
Repository contents
| File | Purpose |
|---|---|
entropy32.ino | Main firmware — state machine, entropy capture, and UI logic |
sha256.h / sha256.cpp | SHA-256 implementation used to condition raw entropy |
bip39_wordlist.h | BIP39 English wordlist, compiled into firmware |
button.h | Button input handling |
english.txt | Source BIP39 wordlist |
generate_wordlist.py | Script to regenerate bip39_wordlist.h from english.txt |
Building it yourself
The Arduino sketch (entropy32.ino) and its accompanying .h/.cpp files must remain in the same top-level folder for the Arduino IDE to compile correctly — it doesn't recurse into subfolders for sketch code. Open entropy32.ino in the Arduino IDE, verify your board settings for the ATmega328P, and flash as normal.
Validation
Entropy quality is being validated against the NIST SP 800-90B methodology for entropy sources used in random bit generation.
Acknowledgements
- Cosmographer / BHRIGU — bhrigu.io — identified that the original entropy logic compared each inter-arrival time to the one before it (an overlapping comparison), which correlates adjacent output bits even when the underlying intervals are IID. The firmware now uses non-overlapping interval pairs instead. Thank you for the detailed writeup.
Disclaimer
This is a hobbyist/educational project. If you use it to generate a real Bitcoin seed phrase, understand the risks: verify the entropy quality yourself, review the code, and never trust a seed-generating device (this one included) with significant funds without independent auditing.
Licenses
- For firmware/software, see
MIT LICENSE. - For hardware, see
CERN-OHL-S v2 LICENSE.
Parts
36| Qty | Value | Footprint | References |
|---|---|---|---|
| 5 | 10k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R3, R5, R6, R8 |
| 4 | 1k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2, R4, R7, R9 |
| 2 | 0.1uF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C1, C9 |
| 2 | 1uF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C3, C6 |
| 2 | 22pF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C8, C10 |
| 1 | 0.33uF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C7 |
| 1 | 100k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R10 |
| 1 | 100nF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C2 |
| 1 | 100pF | Capacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mm | C4 |
| 1 | 16MHz | Crystal:Crystal_HC49-4H_Vertical | Y1 |
| 1 | 4.7uF | Capacitor_THT:CP_Radial_D5.0mm_P2.00mm | C5 |
| 1 | ATmega328-P | Package_DIP:DIP-28_W7.62mm | U2 |
| 1 | AudioJack2 | Connector_Audio:Jack_3.5mm_PJ320E_Horizontal | J1 |
| 1 | Conn_01x04_Socket | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J2 |
| 1 | FWD | Button_Switch_THT:SW_PUSH_6mm | SW2 |
| 1 | Green | LED_THT:LED_D3.0mm | PWR1 |
| 1 | ICSP | Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical | J6 |
| 1 | Jack-DC | Connector_BarrelJack:BarrelJack_Horizontal | J5 |
| 1 | L7805 | Package_TO_SOT_THT:TO-220-3_Vertical | U3 |
| 1 | LM393 | Package_DIP:DIP-8_W7.62mm | U1 |
| 1 | RESET | Button_Switch_THT:SW_PUSH_6mm | SW3 |
| 1 | REV | Button_Switch_THT:SW_PUSH_6mm | SW1 |
| 1 | WC1602A | Display:WC1602A | DS1 |
| 1 | Yellow | LED_THT:LED_D3.0mm | L1 |
The 34 most common of 36 parts.
Questions
How big is the Geiger entropy PCB?
It measures 112 × 63 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Geiger entropy use?
36 parts, built around the ATMEGA328-PU, L7805 and LM393. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Geiger entropy KiCad files?
From the captainchapster/Entropy32 repository on GitHub, at the commit this page was made from: the board is KiCad/geiger_entropy.kicad_pcb and its schematic KiCad/geiger_entropy.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Geiger entropy design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 2 layers100 × 100 mm

- 2 layers100 × 50 mm

- 2 layers50 × 110 mm

Ogham merged v1.0
keeos-io/ogham
Ogham — a dual-voice bytebeat synthesizer for Eurorack. Firmware (MIT) and hardware (CC BY-SA 4.0).
109 parts3 - 2 layers259.7 × 159.5 mm

- 2 layers90 × 60 mm

- 4 layers103.7 × 78.5 mm

SnarkBarker
computerguy096/snark-barker-mini
A miniaturized version of the Snark Barker
180 partsCC-BY-SA-4.0 - 2 layers73 × 38 mm

- 2 layers100 × 84 mm
