Skip to the content
PCBKitNew board
2 layers112 × 63 mmGeiger entropy, the printed circuit board in 3D

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

3

README

README.md

Entropy32

Assembled PCB

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

  1. A Geiger counter detects decay events from a radioactive source (or background) and outputs a pulse via a 3.5mm audio jack. GMC-320S Geiger Pulse
  2. 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. GMC-320S Geiger Pulse
  3. 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.
  4. The conditioned entropy is mapped to words from the standard BIP39 English wordlist.
  5. 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

ATmega328P GMC-320S Geiger counter

Repository contents

FilePurpose
entropy32.inoMain firmware — state machine, entropy capture, and UI logic
sha256.h / sha256.cppSHA-256 implementation used to condition raw entropy
bip39_wordlist.hBIP39 English wordlist, compiled into firmware
button.hButton input handling
english.txtSource BIP39 wordlist
generate_wordlist.pyScript to regenerate bip39_wordlist.h from english.txt

Building it yourself

Entropy32 schematic

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

Parts

36
QtyValueFootprintReferences
510kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R3, R5, R6, R8
41kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR2, R4, R7, R9
20.1uFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC1, C9
21uFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC3, C6
222pFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC8, C10
10.33uFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC7
1100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR10
1100nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC2
1100pFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC4
116MHzCrystal:Crystal_HC49-4H_VerticalY1
14.7uFCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC5
1ATmega328-PPackage_DIP:DIP-28_W7.62mmU2
1AudioJack2Connector_Audio:Jack_3.5mm_PJ320E_HorizontalJ1
1Conn_01x04_SocketConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ2
1FWDButton_Switch_THT:SW_PUSH_6mmSW2
1GreenLED_THT:LED_D3.0mmPWR1
1ICSPConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ6
1Jack-DCConnector_BarrelJack:BarrelJack_HorizontalJ5
1L7805Package_TO_SOT_THT:TO-220-3_VerticalU3
1LM393Package_DIP:DIP-8_W7.62mmU1
1RESETButton_Switch_THT:SW_PUSH_6mmSW3
1REVButton_Switch_THT:SW_PUSH_6mmSW1
1WC1602ADisplay:WC1602ADS1
1YellowLED_THT:LED_D3.0mmL1

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 × 50 mmC6021light, the printed circuit board in 3D

    C6021light

    deltaphi/c6021light

    Feature-compact DIY version of the c6021

    79 parts5GPL-3.0
  • 2 layers50 × 110 mmOgham merged v1.0, the printed circuit board in 3D

    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 mmBLDC inverter, the printed circuit board in 3D

    BLDC inverter

    vladBaciu/Sensorless-BLDC-HW

    Bachelor thesis project

    104 parts3
  • 2 layers90 × 60 mmMixers, the printed circuit board in 3D

    Mixers

    k1zmt/SSB85MultiPCB

    WIP! Don't try repeating!

    133 parts1
  • 4 layers103.7 × 78.5 mmSnarkBarker, the printed circuit board in 3D

    SnarkBarker

    computerguy096/snark-barker-mini

    A miniaturized version of the Snark Barker

    180 partsCC-BY-SA-4.0
  • 2 layers73 × 38 mmRecruitment, the printed circuit board in 3D

    Recruitment

    GRodler/guido_rodler

    Team Eagle application

    17 parts
  • 2 layers100 × 84 mmFsk trx, the printed circuit board in 3D

    Fsk trx

    Mnux9/ardu-fsk-tx

    42 parts