Reference · Bitcoin self-custody
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.
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.
Entropy is counted in bits. Each bit doubles the number of possible outcomes.
| Source | Outcomes | Bits |
|---|---|---|
| Coin flip | 2 | 1.000 |
| Six-sided die | 6 | 2.585 |
| Twenty-sided die | 20 | 4.322 |
| Playing card, with replacement | 52 | 5.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.
| Target | Coin flips | d6 rolls |
|---|---|---|
| 128 bits — 12 words | 128 | 50 |
| 256 bits — 24 words | 256 | 99 |
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.
All of these have the same answer. They do not add entropy; they only affect whether you hit the ceiling.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Past a comfortable surplus, extra rolls buy nothing. A thousand rolls into SHA-256 gives the same 256-bit output as 128 rolls.
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.
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.
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.
python-mnemonic, an offline copy of the Ian Coleman BIP39 tool, or a separate device.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.
abandon × 11 followed by about. It is in the spec, everyone knows it, and nothing is leaked by typing it anywhere.Coldcard's own documentation follows this logic: verify the dice-roll maths with a few throwaway rolls, not with your real ones.
Only worth it if you generated the entropy yourself and want to confirm your own dice-to-words arithmetic.
bip39-standalone.html and verify its SHA-256 against the published hashfile://, work offline, power offTick 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.
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.
Ranked by real-world impact. Note that dice-throwing physics does not appear until the very bottom.
| # | Risk | Why |
|---|---|---|
| 1 | Your environment | Phones, smartwatches, cameras, a networked computer in the room. Dominates everything else on this list. |
| 2 | Discarding rolls by value | Catastrophic, and entirely self-inflicted. See the cardinal rule. |
| 3 | Transcription errors | Miscounting or miscopying gives a wrong-but-valid seed. Record on paper as you go; never reconstruct from memory. |
| 4 | Backup durability | Paper burns, fades, and water-damages. Metal is the standard answer. |
| 5 | Die bias | Real, but tiny — and fully handled by margin plus hashing. |
| 6 | Cup, surface, throw style | Effectively noise, provided the dice tumble freely. |
| Question | Answer |
|---|---|
| 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 |