induwara.lk
Opinionsecuritycryptographycompliance

FIPS 140-3 is a procurement checkbox, not a security outcome

FIPS 140-3 validation proves a crypto module implements approved algorithms correctly. It says nothing about how you deploy it — and four certified modules shipped exploitable bugs anyway.

Induwara Ashinsana6 min read

FIPS 140-3 validation tells you one narrow thing: that a cryptographic module implements approved algorithms correctly, on a specific firmware version, in a specific configuration. It does not tell you the system around that module is secure. A piece on 808bits makes that case with receipts, and the receipts are worth reading if you sell software to a bank, a telco, or a government department.

I want to add the part that matters if you're building from a small team here in Sri Lanka: the certificate is the cheapest thing in the room, and the work it doesn't cover is free.


🔍 What the certificate actually covers

The scope of a FIPS validation is the cryptographic module boundary. Inside it, the lab checks that approved algorithms are implemented correctly, that keys can be zeroised, that power-up self-tests run, and (at levels 2–4) that the hardware resists physical tampering. Outside that boundary, nobody looked.

Inside the boundary (validated) Outside the boundary (not looked at)
Approved algorithm implementations The application calling the module
Key zeroisation Access control and authentication
Power-up self-tests Key management policy
Pairwise consistency test on generated keys Operator procedures and ceremonies
Physical tamper resistance (L2–L4) Backup, cloning, and share custody

The standard also fixes hard parameter floors: RSA at 2048 bits minimum, HMAC keys of at least 112 bits, randomness from an SP 800-90A DRBG with a formal entropy assessment. Sensible floors, and also where the friction starts.

Key takeaway: A FIPS certificate answers "does this module do approved crypto correctly?" It does not answer "is this deployment secure?" Every real incident I've read about lives in the second question.


💥 Four validated modules that shipped exploitable bugs

The 808bits piece catalogues four cases where the certificate was accurate and the product was still broken.

Incident Year What went wrong Certified?
ROCA 2017 Infineon RSA key generation produced factorable keys for five years; Estonia suspended national ID cards FIPS 140-2 and Common Criteria EAL5+
EUCLEAK 2024 Non-constant-time modular inversion in ECDSA leaked private keys via EM side-channel; YubiKey 5 FIPS and YubiHSM 2 FIPS affected Survived ~14 years and roughly 80 top-level CC evaluations
Dual_EC_DRBG 2004–2014 Suspected backdoored RNG stayed an approved NIST algorithm for a decade; default in RSA's validated BSAFE library Certificates stayed technically accurate the whole time
YubiKey FIPS series 2019 Power-up self-tests left predictable content in the randomness buffer — up to 80 predictable bits in a 256-bit ECDSA nonce Flaw existed only in the FIPS series

Read that last row twice. The FIPS requirement caused the bug. The uncertified consumer YubiKey was fine; the certified one was measurably worse. Worse still, EUCLEAK needed hardware replacement because the firmware isn't field-upgradeable.

Then there's the queue. The article notes CMVP has historically run twelve to eighteen months from submission to certificate. That creates an ugly choice for any vendor who finds a bug:

  1. Ship the fix immediately and lose validated status for over a year.
  2. Keep shipping the vulnerable-but-validated build.

Customers with a compliance mandate push vendors toward option 2. The incentive is backwards, and it's structural, not accidental.


⚡ The performance and compatibility tax

If you flip FIPS mode on, you pay for it. The article benchmarks Go 1.25.1 with GODEBUG=fips140=on against the default:

Operation FIPS mode Default Difference
ECDSA P-256 key generation 110 µs 17 µs ~6–9× slower
Randomness (per 32 bytes) 355 ns 85 ns ~3–6× slower
ECDSA signing No meaningful difference
AES-256-GCM No meaningful difference

The keygen cost comes from the mandatory pairwise consistency test: a full sign-and-verify cycle on every generated key pair, including ephemeral keys in TLS handshakes. If your service does a lot of short-lived key generation, that's your bill.

The compatibility story is sharper. Bitcoin and Ethereum use ECDSA over secp256k1, a curve NIST left out of the approved set. When commenters asked for it in FIPS 186-5, NIST replied that it does not believe secp256k1 offers compelling advantages over the NIST-recommended curves. AWS CloudHSM reflects this: secp256k1 and Ed25519 are available only on non-FIPS clusters.

It gets more absolute. BIP32 hierarchical key derivation — the base of BIP39, BIP44, and effectively every hardware wallet and custody platform — keys an HMAC-SHA512 with the literal ASCII string Bitcoin seed. That's 96 bits. The FIPS minimum is 112. A four-line Go program is enough to prove it:

panic: crypto/hmac: use of keys shorter than 112 bits is not allowed in FIPS 140-only mode

The entire derivation tree is unimplementable under approved parameters. Not slow — impossible. (If you just want to check an HMAC or SHA-256 digest by hand while debugging this sort of thing, our hash generator runs in the browser.)


🛠️ Where auditors actually spend their time

Here's the detail I found most useful. The article says auditors accept the FIPS certificate in about thirty seconds as one line of evidence, then spend hours on five things the certificate cannot speak to:

  1. Configuration vs certificate — is the module actually running validated firmware in approved mode, and can you attest to it?
  2. Key provenance — who generated the key, when, witnessed by whom, and did the private key ever leave the module?
  3. Personnel controls — where are the operator cards, what's the quorum, who holds which share?
  4. Backup and cloning — the replication procedures, because that's where keys actually leak.
  5. Policy vs logs — do the recorded ceremonies match the written procedure, with evidence?

Note what every one of those has in common: none of them require a certified device. They're process, records, and discipline. The article also points out that most deployed HSM estates drift from their validated configuration within months without anything raising an alarm, and claims over 90% of buyers of FIPS-enabled HSMs run them with FIPS mode disabled — paying a premium for a certificate they've switched off.

Buying the certified box is the easy 5%. The 95% that auditors care about is paperwork you can start producing today, on any hardware, for free.


💡 What this means for you

If you're a student or an engineer on a small team in Colombo shipping to a regulated customer, my read is:

  • Treat validation as a hardware selection floor, not a security conclusion. It filters out garbage. It doesn't confirm quality.
  • Write the ceremony record anyway. Who did what, with which entropy, on which firmware version. It costs nothing and it's the artifact that survives an audit.
  • Attest your configuration continuously. Validated or not, "is this box still in the state we think it's in?" is the question that catches drift.
  • If you run with FIPS mode off, document why in writing — list the non-approved algorithm dependencies. An explained deviation is defensible; an undocumented one is a finding.
  • Don't panic about the 21 September 2026 transition date. Moving certificates between lists changes nothing about your actual security posture.

And if a tender document asks for FIPS 140-3 and your architecture needs secp256k1, that's not a gap you can engineer around. Raise it early, in writing, before you've built anything.

The certificate is real evidence of a real, narrow property. The failure mode isn't the standard — it's everyone downstream believing it covers more than it does.

#security#cryptography#compliance
IA

Induwara Ashinsana

Information Systems student at UCSC and Executive Director at Ryzera Technologies. Writes about software, AI, and what it means for builders in Sri Lanka.

About the author →

Keep reading