COLDCARD RNG incident the public record, collected and explained
Informational only, and this site never asks for your seed words. details

Informational only. This is an open source collection of what others have published about the incident, together with an explanation of it. It is not financial, security or legal advice, and not a substitute for professional advice about your own situation. It is not affiliated with, endorsed by, or speaking for Coinkite. Material is attributed and quoted as published; where sources disagree their scenarios are kept separate with their assumptions rather than reconciled into one answer. Everything is meant to be checked against the linked evidence rather than taken on trust. Act on your own judgement about a particular situation. Editorial standards and corrections.

Do not disclose recovery material to a website, form, message or support account. This site never asks for it, and contributions containing recovery words or private keys are not accepted.

Plain language Updated 15 Aug 2026

Conditions that changed the published assessments

Dice input, passphrases and threshold policies act at different points in wallet construction. This page organises the published analyses and the changing public guidance about each one.

The published analyses put forward three distinct technical propositions. Pure dice used a different seed path, mixed dice added a separate input, a BIP39 passphrase added another search rather than repairing the mnemonic, and a threshold policy changed how many recovered keys were required. Public statements attached qualifications to every proposition, and some of that guidance changed during the incident.

Where each condition acts

Where each condition acts R1
Condition Where it acts Qualification
Pure diceinstead of device RNGThe pure path starts from the roll string and bypasses the affected generator. Its strength depends on enough fair, independent and secret rolls. A 12-word result caps usable entropy at 128 bits.
Mixed diceafter device RNG outputThe affected output is still a prefix. Unpredictable rolls add a separate search term.
BIP39 passphraseafter mnemonic generationAdds an offline search whose strength depends on the generation method and on whether the mnemonic is already known.
Threshold walletat authorisationAffected keys below threshold are insufficient by themselves. At or above threshold, script and public-key exposure determine whether keys can be tested independently.

Dice rolls

the two workflows, roll thresholds, and the screen that shows the answer
The two dice workflows Pure dice hashes only the roll symbols from an empty starting value, producing the word result without the device generator. Mixed dice hashes the device-generated seed prefix together with the roll symbols, producing an updated seed. PURE DICE: NEW SEED WORDS, ADVANCED, DICE ROLL empty starting value SHA-256 over roll symbols 12- or 24-word result MIXED DICE: ADD ROLLS ON THE WORD SCREEN device-generated seed prefix SHA-256 over prefix and roll symbols updated seed
Both workflows call the same function; they differ only in the prefix fed to it. Pure dice starts from an empty byte string, so the affected ngu.random output is absent, and the result can be reproduced offline from the roll string with an independently reviewed implementation.

Roll counts and output size

The published per-roll figure is about 2.585 bits for a fair six-sided die. The CKTRIPWIRE methodology page states that figure, and a Reddit explainer written after the incident multiplies it out: 50 rolls give 129.25 bits and 99 rolls give 255.915, so on that arithmetic 50 rolls fill the 128-bit entropy field of a 12-word mnemonic and 99 rolls come just short of a 24-word mnemonic's 256. What an unfair die costs is argued over in that same material and is not settled here: the explainer works a deliberately bad die through Shannon's formula, gets 2.575 bits a roll and about one bit lost over 99 rolls; a BitcoinTalk thread relays a claimed 1971 study of 219 commercial dice as bounding the loss at about one bit on a 24-word seed; and a Reddit poster describing years of casino work says retail casino dice are not guaranteed balanced, and that a casino machine-tests each die before it is allowed on a table. This archive has not tested any die. R2

The screen shows the answer while you roll Every roll threshold here assumes the rolls were never recorded or exposed, and the device itself is one of the ways that condition can fail. While rolls are being entered, COLDCARD redraws the running SHA-256 digest on each pass of the input loop as 64 hexadecimal characters across two lines. Because both dice paths finish by assigning that same digest as the seed, the last value displayed on that screen is the resulting seed entropy, in the mixed workflow as well as the pure one. A 24-word result encodes that digest in full; a 12-word result encodes its first half, which is the 128-bit ceiling of a 12-word mnemonic. V3 A photograph, a screen recording or a shoulder-surfer at the final roll therefore compromises the wallet even when no individual roll was ever written down. The roll string is itself secret seed material, so entering it into a website or a connected computer discloses the seed input. This is a handling hazard around the display, not a defect in dice mode: the construction is sound, and rolls kept private retain the entropy given above.

