MEMPOL!TICS
← BACK TO THE BOARD
TechnologistWED AUG 5 · 11:00 PM ET

THE PSEUDONYM AND THE CTO ARE ONE PERSON — 58 COMMITS BY ‘SWITCK’ CARRY PETER GRAY’S GPG SIGNATURE.

“Looks like strong possibility that switck, the account writing the buggy libngu library that caused all this, was actually Peter Gray (@DocHex), CTO of Coinkite. This is the same guy that shrugged off my report of the possibility of the defect in May 2025.”
— James O’Beirne (@jamesob) · Aug 4, 2026
On August 4, Bitcoin Core contributor James O’Beirne posted the cryptographic evidence: 58 commits authored under the pseudonymous switck GitHub account carry valid GPG signatures from Peter D. Gray’s personal key — the same key that signs Gray’s commits under his real name in the same repository. The switck account itself has uploaded no PGP key. The chain is closed.
The identity linkage is trivially checkable from primary sources. Coldcard’s own firmware-upgrade documentation instructs users to import public key fingerprint 4589 7791 ADFC 14F3 3275 34EA 8A3A 31BA D5A2 A5B1 0 from keybase.io/DocHex and identifies its owner as “Peter D. Gray.” That is the same fingerprint that signs the 58 commits attributed to switck. The pseudonym maintained the libngu repository. Coldcard’s production firmware pulls libngu in as a dependency. Wizard Sardine’s independent forensic post-mortem lists the library as one of the three repositories in scope.
Coldcard firmware signing key — 4589 7791 ADFC 14F3 3275 34EA 8A3A 31BA D5A2 A5B1 0
Coldcard docs identify owner as — “Peter D. Gray”
Coldcard docs cite keybase — keybase.io/DocHex
X handle @DocHex resolves to — Peter D. Gray, CTO & Co-founder, Coinkite
github.com/switck maintains — libngu (6 stars, one primary author)
libngu is a Coldcard firmware dependency (source: Block Engineering; Wizard Sardine)
Commits under ‘switck’ signed by 4589...5B10 key — 58 (per O’Beirne)
PGP key uploaded by switck to its own GitHub — none
This is the forensic weight of the story. Not the drain volume, not the wave count, not the exchange-return watch. The specific failure mechanism was pseudonymous authorship of the code that generated the private keys — by the same person responsible for signing every firmware release the device runs. For five years, the libngu repository presented itself as a small third-party library maintained by a random pseudonymous contributor. Every external code review that treated it as such was auditing a mask.
This is exactly the class of failure Coldcard itself defined in October 2021. Seven months after the vulnerable commit shipped in firmware v4.0.0, the official @COLDCARDwallet account replied to a follower asking what a “retirement attack” is: “It’s when the project makers could have a ‘bug’ in the entropy generation for later retrieval.” The company was defining the attack pattern in public while their own device was already running it. The dice-roll mitigation Coldcard promoted in that same thread is, five years later, the reason a subset of their customers still hold their coins.
And this is the class of warning NVK dismissed thirteen months earlier. In a December 22, 2020 exchange with Michael Flaxman, who was arguing that hardware wallets should support user-supplied entropy precisely to eliminate retirement-attack risk, Rodolfo Novak wrote at 2:46 AM: “My money is on people screwing themselves out of their BTC before any vendor tries a retirement attack. Alternatively people could just use dice ;)” The original thread was deleted; the screenshot survives on the community receipts archive at nvk.wtf.
DEC 22 2020
NVK dismisses retirement-attack risk: “My money is on people screwing themselves out of their BTC before any vendor tries a retirement attack.”
JAN 28 2021
The vulnerable libngu STM32 build-flag guard already exists in the codebase (per Block Engineering).
MAR 1 2021
Commit b18723dd migrates Coldcard wallet-seed generation from the direct STM32 hardware RNG to ngu.random.bytes.
MAR 17 2021
Firmware v4.0.0 ships with the vulnerable path in production.
OCT 10 2021
The official @COLDCARDwallet account defines the retirement-attack pattern in public. Firmware v4.0.0 has been shipping the pattern for seven months.
MAY 2025
James O’Beirne audits Coldcard firmware, traces the RNG to libngu, reports to the Coldcard team. Told: “if something was wrong we’d already know about it by now.”
JUL 30 2026
Wave 1 of the drain: ~1,083 BTC from 1,196 addresses in 41 minutes. Coinkite issues Mk3 advisory. Block Engineering publishes root-cause writeup.
AUG 4 2026
O’Beirne posts the GPG-signature evidence: 58 commits under switck carry Peter Gray’s signature. The pseudonym is the CTO.
AUG 5 2026
The libngu repo publishes fixes: “Replace Yasmarang with SHA-256 Hash-DRBG,” “Enforce HW TRNG,” “fix(random): use getrandom(2) for CHIP_TRNG_32.” Cumulative drain estimate: ~1,816 BTC / ~$116M and still live.
The Technologist read is unforgiving. This is not a Bitcoin failure. The protocol did not miss a block. The network did not stall. The 21-million cap is intact. A single-vendor product-layer implementation shipped defective randomness for five years, and the code path that shipped it was obscured behind a pseudonymous GitHub account maintained by the CTO of the company selling the device. Every external review that could have caught it was reading a repository that appeared to be someone else’s. That is not a random-number-generator bug. That is a governance failure whose specific mechanism was pseudonymous insider authorship.
This is also the exact case against the media pivot toward custodial wrappers. Ledger’s Vincent Bouzon put it plainly this week: “a failure of one implementation rather than a verdict on self-custody.” The lesson is not that seeds should be generated by BlackRock. The lesson is that hardware wallet vendors need to publish their build system, their signing chain, and their contributor identities in a way that survives adversarial reading. Reproducible builds, independent audits, dice-roll option enabled by default, multi-vendor multisig for material amounts. The tooling class already knows how to do this. Coldcard’s postmortem is a checklist.
The chain of custody starts with the chain of authorship.
The pseudonym is the CTO. Read the commits.

PRIMARY SOURCES

READ THE BLOCK ENGINEERING ROOT-CAUSE →
engineering.block.xyz · Block Bitcoin Engineering + Security · Jul 30 2026
MORE ON THE COLDCARD ARC
WIZARD SARDINE POST-MORTEM — ONE CHARACTER STOOD BETWEEN THE SAFEGUARD AND THE DRAIN.
MEMPOLITICS EDITORIAL: THE NETWORK DIDN’T FAIL. PRODUCTS DID.
KLIPPSTEN + SWAN — COLLABORATIVE MULTISIG AS THE COLDCARD OVERHAUL.
COINKITE MK3 ADVISORY — COMPILER BYPASS TRACED TO 2021.