Attack-cost estimates
The published estimates describe different attacker-knowledge assumptions. None is a measured entropy value for an individual device.
Nobody has measured how much entropy an affected COLDCARD seed actually
had. What exists are published models of how many candidate seeds an
attacker would have to enumerate, and they run from a single candidate to
roughly 2^88 depending on what that attacker is assumed to
already know about the device. The narrow figures assume the chip's unique
ID, the call history and the relevant timing state are known or tightly
constrained; the broad ones are enumeration ceilings that treat correlated
timer fields as independent. Mk2 and Mk3 sit far below Mk4, Mk5 and Q,
because only the later devices mix a secure-element value into one of the
two generators. Every figure below is a scenario attached to its
assumptions, not a bound on any particular wallet.
Block, Coinkite, LLFOURN and otaliptus describe the search space using different assumptions about what an attacker knows.
"This analysis is based on our current understanding of the situation. We have not done full empirical testing to confirm exploitability."Block Engineering, disclosure summary
| Source | Mk2 / Mk3 | Mk4 / Mk5 / Q | Assumptions represented |
|---|---|---|---|
| Block | 2^0 with timers known;~2^16.3 with stable RTC;2^32 ceiling with the UID-XOR-SysTick word unknown;<2^40.7 loose ceiling | ≤2^32 with known fallback state;<2^73.3 loose ceiling | For Mk4-class devices, these figures assume a successful reseed. Block's narrow cases assume the UID, call history and relevant timing state are known or constrained. The 2^32 Mk2/Mk3 figure is the ceiling Block gives when the effective 32-bit UID-XOR-SysTick value is entirely unknown; Block adds that unknown call history multiplies these counts further. Its broader figures deliberately treat correlated timer fields independently. |
| Block, conditional no-reseed path | not applicable | 2^0 with fallback state known;<2^41.3 loose ceiling | A catchable early-initialisation error could leave libngu at its public initial state. Block says ordinary secure-element failures appear to halt instead, so this source path remains conditional pending hardware validation. |
| Coinkite | Mk3: ~2^40Mk2: not separately stated | ~2^72 | Upper scenarios that retain uncertainty from the MCU identifier and timing inputs. These are estimates, not measurements across a device population. |
| LLFOURN | Mk3: ~2^40.3Mk2: not separately stated | ~2^72.3 | A stated Mk3 model of about 2^20 possible MCU identifiers, 80,000 timing states and 16 button-press variants, plus the 32-bit reseed term on Mk4-class devices. The source does not decompose the 16 variants further. |
| LLFOURN follow-up | not separately quantified | ~2^58.3 to ~2^62.3 | LLFOURN later said the Mk4-class space was probably around 10 to 14 bits smaller than the original 2^72.3 estimate, and that it could be smaller still depending on the clock behaviour. The subtraction shown here is derived from that statement, and its lower end is not a floor the source claims. |
| LLFOURN, known-UID scenario | not stated | 2^32 | In a later reply, LLFOURN said a pessimistic view in which the UID is known and button presses and clock behaviour are more predictable leaves 32 bits of work per Mk4 theft. This converges on Block's lower scenario through an explicit attacker-knowledge assumption. |
| otaliptus, tentative model | not stated | ~2^52 to ~2^63 if RTC is problematic; ~2^77 to ~2^88 otherwise, or ~2^75 on the author's most pessimistic aside | Assumes a remote attacker does not know the UID, estimates 20 to 21 bits from the wafer-coordinate word, narrows practical SysTick positions, and treats the Mk4 RTC contribution as unresolved. The author explicitly labels the post brainstorming and lists details that may be wrong. |
| ineedanamegenerator, 7 August | Mk3 seeding word: ~2^23 | not stated | A bound on one term rather than a full candidate space: it narrows the same 32-bit UID-XOR-SysTick word Block bounds at 2^32. The argument is that SysTick's roughly 16.3 bits sit in the low 17 bits, so the UID's low half adds nothing under the XOR, and that the upper wafer-coordinate half carries about 7.2 bits given a stated ceiling of 20,000 chips per wafer. The wafer ceiling is the author's own assumption, and the post corrects itself mid-way to withdraw an earlier BCD-encoding argument. |
Where a source states a Mk3 figure and says nothing separately about Mk2, carrying that figure across to Mk2 would be a further derivation from their shared code path.
The MCU identifier term
one 32-bit word of the STM32L4 UID, and what its field layout does not establish
The affected MicroPython fallback reads one 32-bit word from the STM32L4's 96-bit unique-identifier area. It combines that word with the SysTick counter, and seeds two other state words from the real-time clock and its subsecond register.
Whether the first word's field layout narrows the practical range across
shipped COLDCARD devices is unresolved in this record. This project holds
no population sample of device UIDs as of a 14 August 2026 recheck, so
LLFOURN's 2^20 assumption
remains unchecked here. U2
Two sources published since narrow the term without supplying that sample.
The CKTRIPWIRE methodology page
describes an instrumented firmware build flashed to one sacrificial Mk3
and a boot battery that captured the device's actual seeding registers.
The operator reports that it found the UID word packed with die
coordinates rather than uniform across 32 bits, SysTick confined to a
narrow early-boot range, and the Mk3 real-time-clock registers reading
zero because that clock is disabled and has no backup battery. That is a
single device described by the experiment's own operator: it speaks to the
field's shape, not to its distribution across shipped devices. R3
Separately, on 7 August
ineedanamegenerator put the whole Mk3 seeding word at about 23 bits
rather than 32, by the reasoning set out in the table above. That is one
poster's derivation from a stated wafer-size assumption, not a measurement,
and it is narrower than the 2^32 ceiling Block gives for the
same word. R4
The unresolved RTC term
whether the real-time clock contributes useful variation on Mk4-class devices
otaliptus isolates a second uncertainty that the headline bit counts can hide: whether the real-time clock contributes useful variation on Mk4-class devices. The post models roughly 24 additional bits if it does, and no such contribution in the pessimistic case, then broadens both results to reflect uncertainty in the other inputs. It does not report that Mk4 RTC behaviour is broken. The author says that question is unanswered, and this archive has no runtime measurements that resolve it. R5
Illustrative half-space times
The following table applies time = 2^(bits - 1) / rate. Calling
half the space an average assumes that the target is uniformly positioned in
the enumerated order and that the attacker has no better prioritisation. The
device-state distributions have not been measured, so this is a sensitivity
model, not an empirical average or a forecast of attacker capability. A day
is 86,400 seconds and a year is 365.25 days in the displayed conversions.
| Scenario | Candidates | 4,000/s | 2 million/s | 16 million/s | 1 billion/s |
|---|---|---|---|---|---|
| Mk2/Mk3, Block stable-RTC scenario | 2^16.3 | 10 seconds | 0.02 seconds | 0.003 seconds | 0.00004 seconds |
| Mk3, approximately 40-bit scenario | 2^40 | 4.4 years | 3.2 days | 9.5 hours | 9.2 minutes |
| Mk4-class, Block successful-reseed scenario with known fallback state | 2^32 | 6.2 days | 17.9 minutes | 2.2 minutes | 2.1 seconds |
| LLFOURN follow-up range | 2^58.3 to 2^62.3 | 1.4 to 22.5 million years | 2,800 to 45,000 years | 351 to 5,600 years | 5.6 to 90 years |
| Approximately 72-bit scenario | 2^72 | 18.7 billion years | 37.4 million years | 4.7 million years | 74,800 years |
Published rate and cost figures sit beside that model, none of them
reproduced here. The
Bitcoin Dev Project's explainer thread
put a 2^40 Mk3 search at 20 to 45 minutes on rented specialised
GPUs, for under a dollar of compute. R7
CKTRIPWIRE, which funds deliberately weak honeypot wallets and watches which
ones are swept, published an estimated GPU crack time of about 88 minutes
for its zero-added-entropy control band, then on 6 August revised its
estimates sharply downward across every band, the control to about two
minutes. R8
Between those two states, kTimesG posted in the BitcoinTalk compromise
thread that the control's seed was one of 16,777,216 candidates and had been
found in 4.2 seconds on an RTX 4090 rather than 88 minutes, that the site's
estimate was about 352 times too high, and that the control's inputs could
not arise on a real device, so its outcome says nothing about how real
compromised seeds were computed. Neither the 4.2-second run nor the 352-fold
factor is reconciled here against the site's figures, and CKTRIPWIRE's
published method states that its reproduction was checked word-for-word
against a real Mk3. R9
LLFOURN separately reported that attackers appeared to be acquiring
additional compute capacity for this kind of offline candidate search;
that activity is not verified here. R10
In the same exchange Greg Maxwell asked participants not to publish reductions of the COLDCARD search space while vulnerable funds remained unswept, and kTimesG replied that the point was only that the honeypot did not reflect real conditions. R11
Interactive source comparison
Published model explorer
Select one published candidate-space scenario and vary only the candidate-check rate. This does not accept wallet details, dice rolls or passphrase constructions.
Choose a model to compare its published boundary.
The rate is a sensitivity input, not a benchmark. A complete candidate check includes enough derivation work to compare against the available wallet data. The selected sources use different attacker-knowledge assumptions, so their outputs are not measurements of one shared population.
What the held record established by model
On 2 August, Rob Hamilton asked whether any compromise of a Mk4, Mk5 or Q wallet had been confirmed, noted that multiple earlier claims had been retracted, and asked how much collective effort was being applied to the larger Mk4-class search space. R12 As of a 15 August 2026 recheck, no captured source in this archive demonstrates a Mk4, Mk5 or Q wallet drained in this incident's July 2026 waves. That is a dated archive limit, not a finding that those models were safe, and the published candidate-space estimates above remain in disagreement. U13 One held source reports an earlier case outside those waves. ChuckSRQ's 4 August catalogue of pre-July drain reports lists a July 2023 theft of 3.73118785 BTC from an Mk4 whose owner described a device-generated seed, with the theft and amount cited to a transaction. The author calls it the best public candidate for the firmware defect while stating that its exact cause is not proven and its firmware version is unknown. R14
Reported collision arithmetic
A targeted search for one wallet is not the only consequence of a small candidate space. When many devices draw seeds from the same small set of possibilities, two of them can independently produce the same wallet, with neither owner ever attacked. Three posts held here put figures on that, and each figure carries its author's own assumptions.
- JStefanop1 reported a demonstration program under the 40-bit effective-state model: a duplicate wallet on average every roughly 1.3 million seed generations, and a collision found in 4.7 seconds on an M1 Max at roughly 268,000 evaluated states per second. R15
- skot9000 stated birthday arithmetic at 32 bits of effective entropy: about 77,000 generated seeds give a 50% chance that two of them are identical, and 200,000 give about 99%.
- mitchellaskew stated the same kind of arithmetic
with a different threshold: about 93,000 seeds for a 50% chance of a
duplicate wallet, contrasted with the
2^256space of a properly generated 24-word seed.
The two 50% thresholds differ. Each is reproduced here as its author stated it; the difference reflects the authors' own modelling choices, and this archive has not recomputed either figure or verified the reported program run. R16
Evidence on this page 16 items
- R1 Reported · contested
The candidate-space estimates and attribution in the comparison table above
Source Published models from Block, Coinkite, LLFOURN, otaliptus and a 7 Aug community derivation; the 58.3 to 62.3-bit row is arithmetic on LLFOURN's follow-up
Evidence → captured
- U2 Unverified · contested
The practical distribution of the 32-bit UID word across shipped COLDCARD devices
Source The practical distribution across COLDCARD devices had not been measured here as of a 14 August 2026 recheck
Evidence → captured
- R3 Reported · contested
The single-Mk3 instrumented boot-battery observations about UID packing, the SysTick range and zero Mk3 RTC registers
Source CKTRIPWIRE methodology page, captured 5 Aug 2026; the operator's own account of one sacrificial device, not reproduced here
Evidence → captured
- R4 Reported · contested
The roughly 23-bit bound on the Mk3 UID-XOR-SysTick seeding word and the 7.2-bit wafer-coordinate estimate behind it
Source ineedanamegenerator, captured Reddit thread of 7 Aug 2026; the poster's own derivation, not recomputed here, and narrower than Block's 2^32 ceiling for the same word
Evidence → captured
- R5 Reported · contested
The tentative RTC and timing scenarios described immediately above
Source otaliptus, tentative public analysis on 1 Aug 2026; explicitly presented as brainstorming
Evidence → captured
- D6 Derived · contested
The illustrative half-space times in the table above, under the stated uniform-position assumption
Source Time is 2^(bits - 1) divided by the displayed rate; the source models do not benchmark those rates
Evidence → captured
- R7 Reported · contested
The 20-to-45-minute, under-a-dollar rented-GPU figure for a 2^40 Mk3 search
Source Bitcoin Dev Project, captured X thread, 3 Aug 2026; a simplified public explainer, with no benchmark or hardware detail published
Evidence → captured
- R8 Reported · contested
CKTRIPWIRE's published estimated GPU crack time for the zero-added-entropy control band before and after its 6 August revision
Source CKTRIPWIRE live monitor, captures of 6 Aug 2026 either side of the revision; the operator publishes no benchmark behind the estimates
Evidence → captured
- R9 Reported · contested
kTimesG's 16,777,216-candidate and 4.2-second RTX 4090 figures, the claimed 352-fold overstatement, and the dispute over whether the control honeypot's inputs are reachable on a real device
Source kTimesG, captured BitcoinTalk thread, 6 Aug 2026, against CKTRIPWIRE's own published estimates and methodology; neither side's work is reproduced here
Evidence → captured
- R10 Reported · contested
Reports that attackers were acquiring additional compute capacity
Source LLFOURN reported that attackers were acquiring compute; this project has not independently verified that activity
Evidence → captured
- R11 Reported · contested
Maxwell's 6 August request not to publish search-space reductions, and kTimesG's reply
Source Greg Maxwell and kTimesG, captured BitcoinTalk thread, 6 Aug 2026
Evidence → captured
- R12 Reported · contested
Hamilton's 2 August question about confirmed Mk4, Mk5 or Q compromises, retracted claims and collective search effort
Source Rob Hamilton, captured X post, 2 Aug 2026
Evidence → captured
- U13 Unverified · contested
Whether any Mk4, Mk5 or Q wallet lost funds in this incident's July 2026 waves, as of a 15 August 2026 recheck
Source No captured source demonstrates a Mk4-class drain in those waves; absence from this bounded archive is not evidence of safety
Evidence → captured
- R14 Reported · contested
The July 2023 Mk4 theft of 3.73118785 BTC catalogued by ChuckSRQ, and the author's own statement that its cause is unproven
Source ChuckSRQ, captured X post of 4 Aug 2026; the theft and amount are cited to a transaction, the attribution to this defect is established neither there nor here
Evidence → captured
- R15 Reported · contested
The roughly 1.3-million-generation average duplicate rate and the 4.7-second, roughly 268,000-states-per-second collision run under the 40-bit model
Source JStefanop1, captured X post of 1 Aug 2026, with an attached screenshot of the reported duplicate-seed run; not reproduced by this archive
Evidence → captured
- R16 Reported · contested
The 77,000-seed and 93,000-seed 50% collision thresholds and the 200,000-seed 99% figure attributed above, which state different 50% thresholds
Source skot9000 and mitchellaskew, separately captured X posts of 2 Aug 2026; each figure is shown as its author stated it and neither has been recomputed here
Evidence → captured