The vendor's dice exception

The Coinkite Mk3 advisory, under the heading "If You Added Dice When Creating the Seed" and in the capture held from 1 August 2026 marked as updated at 9:35 a.m. EDT, says that on affected firmware COLDCARD "hashed the device-generated seed together with every dice roll entered through Add Dice Rolls", that 50 to 98 independent private rolls contributed at least 128 bits and 99 or more approximately 256 bits, and that where at least 50 fair and independent rolls were entered and "the rolls were not recorded or exposed", it does not consider the seed at risk from this RNG issue alone. Two limits are attached: the exception applies to the final seed words shown after the dice were added, and anyone uncertain which words they used, how many rolls they entered or whether the rolls were private is told to migrate. R4

The 50-roll and 99-roll figures in public guidance

The 50-roll figure reached the public before the vendor published it. Antoine Poinsot and Praveen Perera both gave that threshold on 31 July 2026, Perera while recommending migration after an independent recovery attempt. R5 The advisory's added-dice guidance, and the 50-roll threshold with it, is absent from the earliest held state, timestamped 01:56 UTC on 31 July and recovered from the Internet Archive, and present in every held state from 07:30 UTC onward. A dice-only section was already there at 01:56; what arrives later is the guidance for owners who added dice to a device-generated seed. V6 Those posts are retained as the earlier signal in time, not as the basis for the rule.

James O'Beirne recommended migration for coins spendable by one affected COLDCARD key, or by an affected-key quorum, when the device had been initialised with fewer than 99 dice rolls, adding that a strong passphrase could mitigate the risk while warning that most users cannot reliably judge passphrase strength. R7 That is stricter than the public 50-roll exception, and it does not distinguish pure-dice generation from dice mixed into a device-generated seed.

A live CKTRIPWIRE experiment adds observations, not a threshold. It funds decoy wallets carrying the same defect, some of them hardened with extra dice rolls or a passphrase, and records which are swept and how fast. At this archive's first capture, its control honeypot was reported swept after 1 hour 18 minutes while seven cases spanning stepped added-entropy bands were still live. By the state captured on 6 August 2026 the board reported 17 honeypots, 15 live and 2 swept. A sixth low-dice case, rated at 5 added bits, was funded on 6 August and moved from pending to live. Both swept entries carried no added entropy: the operator's own control, and a community-submitted wallet the board records as swept in 2 minutes. By the state captured on 8 August 2026 the board reported 19 honeypots, 14 live and 5 swept. Two low-dice honeypots, HP-2C6F and HP-10ED, had been swept. A newly funded low-dice honeypot, HP-696E, was live. By the state captured on 12 August 2026 at 03:08 UTC the board reported 19 honeypots, 12 live and 7 swept; HP-2C6F and HP-10ED remained swept, HP-696E remained live, and two new trivial sweeps, HP-88A9 and HP-D85A, were recorded. By the later state captured at 05:07 UTC on the same day the board reported 11 live and 8 swept, and the community-submitted three-word passphrase case was recorded as swept after about six days and seven hours. By the state captured at 12:55 UTC on 12 August 2026 the board reported 10 live and 9 swept, and the internal low-passphrase case HP-9C4F was recorded as swept after about seven days and sixteen hours. By the state captured on 13 August 2026 at 01:24 UTC the board reported 9 live and 10 swept, and a second internal low-passphrase case, HP-E786, was recorded as swept after about eight days and four hours. The community-submitted one-word and two-word passphrase cases were recorded as swept after about six days. R8 On 6 August the operator also revised the board's estimated GPU crack times sharply downward, 5 added bits moving from about 2 days to about 66 minutes and 13 bits from about 476 days to about 10 days, without any honeypot changing state. R9 The board attaches its own caution to the live rows: the attack began well before the honeypots existed, so a case that is still live should be read as not taken yet and nothing more. A control outcome and a set of unswept cases cannot establish a safe number of added bits or a general time-to-sweep distribution.

