Соответствие FIPS 140-3
Начиная с Go 1.24, исполняемые файлы Go могут нативно работать в режиме, который обеспечивает соответствие стандарту FIPS 140-3. Более того, инструментарий может собирать приложения с использованием замороженных версий криптографических пакетов, составляющих Go Cryptographic Module.
FIPS 140-3
NIST FIPS 140-3 — это режим соответствия правительства США для криптографических приложений, который среди прочего требует использования набора одобренных алгоритмов и использования CMVP-сертифицированных криптографических модулей, протестированных в целевой операционной среде.
Механизмы, описанные на этой странице, обеспечивают соответствие стандарту FIPS 140-3 для приложений на Go.
Приложения, которым не требуется соответствие FIPS 140-3, могут безопасно игнорировать эти настройки и не должны включать режим FIPS 140-3.
ПРИМЕЧАНИЕ: Простое использование криптографического модуля, соответствующего FIPS 140-3 и прошедшего сертификацию, может не удовлетворять всем соответствующим нормативным требованиям. Команда Go не может предоставить никаких гарантий или поддержки в отношении того, как использование предоставленного режима FIPS 140-3 может или не может удовлетворять конкретным нормативным требованиям для отдельных пользователей. Необходимо тщательно оценить, удовлетворяет ли использование данного модуля ваши конкретные требования.
Go Cryptographic Module
Go Cryptographic Module — это коллекция стандартных библиотечных пакетов Go,
находящихся по пути crypto/internal/fips140/..., реализующих алгоритмы,
одобренные FIPS 140-3.
Публичные API-пакеты, такие как crypto/ecdsa и crypto/rand, прозрачно используют
Go Cryptographic Module для реализации алгоритмов FIPS 140-3.
Режим FIPS 140-3
Параметр среды выполнения fips140 GODEBUG управляет тем, работает ли
Go Cryptographic Module в режиме FIPS 140-3. По умолчанию он установлен в значение off.
После запуска программы изменить его нельзя.
Когда Go работает в режиме FIPS 140-3 (параметр fips140 в GODEBUG установлен в on):
-
Go Cryptographic Module автоматически выполняет самопроверку целостности во время
init, сравнивая контрольную сумму объектного файла модуля, вычисленную во время сборки, с символами, загруженными в память. -
Все алгоритмы выполняют тесты на известные ответы согласно соответствующим руководящим материалам FIPS 140-3, либо во время
init, либо при первом использовании. -
Выполняются тесты согласованности пар. Обратите внимание, что это может вызвать замедление до 2x для определенных типов ключей, что особенно актуально для эфемерных ключей.
-
crypto/rand.Readerреализован с использованием NIST SP 800-90A DRBG. Чтобы гарантировать тот же уровень безопасности, что и приGODEBUG=fips140=off, случайные байты также извлекаются из CSPRNG платформы при каждом вызовеReadи смешиваются с выходными данными как некредитованные дополнительные данные. -
Пакет
crypto/tlsбудет игнорировать и не будет согласовывать никакую версию протокола, набор шифров, алгоритм подписи или механизм обмена ключами, не одобренные FIPS 140-3. -
crypto/rsa.SignPSSсPSSSaltLengthAutoограничивает длину соли до длины хэша.
Когда используется GODEBUG=fips140=only, в дополнение к вышеуказанному, криптографические алгоритмы, не соответствующие стандарту FIPS 140-3, будут возвращать ошибку или вызывать панику. Обратите внимание, что данный режим является лишь приблизительной попыткой соответствия и не может гарантировать полного соответствия всем требованиям FIPS 140-3.
GODEBUG=fips140=on и only не поддерживаются на платформах OpenBSD, Wasm, AIX и 32-битных версиях Windows.
Пакет 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— использует версию Go Cryptographic Module v1.0.0, замороженную в начале 2025 года и впервые поставленную в Go 1.24. По умолчанию включает режим FIPS 140-3.
Проверка модулей
В настоящее время Google имеет договорное соглашение с Geomys, чтобы обеспечить как минимум ежегодную проверку Go Cryptographic Module в рамках CMVP (Cryptographic Module Validation Program). В момент проверки мы замораживаем Go Cryptographic Module и создаем новую версию модуля для подачи.
Эти проверки проводятся на обширном наборе операционных сред, поддерживающих множество популярных комбинаций операционных систем и аппаратных платформ.
Внеочередные проверки могут быть проведены в случае обнаружения проблем безопасности в модуле.
Проверенные версии модулей
Список версий модулей, прошедших проверку CMVP:
На данный момент нет версий модулей, прошедших проверку.
Версии модулей в процессе проверки
Список версий модулей, находящихся в списке модулей в процессе проверки CMVP:
- v1.0.0 (CAVP Сертификат A6650), Ожидается рассмотрение, доступна в Go 1.24+
Версии модулей, находящихся в тестировании
Список версий модулей, которые в настоящее время находятся в списке модулей, находящихся в тестировании (IUT List):
На данный момент нет версий модулей, находящихся в тестировании.
Go+BoringCrypto
Предыдущий, неподдерживаемый механизм использования модуля BoringCrypto для определённых алгоритмов, одобренных FIPS 140-3, по-прежнему доступен, но он предназначен для удаления и замены на механизм, описанный на этой странице, в будущем выпуске.
Go+BoringCrypto несовместим с нативным режимом FIPS 140-3.