Reference · Bitcoin self-custody

Understanding entropy in Bitcoin seed generation

What randomness actually is, why dice technique matters less than people think, and what to worry about instead.

Read first
Mistakes in seed generation cause permanent, irreversible loss of funds. This guide is for people who want verifiable randomness and accept the added risk of a manual process.

The one idea everything else follows from

Entropy is measured relative to what an attacker knows — not relative to what other people do.

This is the most misunderstood point in the whole subject. Entropy is not a property of your ritual, your equipment, or how unusual your method is. It measures how many equally likely outcomes your process could have produced, from the perspective of someone who knows your entire procedure in complete detail.

An attacker does not guess your method. They guess your outcomes.

This is why "nobody else shakes dice in a jam jar the way I do" adds exactly zero bits. It is security through obscurity. Two people rolling fair dice each get the full amount of entropy and land on different seeds. Neither one is "more random" than the other.

Bits, and the hard ceiling

Entropy is counted in bits. Each bit doubles the number of possible outcomes.

Entropy per event
SourceOutcomesBits
Coin flip21.000
Six-sided die62.585
Twenty-sided die204.322
Playing card, with replacement525.700

The formula is log2(outcomes). A d6 gives log2(6) ≈ 2.585 bits.

This is a hard ceiling. It is set by the number of faces, not by how vigorously you throw. No cup, container, surface, or technique can push a d6 above 2.585 bits per roll.

Technique determines only whether you reach the ceiling or fall short of it. That reframing answers almost every "does this make it more random?" question before it is asked.

How many rolls?

TargetCoin flipsd6 rolls
128 bits — 12 words12850
256 bits — 24 words25699

99 rolls gives 6^99 ≈ 2^255.9 — a whisker under 256, which is why 99 is the stated minimum for a 24-word seed.

Technique: what helps, what doesn't

All of these have the same answer. They do not add entropy; they only affect whether you hit the ceiling.

Containing the dice so they can't roll away

Fine, and standard practice. What matters is the bounce count. A die that tumbles and ricochets several times before settling is chaotically unpredictable, and that is all you need.

Containment only hurts in the degenerate case: a slot or tube so tight the die slides rather than tumbles, so where it lands correlates with how you dropped it. If it rattles freely, you are at the ceiling. That is the whole test.

Using a cup to shake them

Mildly helpful. A cup usually increases tumbling and decouples the outcome from your hand motion. It does not add entropy — nothing does — it just makes it more likely you are at the ceiling. A cup where the dice rattle audibly is doing its job.

The rolling surface

Hard and flat beats soft. This surprises people, but it follows directly: hard surfaces produce more bounces and more tumbling. Felt, cloth, or a towel damps energy fast, so a die can settle after very few tumbles — and soft or uneven surfaces produce more cocked dice, which means more ambiguous judgment calls.

Rolling more than one dice at a time

Works, with one important fix: use different-coloured dice as opposed to trying to record left to right or similar and record red-then-blue for example.

Position-based ordering breaks down exactly when the dice land ambiguously — stacked, diagonal, touching, or one cocked against the other. At that moment you are making a judgment call, and human judgment calls are not uniform.

Minor purist note: two dice thrown together can collide, which technically couples their outcomes very slightly. The effect is negligible, but rolling a single die repeatedly avoids the question entirely.

The cardinal rule

Never discard a roll because of its value. Only ever because of physical ambiguity.

If a die is cocked, stacked, or off the table: discard the whole roll and re-roll it. That is safe and costs nothing.

If you re-roll because "three 6s in a row doesn't look random enough", you have just injected your intuitions about randomness into your seed. Human intuition about randomness is famously poor and highly predictable, and this single mistake can destroy far more entropy than any equipment flaw.

Real 100-roll sequences contain runs. Long runs are expected. Keep them.

Converting rolls into a seed

Two standard methods. They produce different results from the same rolls, so pick one and stay consistent — mismatching them is the most common cause of "my words don't match" confusion.

Method A — base-6 digits

Treat the rolls as digits of a base-6 number. Map 6 → 0 and leave 1–5 as themselves. Used by SeedSigner: 50 rolls for 12 words, 99 for 24.

Method B — hash the roll string

Concatenate the digits into one long string and run SHA-256 over it to get 256 bits. Used by Coldcard. This is the more forgiving option, for reasons covered next.

Die bias, and the margin that fixes it

Cheap pipped dice have material drilled out for each pip, so the 6 face is fractionally lighter than the 1 face. The real-world skew is a fraction of a percent, costing a negligible fraction of a bit across 256. Casino dice have flush, filled pips and remove the question for a few dollars.

Rolling several dice at once does not cancel out bias. Each die still carries its own.

The fix: margin plus hashing

  • Roll around 128 times instead of the minimum 99
  • Concatenate the digits into one string
  • SHA-256 it to get your 256 bits

