Используйте Tink, чтобы соответствовать требованиям безопасности FIPS 140-2.

Сам Tink не сертифицирован по стандарту FIPS 140-2 . Однако он поддерживает несколько алгоритмов, одобренных FIPS 140-2, а базовые реализации могут использовать проверенные криптографические модули, такие как BoringSSL BoringCrypto . Tink включает РАБОЧУЮ ОБЛАСТЬ для создания BoringSSL в режиме FIPS.

Обратите внимание, что рабочая область не дает никаких гарантий того, что использование BoringSSL соответствует требованиям FIPS. Мы настоятельно рекомендуем вам ознакомиться с официальной политикой безопасности BoringCrypto.

Поддерживаемые алгоритмы

Следующие алгоритмы в Tink одобрены в соответствии со стандартом FIPS 140-2 (дополнительную информацию см. в Приложении A к FIPS 140-2 ):

  • Аутентифицированное шифрование
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC
    • HMAC-SHA256
    • AES-CMAC
  • Цифровые подписи
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

Режим только FIPS в C++

Если вам необходимо использовать одобренные FIPS 140-2 алгоритмы и проверенные реализации, вы можете собрать Tink в режиме только FIPS. Это ограничивает использование утвержденными алгоритмами и проверяет, использует ли Tink проверенный криптографический модуль.

Это меняет поведение Tink следующим образом:

  • Функции Register() регистрируют только алгоритмы, реализация которых подтверждена FIPS. Это означает, что вы можете использовать наборы ключей только для алгоритмов, использующих проверенный криптографический модуль.
  • Tink проверяет, был ли BoringSSL собран с помощью модуля BoringCrypto. Вызовы примитивов возвращают INTERNAL ошибку, когда модуль недоступен.
  • Использование примитивов в subtle/ ограничено алгоритмами, использующими проверенный криптографический модуль.

СкучноКрипто

Tink использует BoringCrypto на C++ для предоставления доступа к проверенному криптографическому модулю. Текущий статус проверки накладывает следующие дополнительные ограничения на доступные алгоритмы в режиме только FIPS:

  • AES-CMAC не проверен и недоступен.
  • RSA-SSA-PKCS1 ограничен 3072-битным модулем.
  • RSA-SSA-PSS ограничен 3072-битным модулем.

Чтобы использовать модуль BoringCrypto с Bazel, вы можете раскомментировать определение local_repository для boringssl в C++ WORKSPACE .

Включить во время компиляции

Чтобы собрать Tink только в режиме FIPS, установите флаг во время компиляции:

bazel build ... --//third_party/tink/cc/config:use_only_fips=True

Если вы хотите проверить во время выполнения, создан ли Tink только в режиме FIPS, вы можете включить заголовок internal/fips_utils.h который предоставляет константу kUseOnlyFips .

Если вы не создаете Tink только в режиме FIPS, он все равно может использовать проверенные реализации для некоторых алгоритмов, но не ограничивать использование других алгоритмов.

Включить во время выполнения

В качестве альтернативы созданию Tink только в режиме FIPS вы можете вызвать crypto::tink::RestrictToFips() из config/tink_fips.h , который устанавливает флаг во время выполнения, чтобы включить ограничения для примитивов FIPS.

ВНИМАНИЕ: если вы используете опцию времени выполнения, то перед обработкой любого материала ключа, регистрацией менеджера ключей или другими функциями Tink необходимо вызвать crypto::tink::RestrictToFips() . Кроме того, вы должны убедиться, что BoringSSL построен с использованием модуля BoringCrypto, иначе Tink не позволит вам обрабатывать какие-либо данные.