Extremely important correction.
@jackmallers there wasnât a weak entropy fallback. I think itâs important to be precise about what actually happened.
The weak PRNG (Yasmarang) wasnât Coinkiteâs fallbackâit was MicroPythonâs built-in general-purpose RNG, introduced upstream in May 2018. It didnât become part of Coldcardâs seed generation until the libNgU migration in March 2021.
Most language runtimes include a non-cryptographic RNG like this for general purposes such as shuffling, timing jitter, or other non-security-related randomness. By itself, thatâs not unusual.
Coinkiteâs design intent was actually the opposite of having a software fallback: seed generation was supposed to rely exclusively on the hardware TRNG and never use the software RNG. Setting MICROPY_HW_ENABLE_RNG=0 was intended to disable that software path.
The issue is that this setting didnât have the intended effect, and the symbol instead resolved to the runtimeâs default implementation. So what people are describing as a âfallbackâ wasnât an intentional design decision or a shortcut in the seed-generation logicâit was inherited behavior from the underlying platform that became active because of a link-time error.