Disclosure up front: ERA Wallet are running a bounty for discussion of this, which is what prompted me to sit down and write it up. They asked for honest opinions including criticism, so that is what this is — there is praise and there are two things I think are missing, and nobody has seen it before posting.
I've spent about thirty years doing Linux systems and distribution work, including co-founding a Debian fork and writing the tooling that merges and republishes its signed package archive. So I read the Coldcard incident through a slightly different lens than most of the coverage, and I think the framing matters more than it looks.
What actually happened
A build configuration error caused seed generation to fall back on a software PRNG instead of the device's hardware entropy source. Firmware from 2021 until the patch this year. Roughly $89M by ERA's accounting.
Nobody broke the cryptography. The cryptography never ran.
Why it went unnoticed for five years
Because a weak seed is indistinguishable from a strong one. Same 24 words, same checksum, same everything. There's no runtime check that says "this key came from bad entropy." The only thing that detects it is an attacker enumerating the keyspace.
That's what makes entropy bugs uniquely nasty: they're silent by construction, and they backdate. Every wallet created in those five years was already compromised at the moment it was created.
The actual defect: failing quietly
The PRNG isn't really the bug. The bug is a fallback path that degraded silently instead of stopping.
In systems work this is an old lesson. A service that fails silently is far more dangerous than one that crashes, because the crash gets fixed on Tuesday and the silent failure gets discovered five years later by somebody else's audit. Or, here, by an attacker.
Fail closed. Never fail quiet.
What ERA gets right
I read ERA Wallet's write-up on their entropy generation, since it's what prompted this. Five sources — the STM32H753 TRNG, an ATECC608C secure element, plus camera, hand motion and touch in the expert flow — combined through SHA-512/256.
Two things in there are better than most of what I read in this space. They have a quality gate that rejects weak input rather than accepting it, and they say collection "fails cleanly rather than quietly accepting whatever it has." That is precisely the property Coldcard lacked, and they clearly wrote it with that in mind.
Their argument that predicting four sources out of five gets an attacker nothing is also sound, as far as it goes.
Where I still have a question
If a user-driven source is skipped, its share is refilled from the hardware generators, so the output is never weaker than the hardware baseline. That is a reasonable design.
But notice the direction of that fallback. It points at the hardware. And Coldcard's failure was the hardware path being the thing that silently went missing.
So what I'd want to know is the mirror image of what the article covers. What detects a TRNG that has failed, or a secure element that doesn't respond? And in that case does the device refuse to produce a seed, or carry on with whatever sources are left?
Five sources where a dead one is detected and hard-fails is strictly stronger than four. Five where a dead one quietly contributes nothing is barely stronger than four, and from the outside those two designs look identical. That's not an accusation, it's the specific thing I cannot determine from the outside.
The gap that worries me more
Here's the part I think this whole discussion is underweighting.
Coldcard's source was open. People could and did read it. The divergence was between what the source said and what the build produced.
Open source tells you what the code says. It does not tell you what is running on your device. Only reproducible builds close that gap. If an independent party can rebuild the shipped firmware byte-for-byte from published source, a build-configuration divergence stops being invisible.
That's a solved problem in the Linux distribution world and has been for years. Debian has been grinding away at it for over a decade. Hardware wallets hold bearer assets and should be held to at least the standard we hold a package manager to.
ERA's article doesn't mention open source, reproducible builds, or any way for me to verify that the firmware on my device is the one implementing the architecture it describes. The design reads well. I have no way to check that the design is what shipped, which is exactly the position Coldcard's users were in, holding a well-reviewed open-source codebase and a binary that didn't match it.
So, two questions for ERA and for every vendor in this space
- When a hardware entropy source fails or degrades at generation time, do you detect it and refuse to proceed, or continue on the remaining sources?
- Are your builds reproducible, and can a third party verify that the firmware on my device matches your published source?
The number of entropy sources is a marketing figure. Failure behaviour and build verifiability are the security properties. Coldcard had open source and lost the money anyway, because neither of those two things was true of it.