Reproducible firmware and chain investigation
alvap-weak-rng-research
https://raw.githubusercontent.com/alva-p/coldcard-weak-rng-research/main/README.md
- Organisation
- Álvaro P.
- Evidence role
- Independent primary analysis
- Published
- 2026-07-31
- Source changes
- 0
- Detected differences
- 0
- Unreviewed
- 0
- Copies held
- 1
Independent re-derivation of fix commits, on-chain movements and vulnerable versus patched firmware symbols. Its README excludes real-seed recovery and labels unfinished work explicitly; deeper repository files include public transaction identifiers and are not mirrored by this archive.
Every check is recorded, including checks that found no text change. A detected edit is therefore bounded between two checks. The publisher's exact save time is not observable from this record. Last checked 2 Aug 2026, 00:59 UTC.
Snapshot and diff bodies for this chain monitor are held in the local evidence archive but withheld from the public site because they can contain victim addresses. Integrity hashes, capture times and reviewed change summaries remain available below.
-
Recovered from the Internet Archive rather than captured by this project. The row records that third-party provenance separately from captures made by this project.
What changed from the previous capture 0 lines
Extracted text as captured
# coldcard-weak-rng-research Independent, defensive investigation into the COLDCARD firmware entropy failure disclosed 2026-07-30/31 and the ~594.5 BTC coordinated sweep observed the same day. Everything here is verifiable: real commits, real blockchain data, real compiled binaries. **[📄 Read the report (English)](docs/en/report.md)** · **[📄 Leé el informe (Español)](docs/es/report.md)** ## What this is On July 30, 2026, roughly 594.5 BTC was drained from 500 Bitcoin addresses in about fifteen minutes. The victims used COLDCARD hardware wallets, and the root cause was a firmware bug that made supposedly random wallet secrets predictable. Coinkite (the manufacturer) and Block published official advisories. This repository does not just summarize those advisories, it independently re-derives the parts that can be re-derived: the fix commits, the on-chain flow of the stolen funds, and the bug itself, compiled and proven with real tooling. ## Three things you can check yourself 1. **The code.** [`evidence/commits/findings.md`](evidence/commits/findings.md) verifies the fix commits directly against the Coldcard firmware repository, including one the official advisory doesn't mention. 2. **The money.** [`evidence/onchain/`](evidence/onchain) traces the theft on-chain from scratch, starting only from the public consolidation address, not from any published transaction list. Result: 500 transactions, 1,324 UTXOs, ~594.5 BTC, matching public reporting. Every transaction ID is in [`drain-transactions.csv`](evidence/onchain/drain-transactions.csv). 3. **The build.** [`evidence/builds/`](evidence/builds) compiles the vulnerable and patched firmware from source and uses `arm-none-eabi-nm` on the real binaries to show which function the "random number" call actually resolved to, before and after the fix. See [`comparison.md`](evidence/builds/comparison.md). ## What's not here No PoC that recovers a real seed, scans for vulnerable addresses, or moves funds that aren't the researcher's own, and none ever will be. See [`DISCLAIMER.md`](DISCLAIMER.md). A synthetic RNG simulator and a Bitcoin regtest demonstration are planned but not built yet; open items are tracked honestly in [`RESEARCH_GAPS.md`](RESEARCH_GAPS.md), including one significant one: the Mk3 fix version Coinkite announced (4.2.0) has no matching git tag as of this writing. ## Sources Every claim traces to a primary source (code, commit, or on-chain data) or a rated secondary source. Full list with reliability ratings in [`references/sources.yml`](references/sources.yml). ## How to cite this ```Excerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.
Each copy above is identified by the SHA-256 of its extracted text, shown beside it, and the diffs are plain unified diffs. To verify a quotation, compare it against the page itself or against the Internet Archive's copies, which are independent of this project.
Complete captures are held offline rather than mirrored here, so this page shows diffs and excerpts. If a quotation is ever disputed, the full copy can be produced. Ask.
The SHA-256 prefixes above identify each held copy without turning this page into a mirror of somebody else's post. Compare a quotation against the original. If the post has since been edited or deleted, ask and the held copy can be produced.