Randomness & entropy
Every other protection on this site assumes your seed was generated randomly. If it was not, a perfect steel backup in a bank vault protects nothing — an attacker can simply regenerate your keys. This page explains randomness from first principles up to doing your own dice entropy safely.
At a glance: the confidence ladder Beginner
You do not need to understand everything on this page to be safe. Most people should stop at step 1 or 2. Each step adds independence from any single maker, at the cost of more effort and more room for human error.
- Let a reputable hardware wallet generate the seed, bought directly from the maker, with up-to-date firmware. Write the words on paper, then later on metal. Never photograph or type them.
- Add a check that does not rely on trusting the device alone: use a device that mixes in entropy from more than one source and lets you verify that it did (for example Trezor's entropy check), or add your own dice rolls on a device that mixes them in.
- Understand and audit the process: learn how entropy becomes words, practise with throwaway rolls, learn the bits-per-roll maths, and verify the maths on an offline computer. Compare entropy sources side by side.
- Expert: reason about min-entropy, dice bias and the NIST SP 800-90 series, and use vendor diversity in multisig so that no single random-number generator can sink you. Learn to test vendors' entropy claims and check that passphrases, BIP85 children and SLIP-39 shares are generated as carefully as the seed.
Why randomness matters Beginner
A 12-word BIP39 phrase holds 128 bits of entropy: 2128 ≈ 340,282,366,920,938,463,463,374,607,431,768,211,456 possibilities. Even a billion computers each testing a billion seeds per second would need around ten thousand billion years to search a meaningful fraction. That security only holds if every one of those possibilities was equally likely.
If a buggy generator effectively used only 32 bits (about 4.3 billion possibilities), a single graphics card can check them all in a day. This is not theoretical: it is exactly what happened in the Trust Wallet and Milk Sad incidents, where thieves swept thousands of wallets.
| Effective entropy | Possibilities | Practical attack |
|---|---|---|
| 32 bits | ~4.3 billion | Hours on one PC — actively exploited (Trust Wallet extension 2022–23, bx seed) |
| 48 bits | ~2.8 × 1014 | Feasible for well-resourced attackers (Randstorm-era browser RNGs) |
| 64 bits | ~1.8 × 1019 | Expensive but within reach of large GPU farms |
| 128 bits | ~3.4 × 1038 | Considered infeasible for the foreseeable future |
| 256 bits | ~1.2 × 1077 | Far beyond infeasible |
Why you cannot just pick the words yourself Beginner
People are poor random generators. When asked to "pick randomly" we favour familiar words, avoid repeats, spread choices evenly and follow patterns we do not notice. An attacker does not try every possible seed; they try the likely ones first.
- Evidence: wallets built from memorable phrases ("brain wallets") were emptied within seconds by automated crackers (Castellucci, DEF CON 23).
- The checksum catches you out: twelve hand-picked words fail the BIP39 checksum 15 times in 16 (see below), so people "fix" the last word with a website, which exposes the whole phrase.
- Even-looking is not random: a sequence such as 1-2-3-4-5-6 repeated has a perfectly even spread of faces but almost no unpredictability. Krux warns about this kind of pattern in dice input (Krux: empirical entropy measurement).
Physical randomness (dice, coins, a hat of word slips drawn with replacement) works only because the outcome is decided by physics, not by you. The rule is the same for all of them: record every result, never re-roll or skip a result you dislike.
What "true randomness" means Intermediate
- Unpredictable: no one — including the device maker — can predict or reproduce the output.
- Uniform: every value is equally likely (a fair die, not a loaded one).
- Independent: earlier results tell you nothing about later ones.
| Type | How it works | Suitable for keys? |
|---|---|---|
| TRNG (true/hardware RNG) | Samples physical noise — thermal noise, ring-oscillator jitter, radioactive decay | Yes, when health-tested and conditioned |
| CSPRNG (cryptographically secure PRNG) | Deterministic algorithm (e.g. ChaCha20, HMAC-DRBG) seeded with enough true entropy; output indistinguishable from random | Yes, if properly seeded — this is what OS /dev/urandom/getrandom() provide |
| Ordinary PRNG | Fast statistical generators (Mersenne Twister, Math.random(), LCGs) | Never — state can be recovered or brute-forced |
| Human choice | Picking words, phrases, "random" numbers | Never — humans are highly predictable |
| Physical dice / coins | Mechanical randomness, recorded by hand | Yes if done carefully, offline, with enough rolls |
Standards: NIST SP 800-90A (DRBGs), SP 800-90B (entropy sources). Secure elements are typically evaluated under Common Criteria with RNG requirements such as Germany's BSI AIS 20/31; Ledger, for example, states that its secure-element TRNG is evaluated to EAL5+ / AIS-31 (Ledger Donjon threat model). See the expert section for how these standards fit together.
How BIP39 entropy becomes words Intermediate
The checksum word in plain English Beginner
Think of the last word as a check digit, like the final digit of a bank card number. It is worked out from everything before it, so if you copy one word wrongly, the phrase usually stops "adding up" and a wallet will refuse it. That is all it does:
- It catches mistakes. A random wrong word slips past the check only about 1 time in 16 for a 12-word phrase and about 1 time in 256 for a 24-word phrase.
- It does not make the phrase stronger. The check word is calculated, not random, so it adds no secrecy. (Strictly, the last word holds a few random bits plus the check bits; the table below gives the split.)
- It cannot be done by hand. Working it out needs a cryptographic hash (SHA-256), so a trusted offline device does it for you. Never use a website to "find" or "fix" a last word.
- A valid check says nothing about randomness. Every seed in the incidents below passed it.
The steps in detail Intermediate
- Generate ENT random bits — 128 for 12 words, 256 for 24 words.
- Compute the checksum: take SHA-256 of the entropy; keep the first ENT/32 bits (4 bits for 12 words, 8 bits for 24).
- Append the checksum to the entropy → 132 or 264 bits.
- Split into 11-bit groups → 12 or 24 numbers from 0 to 2047.
- Look up each number in the 2,048-word list (position = number + 1 if counting from 1).
Schematic for a 12-word phrase (x = random bit, c = checksum bit — illustration only):
word 1 word 2 word 3 word 12
Worked mapping example: the 11-bit group 00000000000 = 0 → the 1st word in the list; 11111111111 = 2047 → the 2,048th word. Any real phrase must come from real random bits.
| Phrase length | Random bits in last word | Checksum bits in last word | Valid last words for given first words |
|---|---|---|---|
| 12 words (128-bit entropy) | 7 | 4 | 128 of 2,048 |
| 15 words (160-bit) | 6 | 5 | 64 of 2,048 |
| 18 words (192-bit) | 5 | 6 | 32 of 2,048 |
| 21 words (224-bit) | 4 | 7 | 16 of 2,048 |
| 24 words (256-bit) | 3 | 8 | 8 of 2,048 |
Source: the BIP39 specification (checksum length = entropy bits ÷ 32). Ledger documents the same steps for its 24-word phrases (Ledger support).
Consequence: you cannot pick the last word freely, and a randomly chosen 24th word fails the checksum 255 times in 256. This is why "write any 24 words you like" fails — and why the final word must be computed, which requires SHA-256 and therefore a computing device you trust.
Why the last word is constrained — and what the checksum is not
- Constrained: the last word carries the final few random bits plus the checksum bits, and the checksum is fixed by SHA-256 of all the entropy. With the first 11 words chosen, only 128 of the 2,048 words can follow; with 23 words chosen, only 8.
- Error detection, not security: the checksum catches most typing and transcription mistakes. It adds no unpredictability: a 12-word phrase holds 128 bits of entropy, not 132 (Block Engineering makes the same point about hashing and checksums).
- A valid checksum proves nothing about randomness. Every seed from every broken generator in the incidents below had a perfectly valid checksum.
- Illustration only (never a real phrase):
word1 word2 … word11 [7 random bits + 4 checksum bits]. Picking the "nicest-looking" valid last word throws away a few bits; let the device choose from your remaining random bits.
Hardware wallet RNGs: how makers combine sources Intermediate
Reputable hardware wallets generate seeds from a true random number generator on the chip, often inside a certified secure element, and several deliberately mix in sources from outside the device as well. The principle: if independent sources are combined properly (hashing or XOR), the result is at least as unpredictable as the strongest one, so one faulty or backdoored source does not ruin the seed. The catch is independence: a malicious source that can see the others before choosing its value could cancel them out, which is why commitment schemes matter (see verifying).
| Maker (as documented, October 2026) | Sources combined for a new seed | User-visible check | Source |
|---|---|---|---|
| Trezor | Host computer/phone OS entropy + STM32 microcontroller TRNG; Safe 3 and Safe 5 add the Optiga secure element; Safe 7 adds the TROPIC01 chip | Entropy check in Trezor Suite (commit-and-reveal, since February 2025) | Trezor: how Trezor generates your wallet · firmware docs |
| Ledger | Secure-element TRNG with standard post-processing; Ledger devices generate only 24-word phrases | None for the RNG itself; relies on third-party certification (EAL5+, AIS-31) | Ledger Donjon · Ledger support |
| BitBox02 / Nova | Five inputs: secure-chip TRNG, microcontroller TRNG, a per-device factory random value, host-app entropy, and a hash of the device password | Open-source firmware can be reviewed | BitBox security features · BitBox blog |
| Foundation Passport | Multiple hardware sources including an open-source avalanche-noise TRNG; optional "user added entropy" (words drawn from a hat, device computes final word) | Open-source TRNG design and firmware | Foundation docs · Passport security model |
| COLDCARD | Designed to use hardware TRNGs; optional dice rolls or coin flips mixed in, or dice-only seeds. A July 2026 advisory found affected firmware actually used a weak software generator — see case note | Dice-maths verification; newer firmware (Mk4/Mk5 5.6.2, Q 1.5.2Q) can show the device's own entropy as words so the mix can be recomputed offline | COLDCARD docs · Coinkite advisory |
| Blockstream Jade / Jade Plus | Internal sensors (CPU counters, battery and USB readings, temperature), camera frames captured at boot, the chip's hardware RNG, and entropy sent by the companion app, mixed into a SHA-512 accumulator modelled on Bitcoin Core's | Open-source random.c can be reviewed; reproducible builds. The help page on seed generation describes no dice-entry option | Blockstream: how Jade generates your phrase · random.c |
| Keystone 3 Pro | Secure-element TRNG by default; optional dice-roll entropy (firmware 1.2.6+) for standard or Shamir wallets | Keystone says you can recompute a dice-generated phrase offline; firmware 2.5.0 "improved dice roll entropy validation" | Keystone: dice roll guide · Keystone BTC-only firmware |
| SeedSigner / Krux (DIY, stateless) | Dice rolls or camera-image entropy, hashed; Krux reports statistics on your rolls | Published dice-verification guides; reproducible against independent tools | SeedSigner dice verification · Krux docs |
Features change with firmware. Check the maker's current documentation before relying on any row; listing is not endorsement.
Pros of device RNG
- Fast and easy — no maths for the user
- Certified TRNGs with health tests
- Generated and kept inside the device
- Multi-source designs survive one bad source
Cons
- You must trust the firmware and supply chain
- Closed-source RNG paths cannot be independently audited
- Open source helps but is not a guarantee: the 2026 COLDCARD bug sat in published code for five years
- A tampered or counterfeit device can use a known seed
Common pitfalls
- Buying from marketplaces — the fake Trezor analysed by Kaspersky in 2023 used one of 20 pre-generated seeds
- Using a seed card that came pre-filled in the box
- Assuming a firmware update repairs an old seed — it does not; a seed made by a flawed generator must be replaced
Expert & community advice
- Buy direct, verify authenticity on first use
- For large sums, add your own dice entropy on a device that supports verifiable mixing
- Vendor diversity in multisig limits any single RNG failure (10x Security Guide); Block notes that a quorum made only of affected devices gave no protection in the COLDCARD case
How devices use your dice: mixed in, or dice only Intermediate
Makers use your dice (or words drawn from a hat) in two different ways, and the difference decides what you can check:
- Mixed in: your rolls are hashed together with the device's own random value. The seed is safe if either source was good, but you can only check the result if the device also shows you its own value or proves it in some other way.
- Dice only: the seed comes from your rolls alone, hashed in a published way. You can recompute it on a second, independent tool (with throwaway rolls), but the quality and privacy of the rolls are entirely up to you.
- You choose the words, the device adds the last one: you pick 11 or 23 words at random (from a hat, by dice or by coin) and the device only works out the checksum word.
| Device (as documented, October 2026) | What your input does | How the maker says you can check it | Source |
|---|---|---|---|
| COLDCARD (Mk4, Mk5, Q) | Either mixed in (dice added to the device's random value) or dice only | Recompute the seed from throwaway rolls with the published verify_seed_mix.py script; newer firmware can show the device's own value as words so a test mix can be redone offline | COLDCARD: verifying dice-roll maths |
| SeedSigner | Dice only (50 or 99 rolls hashed with SHA-256), words you chose plus a computed last word, or a camera image | Dice verification guide that compares the result with independent tools. The camera method hashes the photo, preview frames, the board's serial number and uptime; the project says it is the method that relies most on SeedSigner's own code | SeedSigner dice verification · SeedSigner custody guide |
| Foundation Passport Core / Prime | Words you chose (drawn from a hat with replacement), with the last word computed on the device (Core 2.3.0+, Prime KeyOS 1.3.1+) | The device computes only the checksum word, so your words are exactly what you drew. Foundation warns that the quality of your randomness then rests entirely with you | Foundation: user added entropy · KeyOS 1.3.1 release |
| Keystone 3 Pro | Dice rolls entered on the device (at least 50; 99 recommended for 256 bits); Keystone's guide says the phrase is generated "based on the entropy obtained from the dice rolls" | Keystone describes recomputing the phrase offline. Its guide does not say whether device entropy is mixed in, so treat it as dice-only unless the current documentation says otherwise | Keystone dice roll guide |
| Krux | Dice only (d6 or d20), with statistics on your rolls | Shows warnings for uneven counts and arithmetic patterns; says it cannot guarantee your rolls have good entropy | Krux: entropy measurement |
| Trezor | No dice entry; device entropy is mixed with entropy from the computer or phone | Commit-and-reveal entropy check in Trezor Suite (see verifying) | Trezor: entropy check |
| Blockstream Jade | No dice entry described; several internal sources plus companion-app entropy are mixed | Read the open-source generator; verify the firmware build | Jade wiki: entropy |
Conceptual summary only. Menus and firmware versions change; follow the maker's current guide, and practise with throwaway rolls before generating a real seed.
Verifying a device's entropy Intermediate Expert
You cannot look at a seed and tell whether it was random. What you can verify is the process: that your own entropy was really used, and that the device followed its published algorithm. Approaches, from easiest to most demanding:
| Approach | What it shows | What it does not show |
|---|---|---|
| Commit-and-reveal entropy check (Trezor Suite) | The device commits to its own random value before receiving the computer's, then for a random number of throwaway rounds reveals it so Suite can rebuild those candidate wallets and compare public keys. A device that cheats risks being caught on a round it cannot predict. If a check fails, Suite stops setup and warns that the device may be compromised. | The final seed's device entropy is never revealed, so its quality is inferred, not proven; it also relies on the computer's randomness being private |
Dice mixed with device entropy, recomputed offline (COLDCARD "View TRNG Words" + verify_seed_mix.py) | On a disposable run, the final words equal the published mix of the device's value and your rolls | Only that run. COLDCARD's docs say never to fund a verification wallet: erase it, then start again with fresh, unrecorded rolls |
| Dice-only seed reproduced on an independent tool (COLDCARD, SeedSigner, Krux) | The device hashes your rolls exactly as documented, so the seed depends only on your dice | Whether your dice and rolling were fair and private — that is on you |
| Statistics on your own input (Krux) | Warnings if face counts look uneven or rolls follow arithmetic patterns | Krux itself says it cannot ensure rolls have good cryptographic entropy |
Sources: Trezor: entropy check (firmware 2.8.7+ on Safe 3/Safe 5/Model T, 1.13.1+ on Model One) · Trezor firmware: entropy check workflow · COLDCARD: verifying seed mixing · SeedSigner · Krux
Offline, air-gapped practice — the ground rules
- Verify with throwaway material only. Every maker's guide says the same: prove the maths with disposable rolls, never fund that wallet, then create the real seed with fresh rolls that never leave the device.
- Use an amnesic, offline computer (for example a live system booted without networking or storage) and download the verification script beforehand. Terminal history, clipboards, logs and photos can all keep secrets.
- Roll sheets and "TRNG words" are as sensitive as the seed. Destroy them by burning or cross-cut shredding once the backup is checked.
- Privacy of the room: no phones, smart speakers or cameras that can see the dice or the screen.
- Record fingerprints, not secrets: note the wallet fingerprint and a receive address so you can later confirm a restore produced the same wallet.
Dice and coin-flip methods (offline, done properly) Expert
Generating entropy yourself removes the need to trust a device's RNG at the cost of more work and more room for human error. The safest pattern is "dice in, device computes": you roll; an air-gapped signer turns your rolls into a seed and calculates the checksum.
How many rolls?
| Source | Bits per event | For 128 bits (12 words) | For 256 bits (24 words) |
|---|---|---|---|
| Fair six-sided die (hashed) | log26 ≈ 2.585 | ≥ 50 rolls | ≥ 99 rolls |
| Fair coin flip | 1 | 128 flips | 256 flips |
| Die used as coin (odd/even) | 1 | 128 rolls | 256 rolls |
| Fair 16-sided die / hex | 4 | 32 rolls | 64 rolls |
| Fair 20-sided die (hashed) | log220 ≈ 4.32 | ≥ 30 rolls | ≥ 60 rolls |
50 / 99 d6 rolls are the figures documented by COLDCARD and SeedSigner, which hash the roll string with SHA-256; the d20 figures are from Krux. These minimums assume fair dice — see bias for why many people roll well beyond them.
Bits-per-roll maths, step by step Beginner Intermediate
"Bits" are just a way of counting possibilities. Each extra bit doubles the number of possibilities, so n bits means 2n equally likely outcomes. The figures below need no calculator: they are worked out for you.
- One coin flip has 2 outcomes = 1 bit.
- One fair six-sided die has 6 outcomes. 22 = 4 is too few and 23 = 8 too many, so a roll is worth between 2 and 3 bits: about 2.585 bits.
- 50 rolls give 650 ≈ 8.1 × 1038 possible sequences, a little more than 2128 ≈ 3.4 × 1038. That is why 50 is the documented minimum for a 12-word (128-bit) seed: 50 × 2.585 ≈ 129 bits.
- 99 rolls give about 255.9 bits, a fraction of one bit short of 256. Makers use 99 for 24-word seeds because the hash output is 256 bits and the shortfall makes no practical difference; Foundation's guide simply says about 100.
- Hashing does not add entropy. SHA-256 turns any number of rolls into exactly 256 bits that look random, but 20 rolls hashed are still only about 52 bits of unpredictability.
Dice quality, bias and how to test it Intermediate
No real die is perfectly fair. Drilled pips remove different amounts of material from each face, rounded corners and soft edges let a die favour some faces, and the way you throw matters. The good news is that when rolls are hashed (as COLDCARD, SeedSigner and Krux do), a small bias costs only a little entropy per roll, and you can compensate by rolling more.
- Casino (precision) dice are machined to tight tolerances with sharp edges and flush-filled pips, so they are generally considered closer to fair. They are a common community recommendation, but they are not magic: throwing technique and independence still matter.
- Ordinary rounded dice are acceptable for hashed methods if you add a generous margin of extra rolls; they are a poor choice for manual binary methods where each roll maps directly to bits.
- Rolling technique: shake in a cup, throw against a backstop onto a hard surface, and read in a fixed order. Never "place" a die or nudge one that is cocked — re-throw cocked dice only, by a rule decided in advance.
Testing a die (conceptually): roll it many times, count how often each face appears, and compare with an even spread using a chi-squared goodness-of-fit test (NIST/SEMATECH e-Handbook). Two cautions: detecting a bias of about one percentage point takes thousands of rolls, so a short test proves little; and passing the test shows the faces are even, not that the sequence is unpredictable. Do this with a separate practice session — never with the rolls you will use for a seed. The printable dice entropy worksheet has a tally table for this, and records only counts.
Coin flips and von Neumann debiasing Intermediate
A coin gives at most one bit per flip. A 2023 study of 350,757 flips found that ordinary coins land on the same side they started about 50.8% of the time, with large differences between people (Bartoš et al., arXiv 2310.04153). That is a small bias, but it shows that "fair coin" is an assumption, not a fact.
The von Neumann trick (1951): flip in pairs. Heads-then-tails counts as one output bit, tails-then-heads as the other, and pairs that match (HH, TT) are discarded. If flips are independent with any fixed bias, the two kept outcomes are exactly equally likely (von Neumann, "Various techniques used in connection with random digits").
Pros
- Removes a constant bias exactly, without any computer
- Easy to understand and audit
Cons
- Wasteful: at least four flips per output bit on average, so roughly 1,000+ flips for 256 bits
- Does nothing about dependence between flips (for example a habit that makes the next flip resemble the last)
Common pitfalls
- Overlapping pairs (flips 1–2, then 2–3) — pairs must not share flips
- Miscounting over hundreds of flips
- Always starting with the same side up, which turns the same-side effect into a heads/tails bias
Expert & community advice
- For practical seed generation, hashing many flips or rolls on an air-gapped signer is simpler and tolerates bias; von Neumann is mainly valuable for understanding
- Prefer dice (2.585 bits each) over coins if you are doing it by hand
Playing cards: shuffles and draws Intermediate
A well-shuffled deck is a large store of randomness: a 52-card deck can be in 52! ≈ 8.07 × 1067 orders, about 225.6 bits. That is more than a 12-word seed needs but less than 256 bits. How you use the cards matters:
- Full deck order: how much of those 225.6 bits you get depends on how well the deck was shuffled. Under the standard mathematical model of riffle shuffling, Bayer and Diaconis showed that about seven riffle shuffles are needed before a 52-card deck is reasonably close to random, and fewer leave it far from random (Bayer & Diaconis, Annals of Applied Probability, 1992). Real human shuffles are less regular than the model, and other shuffling styles can need many more passes.
- Draws with replacement: draw a card, record it, put it back, reshuffle well. Each draw is worth log252 ≈ 5.7 bits, so 23 draws give about 131 bits and 45 draws about 256 bits. Drawing without replacement gives a little less each time, because the deck shrinks.
Pros
- Cards are everywhere and do not look like bitcoin equipment
- A fully shuffled deck holds a lot of entropy
- Bias in individual cards is less of an issue than with worn dice
Cons
- Few signing devices accept card input directly, so cards usually have to be converted to dice-style numbers or words by hand
- Shuffle quality is hard to judge; a few lazy shuffles leave a lot of order behind
- Fewer bits than 256 from one full deck
Common pitfalls
- Starting from a new, sorted deck and shuffling only two or three times
- Forgetting to replace cards when the method assumes replacement
- Leaving the recorded order lying around: it is as sensitive as the seed
- Typing card values into a website "converter"
Expert & community advice
- Treat cards as an educational or supplementary source; dice on a device that hashes them are simpler
- If you use cards, shuffle well beyond seven times, mix methods (riffle, cut, spread and stir), and decide the procedure before you start
Method A — Dice into an air-gapped signer (recommended)
- Use casino-grade (precision, sharp-edged) dice if possible; ordinary rounded dice have small biases that hashing tolerates but you should still prefer good dice.
- Roll in a cup or tray, one die at a time or several in a fixed left-to-right order. Record every roll; never re-roll because a result "looks non-random".
- Enter the rolls directly on the device's dice-entry screen (COLDCARD, SeedSigner, Krux and others offer this), running current firmware. Do not type them into any computer or phone.
- The device hashes the rolls and shows the resulting words, including a valid checksum word.
- Write the words down; destroy the roll record (it is equivalent to your seed) by burning or cross-cut shredding.
- Optional verification: repeat the exact process with a throwaway set of rolls on the device and on a second independent tool (e.g. the maker's offline verification script on an air-gapped computer) and confirm they match. Never verify your real rolls on a networked computer.
Method B — Fully manual binary, last word computed offline
- Produce 128 (or 256) bits by coin flips or odd/even die rolls. Write them in rows of 11.
- Convert each complete 11-bit row to a number (0–2047) and look it up in a printed BIP39 English wordlist (from the official BIP39 repository, printed in advance, offline).
- You now have 11 words + 7 leftover bits (12-word) or 23 words + 3 bits (24-word). The final word needs the SHA-256 checksum, which cannot reasonably be done by hand.
- Compute the final word on an air-gapped device: several signers let you enter the first 11/23 words and display the valid final-word options (e.g. SeedSigner's "calculate final word" from your remaining bits, COLDCARD's import flow). Choose the one matching your leftover bits — not a "nice-looking" one.
- Restore the full phrase on your hardware wallet and test recovery as usual.
Pros
- No reliance on device RNG
- Auditable: you can prove where entropy came from
- Defends against backdoored or faulty RNG
Cons
- Slow; transcription errors are common
- Roll sheets are as sensitive as the seed
- Still requires trusting the device for hashing/checksum and key use
Common pitfalls
- Too few rolls (e.g. 24 rolls ≈ 62 bits)
- Discarding "ugly" results
- Using a phone dice app or online dice
- Doing the checksum on an online computer or website
- Hidden cameras or a phone in the room
Expert & community advice
- Prefer "dice + device mixing" over dice-only where supported
- Follow the maker's verification doc exactly (COLDCARD, SeedSigner)
- Practise the whole process with a throwaway seed first
Verifiable entropy features Expert
| Feature | What it proves | Examples (verify current support) |
|---|---|---|
| Dice-only seed with published hashing algorithm | Seed derives only from your rolls; reproducible on another tool | COLDCARD, SeedSigner, Krux |
| User entropy mixed with device entropy | Neither party alone controls the seed | COLDCARD (add dice to TRNG), Trezor (host + device, with entropy check), BitBox02 (host + password + device) |
| Camera-image entropy | Fresh physical noise from an image, hashed | SeedSigner |
| Stateless operation | Device holds nothing after power-off; nothing to extract later | SeedSigner, Krux, Jade (stateless mode) |
| Open-source, reproducible firmware builds | Released binary matches public source | Trezor, COLDCARD, Jade, Keystone, BitBox02, SeedSigner OS and others — see reproducible builds in practice |
Passphrases, BIP85 child seeds and SLIP-39: where their entropy comes from Intermediate Expert
Three popular features add secrets on top of a seed or split one up. Each has its own randomness rule, and getting it wrong can quietly undo a well-generated seed.
BIP39 passphrase entropy
BIP39 stretches a passphrase with PBKDF2-HMAC-SHA512 using only 2,048 iterations (BIP39 specification). That slows guessing only slightly, so a passphrase is roughly as strong as the randomness you put into it. A remembered quotation or a pet's name is a brain wallet in disguise; a randomly generated passphrase is not.
| Random words from a 7,776-word dice list (EFF) | Approximate entropy | What it protects against |
|---|---|---|
| 4 words | ≈ 51.7 bits | Casual discovery of a seed backup; not a determined, well-funded attacker |
| 6 words (EFF's suggestion) | ≈ 77.5 bits | A thief who finds the seed backup and runs a large guessing campaign |
| 8 words | ≈ 103.4 bits | A comfortable margin for high-value holdings |
| 10 words | ≈ 129.2 bits | Comparable to a 12-word seed on its own |
Each word from the EFF long list is worth about 12.9 bits because 7,776 = 65 (five dice per word) (EFF dice-generated passphrases · EFF wordlists). Use the list offline and roll physical dice; the BIP39 word list works too, at 11 bits per word.
- Why it mattered in 2026: in the COLDCARD weak-generator case, Coinkite said a strong, unique passphrase reduced immediate exposure for affected seeds (Coinkite advisory). A passphrase cannot fix a weak seed for ever, but random ones buy time.
- Pitfalls: exact spelling, capitals and spaces all matter, and there is no "wrong passphrase" error. Losing a strong passphrase means losing the funds. Store it separately from the seed and include it in your inheritance plan. See the passphrase.
BIP85 child seeds: only as random as the master
BIP85 derives a key from the master seed on a fully hardened path such as m/83696968'/39'/0'/12'/0' (BIP39, English, 12 words, index 0), runs it through HMAC-SHA512 with the fixed key "bip-entropy-from-k", and keeps the first 128 or 256 bits as the child's entropy (BIP85 specification).
- No new randomness is created. A child seed is unpredictable only because the master is. If the master came from a weak generator, every child is weak too.
- One-way: a child phrase does not reveal the master or its siblings, so a leaked hot-wallet child does not expose the rest.
- Verifiable: the specification publishes test vectors, so experts can check a tool's output with the published test master key, never with a real one.
- Record the recipe: application, language, length and index. Without the index, rebuilding a child means trial and error. See BIP85 child seeds.
SLIP-39 shares need randomness twice
SLIP-39 (Shamir shares as words) needs good randomness when the master secret is created and again when it is split. The specification requires that the random values used to build shares "MUST be suitable for generating cryptographic keys", and that the master secret is at least 128 bits (SLIP-39 specification).
- Why at least 128 bits: each split stores a 4-byte digest so a wrong set of shares can be detected. The specification notes that someone holding one share fewer than the threshold could use that digest to cut the secret's effective entropy by 32 bits, which is why 128 bits is the floor.
- Split-time randomness: the "fewer than the threshold reveal nothing" promise assumes the share values were random. Splitting on a device with a broken generator would, in principle, weaken that promise even if the master secret was strong.
- Dice for shares: Keystone documents dice rolls for Shamir wallets as well as standard ones (Keystone). See SLIP-39.
Pros
- A random passphrase adds a second, separately stored factor
- BIP85 cuts the number of independent seeds you must back up
- SLIP-39 removes the single point of failure of one written phrase
Cons
- None of them repairs a weak master seed
- Each adds something else that must be recorded and inherited
Common pitfalls
- Memorable passphrases with little entropy
- Treating BIP85 children as independent backups of the master: they are not
- Splitting shares on an untrusted computer
Expert & community advice
- Generate passphrases with physical dice, like seeds
- Do every derivation and split on the signing device, offline
- If a maker announces an entropy flaw, review passphrases, children and shares as well as the master
Comparing generation methods Beginner Intermediate
A side-by-side summary of the main ways seeds are created. "Trust" means who could, in principle, know or influence your seed.
| Method | You must trust | Pros | Cons & pitfalls | Community view |
|---|---|---|---|---|
| Hardware wallet, single device RNG | Maker's chip, firmware, supply chain | Simplest; certified TRNG; seed never leaves device | Unverifiable by you; a firmware bug affects every user (COLDCARD 2026); counterfeits | Fine for most people; buy direct |
| Hardware wallet mixing device + host entropy, with a verification check | That device and host are not both compromised | One bad source is not fatal; checks can catch a cheating device | Still mostly opaque to non-experts; the host must be reasonably healthy | Good default where available |
| Device RNG + your dice mixed in | That either your dice or the device is good | Protects against a bad device RNG and sloppy dice; verifiable on some devices | Roll records are secret; too few rolls adds little | Widely recommended for larger sums |
| Dice-only on an air-gapped signer | Your dice, your privacy, the hashing code | Independent of any RNG; reproducible | Bias and too few rolls are on you; observers; transcription errors | Good for experienced users; practise first |
| Manual coin/dice binary, final word on a device | Your counting; the device for the checksum | Fully transparent | Slow; easy to miscount; the checksum still needs a trusted device | Educational; error-prone for real funds |
| Words drawn from a hat (with replacement), final word on a device | Your slips and mixing | No electronics for the first words | Uneven slips and poor mixing bias draws; drawing without replacement is wrong | Supported by some makers (Passport); advanced |
| Software wallet on a phone or computer | App, OS RNG, the whole device | Convenient; modern OS CSPRNGs are strong | History of app bugs (Cake Wallet, Trust Wallet, Blockchain.info); malware | For spending amounts only |
| Website or browser "generator" | Site, browser, extensions, network | None that justify the risk | Pages can be swapped or logged; Randstorm-era browser RNGs were weak | Avoid |
| Your own chosen words, phrases or AI-chatbot output | Your imagination; the chatbot provider | None | Predictable; brain wallets drained in seconds; prompts may be logged | Never |
Entropy sources compared: bits, effort and pitfalls Beginner Intermediate
The table above compares who you must trust. This one compares the raw sources of randomness. Bits assume a fair source; real sources are a little worse, which is why the advice is to go beyond the minimum.
| Source | Bits per event (fair) | Events for 128 / 256 bits | Pros | Cons & pitfalls | Community advice |
|---|---|---|---|---|---|
| Device TRNG (secure element or chip) | n/a | Automatic | No effort; health-tested | Cannot be checked by you; firmware can bypass it (COLDCARD 2026) | Fine for most; prefer multi-source designs |
| Six-sided die, hashed on a signer | ≈ 2.585 | 50 / 99 | Cheap; tolerant of small bias; widely supported | Roll record is secret; too few rolls; observers | Common choice for larger sums |
| Casino (precision) die | ≈ 2.585 | 50 / 99 | Closer to fair than rounded dice | Still needs good throwing; costs a little more | Often recommended for manual and hashed methods |
| Twenty-sided die, hashed | ≈ 4.32 | 30 / 60 | Fewer rolls (Krux supports d20) | Cheap d20s are often poorly balanced | Use precision dice and add rolls |
| Coin flip | 1 | 128 / 256 | Very simple | Slow; same-side bias around 50.8% | Prefer dice |
| Coin pairs with von Neumann debiasing | ≈ 0.25 per flip | ≈ 512+ / 1,024+ flips | Removes a constant bias exactly | Very slow; does not fix dependent flips | Mainly educational |
| Full shuffled deck (52 cards) | ≈ 225.6 per deck | 1 deck / not enough alone | Lots of entropy from one item | Shuffle quality hard to judge; little device support | Shuffle well beyond seven times |
| Card draws with replacement | ≈ 5.7 | 23 / 45 | Each draw independent if reshuffled | Tedious; easy to forget to replace | Supplementary source |
| BIP39 words drawn from a hat | 11 | 11 or 23 draws, last word computed | Directly gives words; supported by Passport and SeedSigner | Uneven slips, poor mixing, drawing without replacement | Advanced; follow Foundation's method |
| Camera image (SeedSigner) | Not countable | One photo | Fast; physical noise | Relies most on the device's code; dark or covered lens | Convenient; dice are more auditable |
| Diceware words (passphrase only) | ≈ 12.9 | 6–10 words for a passphrase | Memorable yet random | Not a seed format; a typo means a different wallet | Good way to make a passphrase |
| BIP85 child | Inherits the master | n/a | No new backup per child | Weak master means weak children | Only from a well-generated master |
| Your own choice, a phrase or an AI chatbot | Far below the figures above | Never enough | None | Predictable; cracked in seconds | Never |
Bits per event: log2 of the number of equally likely outcomes. Sources: COLDCARD, SeedSigner, Krux, Foundation, Bayer & Diaconis (1992), EFF, and the coin-flip study above. Hand-drawn words: if a device fills the last word's few random bits by a fixed rule, a 12-word phrase from 11 drawn words holds about 121 bits and a 24-word phrase from 23 words about 253 bits, both still far beyond brute force.
Measuring entropy: min-entropy and the NIST SP 800-90 series Expert
Shannon entropy vs min-entropy
Shannon entropy is the average surprise of a source. Min-entropy, Hmin = −log2(pmax), measures the attacker's best single guess, which is what matters for keys. A fair d6 has 2.585 bits of both; a biased die can keep a high Shannon figure while its min-entropy drops. Security standards use min-entropy and count it conservatively.
Why you cannot measure entropy from the output
A good pseudo-random generator seeded with 32 bits produces output that passes statistical test suites; only its source reveals the weakness. In the 2026 COLDCARD case, the health check that rejected repeated values was passed easily by a deterministic generator, and hashing made the output look uniform without adding a single possible seed (Block Engineering). Entropy has to be argued from a model of the physical source, then checked continuously.
How the NIST series fits together
| Document | Covers | Key ideas for seed generation |
|---|---|---|
| SP 800-90B (2018) | Entropy sources | Model of noise source + optional conditioning + health tests; IID and non-IID estimation tracks giving a conservative min-entropy estimate; continuous health tests such as the Repetition Count Test and Adaptive Proportion Test to catch a source that fails in the field. NIST publishes an entropy-assessment tool (it needs about a million samples, which is why it is for designers, not dice users) |
| SP 800-90A Rev. 1 (2015) | Deterministic random bit generators (DRBGs) | Hash_DRBG, HMAC_DRBG and CTR_DRBG: approved ways to stretch a well-seeded secret; Rev. 1 removed the discredited Dual_EC_DRBG |
| SP 800-90C (September 2025) | Complete random bit generator constructions | How to combine 90B entropy sources with 90A DRBGs (RBG1, RBG2, RBG3 and chained RBGC constructions), including seeding and reseeding |
| BSI AIS 20 / AIS 31 (Germany) | Evaluation of deterministic and physical RNGs in Common Criteria certifications | Classes of RNG with stochastic-model and online-test requirements; often cited by secure-element makers |
Practical expert checklist
- Know which code path actually produces your seed, not just which RNG exists in the device. The COLDCARD bug was a link-time substitution: the intended TRNG code was present in the binary but not used for seeds (Coinkite technical backgrounder).
- XOR or hashing of two deterministic streams is still deterministic; combining only helps if at least one input is truly unpredictable and independent.
- Reseeding with a 32-bit value caps the seed space at about 232, however strong the source behind it.
- Count user entropy conservatively (min-entropy, not face count) and add a wide margin.
- Seeds outlive firmware: record which device and firmware version created each seed so you can act on future advisories.
Verifying entropy claims and reproducible builds Expert
Marketing says "true randomness" and "certified TRNG". Each claim, even when true, proves something narrower than it sounds. This table separates what each kind of evidence shows from what it leaves open.
| Claim | Evidence that supports it | What it does not prove |
|---|---|---|
| "Certified TRNG" / "EAL5+ secure element" | A Common Criteria or AIS 31 certificate for the chip | That the firmware actually uses that generator for seeds. In 2026 COLDCARD's TRNG code was present but not used (Coinkite backgrounder) |
| "Open source" | Readable code for the seed-generation path | That your device runs that code, or that the code is correct; the COLDCARD bug sat in published source for five years |
| "Reproducible builds" | Anyone can rebuild the release from tagged source and get the same binary, apart from signatures (reproducible-builds.org definition) | That the source has no bugs. It links the binary to the code, not the code to good randomness |
| "Mixes in your dice" | A published algorithm you can recompute with throwaway rolls | That the device's own share was good, or that your dice were fair |
| "Entropy check" (commit-and-reveal) | A cheating device risks being caught on test rounds it cannot predict | The quality of the device entropy in your final seed, which is never revealed |
| "Passes randomness tests" (for example the NIST statistical suite) | Output has no obvious statistical pattern | Anything about unpredictability: a 32-bit-seeded generator passes too (Block Engineering) |
| "Independently audited" | A published report for a named version and scope | Later versions, or parts outside the scope |
Reproducible builds in practice
Conceptually, every maker's process is the same: fetch the source at the release tag, build it in the documented container, strip or zero the signature area, and compare the hash with the published or installed firmware. The device-side firmware hash check then ties the result to the device in your hand.
- Maker guides: Trezor · COLDCARD (repro target) · Jade · Keystone · BitBox02 · SeedSigner OS.
- Independent per-version results: WalletScrutiny. Check the version you actually run; results can change between releases.
- See also verifying firmware on the wallets page.
Questions to ask before trusting a generator
- Which code path creates the seed, and is it the one that calls the hardware generator? (Not just "does a TRNG exist?")
- How many independent sources are combined, and can one source see the others before choosing its value?
- Can I add my own entropy, and can I verify with throwaway input that it was used?
- Is the firmware build reproducible for the version on my device, and has anyone independent checked it?
- Has the maker had an entropy advisory before, and how quickly and openly was it disclosed?
- Which device and firmware made each of my seeds? (Record it, so you can act on a future advisory.)
Known weak-randomness incidents Intermediate
Sourced case notes, starting with the most recent hardware-wallet case. Every one produced seeds, keys or signatures with valid formats that looked random. Summary versions are also in the Case files.
COLDCARD firmware: weak software generator used for seeds (2021–2026)
A build-configuration error meant that, from firmware released in March 2021, COLDCARD's seed generation drew on MicroPython's non-cryptographic "Yasmarang" generator instead of the hardware TRNG. Coinkite estimated the effective search space at about 40 bits for Mk2/Mk3 (firmware 4.0.1–4.1.9) and about 72 bits for Mk4, Q and Mk5, where some secure-element entropy was mixed in. Attackers regenerated affected seeds offline and stole funds; the devices themselves were not hacked. Fixed firmware was released for every model, but updating does not repair an existing seed. Coinkite said seeds created with at least 50 private, independent dice rolls added were not at risk from this bug alone, and a strong, unique BIP39 passphrase reduced immediate exposure.
Sources: Coinkite security advisory · Coinkite technical backgrounder · Block Engineering analysis
Case file: summary and patterns
Milk Sad — Libbitcoin Explorer bx seed (CVE-2023-39910)
bx seed in version 3.x used the Mersenne Twister PRNG seeded with 32 bits of system time, so every seed it produced could be recomputed. Attackers drained wallets in a coordinated sweep. The team named it after the phrase produced when the clock reads zero.
Sources: milksad.info · NVD CVE-2023-39910
Case file: summary and patterns
Trust Wallet browser extension (CVE-2023-31290)
The WebAssembly build of Trust Wallet Core seeded mt19937 from a single 32-bit value, giving only ~4.3 billion possible mnemonics for wallets created in extension versions 0.0.172–0.0.182.
Sources: Ledger Donjon write-up · CVE record
Case file: summary and patterns
Randstorm — BitcoinJS / JSBN SecureRandom (2011–2015 wallets)
Browser wallets built on early BitcoinJS silently fell back to Math.random(), which in browsers of the time offered far less than 48 bits of entropy. Wallets created in that era on affected services may be crackable.
Sources: Unciphered disclosure · Kaspersky explainer
Case file: summary and patterns
Profanity vanity addresses — Wintermute (~$160m)
The Profanity tool for Ethereum "vanity" addresses expanded a 32-bit seed into keys. After 1inch disclosed the flaw, attackers recovered the key of a Wintermute admin address and drained its DeFi vault.
Sources: 1inch disclosure · Reuters
Case file: summary and patterns
Android SecureRandom flaw (2013)
Google confirmed that applications using the Java Cryptography Architecture on Android could receive weak values from SecureRandom because the underlying generator was not properly initialised. This caused repeated signature nonces, letting attackers derive private keys from wallets on Android. Bitcoin wallet apps issued urgent updates and users had to rotate keys.
Sources: Bitcoin.org alert · Android Developers Blog: "Some SecureRandom thoughts"
Case file: summary and patterns
Brain wallets cracked at scale
Ryan Castellucci showed that wallets derived from memorable phrases (quotes, lyrics, passwords) were being emptied within seconds by automated crackers, and released a cracking tool to make the danger undeniable.
Sources: Paper (PDF) · author's post
Case file: summary and patterns
Cake Wallet Bitcoin seeds (2020–2021)
Bitcoin wallets created by affected Cake Wallet versions used Dart's non-secure Random() generator. Cake Wallet urged users to create new wallets and move funds in May 2021. The Milk Sad team later found a shortcut that makes the weak wallets recomputable from about 20 bits, identified 8,757 weak wallets, and found some funds still sitting in them more than two years after the warning.
Sources: Milk Sad update #9 (technical) · Milk Sad update #10 (impact)
Case file: summary and patterns
Trust Wallet iOS (2018, CVE-2024-23660)
Early Trust Wallet iOS builds generated wallets with test-only random functions from the trezor-crypto library, giving a weak generator with a 31-bit initial state seeded from time values. Researchers linked it to the same July 2023 thefts that began the Milk Sad investigation, and Milk Sad found at least 6,572 weak mnemonics.
Sources: Milk Sad update #5 · NVD CVE-2024-23660
Case file: summary and patterns
Blockchain.info web wallet repeated R-values (2014)
A randomness fault in Blockchain.info's web wallet caused signatures with recycled "R-values", which let private keys be calculated from public data. A white-hat hacker known as "johoe" swept about 255 BTC from vulnerable addresses before thieves could, and published a list of 1,019 compromised addresses; Blockchain.info said it would compensate users.
Source: Finance Magnates (December 2014)
Case file: summary and patterns
Ethercombing: 732 guessable Ethereum keys and a "blockchain bandit" (2019)
Researchers searched small, predictable corners of Ethereum's private-key space, such as keys where all but 32 bits are zero, and found 732 private keys that had been used in 49,060 transactions. They suspected truncated keys, coding errors and poor entropy in wallet software. They also found an account they called the "blockchain bandit", which held 37,926 ETH (about $54m) on 13 January 2018 after sweeping weak-key wallets. A dollar's worth of ETH the researchers sent to a weak key was taken within seconds.
Sources: ISE: Ethercombing paper · Wired (April 2019)
Case file: summary and patterns
Biased signature nonces: hundreds of Bitcoin keys computed (2019)
Every ECDSA signature needs a fresh secret random number (a nonce). The researchers showed that even partly predictable nonces, for example ones that are too short or share leading bits, let an attacker compute the private key with lattice techniques once enough signatures are public. Scanning public blockchains, they computed hundreds of Bitcoin private keys and dozens of Ethereum and Ripple keys, many apparently already exploited.
Source: Breitner & Heninger, IACR ePrint 2019/023
Case file: summary and patterns
Debian OpenSSL predictable RNG (2006–2008, CVE-2008-0166)
A change to Debian's OpenSSL package removed most of the entropy fed into its generator, so keys made on Debian and Ubuntu systems for nearly two years came from a tiny, enumerable set. Upgrading was not enough: every affected key had to be regenerated.
Sources: Debian advisory DSA-1571-1 · CERT/CC VU#925211 · NVD CVE-2008-0166
Case file: summary and patterns
More incidents: the Milk Sad team's ongoing research catalogues further weak-PRNG wallet families. See also our Case files.
What to avoid Beginner
❌ Brain wallets
Seeds derived from a phrase you remember. Cracked routinely.
❌ Choosing your own words
Favourite words, names, lyrics or "random-looking" picks. Humans are predictable and the checksum will usually fail anyway.
❌ Online generators
Any website, browser extension or web page that creates seeds, even one that "runs locally". You cannot verify what it does, and pages can be swapped.
❌ Asking an AI chatbot for a seed
Language models are not random number generators, and the request and response may be logged.
❌ Phone dice / random apps
Unverifiable software on an internet-connected device.
❌ Pre-printed seed cards
A device that arrives with words already filled in is a scam — the seller knows them.
❌ Too little entropy
A handful of dice rolls, a 6-word "seed", or rerolling until it "looks right".
❌ Trusting a firmware update to fix an old seed
Updates fix future generation only. A seed made by a flawed generator stays weak until you replace it.
❌ Re-rolling "ugly" results
Discarding results you dislike — runs of sixes, repeated words — removes entropy and adds your bias.
❌ Vanity / "lucky" addresses
Grinding tools have repeatedly used weak seeds (see Profanity).
Not advice: this page is educational. Methods, firmware and vendor features change; follow your device maker's current documentation and consider professional help for large or complex holdings.
Last reviewed: · Educational information only — verify current details with official sources.