A held source argues the opposite conclusion from the chain rather than from honeypots. On 7 August 2026, in the BitcoinTalk compromise thread, kTimesG wrote that the attack was already over by 2 August, that about 2,050 compromised accounts were detected as having held a balance on 30 July, and that dice wallets "do exist, and are also gone". The post gives no roll counts for those wallets and no method for identifying them as dice-generated, and its account figure is that poster's own detection count, not a chain monitor's published total. It stands against the vendor's dice exception above and against the unswept dice cases on the CKTRIPWIRE board. This archive holds all three and does not resolve between them. R10

A second challenge reaches the record through a journalist rather than a forum. On 6 August 2026 Laura Shin relayed the security researcher Taylor Monahan's claim that the dice rolling being recommended to COLDCARD owners "is the same thing that got the earliest hack victims drained", and that the device warns the user but does not stop them. It is a claim about the workflow rather than about the arithmetic, and one held source is consistent with it: ChuckSRQ's catalogue of pre-July drain reports describes an owner swept after selecting the device's automated dice rolls, and another who later said they had entered a single roll. A single roll is about 2.6 bits. The relay itself carries no roll counts, no victim set and no identification method, and Monahan's own words are not held here. It stands beside the vendor's 50-roll carve-out, not on top of it. R11

Conditions attached to the dice conclusion The calculation assumes a fair die, independent rolls, an accurately entered sequence and no disclosure of that sequence. Fewer rolls can still add useful uncertainty: the defensible bound is the smaller of the roll entropy and the output's entropy size, rather than a binary safe or unsafe label. Dice do not protect a seed whose roll sequence was photographed, backed up online, generated predictably or read off the running-digest screen.

BIP39 passphrases

what a passphrase buys, and only for uniformly generated ones

Coinkite recommends a strong BIP39 passphrase as a temporary mitigation for an affected mnemonic. It does not alter the mnemonic or repair the generator; it changes the wallet produced by BIP39's key-stretching step.

What the vendor revised on 1 August The advisory's passphrase section was rewritten on 1 August 2026 and moves in two directions at once: reduced seed entropy alone is not enough to reach the funds a passphrase wallet controls, because the attacker must also discover the passphrase, but passphrase users should still migrate as soon as practical, and anyone whose passphrase is short, common, patterned, quoted, reused or of uncertain strength should treat the funds as at risk and migrate immediately. Both states are held in the advisory record.

A community summary moved the same way, five days later. On the Stacker News thread that carried the first drain report, Murch has maintained a running situation summary; the version posted on 5 August 2026 and held in this archive from the capture of 6 August narrows what he had written on 31 July. Where the earlier summary said that wallets pairing device entropy with a strong passphrase "should not be exposed", the later one says such wallets are "only as secure as the passphrase", and attaches a figure to weak: fewer than 25 random characters, or fewer than seven BIP39 words, with funds at risk where no external entropy of at least fifty dice throws was added. Both versions are held. R12

The held guidance still stops short of a single stated passphrase threshold, and where numbers appear they do not say how the words or characters were chosen. Praveen Perera recommended more than seven BIP39 words as a passphrase while still advising migration, but did not state how those words were selected. R13 (For scale, eight words drawn independently and uniformly from the 2,048-word BIP39 list would give 2^88 possible phrases; human selection does not inherit that ideal, and the time needed to test a candidate also depends on PBKDF2 throughput, wallet derivation work and whether the mnemonic has already been isolated.)

Where the passphrase enters key derivation The BIP39 mnemonic feeds PBKDF2 twice: with an empty passphrase giving the base wallet, and with a chosen passphrase giving a different wallet. The passphrase wallet and a known target address or xpub feed an offline candidate comparison. The device PIN protects device access only and does not enter derivation. BIP39 mnemonic PBKDF2 with empty passphrase base wallet PBKDF2 with chosen passphrase different wallet offline candidate comparison known target address or xpub device PIN access control only protects device access, not key derivation
The optional BIP39 passphrase is part of key derivation. The device PIN is a separate access-control mechanism and does not enter BIP39 derivation.

