On April 27, 2026, Go's standard library crypto package earned FIPS 140-3 validation under CMVP Certificate #5247. This is not a wrapper around BoringSSL. It is not a CGO bridge. It is the same crypto/tls, crypto/sha256, and crypto/aes that every Go program already uses — now independently tested and certified by NIST.
Why this matters now. FIPS 140-3 is the current federal standard for cryptographic module validation. If you handle CUI (Controlled Unclassified Information) for a US government contract — or if your clients do — FIPS-validated cryptography is not optional. It is a prerequisite in CMMC Level 2 (SC.L2-3.13.11), a control in ISO 27001 (A.8.24), and an expectation in SOC 2 (CC6.1).
The old path was awkward. Before this certification, Go shops had two options: run BoringCrypto (a Google-maintained fork with limited scope), or wrap FIPS-certified C libraries via CGO (adding dependency and complexity). Both approaches meant you were not running stock Go. Both meant your FIPS story was: "we patched it on." Now the story is: "it ships with the language."
Enabling FIPS mode. Build with the validated module:
GOFIPS140=v1.0.0 go build -o yourapp .
Verify at runtime:
GODEBUG=fips140=on ./yourapp
The runtime logs confirm FIPS 140-3 mode is active, and all cryptographic operations route through the validated code paths. No fork, no CGO, no external dependency. Full documentation is on go.dev.
The compliance shortcut. For CMMC assessors, SC.L2-3.13.11 previously required either a FIPS-validated module (which Go lacked) or a documented plan to obtain one. With CMVP #5247, Go now has the validated module. The control goes from "partial, with a plan" to "fully covered." For ISO 27001 auditors reviewing A.8.24 (Use of Cryptography), you can now point to the CMVP certificate rather than explaining that your algorithms are standard but uncertified. For SOC 2, the distinction between "industry-standard encryption" and "FIPS-validated encryption" collapses — they are the same implementation.
One migration to plan: bcrypt. Go's crypto/bcrypt uses Blowfish, which is not FIPS-approved. If you hash passwords with bcrypt, plan a migration to PBKDF2 with HMAC-SHA256 (NIST SP 800-132). New code should use PBKDF2 from day one. Existing bcrypt hashes can be migrated on next login — verify with bcrypt, re-hash with PBKDF2, store both until rotation completes.
What we are doing. We are updating our build pipeline to GOFIPS140=v1.0.0, migrating password hashing from bcrypt to PBKDF2, documenting the CMVP certificate in our System Security Plan, and adding FIPS 140-3 certification as compliance evidence across CMMC, ISO 27001, and SOC 2.
FIPS certification is not a badge. It is a fact about your stack that changes how many frameworks you satisfy, how many compensating controls you can retire, and how you answer the auditor who asks: "Show me your FIPS validation." Go's answer is now: it is in the standard library. The certificate number is 5247.

