- Organisation
- CKTRIPWIRE
- Evidence role
- Primary technical research
- Published
- not established
- Source changes
- 0
- Detected differences
- 0
- Unreviewed
- 0
- Copies held
- 1
The method behind cktripwire-honeypot-monitor, linked from the scoreboard and registered separately so the experiment's stated design is held as a document rather than inferred from its results. It describes how the operator reproduces the RNG defect in software (ngu.random.bytes() resolving to the XOR of two Yasmarang PRNGs with no hardware entropy), how that reproduction was checked against real hardware, and how the experiment is designed: difficulty bands set by the entropy added on top of the attacker-known seed, a zero-entropy mainnet control, and deliberately coarse public reporting with no addresses, exact amounts or keys. It states that the operator retains the keys to every honeypot. The page directs readers to @jamesob for background and updates.
Kept at tier 3 rather than the chain-monitor lane: this is static prose, unlike the scoreboard's live state. The reproduction, the hardware validation and the entropy estimates are the operator's own and have not been independently reproduced 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 .
This post is held twice: here, with this project's own note on why it matters, and again as part of the conversation captured at , which is polled for changes. Both copies are the same post; neither is a separate event.
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 the addresses of people who published nothing themselves. Capture times and reviewed change summaries remain available below.
Held captures
-
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
CKTRIPWIRE methodology scoreboard admin This page explains what the Coldcard RNG bug is, how we reproduce it in software, how we validated that reproduction against real hardware, and how the experiment on the scoreboard is designed. Everything here is defensive security research: the underlying bug is public, and every honeypot is fully recoverable by us. The bug Coldcard hardware wallets (Coinkite Mk3/Mk4/Q) running firmware in the 4.x series shipped with a build/linking defect: the call that is supposed to draw randomness from the device's hardware true-random-number generator (TRNG) silently fell back to a software pseudo-random generator instead. A compile-time guard meant to refuse to build without a real TRNG used a defined-ness check rather than a value check, so it never fired, and the software fallback was linked in on every affected build. Concretely, ngu.random.bytes() resolves to the XOR of two Yasmarang PRNGs, with no hardware entropy: one half (in libngu) is seeded from compile-time constants that are identical on every device and never reseeded in 4.x; the other half (the MicroPython STM32 port fallback) is seeded once at first use from a handful of low-entropy boot registers. The result is a wallet seed drawn from a keyspace small enough to brute-force. Because seeds, dice-derived seeds, XOR seeds, and nonces all flow through this generator, the private keys of affected wallets can be reconstructed and the coins swept. Attackers are actively doing exactly that. What this project does We generate decoy honeypot wallets that carry the identical weakness, fund them with small amounts on Bitcoin mainnet, and watch which ones get swept and how quickly. Some honeypots are deliberately hardened with extra genuine entropy — physical dice rolls, or a BIP-39 passphrase — layered on top of the compromised seed. By observing where sweeping stops as we add entropy, we map the frontier of what the attacker can currently crack, and how much added protection actually defends a wallet. Reproducing the bad entropy in software No physical device is needed to generate a vulnerable seed — the whole path is deterministic software. We reimplemented the exact firmware pipeline: Per 32-bit word, rng_get() (the STM32-port Yasmarang fallback) XOR my_yasmarang() (the libngu Yasmarang with fixed constants), little-endian packed — byte-for-byte as the firmware's my_random_bytes(). The port half is seeded once at first call: pad = UID ^ SysTick, n = RTC->TR, d = RTC->SSR. The libngu half is its compile-time constant state.Excerpt only. The complete copy is held offline and backs quotations on this site. The original publication remains the canonical public source.
0 presentation-noise differences. Sidebar, ticker and other page chrome churn that our review classified as not being changes to what the source says.
The excerpts and plain unified diffs above show the text this project held and how it changed. 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.
Compare the screenshot or a quotation against the original while it is available.