Сам 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 не позволит вам обрабатывать какие-либо данные.