Hashing does not create entropy, but it smears any small per-face bias across the whole output so it is not recoverable. The extra rolls give headroom: even if each roll delivers 2.4 effective bits instead of 2.585, you are still comfortably above 256 going in.

Can I generate more than 256 bits?

You can collect more than 256 bits of input. You cannot have a BIP39 seed with more than 256 bits of output — and you would not want one.

The numbers

Past a comfortable surplus, extra rolls buy nothing. A thousand rolls into SHA-256 gives the same 256-bit output as 128 rolls.

Why the ceiling exists

24 words is the top of BIP39: 256 bits of entropy plus an 8-bit checksum = 264 bits = 24 × 11. There is no 30-word option.

And the ceiling is not arbitrary. A Bitcoin private key is a number below the secp256k1 curve order, which sits just under 2256 — a key literally cannot hold more than 256 bits.

Further: the best known attack on the discrete log problem is Pollard's rho, which runs in roughly the square root of the key space. That puts the real security level of any secp256k1 key at about 128 bits, regardless of how much entropy went into the seed.

Which means a 12-word mnemonic already saturates Bitcoin's security: 128 bits of entropy against a 128-bit security level. The honest case for 24 words is margin against a partially broken RNG or a future cryptanalytic dent — not against brute force.

If you genuinely want more secret material

Three legitimate routes, none of which is "a bigger seed".

That last one is usually what people actually want. The anxiety behind "can I get more than 256 bits" is nearly always "what if my entropy source is bad" — and the fix for that is independence, not quantity.

Verifying your work

You cannot verify entropy statistically. You can decode a mnemonic back to its 128 or 256 raw bits, but running ent or dieharder on 32 bytes is meaningless — randomness tests need megabytes to say anything. A perfectly good seed will "fail" and a backdoored one will "pass". Don't bother.

What you can verify is that the encoding and derivation are correct: that your entropy maps to those words, and those words map to those addresses.

The method

  1. Reproduce the result in a second, independent implementation — python-mnemonic, an offline copy of the Ian Coleman BIP39 tool, or a separate device.
  2. Compare all four of: master fingerprint, account xpub or zpub, first five receive addresses, first five change addresses.
  3. If all four match across two independent implementations, the derivation is correct.

Test with throwaway data, never your real seed

Verification only tells you whether two implementations agree. A decoy seed proves that exactly as well as your real one — so never type a funded seed into a browser.

Coldcard's own documentation follows this logic: verify the dice-roll maths with a few throwaway rolls, not with your real ones.

If you must check the real thing offline

Only worth it if you generated the entropy yourself and want to confirm your own dice-to-words arithmetic.

  1. Download bip39-standalone.html and verify its SHA-256 against the published hash
  2. Transfer by USB to an air-gapped machine — Tails is ideal, since it forgets everything on shutdown
  3. Physically disable networking, open via file://, work offline, power off

Tick Show entropy details, set the mnemonic length first, then enter your data. Enter dice rolls as Hex rather than the tool's dice format — the dice mode maps a roll of 6 to 0, and that mismatch is the classic source of confusion.

On checksums

A wallet showing "Valid checksum" proves only that you transcribed a valid set of words. It says nothing about entropy quality. A seed generated from 24 rolls of a loaded die can have a perfectly valid checksum.

What actually matters

Ranked by real-world impact. Note that dice-throwing physics does not appear until the very bottom.

#RiskWhy
1Your environmentPhones, smartwatches, cameras, a networked computer in the room. Dominates everything else on this list.
2Discarding rolls by valueCatastrophic, and entirely self-inflicted. See the cardinal rule.
3Transcription errorsMiscounting or miscopying gives a wrong-but-valid seed. Record on paper as you go; never reconstruct from memory.
4Backup durabilityPaper burns, fades, and water-damages. Metal is the standard answer.
5Die biasReal, but tiny — and fully handled by margin plus hashing.
6Cup, surface, throw styleEffectively noise, provided the dice tumble freely.

Quick reference

QuestionAnswer
Bits per d6 roll?2.585 — a hard ceiling
Rolls for 24 words?99 minimum, around 128 for comfortable margin
Does my unique technique add entropy?No. Entropy is about outcomes, not methods
Can I re-roll a cocked die?Yes — discard the whole roll and re-roll
Can I re-roll a result I dislike?Never. This destroys entropy
Best rolling surface?Hard and flat — more tumbling, fewer cocked dice
Two dice at once?Fine — use different colours, record by colour
More than 256 bits?Not in BIP39. Use a passphrase, multisig, or XOR
Is 12 words enough?Yes — it already meets Bitcoin's ~128-bit security level
Can I test my entropy statistically?No. 256 bits is far too little data to test
How do I verify?Cross-check fingerprint, zpub, and addresses in a second implementation, using a decoy seed