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 模式不相容。