One live experiment tests this condition directly, and what it has produced so far is a set of non-events. On 5 August 2026 Cole (@ColeTU) funded five outputs from a single COLDCARD Mk3 seed generated on affected firmware: the seed phrase alone, the same seed with one-, two- and three-word passphrases, and the same seed on a different account number. The following day the poster reported that 14 hours on, only the seed-phrase-only wallet had been swept. The same five wallets appear on the CKTRIPWIRE board as community-submitted watch-only rows, where the unprotected one is recorded as swept in 2 minutes and the other four as still live in the state captured on 6 August 2026; a BitcoinTalk poster relaying the experiment reads that as showing the attackers search default accounts only. R14 A wallet that has not been swept records only that nobody has taken it yet. It puts no floor under a one-word passphrase, and published figures of that kind hold only for phrases selected uniformly.

The same BitcoinTalk thread, in the capture held from 9 August 2026, includes posts relaying reports that attackers were also trying passphrase-protected wallets. One post quotes a reported first confirmed loss of a Mk3 wallet with a two-word passphrase, and another summarises that attackers had moved from low-entropy seeds to brute-forcing low-entropy passphrases as well. R15 Those reports refer to short passphrases, and the CKTRIPWIRE board described above still records no internal passphrase-hardened case as swept in any state held here.

Multisig and miniscript

threshold first, then whether the script or descriptor is exposed

Affected keys do not automatically defeat a threshold wallet: an attacker must recover enough signing keys to satisfy a spending path, so the count that matters is affected keys on that path against its threshold. Below the threshold, those keys alone cannot sign. At or above it, the wallet may be spendable once enough individual keys are recovered. Other key compromises and alternate miniscript paths must be assessed separately. LLFOURN published an explicit correction to earlier guidance on 31 July: Mk4, Mk5 and Q setups in which affected COLDCARDs meet the signing threshold, without another mitigating factor such as dice rolls, need to move. R16 The assumptions behind its urgency are set out in the entropy maths.

Why public-key exposure changes the search

A native SegWit P2WSH output commits to the complete witness script. Before that script or an equivalent descriptor is known, a candidate key cannot normally be checked in isolation against the address: under an independence assumption an attacker must find the complete set of public keys needed to reproduce the script commitment, so candidate spaces multiply. A spend reveals the witness script and all child public keys used in it. A leaked affected signer's child public key or xpub can expose a target for testing that signer before any spend, without necessarily disclosing the complete script. Once the relevant affected key targets are known, those keys can be tested separately and the work needed for a threshold number adds rather than multiplies.

Zach's captured post includes a slide headed "An Unchained vault with 2 Coldcard-generated keys: Group A". The slide says that an attacker with two compromised private keys still needs all three public keys associated with an address, and that the wallet configuration file contains those keys. R17 That can describe a previously unspent P2WSH output when the attacker lacks the third public key and the construction data needed to reproduce its script commitment. It is not a general rule: an exposed descriptor, script or individual affected-key target changes the search, and only a threshold number of private keys is needed to sign once the target and script are known. The archive has not independently authenticated the slide's authorship, webinar context or the complete presentation.

Address reuse is not script publication Receiving more than once to a P2WSH address does not by itself reveal the witness script. A previous spend or disclosure of the complete descriptor or script removes the construction barrier. An exposed individual co-signer xpub can remove the target-hiding benefit for that signer without revealing the other keys or the complete script.

Block's held report sets out conditional low-search scenarios for threshold arrangements; the candidate-space arithmetic those scenarios produce is worked through on the entropy page. R18 Coinkite's upper scenarios and LLFOURN's published model attach much larger values under different assumptions. Device model, timing knowledge, descriptor custody, derivation paths and possible correlation all affect the result, so no time-to-recovery follows from a threshold alone.

Descriptor and correlation assumptions

  • Descriptor custody matters. Coordinators and backups commonly store what is needed to reconstruct a multisig wallet; whether an attacker can obtain it is an operational question, not an on-chain fact.
  • Per-device independence is an assumption. The Mk4-class boot path derives a reseed value from each device's secure elements, but the source does not prove statistical independence across devices, and Mk2/Mk3 UID and timing inputs may be correlated for devices initialised under similar conditions.
  • Miniscript exposure is path-specific. Recovering enough keys for a primary path may or may not satisfy timelocked or recovery paths. The policy, not the product label, determines the threshold.

