FIPS 140-3 合规性

从 Go 1.24 开始,Go 二进制文件可以原生以一种有助于实现 FIPS 140-3 合规性的模式运行。此外,工具链可以针对构成 Go 加密模块的冻结版本的加密软件包进行构建。

FIPS 140-3

NIST FIPS 140-3 是美国政府针对加密应用的合规制度,除其他要求外,它要求使用一组经批准的算法,并要求使用在目标操作环境中经过测试的、通过 CMVP 验证的加密模块。

本页描述的机制有助于 Go 应用程序实现合规性。

不需要 FIPS 140-3 合规性的应用程序可以安全地忽略这些机制,并且不应启用 FIPS 140-3 模式。

Go 加密模块

Go 加密模块是 crypto/internal/fips140/... 下的标准库 Go 包的集合,这些包实现了 FIPS 140-3 批准的算法。

公共 API 包,如 crypto/ecdsacrypto/rand,透明地使用 Go 加密模块来实现 FIPS 140-3 算法。

Go 加密模块 v1.0.0 版本目前正在由 CMVP 认可的实验室进行测试。

FIPS 140-3 模式

运行时 fips140 GODEBUG 选项控制 Go 加密模块是否在 FIPS 140-3 模式下运行。它默认为 off。程序启动后无法更改此选项。

当在 FIPS 140-3 模式下运行时(fips140 GODEBUG 设置为 on

当使用 GODEBUG=fips140=only 时,除上述情况外,不符合 FIPS 140-3 的加密算法将返回错误或引起 panic。请注意,此模式是尽力而为,不能保证符合所有 FIPS 140-3 要求。

OpenBSD、Wasm、AIX 和 32 位 Windows 平台不支持 GODEBUG=fips140=ononly

crypto/fips140

crypto/fips140.Enabled 函数报告 FIPS 140-3 模式是否激活。

GOFIPS140 环境变量

GOFIPS140 环境变量可以与 go buildgo installgo test 一起使用,以选择要链接到可执行程序中的 Go 加密模块版本。

Go+BoringCrypto

之前使用 BoringCrypto 模块实现某些 FIPS 140-3 批准算法的(已不再支持的)机制目前仍然可用,但预计将在未来的版本中移除并替换为本页描述的机制。

Go+BoringCrypto 与原生 FIPS 140-3 模式不兼容。