Skip to content

Security: crc32/RadioSeed

Security

SECURITY.md

Security

Model (narrowed)

  • If the kernel CSPRNG is weak or predictable, but RadioSeed and the operating environment execute honestly, the radio source may preserve security to the extent it contributes independent min-entropy.
  • RadioSeed does not protect against a malicious or fully compromised operating system, Python runtime, dependency, or display stack. A hostile environment can observe the radio digest, adaptively choose token_bytes() output, substitute the displayed mnemonic, capture the passphrase, or replace the code.
  • XOR moral, qualified: if either input is uniformly random, secret, and independent of the other, their XOR is uniformly random — this fails when a failing source can observe or choose its output in response to the survivor.
  • Health checks are defensive heuristics. They are not NIST SP 800-90B validation and do not prove 256 bits of radio min-entropy.
  • Python cannot reliably zero immutable strings; no secure memory-erasure promise. Prefer short-lived scopes; bytearray where feasible.

Kernel timestamps

libgpiod timestamps are kernel-assigned monotonic estimates at IRQ time, not hardware capture (Raspberry Pi has no HTE). ISR jitter under load can reach tens of µs — immaterial against ~second-scale decay intervals, but stated.

Burned sample

Sample_Output.txt (removed from the tree) contained a full 24-word mnemonic and public keys, public since 2021. That mnemonic is permanently compromised. Deleting the file does not erase Git history, forks, or caches. If it was ever funded, move funds immediately. History rewrite is an optional follow-up and is not remediation.

Audit table (defect → fix → test)

Defect Fix Test / gate
Fail-open Mersenne fallback GpiodEdgeSource only on seed; no sim in hardware class CLI gating + wheel provenance
bitstring RMW race Single collector thread; no shared bitstring collector/sim tests
Constructor t0 contamination Four real timestamps before first bit extractor vectors
Toggle conceals bias Removed extractor all-zeros under constant bias
Console(record=True) Never record display unit tests
Typer locals on crash pretty_exceptions_enable=False + sanitized boundary exception-leak tests
91-zero blindness RCT/APT BitHealth synthetic [0]*91
Passphrase on argv / ignored --prompt-passphrase / --no-passphrase only CLI tests
Weak file writes O_EXCL 0600 + dir fsync files tests

Disclosure

Report vulnerabilities via GitHub Security Advisories for this repository.

There aren't any published security advisories