Wallet safety / Updated 2026-08-20
Weak Seed Generation: The Coldcard Entropy Bug and the Migration Drill Every Self-Custodian Needs
A hardware wallet promises to keep your key secret. It also has to pick an unpredictable one, and that promise failed quietly in shipped firmware for five years. What happened, and the migration drill it teaches.
How this guide is checked
Official sources first, no wallet connection, no guaranteed returns.
Reviewed on 2026-08-20 by WildWildCrypto Safety Desk. Method: Human editorial review with official-source checks, affiliate-disclosure checks, and no-financial-advice checks.
Publisher: WildWildCrypto Editorial. Corrections go through the contact page. We do not ask for seed phrases or tell you what to buy.
weak seed generation matters because The reason to buy a hardware wallet is to stop worrying: the key is made on the device, it never leaves, and doing everything right is supposed to be enough — which is why an event where doing everything right was not enough is worth sitting with rather than skipping.
This guide separates the two promises a hardware wallet actually makes, explains in plain terms what went wrong in the Coldcard entropy bug, shows why a firmware update cannot repair a key already generated, and sets out the migration drill that turns a vendor advisory into a calm afternoon of work.
You will learn why secrecy and unpredictability are different guarantees, how a build flag silently swapped a hardware random number generator for a weak software one, what the affected models and versions were, why user-supplied dice entropy survived the failure, and how to run a seed migration without making a second mistake.
Two promises, and only one of them gets talked about
The pitch for a hardware wallet is about secrecy. The private key is generated on a dedicated device, it is stored in hardware designed to resist extraction, it signs transactions internally, and it never appears on an internet-connected computer. All of that is real, and it defeats the entire category of attacks that steal keys from ordinary machines. It is also only half the security model, and the half that gets discussed.
The other half is that the key has to be unpredictable. A wallet key is not chosen from a list; it is drawn from a space so vast that guessing is hopeless. The BIP-39 standard that produces recovery phrases specifies initial entropy of between 128 and 256 bits, and 128 bits is the number that makes brute force meaningless — not difficult, but arithmetically pointless. That guarantee depends entirely on where the randomness came from. If the source is weaker than advertised, the resulting phrase looks completely normal: still twelve or twenty-four ordinary words, still passing every checksum, still restoring correctly on any wallet. Nothing about the device, the screen, or the words written on your backup card reveals the difference. Secrecy is something you can reason about — who saw it, where is it stored. Unpredictability is invisible, unverifiable after the fact, and taken entirely on trust.
Checklist
- Promise one: the key stays secret and never leaves the device.
- Promise two: the key was chosen unpredictably.
- BIP-39 specifies 128 to 256 bits of initial entropy.
- 128 bits is what makes guessing arithmetically pointless.
- A weakly generated phrase looks and behaves exactly like a strong one.
- Secrecy can be reasoned about; unpredictability cannot be inspected.
What actually happened, in plain terms
In July 2026, Coinkite disclosed that seed generation on its Coldcard devices had been drawing randomness from the wrong source. The company's technical backgrounder explains the cause with unusual candour. During a 2021 migration to Bitcoin Core's libsecp256k1 library, seed generation moved from one function to another, and a guard intended to prevent the software fallback path from being used checked only whether a macro named MICROPY_HW_ENABLE_RNG was defined rather than what its value was. As the write-up puts it, the macro was defined as zero, so the error did not stop the build. The two candidate functions shared a name, the wrong one was silently selected, and instead of the device's hardware random number generator, seed creation used MicroPython's general-purpose Yasmarang software generator, seeded from values including the chip's serial number and timer registers.
The effect was a collapse in the search space an attacker faces. Against an intended 128 bits, Coinkite estimates roughly 40 bits of effective entropy on the Mk2 and Mk3 models, and roughly 72 bits on the Mk4, Mk5 and Q, which mix in additional entropy from their secure elements. Forty bits is within reach of ordinary computing. The advisory lists the affected ranges: firmware 4.0.1 through 4.1.9 on Mk2 and Mk3, seeds generated on Mk4 and Mk5 before version 5.6.0 standard or 6.6.0X Edge, and on Q before 1.5.0Q standard or 6.6.0QX Edge. The flaw shipped in March 2021 and was patched on 31 July 2026 — after an attacker had begun brute-forcing keys and draining the resulting wallets, in waves starting 30 July, with reported losses passing $130 million and TechCrunch noting that at least a dozen different attackers appeared to be involved. One victim quoted in that reporting captured what makes the case instructive rather than merely alarming: he had never shared his seed phrase with anybody, and his devices had never touched the internet.
Checklist
- Cause: a build guard checked whether a macro existed, not its value.
- Result: a software random number generator replaced the hardware one.
- Effective entropy fell to roughly 40 bits on Mk2 and Mk3.
- Roughly 72 bits on Mk4, Mk5 and Q, aided by secure element entropy.
- Affected: firmware 4.0.1 to 4.1.9, and pre-5.6.0 / pre-1.5.0Q generations.
- Introduced March 2021; fixed firmware released 31 July 2026.
- Losses reported above $130 million, with multiple independent attackers.
- Victims had shared nothing and connected nothing — the key itself was guessable.
Why a firmware update cannot repair an existing seed
This is the single most important sentence in the whole episode, and it is the one people skim: updating the firmware does not change or repair an existing seed. Coinkite states it directly in the advisory, and it follows from what entropy is. Randomness is consumed at the instant a key is created and never revisited. The words on your backup card are a fixed encoding of the number that was drawn on that day, from whichever source was wired up at that moment. Patching the source changes what future draws look like. It has no reach into a draw that already happened, any more than fixing a broken dice tower changes a roll from last year.
That makes the required action unavoidable and slightly counter-intuitive. The update is necessary, because you must not generate a replacement key on vulnerable firmware — the advisory is explicit that users should not generate a new seed on affected models until the update is installed. But the update is not the remedy; it is the precondition for the remedy. The remedy is generating an entirely new seed and moving the funds to it. Anyone who installs the patch, sees the reassuring version number, and leaves their coins where they are has performed the preparation and skipped the fix. It is worth generalising the lesson beyond one vendor: when a security advisory concerns how a secret was created rather than how it is stored, no software update will ever resolve it, and the presence of a patch should read as a starting gun rather than an all-clear.
Checklist
- Entropy is spent at generation and never re-drawn.
- A patched device produces strong future seeds and cannot fix past ones.
- Install the update first — never generate a replacement on old firmware.
- The update is the precondition, not the remedy.
- The remedy is a new seed plus a migration of funds.
- Advisories about how a secret was created are never fixed by patching.
Entropy you can count: why dice survived this
There is one group of users this did not reach, and the reason is worth understanding because it generalises to every vendor. Coldcard and several other devices allow you to supply your own entropy by rolling physical dice and entering the results, which is mixed into the seed. Coinkite's advisory states that the issue affects device-generated entropy and does not remove independent entropy supplied with dice, and that with at least 50 fair, independent rolls that were never recorded or exposed, it does not consider the resulting seed at risk from this issue alone — because at that threshold the dice input alone contributed at least 128 bits.
The structural point is not that dice are magic. It is that they are the only part of the process you can personally verify. You cannot audit a firmware build, confirm which symbol a linker resolved, or test whether a number you were handed was drawn from a hardware source or a software one — and this incident demonstrates that a vendor with a strong security reputation and open firmware could not detect it either, for over five years. Fifty die rolls, in contrast, is something you can count while you do it. Each fair roll of a six-sided die contributes about 2.58 bits, so fifty rolls comfortably exceeds the 128-bit target on their own, which means the seed remains strong even if every other entropy source in the device were worthless. The conditions matter and are easy to get wrong: the dice must be fair, each roll independent, and the sequence must never be photographed, written down or typed anywhere else — an exposed roll sequence hands over the very thing that was protecting you. A strong BIP-39 passphrase is a related but separate control, described by Coinkite as an independent barrier and, importantly, as a distinct wallet-security choice rather than a substitute for good entropy; a weak passphrase adds very little.
Checklist
- Dice-supplied entropy is independent of the device's own randomness.
- Coinkite: at least 50 fair, independent, private rolls contributed 128-plus bits.
- Such seeds are not considered at risk from this issue alone.
- Each fair six-sided roll contributes roughly 2.58 bits.
- Dice are the only entropy step you can personally verify as it happens.
- Rolls must be fair, independent, and never recorded or exposed.
- A strong passphrase is a separate barrier, not a replacement for entropy.
- A weak passphrase adds almost nothing.
The migration drill, step by step
Every self-custodian should be able to run this without improvising, because the situations that demand it — a vendor advisory, a suspected exposure, a phrase that was once photographed — arrive without notice and reward calm. Work in this order. First, update the device to fixed firmware, and confirm the version on the device rather than assuming the update applied. Second, generate a completely new seed on that updated device, adding your own dice entropy if it supports it. Third, write the new phrase down offline and verify the backup before it protects anything, by wiping the device and restoring from your written copy, then confirming the receive addresses match — an unverified backup is a guess, and this is the step people skip. Fourth, send a small test amount to the new wallet and confirm it arrives and can be spent onward. Fifth, move the remaining balance. Sixth, and only then, retire the old seed: destroy the old backup once you are certain nothing remains on it, and never restore it onto a device again.
Two hazards deserve naming because they turn a recoverable situation into a loss. The first is haste. A publicised drain creates pressure to move funds immediately, and rushing produces the classic self-inflicted errors — a mistyped address, an unverified backup, a phrase typed into a phone to save time. The test transaction exists precisely to absorb that pressure, and the few minutes it costs are the cheapest insurance in this whole procedure. The second is the follow-up scam. Every publicised incident is immediately followed by helpful strangers: migration assistants, urgent messages from support you never contacted, tools that will check whether your seed is affected. Any of these that asks for your recovery phrase is a theft, without exception — Ledger's own guidance on recovery phrases makes the general rule plain, and the direction-of-contact test in our guide to fake support desks disposes of the whole category, since real support answers channels you opened rather than opening them. Finally, keep a plain note of when each seed was generated, on which device and firmware version, and whether you supplied dice. It takes a minute, and it is what turns the next advisory from an anxious afternoon of guessing into a thirty-second check of whether it applies to you at all.
Checklist
- Update firmware first and verify the version on the device.
- Generate a new seed on the updated device; add dice entropy if supported.
- Record the phrase offline; never photograph or type it into anything.
- Verify the backup by wiping and restoring, then matching addresses.
- Send a small test amount and confirm it can be spent onward.
- Move the remaining balance only after the test succeeds.
- Retire and destroy the old backup last, once nothing remains on it.
- Expect migration-themed scams; nobody legitimate needs your phrase.
- Log seed creation date, device, firmware version and dice usage for next time.
Authority sources used
Outbound links are included for verification and entity authority, not decoration.
- COLDCARD Security Advisory: seed generation warningCoinkite
- Technical Deep Dive into the Entropy IssueCoinkite
- Hackers steal over $130M by exploiting bug in offline hardware walletsTechCrunch
- BIP-39: Mnemonic code for generating deterministic keysBitcoin Improvement Proposals
- What is a Secret Recovery Phrase and how to keep it safeLedger Academy
FAQ
What exactly went wrong with Coldcard seed generation?
Seed generation drew randomness from a software fallback rather than the device's hardware random number generator, and nothing about the resulting phrase revealed it. Coinkite's technical backgrounder explains that during a 2021 migration to Bitcoin Core's libsecp256k1 library, a guard meant to block the software path checked only whether a macro named MICROPY_HW_ENABLE_RNG was defined rather than what its value was; the macro was defined as zero, so the build error that should have stopped it never fired. Two functions shared a name, the wrong one was silently selected, and MicroPython's general-purpose Yasmarang generator — seeded from values including the chip serial number and timer registers — supplied the entropy. Against an intended 128 bits, Coinkite estimates roughly 40 bits of effective search space on Mk2 and Mk3, and roughly 72 bits on Mk4, Mk5 and Q, which mix in secure element entropy. Forty bits is within reach of ordinary computing power, which is why an attacker could brute-force keys and drain wallets without ever touching a device. The flaw shipped in March 2021 and was patched on 31 July 2026, after attacks that began the previous day.
How do I know whether my device and seed are affected?
The answer depends on the model and on the firmware version in use at the moment the seed was created, not the version installed today. Coinkite's advisory lists the affected ranges as firmware 4.0.1 through 4.1.9 on Mk2 and Mk3, seeds generated on Mk4 and Mk5 before standard version 5.6.0 or Edge version 6.6.0X, and seeds generated on Q before standard version 1.5.0Q or Edge version 6.6.0QX. The important subtlety is that a device running current firmware today may still hold a seed created years ago under a vulnerable version, and there is no way to inspect a phrase and tell — a weakly generated seed is twelve or twenty-four perfectly ordinary words that pass every checksum and restore correctly anywhere. There is one documented exception: if you supplied at least 50 fair, independent dice rolls during seed creation and never recorded or exposed that sequence, Coinkite does not consider the seed at risk from this issue alone. If you cannot establish when and how a seed was generated, the safe assumption for a material balance is that it falls in the affected range, and migrating resolves the uncertainty for the cost of one transaction.
I updated the firmware. Are my existing coins safe now?
No, and this is the most consequential misunderstanding available in this situation. Coinkite states it plainly: updating the firmware does not change or repair an existing seed. Randomness is consumed at the instant a key is generated and is never revisited, so the words on your backup card permanently encode the number that was drawn on the day they were created, from whatever source was wired up at that moment. Patching changes what future generations look like and reaches nothing that already happened. The update is still necessary, and necessary first, because you must not create a replacement key on vulnerable firmware — the advisory explicitly warns against generating a new seed on affected models until the update is installed. But the update is the precondition for the remedy rather than the remedy itself. The actual fix is to generate a completely new seed on the patched device and move your funds to it. Installing the patch, seeing a reassuring version number and leaving the coins in place is the failure mode to avoid: it looks like completion and accomplishes nothing for the balance at risk.
Do dice rolls really make a difference, or is that just enthusiast folklore?
In this case they were decisive, and the reasoning is arithmetic rather than folklore. Coinkite's advisory states that the issue affects device-generated entropy and does not remove independent entropy supplied with dice, and that with at least 50 fair, independent rolls never recorded or exposed, the resulting seed is not considered at risk from this issue alone — because at that threshold the dice input by itself contributed at least 128 bits. Each fair roll of a six-sided die adds roughly 2.58 bits, so fifty rolls clear the target on their own, meaning the seed stays strong even if every other entropy source inside the device turned out to be worthless. The general principle is more valuable than the specific outcome: dice are the only step in seed generation that you can personally verify while it happens. You cannot audit a firmware build or confirm which function a linker resolved, and this incident showed that a reputable vendor with open firmware did not catch it either for over five years. The conditions do matter — fair dice, genuinely independent rolls, and a sequence never photographed, written down or typed anywhere, since an exposed roll sequence surrenders the exact thing that was protecting you.
Does this mean hardware wallets are not worth using?
It means the security model deserves to be understood accurately rather than trusted vaguely, which is a different conclusion. A hardware wallet makes two promises: that the key stays secret, and that the key was chosen unpredictably. The first is the one everybody discusses, and it remains genuinely effective — it defeats the entire class of attacks that harvest keys from internet-connected computers, which is how most people actually lose funds. The second promise is the one that failed here, and it is structurally harder because it is invisible: a weakly generated phrase behaves identically to a strong one in every observable way. The practical response is not to abandon dedicated signing devices for something with a strictly worse threat model, but to reduce your dependence on any single vendor's randomness where the option exists — supplying your own dice entropy, considering a strong passphrase as a separate barrier, and keeping records of how and when each seed was generated so that the next advisory can be checked in seconds. It is also worth noting how this vendor behaved: the bug was disclosed, patched, and explained in an unusually detailed public technical write-up. That is the response you want when a shared assumption fails, and the failure it exposed belongs to the category rather than to one company.