An Open Letter Calling for the Removal of Rodolfo Novak from OpenSats and His Departure from Coinkite
- To: The Board of Directors of OpenSats; Coinkite Inc. and its co-founder Peter Gray; Coinkite’s investors, including Ten31.Date: August 2026Status: Open for public co-signature. Repost, comment, and add your name or npub.
- The ask
- What happened
- On 30 July 2026, an attacker swept Bitcoin from hundreds of single-signature wallets in roughly forty minutes. Coinkite’s advisory placed the initial figure near 594 BTC from about 500 addresses. Galaxy Research subsequently mapped 1,196 addresses drained in full — 1,082.65 BTC, approximately $70.2 million.The cause was not phishing, not a compromised backup, not supply-chain interdiction, not user error. It was a defect in COLDCARD firmware.Block’s Bitcoin Engineering and Security teams published the root cause. COLDCARD’s production board configuration defined the macro MICROPY_HW_ENABLE_RNG with a value of zero, because the device was meant to use its own hardware-RNG wrapper. The supporting library libngu guarded on #ifndef — testing whether the macro was defined, not whether it was enabled. The macro was defined. Its value was zero. The check passed. The build completed with no error and no warning.Every call to the device’s random number generator was silently routed to MicroPython’s Yasmarang fallback: a small, non-cryptographic pseudorandom generator, initialized exactly once from the STM32’s factory-set 32-bit unique identifier, the SysTick counter, and RTC registers. None of these are secrets. The UID is manufacturing metadata, partly exposed through the device’s own USB serial number.That output was then XORed against a second Yasmarang instance seeded from public hardcoded constants — the XOR of two deterministic streams with known starting states is itself deterministic — and hashed with SHA256d. Hashing cannot manufacture entropy. At most 2^40 candidate inputs yields at most 2^40 candidate outputs.Coinkite’s advisory states the resulting entropy on Mk3 was approximately 40 bits, against a 128-bit target. Mk4, Mk5 and Q landed near 72 bits. The affected Mk3 range begins at firmware 4.0.1, released March 2021.The defect shipped in production for more than five years.
- Why this is not an ordinary bug
- Every non-trivial codebase has bugs.Shipping one is not a resigning matter. Six things make this different.It was the one thing the product existed to do. A hardware wallet is a random number generator with a screen attached. Airgapping, secure elements, anti-phishing words, duress PINs, supply-chain seals — all of it is defense-in-depth around a single core function. That function did not work. Every other control was decoration on a foundation of roughly forty bits.It defeated the product’s own self-test. The firmware included a health check that rejected adjacent repeated RNG values — a test any non-degenerate PRNG passes trivially. A check that cannot distinguish a hardware RNG from a seeded software toy is not a control. It is the appearance of one.The blast radius exceeds seed generation. The same randomness function underpins paper wallet encryption, key splitting, mask generation, and Key Teleport. The full exposure is still being established.It was root-caused externally. The definitive public technical analysis came from Block’s engineering team, working with independent researchers, after the coins were gone. An outside developer reproduced the flaw on a fresh device. The vendor’s own investigation trailed the community’s.The first public word from the company was wrong, and it was reassuring. Before the advisory, Coinkite’s CEO publicly attributed the losses to individually compromised seeds and said there was no evidence of an RNG problem. He deleted and explicitly retracted that post, stating he did not want wrong information circulating. That retraction was the right call and we credit it without reservation. But the correction does not undo the interval. Users read a version of “no need to panic” from the vendor while an attacker was draining wallets in real time. In a live incident, minutes are coins.And the failure landed precisely where the company’s own security marketing said it could not. That requires its own section.
- The open-source claim, and what was done to it
- COLDCARD’s security argument to the public rested on transparency. Don’t trust, verify. Source you can read. Firmware you can inspect. Many eyes.That argument was systematically undermined by the company that made it — deliberately, and over years.COLDCARD firmware was licensed GPL-3.0. Rodolfo Novak publicly characterized that choice as a mistake, and the code was relicensed to MIT plus a custom COPYING-CC restriction. Independent analysis by the Bitcoin hardware wallet research community concluded plainly that the resulting terms are not truly an open-source license, while noting Coinkite continued to propagate open-source framing in its marketing material. Commercial use, forking, and redistribution by competitors were restricted. Coinkite later shifted its own language to “verifiable” rather than “open source.”Zach Herbert of Foundation Devices — whose competing product remains GPL-3.0 — was among those who publicly objected at the time. He was right.Then in November 2024, an independent developer released BTClock, an open-source hobbyist alternative to Coinkite’s BLOCKCLOCK, buildable for roughly seventy dollars. Coinkite’s response was a cease-and-desist letter and a trademark claim filed with GitHub. The repository was taken down.If the objection was genuinely to a confusingly similar name, that objection could have been made in an email asking for a rename. It was not. A solo open-source builder had his repository removed by legal process, by a company whose entire public identity is built on Bitcoin’s open, permissionless, adversarial-review ethos.This is the connective tissue of this letter. The defense that failed on 30 July 2026 is the same defense that was hollowed out on purpose. Open code protects users only when a large, motivated, adversarial population has standing reason to read it. The population with the strongest incentive to audit COLDCARD’s firmware line by line is precisely the population of competing hardware builders — the people who were relicensed out, C&D’d, and publicly antagonized.Coinkite claimed the security benefits of open source in its marketing while using licensing and legal process to deny others its freedoms. The bill for that came due in forty minutes on a Thursday morning, and it was paid by customers.We invite Mr. Novak to either reaffirm or repudiate his prior positions on licensing and on BTClock, in his own words, publicly and on the record. Whichever he chooses, the record from 2020 through 2024 stands on its own.
- On the AI framing
- Coinkite has suggested an attacker may have used AI-assisted code review to find the flaw, calling it a sober reality of a new paradigm.That may be true. It is not an answer, and we ask that it stop being offered as one.The defect was introduced in 2021 by Coinkite. It survived Coinkite’s review. The company has acknowledged that a recent internal review conducted with a leading AI model also failed to catch it. If AI-assisted analysis can find latent bugs faster than seasoned experts, that is an argument for why a vendor holding billions in customer funds under its RNG — with public code and a well-understood threat model — should have been running exactly that analysis adversarially against its own shipped firmware.“The attacker had better tools” describes the industry. It does not explain why this line of code was in production for five years, in a codebase whose reviewers had been actively discouraged.
- Why OpenSats must act
- OpenSats exists to fund and steward free and open-source Bitcoin software. It asks the public for money on that basis. Its credibility with grantees and donors rests on the integrity of the people who decide where that money goes.Rodolfo Novak has, on the public record: relicensed a flagship Bitcoin project away from GPL-3.0 while calling the original license a mistake; continued to market the result using open-source framing that independent researchers found inaccurate; and used a trademark claim to remove an independent open-source developer’s repository from GitHub.Set the COLDCARD failure aside entirely and that record alone is disqualifying for a seat at an organization whose purpose is defending open-source developers. Add the largest self-custody failure in Bitcoin’s history, caused in part by the erosion of the very review culture OpenSats exists to fund, and the position becomes untenable.We are not asking OpenSats to punish anyone. We are asking OpenSats to be legible about what it stands for. An organization cannot credibly fund the commons while seating someone who has repeatedly acted to enclose it.We ask the OpenSats board to remove Rodolfo Novak from its team, effective immediately, and to state publicly that it has done so.
- Why he should leave Coinkite
- We are aware that Coinkite is a small, private, founder-controlled company, and that no board can compel this. That is exactly why it must be a decision freely taken rather than a governance outcome.NVK has said he takes full accountability. We take him at his word and ask what that word obligates.Accountability is not an adjective applied to a statement. In every other domain where a custodial promise fails at this scale, the person at the top leaves — not as punishment, and not because they personally typed the defective line, but because the trust extended to the institution was extended through them. A leader remaining in post converts a closed chapter into an open, ongoing referendum on that leader, and everything the company does next gets read through it.He built COLDCARD, and it earned its reputation honestly over a decade. That is what makes his continued tenure a liability to the thing he built. Coinkite’s engineers, its remaining products, and the broader case for self-custody now all carry the weight of one man’s position. Removing that variable is the fastest route to letting the technical remediation be judged on its merits.
- Specific demands
- What we are not saying
- We do not allege fraud, theft, deliberate backdooring, or prior knowledge of the defect. We do not say COLDCARD’s engineers acted in bad faith; we believe they are working very hard right now.We do not say self-custody has failed. It has not. Multisig across vendors held. Passphrases held. Independently supplied dice entropy held. The lesson is not “use a custodian.” The lesson is that single-vendor trust is systemic risk, and that a vendor who asks for that trust — while narrowing the community able to verify it — must be held to what that costs when it fails.The promise was a number nobody could guess. The promise was not kept, for five years, by a company that spent those same years making it harder for anyone outside it to check.
- Sign on
To: The Board of Directors of OpenSats; Coinkite Inc. and its co-founder Peter Gray; Coinkite’s investors, including Ten31.
Date: August 2026
Status: Open for public co-signature. Repost, comment, and add your name or npub.
The ask
We are Bitcoin users, developers, node operators, and COLDCARD customers. Some of us are, or know, victims of the theft of 30 July 2026.
We ask two things:
- That the board of OpenSats remove Rodolfo Novak (NVK) from its team and from any role in the evaluation or awarding of grants to open-source Bitcoin developers.
- That Rodolfo Novak step down as Chief Executive Officer of Coinkite Inc.
We make no allegation of fraud, theft, deliberate backdooring, or prior knowledge of the defect. Nothing in the public record supports any of that, and we would oppose anyone who claims it. This is a letter about accountability and about fitness to hold positions of authority over other people’s money and other people’s work.
What happened
On 30 July 2026, an attacker swept Bitcoin from hundreds of single-signature wallets in roughly forty minutes. Coinkite’s advisory placed the initial figure near 594 BTC from about 500 addresses. Galaxy Research subsequently mapped 1,196 addresses drained in full — 1,082.65 BTC, approximately $70.2 million.
The cause was not phishing, not a compromised backup, not supply-chain interdiction, not user error. It was a defect in COLDCARD firmware.
Block’s Bitcoin Engineering and Security teams published the root cause. COLDCARD’s production board configuration defined the macro MICROPY_HW_ENABLE_RNG with a value of zero, because the device was meant to use its own hardware-RNG wrapper. The supporting library libngu guarded on #ifndef — testing whether the macro was defined, not whether it was enabled. The macro was defined. Its value was zero. The check passed. The build completed with no error and no warning.
Every call to the device’s random number generator was silently routed to MicroPython’s Yasmarang fallback: a small, non-cryptographic pseudorandom generator, initialized exactly once from the STM32’s factory-set 32-bit unique identifier, the SysTick counter, and RTC registers. None of these are secrets. The UID is manufacturing metadata, partly exposed through the device’s own USB serial number.
That output was then XORed against a second Yasmarang instance seeded from public hardcoded constants — the XOR of two deterministic streams with known starting states is itself deterministic — and hashed with SHA256d. Hashing cannot manufacture entropy. At most 2^40 candidate inputs yields at most 2^40 candidate outputs.
Coinkite’s advisory states the resulting entropy on Mk3 was approximately 40 bits, against a 128-bit target. Mk4, Mk5 and Q landed near 72 bits. The affected Mk3 range begins at firmware 4.0.1, released March 2021.
The defect shipped in production for more than five years.
Why this is not an ordinary bug
Every non-trivial codebase has bugs.
Shipping one is not a resigning matter. Six things make this different.
It was the one thing the product existed to do. A hardware wallet is a random number generator with a screen attached. Airgapping, secure elements, anti-phishing words, duress PINs, supply-chain seals — all of it is defense-in-depth around a single core function. That function did not work. Every other control was decoration on a foundation of roughly forty bits.
It defeated the product’s own self-test. The firmware included a health check that rejected adjacent repeated RNG values — a test any non-degenerate PRNG passes trivially. A check that cannot distinguish a hardware RNG from a seeded software toy is not a control. It is the appearance of one.
The blast radius exceeds seed generation. The same randomness function underpins paper wallet encryption, key splitting, mask generation, and Key Teleport. The full exposure is still being established.
It was root-caused externally. The definitive public technical analysis came from Block’s engineering team, working with independent researchers, after the coins were gone. An outside developer reproduced the flaw on a fresh device. The vendor’s own investigation trailed the community’s.
The first public word from the company was wrong, and it was reassuring. Before the advisory, Coinkite’s CEO publicly attributed the losses to individually compromised seeds and said there was no evidence of an RNG problem. He deleted and explicitly retracted that post, stating he did not want wrong information circulating. That retraction was the right call and we credit it without reservation. But the correction does not undo the interval. Users read a version of “no need to panic” from the vendor while an attacker was draining wallets in real time. In a live incident, minutes are coins.
And the failure landed precisely where the company’s own security marketing said it could not. That requires its own section.
The open-source claim, and what was done to it
COLDCARD’s security argument to the public rested on transparency. Don’t trust, verify. Source you can read. Firmware you can inspect. Many eyes.
That argument was systematically undermined by the company that made it — deliberately, and over years.
COLDCARD firmware was licensed GPL-3.0. Rodolfo Novak publicly characterized that choice as a mistake, and the code was relicensed to MIT plus a custom COPYING-CC restriction. Independent analysis by the Bitcoin hardware wallet research community concluded plainly that the resulting terms are not truly an open-source license, while noting Coinkite continued to propagate open-source framing in its marketing material. Commercial use, forking, and redistribution by competitors were restricted. Coinkite later shifted its own language to “verifiable” rather than “open source.”
Zach Herbert of Foundation Devices — whose competing product remains GPL-3.0 — was among those who publicly objected at the time. He was right.
Then in November 2024, an independent developer released BTClock, an open-source hobbyist alternative to Coinkite’s BLOCKCLOCK, buildable for roughly seventy dollars. Coinkite’s response was a cease-and-desist letter and a trademark claim filed with GitHub. The repository was taken down.
If the objection was genuinely to a confusingly similar name, that objection could have been made in an email asking for a rename. It was not. A solo open-source builder had his repository removed by legal process, by a company whose entire public identity is built on Bitcoin’s open, permissionless, adversarial-review ethos.
This is the connective tissue of this letter. The defense that failed on 30 July 2026 is the same defense that was hollowed out on purpose. Open code protects users only when a large, motivated, adversarial population has standing reason to read it. The population with the strongest incentive to audit COLDCARD’s firmware line by line is precisely the population of competing hardware builders — the people who were relicensed out, C&D’d, and publicly antagonized.
Coinkite claimed the security benefits of open source in its marketing while using licensing and legal process to deny others its freedoms. The bill for that came due in forty minutes on a Thursday morning, and it was paid by customers.
We invite Mr. Novak to either reaffirm or repudiate his prior positions on licensing and on BTClock, in his own words, publicly and on the record. Whichever he chooses, the record from 2020 through 2024 stands on its own.
On the AI framing
Coinkite has suggested an attacker may have used AI-assisted code review to find the flaw, calling it a sober reality of a new paradigm.
That may be true. It is not an answer, and we ask that it stop being offered as one.
The defect was introduced in 2021 by Coinkite. It survived Coinkite’s review. The company has acknowledged that a recent internal review conducted with a leading AI model also failed to catch it. If AI-assisted analysis can find latent bugs faster than seasoned experts, that is an argument for why a vendor holding billions in customer funds under its RNG — with public code and a well-understood threat model — should have been running exactly that analysis adversarially against its own shipped firmware.
“The attacker had better tools” describes the industry. It does not explain why this line of code was in production for five years, in a codebase whose reviewers had been actively discouraged.
Why OpenSats must act
OpenSats exists to fund and steward free and open-source Bitcoin software. It asks the public for money on that basis. Its credibility with grantees and donors rests on the integrity of the people who decide where that money goes.
Rodolfo Novak has, on the public record: relicensed a flagship Bitcoin project away from GPL-3.0 while calling the original license a mistake; continued to market the result using open-source framing that independent researchers found inaccurate; and used a trademark claim to remove an independent open-source developer’s repository from GitHub.
Set the COLDCARD failure aside entirely and that record alone is disqualifying for a seat at an organization whose purpose is defending open-source developers. Add the largest self-custody failure in Bitcoin’s history, caused in part by the erosion of the very review culture OpenSats exists to fund, and the position becomes untenable.
We are not asking OpenSats to punish anyone. We are asking OpenSats to be legible about what it stands for. An organization cannot credibly fund the commons while seating someone who has repeatedly acted to enclose it.
We ask the OpenSats board to remove Rodolfo Novak from its team, effective immediately, and to state publicly that it has done so.
Why he should leave Coinkite
We are aware that Coinkite is a small, private, founder-controlled company, and that no board can compel this. That is exactly why it must be a decision freely taken rather than a governance outcome.
NVK has said he takes full accountability. We take him at his word and ask what that word obligates.
Accountability is not an adjective applied to a statement. In every other domain where a custodial promise fails at this scale, the person at the top leaves — not as punishment, and not because they personally typed the defective line, but because the trust extended to the institution was extended through them. A leader remaining in post converts a closed chapter into an open, ongoing referendum on that leader, and everything the company does next gets read through it.
He built COLDCARD, and it earned its reputation honestly over a decade. That is what makes his continued tenure a liability to the thing he built. Coinkite’s engineers, its remaining products, and the broader case for self-custody now all carry the weight of one man’s position. Removing that variable is the fastest route to letting the technical remediation be judged on its merits.
Specific demands
Of the OpenSats board:
- Remove Rodolfo Novak from the OpenSats team and from any grant evaluation role, effective immediately, and confirm publicly.
- Publish the criteria by which OpenSats evaluates the open-source conduct of the people who steward its funds.
Of Rodolfo Novak: - Resign as CEO of Coinkite Inc. upon completion of the incident response and appointment of a successor.
- Step back from other Bitcoin institutions, standards processes, and grant-making bodies pending independent review.
Of Coinkite Inc.: - Commission and publish a third-party audit of every entropy path across all shipped product lines, by a firm with no prior commercial relationship with Coinkite.
- Publish a complete, dated incident timeline: when the defect entered the codebase, what reviews it passed, when the company first learned of the thefts, and what was said publicly and internally at each hour of 30 July.
- Publish the full scope of affected functionality beyond seed generation — paper wallet encryption, key splitting, mask generation, Key Teleport, and every other RNG consumer.
- State a clear public position on remediation for verified victims. Silence is worse than “no.”
- Relicense COLDCARD firmware under GPL-3.0 or an equivalent OSI-approved license, withdraw the outstanding restrictions on commercial use and forking, and publicly withdraw the BTClock trademark action.
- Commit to concrete engineering changes: independently verified reproducible builds, compile-time assertions on RNG configuration, entropy self-tests capable of distinguishing hardware from software sources, and a standing external adversarial review cadence.
- Make externally-supplied entropy — dice or otherwise — a first-class, default-prominent path on every device, not an advanced option most users skip.
Of Coinkite’s investors, including Ten31: - State publicly your expectations regarding governance and independent audit at a portfolio company whose product failure caused eight-figure customer losses.
What we are not saying
We do not allege fraud, theft, deliberate backdooring, or prior knowledge of the defect. We do not say COLDCARD’s engineers acted in bad faith; we believe they are working very hard right now.
We do not say self-custody has failed. It has not. Multisig across vendors held. Passphrases held. Independently supplied dice entropy held. The lesson is not “use a custodian.” The lesson is that single-vendor trust is systemic risk, and that a vendor who asks for that trust — while narrowing the community able to verify it — must be held to what that costs when it fails.
The promise was a number nobody could guess. The promise was not kept, for five years, by a company that spent those same years making it harder for anyone outside it to check.
Sign on
If you endorse this letter, reply with your name or npub. If you dissent, reply with your reasoning — it will stand alongside the signatures. Freely repostable, mirrorable, and republishable.
Sources: Coinkite security advisory, blog.coinkite.com, 30 July 2026 (updated 31 July). Block Bitcoin Engineering and Security technical report, engineering.block.xyz. Galaxy Research on-chain analysis. BCAP hardware wallet taxonomy on COLDCARD licensing. Coinkite firmware version history and release notes, 2020–2021. Public statements by Rodolfo Novak, Zach Herbert, Kevin Loaec, Rob Hamilton, and Guy Swann.
- Reference: https://engineering.block.xyz/
- Reference: https://blog.coinkite.com/
Write a comment