← All standards
Standards·21 min

FIPS 140-3 and the CMVP: what 'FIPS validated' actually means

FIPS 197 tells you what AES is. FIPS 140-3 tells you what a library, token, or HSM implementing it has to do before a lab will sign off on it: a defined boundary, self-tests, key handling, and physical protection graded from Level 1 to Level 4.

View as slides: 9 visual slides, ready to present
GRC / Risk & ComplianceSecurity ArchitectIT Ops / DevOpsDeveloper / EngineerExecutive / Business LeaderResearcher / Academic
Software libraryFirmware imageSmart card chipNetwork HSM
A standard for the module that runs the algorithms, not the algorithms themselvesOpen the slides →

A standard for modules, not algorithms

Every other NIST document on this site specifies an algorithm or a protocol. FIPS 140-3, Security Requirements for Cryptographic Modules, specifies something different: the product that runs those algorithms. A cryptographic module can be a software library, a firmware image, a smart card chip, or a rack-mounted HSM. FIPS 140-3 asks how that product draws its boundary, which services it offers and to whom, how it tests itself, how it generates, stores, and destroys keys, and how hard it is to open up physically.

The standard is enforced through the Cryptographic Module Validation Program (CMVP), run jointly by NIST and the Canadian Centre for Cyber Security. A vendor doesn't self-certify: an independent testing laboratory accredited under NIST's NVLAP program tests the module, and the CMVP reviews the lab's report before issuing a numbered certificate. US federal agencies (and Canadian government departments) are required to use validated modules to protect sensitive data, and a long list of other regimes inherit the requirement from them, from FedRAMP cloud authorizations to the US defense supply chain's CMMC.

FIPS 140-3, FIPS 140-2, and ISO/IEC 19790

FIPS 140-3 is a short document. Instead of restating its requirements, it adopts the international standard ISO/IEC 19790:2012 for the security requirements and ISO/IEC 24759 for the test methods, and then layers US-specific choices on top through the NIST SP 800-140 series: what documentation the lab needs (800-140A), what the public Security Policy must contain (800-140B), which security functions count as approved (800-140C), which key generation and establishment methods are approved (800-140D), which authentication mechanisms are approved (800-140E), and how non-invasive attacks are tested (800-140F). The CMVP's Implementation Guidance, updated several times a year, then interprets all of it.

This is the first time the US module standard and the international one have been the same text underneath, which is why the ISO/IEC page on this site calls 19790 the international counterpart rather than a competitor.

From FIPS 140-2 to FIPS 140-3

  1. 2001

    FIPS 140-2 published

    The standard most module certificates in circulation were issued under for the next two decades.

  2. March 2019

    FIPS 140-3 approved

    Effective September 2019, built on ISO/IEC 19790 and 24759 rather than restating the requirements.

  3. September 2020

    CMVP accepts FIPS 140-3 submissions

    Labs can submit new modules under either version for one year.

  4. September 2021

    Last new FIPS 140-2 submissions

    From here on, every new validation is FIPS 140-3.

  5. September 2026

    FIPS 140-2 certificates move to the Historical list

    Existing deployments can keep running modules on the Historical list, but new federal procurements expect an active FIPS 140-3 certificate.

Four security levels, scored area by area

A module isn't simply 'Level 3'. ISO/IEC 19790 splits the requirements into eleven areas (module specification, interfaces, roles and authentication, software and firmware security, operational environment, physical security, non-invasive security, sensitive security parameter management, self-tests, life-cycle assurance, and mitigation of other attacks), and the lab assigns a level to each one. The overall level on the certificate is the lowest of those area levels, so a single weak area caps the whole module.

The levels mostly differ in two places: how the module authenticates its operators, and how it resists someone with physical access. That's why software libraries almost always validate at Level 1 (there is no enclosure to protect), while network HSMs typically target Level 3.

What each level adds (simplified)

Level 1

At least one approved algorithm or security function, production-grade components, no specific physical protection. Most software libraries, including OpenSSL's FIPS provider, live here.

Level 2

Tamper evidence (seals, coatings, or locks that show someone got in) and role-based authentication: the module checks whether an operator is acting as, say, the crypto officer or a user.

Level 3

Tamper resistance with detection and response: opening the enclosure zeroizes keys. Identity-based authentication (which operator, not just which role), protected entry of plaintext keys, and either environmental failure protection or environmental failure testing.

Level 4

A complete protective envelope that detects penetration from any direction, mandatory environmental failure protection against out-of-range voltage and temperature, protection against fault injection, and multi-factor authentication of operators.

