The Coldcard Seed Failure
A build-configuration mistake, not a break in Bitcoin. How predictable key generation turned a public blockchain into a search index — and what exposed holders have to do about it.
- Reference
- IR-2026-08-CC-RNG · rev 2
- Released
- 15 August 2026
- Evidence cutoff
- 15 August 2026, 06:00 UTC
- Handling
- Public — defensive use
- Standard
- Confirmed, assessed and unknown kept separate
- Status
- Supersedes rev 1 of 4 August
- Publisher
- BTIX Research — Blockchain Threat Intelligence
BTIX confidence assessment
Wallet seeds were built from a deterministic software generator rather than the hardware entropy source the firmware was meant to call. The mistake sat in build configuration, not the silicon.
Patching does not undo the damage. A seed born from the defective path stays weak forever; only a new seed and a full migration close the exposure.
The earliest large sweeps came from one operator or one shared toolkit — same template, same fee, same short window. This does not extend to the campaign as a whole: reporting describes multiple independent parties working the same public flaw, so template similarity establishes tooling, not identity.
Who did it, how many parties were involved, what infrastructure they ran, what the search actually cost, the complete list of drained addresses, and whether the candidate fourth wave belongs to the same campaign — still unconfirmed eleven days after it was flagged.
How this report was put together
This report is a BTIX Research analytical reconstruction based on public technical material and attributable investigator reporting. BTIX Research did not independently discover the underlying vulnerability; our contribution is the reconstruction, confidence assessment, exposure analysis, migration guidance, detection logic and defensive recommendations. Confirmed, assessed and unknown claims are kept separate throughout the report.
Offline, and still guessable
Nothing was broken in Bitcoin, and nothing reached into anyone's device. The wallets failed at the one moment that cannot be repaired later: the instant the secret was created.
Coldcard firmware asked for randomness through a module named ngu.random. Because of how the build was configured, that request never reached the STM32 hardware generator on the board — it landed in Yasmarang, a deterministic algorithm MicroPython carries as a fallback for non-cryptographic use.
On Mk2 and Mk3 running version-4 firmware, nothing secret entered the pipeline at all; the Coinkite advisory puts effective strength there at roughly 40 bits against the 128 a 12-word mnemonic should carry. Later Mk4, Q and Mk5 firmware did pull material from the secure elements, but only four bytes survived — enough to reseed a single 32-bit state word, for about 72 bits. Hashing the output made it look fine. It could not make it unguessable, because a hash cannot invent possibilities absent from its input.
The regression entered wallet generation in March 2021 and shipped in version 4.0.0. Coinkite's affected range for Mk2/Mk3 runs 4.0.1 to 4.1.9; later hardware is affected if the seed predates standard 5.6.0 or Edge 6.6.0X on Mk4/Mk5, or standard 1.5.0Q or Edge 6.6.0QX on the Q. Exposure attaches to the seed, not the device: a firmware update leaves the old seed exactly as weak. Two exceptions exist — at least 50 fair, independent, private dice rolls mixed into generation, and a strong unique BIP-39 passphrase as an added barrier.
On the chain side, Galaxy Research puts confirmed losses at more than 1,778 BTC — roughly $112 million — from over 5,200 addresses across three proven waves and 41 smaller footprints. A candidate fourth wave of 638.5 BTC remains unconfirmed; including it would carry the total to 2,417 BTC, above $151 million. BTIX keeps those tiers apart. The sweep that drew the most attention ran 41 minutes on 30 July, 01:10:20 to 01:51:26 UTC, moving 1,082.65 BTC out of 1,195 addresses across blocks 960,183 to 960,191 — every transaction at 30 sat/vB, every source emptied without change.
The sweeps have since stopped — no confirmed activity since 6 August — not because the method failed but because the reachable population has largely been drained or migrated.
The enterprise lesson is narrow and unforgiving: an air gap is a statement about how data moves, not about how secrets are born. A wallet can refuse every network on earth and still hand an attacker a key that was guessable from the start.
Five years between the commit and the sweep
The defect was quiet for five years. The sequence separates when the code changed, when the exposure widened, and when the money moved.
| Date | What happened | Status |
|---|---|---|
| 28 Jan 2021 | The faulty guard around the STM32 path is already present in the crypto library. | Confirmed |
| 1 Mar 2021 | Wallet generation is migrated onto that library — commit b18723dd. | Confirmed |
| 17 Mar 2021 | Version 4.0.0 ships carrying the path. The vendor's user-facing affected range opens at 4.0.1. | Confirmed |
| 11–14 Mar 2022 | The 32-bit reseed API and Mk4 boot reseed arrive; Mk4 v5.0.0 is released. | Confirmed |
| 30 Jul 2026 | 01:10–01:51 UTC: 1,082.65 BTC leave 1,195 addresses across blocks 960,183–960,191. | Reported |
| 30 Jul 2026 | Technical disclosure and vendor advisory go public while exploitation is already underway. | Confirmed |
| 31 Jul 2026 | Emergency firmware ships for all affected models; the vendor destroys its remaining vulnerable inventory. | Confirmed |
| 1 Aug 2026 | Advisory updated with fixed release numbers and migration guidance. | Confirmed |
| 3 Aug 2026 | A probable fourth wave is called out while still in the mempool, across blocks 960,778–960,792. The transactions signal RBF opt-in, giving some victims minutes to fee-bump their way out. | Unconfirmed |
| 6 Aug 2026 | Last confirmed attacker activity in any wave or footprint. | Confirmed |
| 14 Aug 2026 | Confirmed total revised to 1,778+ BTC across 5,200+ addresses, 3 waves and 41 footprints; candidate wave 4 restated at 638.5 BTC. | Very high confidence |
Two correct assumptions, one broken contract
Coldcard is a Bitcoin-only signer: keys stay on the device and PSBTs move over MicroSD, or QR on the Q. That removes several classes of host and network risk. It says nothing about whether the seed was unpredictable when it was made.
The board carried its own STM32 randomness wrapper, ckcc.rng_bytes. Because it existed, the build deliberately set MICROPY_HW_ENABLE_RNG to zero to switch off MicroPython's own hardware path. Block's published source analysis shows the crypto library then checked whether that macro was defined — with #ifndef — rather than whether its value was on. Finding it defined, it concluded a hardware TRNG was present and bound CHIP_TRNG_32() to rng_get(). MicroPython, reading the value, compiled rng_get() as the Yasmarang fallback.
Confirmed
The binary linked cleanly — no symbol missing, no test failed. The error was substitution, not absence: a cryptographic consumer silently wired to a deterministic producer. A check that asks for bytes, watches them change and rejects repeats passes this build without complaint.
The analytical point: output can look random without being unpredictable. Every stage after the generator changes representation; none of them adds candidate states.
Nobody violated their own assumptions
This is what makes the bug instructive rather than embarrassing. The firmware author disabled a redundant path. The library author checked for a macro that signals hardware capability. The runtime compiled the branch its configuration specified. Each behaved exactly as documented, and the integration of the three destroyed the only property that mattered — that wallet entropy must originate somewhere unpredictable.
Before the migration, generation filled a 32-byte buffer through rng_bytes, landing on the board's STM32 peripheral. After it, the same call became random.bytes(32), resolving to ngu.random.bytes. One line of routing separated a hardware source from a software imitation of one.
Four control gaps let it survive to production: a non-cryptographic generator inside a namespace called random, with nothing warning against using it for keys; no compile-time assertion on the macro's value rather than its existence; no end-to-end test of entropy provenance; and health checks that looked only for stuck or trivially repeating output — a bar Yasmarang clears comfortably.
Varying is not the same as secret
The fallback seeded itself from the low 32 bits of the MCU's unique ID, XORed with the SysTick counter, plus the real-time clock and its sub-second register. Those values move between boots, but movement is not secrecy. The UID is fixed metadata stamped into the chip, and the timing values sit inside ranges that manufacturing data, user behaviour, boot duration or enumeration can narrow considerably. Fix the starting state and the number of prior calls, and everything afterwards follows deterministically.
The library then XORed that stream against a second Yasmarang instance seeded from public constants — a step that adds nothing, since XOR only preserves uncertainty when at least one input carries some. Applying SHA256d changes how the bytes look; the number of possible outputs is still the number of possible inputs.
Confirmed
On Mk4, Q and Mk5, boot logic read material from two secure elements, hashed it, kept the first four bytes, read them as a 32-bit integer and passed that to ngu.random.reseed(n). That call overwrites one state word. It does not build a cryptographic DRBG, reset the fallback, or accept the rest of the digest. For a fixed fallback state and call history, Block bounds the number of securely distinguished streams at 2^32. Coinkite separately puts effective strength at roughly 40 bits on Mk2/Mk3 and about 72 bits on Mk4, Mk5 and Q. Block declines to publish a single practical figure at all, cautioning that a ceiling is not a security level. These numbers describe different models under different assumptions; collapsing them into one headline figure would misrepresent all three.
Twenty-four words of nothing
BIP-39 takes an initial block of entropy, appends a checksum, maps it to mnemonic words and stretches the result through PBKDF2-HMAC-SHA512 into a seed. BIP-32 grows a key tree from it. Both assume the first step was unpredictable, and neither can notice when it wasn't. The checksum catches a mistyped word; derivation turns one secret into millions of keys. Neither restores entropy that was never there.
A twelve-word mnemonic should start from 128 bits, a twenty-four-word mnemonic from 256. If the generator reaches only a much smaller family of candidates, that family is the real security level regardless of word count or hash width — exactly the distinction NIST SP 800-90B draws between an entropy source and a deterministic generator.
Dice matter because they enter from outside the broken path. Coinkite treats 50 to 98 fair, independent, private six-sided rolls as contributing at least 128 bits, and 99 or more as reaching roughly 256. The conditions carry weight: fair, genuinely independent, unobserved, and the seed in use must be the one produced after mixing. Fewer rolls do not qualify.
A BIP-39 passphrase does not repair the seed; it derives a different wallet from it, adding a dimension the attacker must also search. That helps only if the phrase is strong, unique and secret — it is not the device PIN, and it protects no wallet derived without it.
What an operator would have to do
Assessed
No public material describes the attacker's code, hardware, throughput, or how they obtained UID and timing constraints. What follows is a BTIX reconstruction from the mechanism — it shows the work is feasible, not how it was done.
The operator starts by bounding device state: plausible UID values or serial ranges, clock and sub-second positions, boot conditions, and how many random calls preceded the one that made the seed. They reimplement the Yasmarang state machine and whatever model-specific reseed applies. Each candidate output goes through the same SHA256d, BIP-39, BIP-32 and script-type derivations real wallet software would use, producing candidate addresses.
Those addresses are checked against a local chain index or UTXO set — here the public ledger becomes the attacker's oracle, confirming a correct guess without ever touching the victim. Transactions are then built to spend every UTXO found, with fees set high enough to confirm before anyone reacts.
For Mk2 and Mk3 on version 4, there is no secret input to defeat once the environment is pinned down. For later devices Block's model requires walking up to 2^32 reseed values per fixed fallback state and call history, averaging around 2^31 attempts — a statement about search-space size, not a published benchmark. Real cost swings widely with derivation paths, address types, gap limits and UID knowledge. What later analysis does show is that the sweeping was not indiscriminate: the recoverable population appears to have been surveyed first, the largest balances taken early.
Analytical reconstruction. Actual attacker implementation remains unknown. No recovered tooling or throughput figure underlies this diagram; it shows only that the work is feasible given the defect.
1,778 BTC we can stand behind
The defining early event ran from 01:10:20 to 01:51:26 UTC on 30 July 2026 across blocks 960,183 to 960,191: 1,082.65 BTC out of 1,195 source addresses in 41 minutes, uniformly at 30 sat/vB, with no change outputs anywhere. One fee rate, one window, one construction pattern, at that scale, is a strong operational fingerprint — and it remains the largest proven wave.
According to Galaxy Research, the confirmed owner-attributed total stands at more than 1,778 BTC — around $112 million — at very high confidence, across three proven waves and 41 smaller footprints covering over 5,200 addresses. The candidate fourth wave of 638.5 BTC is carried separately, unconfirmed, and would lift the total to 2,417 BTC if it is ever attributed.
The confirmed address count fell from roughly 7,300 to just over 5,200 while confirmed losses rose. That is attribution tightening, not victims disappearing: more than 190 victims have been interviewed directly, and addresses counted on resemblance alone were dropped when they could not be tied to an owner.
The money has mostly not moved. Of the confirmed haul, 1,531 BTC still sits in attacker-controlled addresses untouched; roughly 246 BTC has moved since the theft, about 65% of it into CoinJoin rounds. Only 174.97 BTC can be followed to a final endpoint. That leaves an unusually wide window open for exchanges and law enforcement.
Limitation
BTIX Research does not publish attacker addresses. The complete corpus was not available to BTIX in an authoritative, machine-readable form, so we cannot independently reproduce the totals or offer exchange attribution we would defend. This is a statement about BTIX reach, not doubt about the events.
Assessed
The absence of confirmed activity after 6 August should not be read as the vulnerability being closed: the defect is unchanged and every un-migrated seed remains recoverable. Dormancy is a supply problem for the attacker, not a fix.
Structural representation only. BTIX Research holds no authoritative attacker-address corpus; no addresses, transactions, clusters or exchange attributions are depicted or should be inferred. Volumes as reported by the cited investigation.
| Measure | Baseline | If suspected included | BTIX treatment |
|---|---|---|---|
| BTC | 1,778+ | 2,417 | Keep separate |
| Addresses | 5,200+ | +709 suspected | Revised down from ~7,300 |
| Structure | 3 proven waves + 41 footprints | Adds candidate wave 4 | Separate tier |
| Still unmoved | 1,531 BTC | — | Recovery window open |
| As of | 14 Aug update | Unconfirmed since 3 Aug | Snapshot, 15 Aug 06:00 UTC |
A fingerprint of the tool, not of the hand
The shape is many-to-few: victim UTXOs spent in quick succession by reusable transaction logic, converging on a much smaller set of destinations. The uniform fee and absent change make the pattern legible, because unrelated wallet activity rarely shares a narrow window and an identical template at that volume.
That legibility is temporary — fee policy is a property of software, and software changes. When later waves look different, three explanations fit equally well: the tooling evolved, the operator tightened their tradecraft, or a second party picked up the same public vulnerability. The evidence does not choose between them, and BTIX does not either.
Reliable flow work is layered: seed provenance, proximity in time and block height, full-balance spends without change, shared fee policy, consolidation, then exposure to services. Attribution to an exchange or mixing service must rest on current licensed labels and be corroborated before it drives a notification or a legal step.
One heuristic will mislead you here
BTIX Research weights evidence rather than trusting a single rule. A victim's verified generation history, with cryptographic proof they controlled the address, outranks any behavioural signal. Matching templates and consolidation into confirmed attacker infrastructure sit below it; temporal proximity alone never suffices.
The common-input heuristic is the trap here. Inputs spent together normally imply one signer — but an attacker holding thousands of recovered keys satisfies it while those inputs represent thousands of unrelated victims, clustering control at the moment of theft rather than ownership before it. With no change outputs to follow, consolidation is the stronger pivot, and it holds only until funds reach a custodial service or collaborative protocol.
Exposure follows the seed, not the box
The affected population is defined by where a seed came from, not what hardware holds it today. A user who updated firmware, restored that mnemonic onto another brand, or destroyed the original device is still exposed: the same seed controls the same key tree, and the update leaves it exactly as weak.
The inverse holds too. Owning an affected model proves nothing if the seed predates the regression, was imported from a sound source, had qualifying private dice entropy mixed in, or sits behind a strong unique passphrase.
Single-signature wallets are the clean target. Multisig helps only where the quorum's keys come from independent generation failure domains — one assembled entirely from affected devices is as recoverable as a single key, and different brands sharing code lineage do not fix it. And an address count is not a headcount.
Deciding whether a specific seed is affected
Most holders do not need a threat assessment; they need a verdict about one seed. Work these questions in order and stop at the first that resolves.
Imported from another device, a paper backup predating 2021, or generated elsewhere — the defect never touched it.
Imported → not affected by this defectGeneration before the migration used the board's hardware path. If the date is uncertain, continue.
Confirmed pre-2021 → outside the rangeMk2/Mk3 on 4.0.1–4.1.9. Mk4/Mk5 before standard 5.6.0 or Edge 6.6.0X. Q before standard 1.5.0Q or Edge 6.6.0QX. Only the version present at creation counts.
In range → exposedThe rolls must have been genuinely independent and unobserved, and the wallet in use must be the post-mixing seed. Partial or remembered rolls do not qualify.
Qualifying dice → exception appliesA barrier, not a repair. It protects only wallets derived with it, and only if it was never reused or guessable. Funds on the bare seed remain fully exposed.
Passphrase → barrier only, migrate anywayUncertainty about creation date, firmware version or dice procedure resolves against you. Migrating unnecessarily costs an afternoon; the opposite mistake costs the balance.
Unknown → treat as exposedAnswer from generation records where they exist; never enter a mnemonic into a connected computer to establish provenance. Sequence and thresholds are BTIX Research analysis applied to the vendor-published ranges and exceptions.
Rotating a compromised seed without making it worse
Migration is where avoidable losses happen — funds moved to an address derived from the same broken seed, or a rushed transfer nobody verified. The order below is deliberate; the test transfer is not optional.
If a sweep is happening right now: check whether the unauthorised transaction is still unconfirmed in the mempool, and whether it signals RBF opt-in. Both conditions must hold. A replacement then has to be constructed, broadcast and propagated in time to be mined ahead of the attacker's version — which is not guaranteed, since the attacker can also raise their fee. Several victims in the fourth wave managed this. Where those conditions are met, RBF may provide a narrow opportunity to preserve the funds before the attacker's transaction confirms. The window may last only minutes, and it closes at confirmation: RBF cannot reverse a Bitcoin transaction that has already confirmed. Once the sweep is in a block, the steps below are about protecting what remains, not recovering what is gone.
- Assume the old seed is public
Treat every key under it as known to an adversary who is actively sweeping. That framing prevents half-measures.
- Install the fixed release for your exact model and track
Standard and Edge are different tracks with different version numbers. Confirm the version on the device screen, not the download page.
- Generate a completely new seed
A new seed — not a new account or derivation path under the old one. Mix in dice if your procedure supports it.
- Verify the backup and the fingerprint
Confirm the written backup restores, and check the fingerprint against your coordinator before the wallet holds value.
- Verify the receiving address on the device itself
Read it from the hardware screen, not the computer. This is what defeats address substitution.
- Send a small test and confirm it
Wait for confirmation and verify the funds are spendable before committing the balance.
- Move the full balance
Highest-value UTXOs first. If a sweep is already in progress, prioritise rather than batching into one slow transaction.
- Keep the old backup until migration is confirmed complete
Destroying it early risks stranding an overlooked UTXO. Retire it once nothing remains under the old key tree.
- Record the provenance of the new seed
Model, firmware at creation, generation method, passphrase and derivation policy. This makes the next advisory answerable in minutes.
Three actions that feel like remediation and are not: updating firmware and stopping there; restoring the old mnemonic into a different brand of device; sending funds to another address derived from the same mnemonic. All three leave the attacker holding the key.
Capable, prepared, unidentified
The operational picture shows preparation. Constraining device states, deriving wallet branches, running a chain index and emptying more than a thousand addresses inside 41 minutes is not opportunistic work — the infrastructure was staged before the first transaction went out. The timing relative to disclosure allows three readings: independent discovery, knowledge through a non-public channel, or an unusually fast reaction to early private reports. Nothing available distinguishes them.
Assessed — moderate
The first two waves were run by a single actor or with a single toolchain, on consistent fee and batching behaviour. That judgment does not extend across the campaign: once the mechanism was public, the barrier to entry was a laptop and an offline reconstruction tool, and subsequent reporting describes multiple independent parties working the same flaw. Later divergence in construction is at least as likely to be a different operator as an evolving one.
No attribution to any named group, country, employee, researcher or competitor is supported, and the widely repeated claim that AI found the bug is speculation the vendor itself flagged as such. Motive is assessed as financial with high confidence; where the funds went afterwards remains unknown.
Provenance beats hashes in this incident
There is no malware sample and no infrastructure to block. The useful indicators describe how a seed was made and how funds behaved — for triage, never for attribution.
| Type | Indicator | Weight and caveat | Where to look |
|---|---|---|---|
| Provenance | Seed generated on affected firmware without qualifying dice entropy. | High for exposure — not evidence of theft | Key-origin inventory |
| Behaviour | Full-balance spend with no change, inside an incident window. | Weak on its own | Wallet monitoring |
| Fee policy | 30 sat/vB, as reported in the early mass sweep. | Only meaningful alongside other features | Transaction parser |
| Temporal | Activity within blocks 960,183–960,191. | High for reviewing the early wave | Node or explorer |
| Cluster edge | Direct consolidation into a confirmed attacker output. | High only if the source label is verified | Licensed feed |
| User signal | An outgoing transaction the owner did not make. | High for compromise | Watch-only wallet |
What defenders can see that holders cannot
Population-level visibility is the advantage. A monitoring service can flag synchronised full-balance spends from long-dormant addresses, an unusual shared fee rate, absent change, and rapid convergence onto common outputs. An individual watching one wallet sees none of it until their turn.
Enterprises can build the same advantage internally without touching secrets: a local record of which assets were generated on which firmware answers the exposure question directly, and descriptor-based scanning finds affected balances from public receive information alone.
Exchanges and custodians should consume confirmed clusters through trusted channels, preserve deposit metadata and escalate under existing legal process — but not freeze a customer because an address resembles a fee template. Detection logic should be versioned, because transaction construction can change at any time.
An approximate mapping, offered as one
ATT&CK Enterprise models intrusions into enterprise technology. This was a key-recovery campaign that never entered a victim environment, so the mapping below is an approximate crosswalk for teams that report in ATT&CK terms — not a claim that the framework describes the incident. Stages the evidence does not support are left out entirely, which is why the table carries three techniques rather than a fuller-looking set. Every identifier and name was verified against the official MITRE ATT&CK Enterprise pages at the evidence cutoff; where a technique is defensible only as vocabulary, the limitation is stated in the row rather than resolved by upgrading the classification.
| Tactic | Technique | Application | Confidence |
|---|---|---|---|
| Resource Development | T1588.006 | Obtain Capabilities: Vulnerabilities. Acquisition of knowledge of the RNG weakness. Scope limit: ATT&CK defines this as acquiring vulnerability information from open or closed sources. If the operator discovered the defect independently, the technique does not strictly apply, and the route is unknown. | Moderate |
| Credential Access | T1110 | Brute Force. Offline enumeration of constrained generator states and candidate seeds. ATT&CK frames this technique around credential and account brute forcing; this incident involved key-space search instead. Offered as an approximate vocabulary mapping, not a direct behavioural match. | Moderate |
| Impact | T1657 | Financial Theft. Unauthorised transfer of BTC to attacker control. ATT&CK explicitly contemplates technical theft against cryptocurrency as an objective, making this the strongest mapping in the table. | High |
By audience
- Exposed holders
Follow the triage sequence in section 12, then the runbook in section 13. If the answer to any question is "I'm not sure," migrate.
- Enterprises and funds
Keep a key-origin inventory — model, firmware at generation, generation method, passphrase and derivation policy, quorum composition — and treat it as sensitive metadata. Search for exposure against public descriptors, never seed material.
- Manufacturers
Remove deterministic fallbacks from cryptographic APIs, feed a reviewed DRBG at full width, and document the entropy budget. Test the linked binary on production hardware, and treat a cryptographic library swap as a threat-model event, not a refactor.
- Wallet coordinators
Warn on firmware provenance without collecting it centrally, and build a migration flow that never asks for a mnemonic on a connected machine. Make previews distinguish a migration destination from an attacker's spend.
- Responders and exchanges
Work from a versioned indicator feed, record confidence and source for every cluster edge, and keep confirmed victim funds separate from suspected flows. Irreversibility makes speed matter; it does not make evidentiary discipline optional.
- Assurance and audit
Assess entropy systems against SP 800-90B principles and treat passing statistical tests as evidence of nothing. State the invariant — no seed unless the required assessed entropy has entered an approved construction — and verify it under every build flag and simulated hardware failure.
What would move our confidence
Publishing unknowns is only useful if you say what would resolve them. These four inputs would let BTIX Research upgrade its assessments in a future revision.
| Gap | What would close it | Effect if obtained |
|---|---|---|
| Complete victim address corpus | Machine-readable list from an investigator willing to publish, or aggregated victim confirmations | Independent reproduction of totals |
| Fourth-wave linkage | Victim confirmation; construction-level comparison against proven waves | Merge or exclude 638.5 BTC |
| Real enumeration cost | Reproduced search against known-affected test devices with published throughput | Bounds the exposed population accurately |
| Number of distinct operators | Construction-level clustering across all waves and footprints | Determines whether this is one campaign or many |
What the industry should take from this
An air gap describes a channel, not a guarantee
Offline signing closes the paths through which a host can request or observe a signature. It says nothing about whether the key was unpredictable when it was made. Assurance should break "air-gapped" into transport, parsing, display, signing, storage and generation, and test each separately.
Entropy provenance has to survive abstraction
Libraries hide unsafe states behind friendly names, and few are friendlier than
random. Every call that produces a secret should carry a documented chain from physical source through conditioning and DRBG state to the consumer, and the build should make a production fallback impossible. Entropy is also a budget: thirty-two bytes do not imply 256 bits, conditioning cannot expand the candidate space, and "mixed with secure-element entropy" means nothing until the full width and reseed semantics are shown.The linked binary is the product
This failure lived at the seam between build configuration, two libraries and a board wrapper, and every component passed its own tests. Release assurance should inspect link maps, run the shipped binary on production-equivalent hardware, inject hardware-RNG failure, and confirm key generation halts rather than degrades.
Recovery architecture must diversify failure domains
Multisig defends against one compromised key only when the others were generated independently; several units of one model, or models sharing entropy code, concentrate the risk they appear to spread. Diversify vendors, code lineages, ceremonies and locations, and rehearse rotation without assembling the seeds on one machine. The advisory that follows has to match: "update now" produces relief without safety unless it also says the old seed stays compromised and gives a test-first migration order.
The boundary that mattered was not connectivity
A hardware wallet can keep a secret perfectly and still produce a secret worth nothing. A configuration assumption, a permissive fallback and a narrow reseed together dismantled controls that were otherwise working exactly as designed.
The evidence for the mechanism is strong, and so is the chain evidence for large automated theft — more than 1,778 BTC confirmed at our cutoff, with the sweeps quiet since 6 August. What it does not yet support is address-level reproduction, actor identity, real cracking cost, or the inclusion of every suspected wave.
For manufacturers the correction is architectural: entropy needs end-to-end provenance, explicit failure, and verification in the binary that ships. For investigators it is methodological: separate seed provenance from chain behaviour, restrain clustering claims, publish confidence tiers. For everyone holding coins it is operational: keep generation records, diversify trust domains, and accept that no firmware update reaches backwards to fix a seed that was weak when it was written down.
Evidence matrix
What BTIX knows, assesses, and does not know — claim by claim.
| Claim | Rests on | Classification |
|---|---|---|
| Wrong RNG implementation was selected at build time | Published source-code analysis | Confirmed |
| Mk2/Mk3 affected firmware range | Vendor advisory | Confirmed |
| ~40 bits Mk2/Mk3, ~72 bits Mk4/Mk5/Q | Vendor assessment | Confirmed |
| Secure stream bounded at 2^32 for fixed state and history | Published technical model | Confirmed bound |
| 1,778+ BTC from 5,200+ addresses | Investigator update, 14 Aug | Very high confidence, external |
| 2,417 BTC including the candidate wave | Investigator update, 14 Aug | Unconfirmed — not merged |
| 1,531 BTC unmoved; ~246 BTC moved, 65% to CoinJoin | Investigator update, 14 Aug | External chain analysis |
| No confirmed activity after 6 August | Investigator update, 14 Aug | Confirmed absence, not a fix |
| Single actor or toolchain across early waves only | Transaction template similarity | Our assessment, moderate |
| Multiple independent parties across the campaign | Secondary reporting | External claim, uncorroborated by us |
| Exposure triage sequence and migration runbook | Derived from the mechanism and vendor exceptions | Our analysis |
| Actor identity, UID acquisition, real cracking cost | No sufficient public evidence | Unknown |
Source basis
This report draws on public firmware analysis, vendor advisories, on-chain investigator reporting, Bitcoin specifications, NIST guidance and the MITRE ATT&CK framework. BTIX Research provides the analytical reconstruction, confidence assessment, triage methodology and defensive recommendations.