Kevin Loaec and Rob Hamilton published the threshold and migration-risk positions summarised here. R19

Reported guidance and questions on particular multisig setups

ts_hodl published guidance on 2 August for multisigs whose keys are two COLDCARDs: at rest they are safe if the wallet configuration file is also secure, but in the mempool they are vulnerable to replace-by-fee sniping, so keys should be rotated by submitting the transaction directly to a miner via Slipstream rather than through public relay. R20 The at-rest half of that statement is the hidden-script condition described above, stated as one author's conclusion; the Slipstream half shares the mechanism, and the disclosed provenance, set out on the published migration guidance record.

Collaborative custody puts one key of a threshold in a provider's hands, and one captured post asks what this incident means for that key. A community post of 3 August noted Nunchuk's disclosure that the platform key in its 2-of-4 collaborative custody was generated with a COLDCARD Mk4 using a custom derivation path, and asked whether sweeps of such setups were beginning. R21 That is a question, not a confirmation of any loss: by the threshold logic above, one affected key in a 2-of-4 cannot sign on its own, and no drain of such a setup is recorded in the sources held here.

For a wallet whose security depends on an unpublished script, the first public spend removes that protection before confirmation. That does not mean the funds are lost; it opens a period in which public keys are available and any viable weak-key search can run against them. The submission routes and their limits are in the published migration guidance record.

