FIPS 140-3 準拠
Go 1.24 以降、Go バイナリは FIPS 140-3 準拠を容易にするモードでネイティブに動作できます。さらに、ツールチェーンは Go Cryptographic Module を構成する暗号パッケージのフリーズされたバージョンに対してビルドできます。
FIPS 140-3
NIST FIPS 140-3 は、米国政府の暗号アプリケーションに対する準拠制度であり、とりわけ承認されたアルゴリズムのセットの使用と、対象の動作環境でテストされた CMVP 検証済み暗号モジュールの使用を要求します。
このページで説明されているメカニズムは、Go アプリケーションの準拠を容易にします。
FIPS 140-3 準拠を必要としないアプリケーションは、それらを安全に無視でき、FIPS 140-3 モードを有効にすべきではありません。
注: FIPS 140-3 準拠および検証済みの暗号モジュールを使用するだけで、関連するすべての規制要件を満たせない場合があります。Go チームは、提供される FIPS 140-3 モードの使用が個々のユーザーの特定の規制要件をどのように満たすか、あるいは満たさないかについて、いかなる保証やサポートも提供できません。このモジュールの使用がお客様の特定の要件を満たすかどうかを判断する際には、注意が必要です。
Go Cryptographic Module
Go Cryptographic Module は、FIPS 140-3 承認アルゴリズムを実装する crypto/internal/fips140/... 配下の標準ライブラリ Go パッケージの集合です。
crypto/ecdsa や crypto/rand のような公開 API パッケージは、Go Cryptographic Module を透過的に使用して FIPS 140-3 アルゴリズムを実装します。
FIPS 140-3 モード
ランタイムの fips140 GODEBUG オプションは、Go Cryptographic Module が FIPS 140-3 モードで動作するかどうかを制御します。デフォルトは off です。プログラムが開始された後は変更できません。
FIPS 140-3 モードで動作している場合(fips140 GODEBUG 設定が on の場合)
-
Go Cryptographic Module は、
init時に自動的に整合性自己チェックを実行し、ビルド時に計算されたモジュールのオブジェクトファイルのチェックサムとメモリにロードされたシンボルを比較します。 -
すべてのアルゴリズムは、関連する FIPS 140-3 実装ガイダンスに従って、
init時または初回使用時に既知応答自己テストを実行します。 -
生成された暗号鍵に対してペアワイズ一貫性テストが実行されます。これにより、特定の鍵タイプで最大 2 倍の速度低下が発生する可能性があり、これは特に一時的な鍵にとって重要です。
-
crypto/rand.Readerは NIST SP 800-90A DRBG をベースに実装されています。GODEBUG=fips140=offと同じレベルのセキュリティを保証するため、ランダムバイトはすべてのReadでプラットフォームの CSPRNG からも取得され、評価されていない追加データとして出力に混入されます。 -
crypto/tlsパッケージは、FIPS 140-3 で承認されていないプロトコルバージョン、暗号スイート、署名アルゴリズム、または鍵交換メカニズムを無視し、交渉しません。 -
crypto/rsa.SignPSSをPSSSaltLengthAutoとともに使用すると、ソルトの長さはハッシュの長さに制限されます。
GODEBUG=fips140=only が使用される場合、上記に加えて、FIPS 140-3 に準拠していない暗号アルゴリズムはエラーを返すか、パニックを引き起こします。このモードは最大限の努力であり、すべての FIPS 140-3 要件への準拠を保証するものではないことに注意してください。
OpenBSD、Wasm、AIX、および 32 ビット Windows プラットフォームでは、GODEBUG=fips140=on および only はサポートされていません。
crypto/fips140 パッケージ
crypto/fips140.Enabled 関数は、FIPS 140-3 モードがアクティブかどうかを報告します。
GOFIPS140 環境変数
GOFIPS140 環境変数は、go build、go install、および go test とともに使用され、実行可能プログラムにリンクされる Go Cryptographic Module のバージョンを選択できます。
-
offがデフォルトであり、使用中の標準ライブラリツリーにあるcrypto/internal/fips140/...パッケージを使用します。 -
latestはoffと同様ですが、FIPS 140-3 モードをデフォルトで有効にします。 -
v1.0.0は、2025 年初頭にフリーズされ、Go 1.24 で初めて出荷された Go Cryptographic Module バージョン v1.0.0 を使用します。FIPS 140-3 モードをデフォルトで有効にします。
モジュールの検証
Google は現在、Go Cryptographic Module の少なくとも年次 Geomys CMVP 検証を促進するための契約関係にあります。検証時に Go Cryptographic Module をフリーズし、提出用の新しいモジュールバージョンを作成します。
これらの検証は、多くの一般的なオペレーティングシステムとハードウェアプラットフォームの組み合わせをサポートする、包括的なオペレーティング環境セットでテストされます。
モジュールでセキュリティ上の問題が発見された場合、非定期的な検証が実行されることがあります。
検証済みモジュールバージョン
CMVP 検証を完了したモジュールバージョンのリスト
現在、検証を完了したモジュールバージョンはありません。
処理中のモジュールバージョン
CMVP Modules In Process List に現在掲載されているモジュールバージョンのリスト
- v1.0.0 (CAVP Certificate A6650)、レビュー保留中、Go 1.24 以降で利用可能
テスト中の実装モジュールバージョン
CMVP Implementation Under Test List に現在掲載されているモジュールバージョンのリスト
現在、テスト中のモジュールバージョンはありません。
Go+BoringCrypto
以前の、特定の FIPS 140-3 承認アルゴリズムに BoringCrypto モジュールを使用するサポートされていないメカニズムは現在も利用可能ですが、将来のリリースでこのページで説明されているメカニズムに削除され、置き換えられる予定です。
Go+BoringCrypto は、ネイティブの FIPS 140-3 モードとは互換性がありません。