Practice

A lab scores an HSM at Level 3 in ten of the eleven areas, and at Level 2 for roles, services, and authentication. What overall level goes on its certificate?

What the lab actually checks

Algorithms are validated first, separately. The Cryptographic Algorithm Validation Program (CAVP) tests each algorithm implementation (AES-GCM, SHA-256, ECDSA P-256, a DRBG, a KDF) against NIST's test vectors through the automated ACVP protocol, and issues an algorithm certificate for each. The module certificate then lists which CAVP-validated algorithms the module uses in its approved mode. Entropy sources get a third, separate track: under SP 800-90B, the Entropy Source Validation program checks the noise source that seeds the module's DRBG, which is where this site's entropy module and its Playground tool connect to the standard.

With the algorithms established, the module testing covers what wraps them. The lab confirms the module's boundary and every service it exposes, and checks that the module tells callers whether a service is approved or not (an approved service indicator is a FIPS 140-3 requirement, so a caller can't accidentally run, say, MD5 and believe it was in approved mode). It checks the self-tests: a pre-operational integrity test of the module's own code or firmware before anything else runs, and conditional tests such as known-answer tests for each algorithm before its first use, and pairwise consistency tests on every newly generated key pair. It checks how keys and other sensitive security parameters enter and leave the module, and that they can be zeroized. And at Level 3 and above, it physically attacks the enclosure.

What the lab does not do is a free-form search for vulnerabilities in the product as a whole. FIPS 140-3 is conformance testing against a fixed list of requirements. Finding the unexpected flaw is closer to what a Common Criteria evaluation's vulnerability analysis is for.

Reading a certificate, and the claims around it

Every certificate on the CMVP's public list names an exact module, an exact version (hardware, firmware, or software), the operational environments it was tested on, the overall and per-area levels, and the CAVP certificates for its algorithms. It links to the module's Security Policy, a public document that says how to configure and operate the module so that it is actually in its validated state. A FIPS 140-3 certificate is active for five years and then moves to the Historical list.

Marketing language is much looser than that. Only the first claim below is a validation; the others are statements a vendor can make without one.

What a CMVP certificate supports

  • •'Validated' or 'FIPS 140-3 Level 2 validated', with the certificate number
  • •Only for the module versions and operational environments the certificate lists
  • •Only when the module runs in the approved mode its Security Policy describes

What it doesn't

  • •'FIPS compliant' or 'FIPS ready': no lab and no CMVP review stands behind these
  • •'Uses FIPS-approved algorithms': AES-GCM in an unvalidated library is still unvalidated
  • •'In process': the module is in the CMVP queue, which can take many months and may not end in a certificate
  • •'FIPS inside': the product embeds a validated module, which is only meaningful if the product actually routes its crypto through it

Practice

A SaaS vendor says its platform is 'FIPS 140-3 compliant because it only uses AES-256-GCM and SHA-256'. There is no certificate number anywhere. Can a federal customer treat it as using validated cryptography?

Go deeperWhy validation and patching pull in opposite directions⌄

A certificate covers a specific build. Change the module's code to fix a bug or a vulnerability and, strictly, the new build is not the one that was validated. The CMVP's Implementation Guidance defines change scenarios that let a vendor update a certificate with less than a full revalidation when the change doesn't touch the security-relevant parts, but any change to the cryptography itself means going back through a lab and the CMVP queue.

In practice this puts operators in a familiar bind: keep running the validated version with a known flaw, or patch to an unvalidated one while the vendor revalidates. Many security teams decide a known vulnerability outweighs the validation status, and vendors try to keep the validated part small and slow-moving so it rarely needs to change (OpenSSL, for example, lets you load an older, validated FIPS provider into a newer OpenSSL for this reason). The same tension is why an HSM's firmware version matters as much as its model number when you check its certificate.

Knowledge check

Test what you just learned →

10 quick questions, with an explanation for every answer.

Up next

Common Criteria (ISO/IEC 15408): evaluating products against the claims they choose →

Where FIPS 140-3 tests every module against one fixed list, Common Criteria lets the vendor (or a protection profile) state the security claims, then grades how rigorously a lab checked them. Here's how to read 'EAL4+', and why it says less than it seems to.

Questions & feedback

Discuss this page

Ask a question or comment with your GitHub account. New questions get a first answer from Claude, an AI model, clearly marked as AI; people can correct or add to it. How this works

Showing the discussion loads a widget from giscus.app and GitHub, which then see your IP address and browser details.