Evidence on this page 21 items
  1. R1
    Reported

    The feature-level risk classifications in the table above

    Source Summarised from the published analyses cited in the sections below, including the Coinkite Mk3 advisory, Block's engineering report and the captured community guidance

  2. R2
    Reported

    The per-roll figure, the 50-roll and 99-roll totals, and the dice-bias figures attributed above to the CKTRIPWIRE methodology page, the Reddit dice explainer, the BitcoinTalk dice thread and the Reddit casino account

    Source CKTRIPWIRE methodology, captured 5 Aug 2026; AdEuphoric5133 on r/Bitcoin, captured 7 Aug 2026; babo and replies on BitcoinTalk, captured 7 Aug 2026; cheesymod on r/Bitcoin, captured 7 Aug 2026. The 1971 study is relayed at second hand in that thread and is not held here

  3. V3
    Verified

    The running-digest display during roll entry, and its equality with the resulting seed in both the pure and mixed workflows

    Source coldcard-firmware shared/seed.py add_dice_rolls (running digest passed to the screen updater on each loop, full digest assigned back as the seed) with the two-line hex rendering in shared/ux_mk4.py and shared/ux_q1.py, at commit 9a88e1a5c32c69ba7ace7f22c26da90f8442b745 and at the v4.0.0 release commit, checked 2 Aug 2026. Deliberate exception to this site's tightened focus on published analysis: this verified claim is retained because the handling hazard it describes is safety-relevant

  4. R4
    Reported

    Coinkite's dice exception: the mixed-dice hashing description, the 50-to-98 and 99-plus bit figures, the not-recorded-or-exposed condition and the final-words limit

    Source Coinkite Mk3 Security Advisory, section added on 31 July 2026 and present in the capture held from 1 August 2026

  5. R5
    Reported

    Poinsot's and Perera's 50-roll guidance on 31 July 2026, quoted here for chronology rather than as the source of the threshold

    Source Antoine Poinsot and Praveen Perera, 31 Jul 2026

  6. V6
    Verified

    That the advisory's added-dice guidance and its 50-roll threshold are absent from the 01:56 UTC state of 31 July 2026 and present from the 07:30 UTC state onward, while a dice-only section is present in both

    Source Held states of the Coinkite Mk3 advisory; both 31 July states were recovered from the Internet Archive and carry wayback provenance

  7. R7
    Reported · contested

    O'Beirne's 99-roll migration recommendation for the affected-key cases described above, and his passphrase qualification

    Source James O'Beirne, captured primary X post, 31 Jul 2026

  8. R8
    Reported

    The CKTRIPWIRE honeypot counts, band composition and sweep outcomes described above, from the first held capture through the state captured 13 Aug 2026

    Source CKTRIPWIRE live monitor, held captures of 5, 6, 8, 12 and 13 Aug 2026; the experiment is ongoing, the source's elapsed-age fields are normalised for revision tracking, and it re-randomised its anonymised handles on 6 August so rows cannot be followed between captures

  9. R9
    Reported

    That CKTRIPWIRE revised its estimated GPU crack times downward on 6 Aug 2026 by the amounts given, with no change to any honeypot's live or swept state

    Source CKTRIPWIRE live monitor, held captures of 5 and 6 Aug 2026 and the diff between them; the estimates are the operator's and their model is not published on the page

  10. R10
    Reported · contested

    kTimesG's claims that the attack ended by 2 August, that about 2,050 compromised accounts were detected, and that dice-generated wallets were also swept

    Source kTimesG, BitcoinTalk large-scale compromise thread, posted 7 Aug 2026 and captured the same day; unverified here, and disputed by the vendor's dice exception and by CKTRIPWIRE's unswept dice honeypots

  11. R11
    Reported · contested

    Taylor Monahan's claim, as relayed by Laura Shin, that the dice rolling recommended to owners is what drained the earliest victims

    Source Laura Shin, captured X post of 6 Aug 2026, relaying Taylor Monahan; the underlying statement and the linked article are not held here

  12. R12
    Reported

    Murch's 31 July and 5 August situation summaries as characterised and quoted above, including the 25-character and seven-word figures

    Source Murch, Stacker News first-drain thread; the 31 July summary and the 5 August revision are both present in the capture held from 6 Aug 2026

  13. R13
    Reported

    Perera's incident-response passphrase recommendation, with its unstated generation assumptions

    Source Praveen Perera, independent recovery report, 31 Jul 2026

  14. R14
    Reported

    The five-wallet experiment described above, its reported outcome after 14 hours, and the corresponding CKTRIPWIRE rows

    Source Cole (@ColeTU), captured X posts of 5 and 6 Aug 2026; CKTRIPWIRE live monitor, captured 6 Aug 2026; relayed with the default-account reading by a poster in the BitcoinTalk compromise thread, whose interpretation is their own

  15. R15
    Reported

    Reports in the BitcoinTalk large-scale compromise thread, captured 9 Aug 2026, that passphrase-protected wallets were being drained, including a quoted report of a two-word passphrase loss and a summary that attackers were moving to low-entropy passphrase brute-forcing

    Source BitcoinTalk large-scale compromise thread, captured 9 Aug 2026, relaying posts that quote @BTCsessions

  16. R16
    Reported

    The corrected multisig guidance and urgency attributed to LLFOURN above

    Source LLFOURN's corrected multisig guidance, published 31 Jul 2026

  17. R17
    Reported

    The wording visible in the multisig slide attached to Zach's post and Zach's description of its webinar context

    Source Zach (@alwaysaimbig), captured X post and attached slide; the complete webinar is not held and the slide's authorship and context have not been independently authenticated

  18. R18
    Reported

    That Block's published report presents conditional low-search scenarios for threshold wallets

    Source Block engineering report, held in this archive

  19. R19
    Reported

    The threshold and migration-risk positions attributed to Kevin Loaec and Rob Hamilton above

    Source Kevin Loaec and Rob Hamilton described threshold and migration risks; this page narrows those statements to the wallet structures above

  20. R20
    Reported

    ts_hodl's statement that two-COLDCARD multisigs are safe at rest with a secure wallet configuration but vulnerable to RBF sniping in the mempool, and the direct-to-miner rotation recommendation

    Source ts_hodl, captured X post, 2 Aug 2026; the Slipstream provenance disclosures on the published migration guidance record apply to this recommendation too

  21. R21
    Reported

    The report that Nunchuk disclosed its 2-of-4 platform key was generated with a COLDCARD Mk4 on a custom derivation path, and the accompanying question about sweeps

    Source _colourorange, captured X post, 3 Aug 2026; a community question, and no drain of such a setup is recorded in the sources held here