FIPS 140-2
Федеральный стандарт обработки информации (FIPS) Публикация 140-2 (FIPS PUB 140-2) с названием «Требования к безопасности криптографических модулей» — это стандарт компьютерной безопасности правительства США, используемый для утверждения криптографических модулей. Elasticsearch предлагает режим совместимости с FIPS 140-2, и поэтому может работать в JVM с конфигурацией FIPS 140-2.
JVM, поставляемый с Elasticsearch, не настроен для FIPS 140-2. Вам необходимо настроить внешнюю JDK с сертифицированным Java-безопасностью провайдером FIPS 140-2. Обратитесь к матрице поддержки JVM Elasticsearch для поддержки конфигураций JVM. См. подписки для получения необходимой лицензии.
Соответствие FIPS 140-2 требует использования только одобренных FIPS/рекомендуемых NIST криптографических алгоритмов. Обычно это можно сделать следующим образом:
- Установка и настройка сертифицированного FIPS поставщика безопасности Java.
- Обеспечение соответствия конфигурации Elasticsearch требованиям FIPS 140-2, как описано ниже.
- Установка
xpack.security.fips_mode.enabledнаtrueвelasticsearch.yml. Примечание — это настройка не является достаточной для соответствия FIPS 140-2.
Настройка Elasticsearch для FIPS 140-2
Подробные инструкции по настройке, необходимой для соответствия требованиям FIPS 140-2, выходят за рамки этого документа. Пользователь несет ответственность за обеспечение соответствия требованиям FIPS 140-2. Elasticsearch был протестирован со специфической конфигурацией, описанной ниже. Однако существуют и другие возможные конфигурации для достижения соответствия.
Ниже приведён общий обзор необходимой конфигурации:
- Используйте внешнюю установку Java. JVM, поставляемый с Elasticsearch, не настроен для FIPS 140-2.
- Установите файл(ы) .jar сертифицированного FIPS поставщика безопасности в каталог
libElasticsearch. - Настройте Java на использование сертифицированного FIPS поставщика безопасности (см. ниже).
- Настройте менеджер безопасности Elasticsearch для разрешения использования сертифицированного FIPS поставщика (см. ниже).
- Убедитесь, что хранилище ключей и хранилище доверенных сертификатов настроены правильно (см. ниже).
- Убедитесь, что настройки TLS настроены правильно (см. ниже).
- Убедитесь, что настройки хеширования паролей настроены правильно (см. ниже).
- Убедитесь, что настройки хеширования кэшированных паролей настроены правильно (см. ниже).
- Настройте
elasticsearch.ymlдля использования режима FIPS 140-2, см. (ниже). - Проверьте, что поставщик безопасности установлен и настроен правильно (см. ниже).
- Ознакомьтесь с рекомендациями по обновлению (см. ниже) и ограничениями (см. ниже).
Поставщик безопасности Java
Подробные инструкции по установке и настройке сертифицированного FIPS поставщика безопасности Java выходят за рамки данного документа. В частности, требуется сертифицированная реализация FIPS JCA и JSSE, чтобы JVM использовала валидированные FIPS реализации рекомендованных NIST криптографических алгоритмов.
Elasticsearch был протестирован с bc-fips 1.0.2.5 и bctls-fips 1.0.19 от Bouncy Castle. Обратитесь к матрице поддержки JVM Elasticsearch для получения подробной информации о поддерживаемых комбинациях JVM и поставщика безопасности в режиме FIPS. Elasticsearch не поставляется с сертифицированным FIPS провайдером. Пользователь несет ответственность за установку и настройку поставщика безопасности для обеспечения соответствия требованиям FIPS 140-2. Использование сертифицированного FIPS провайдера гарантирует, что используются только одобренные криптографические алгоритмы.
Для настройки Elasticsearch на использование дополнительных поставщиков безопасности настройте свойство JVM Elasticsearch JVM property java.security.properties, чтобы указать на файл (пример) в каталоге config Elasticsearch. Убедитесь, что сертифицированный FIPS поставщик безопасности настроен с наименьшим порядком. Этот файл должен содержать необходимую конфигурацию для указания Java на использование сертифицированного FIPS поставщика безопасности.
Менеджер безопасности Java
Весь код, выполняемый в Elasticsearch, подчиняется ограничениям безопасности, налагаемым менеджером безопасности Java. Установленный и настроенный вами поставщик безопасности может потребовать дополнительных разрешений для корректной работы. Вы можете предоставить эти разрешения, указав собственный политику безопасности Java
Для настройки менеджера безопасности Elasticsearch настройте свойство JVM java.security.policy, чтобы указать на файл (пример) в каталоге config Elasticsearch с необходимыми разрешениями. Этот файл должен содержать необходимую конфигурацию для менеджера безопасности Java, чтобы предоставить требуемые разрешения, необходимые для поставщика безопасности.
Хранилище ключей Elasticsearch
FIPS 140-2 (через NIST Special Publication 800-132) диктует, что ключи шифрования должны иметь по крайней мере эффективную силу 112 бит. Поэтому хранилище ключей Elasticsearch, хранящее безопасные настройки узла, должно быть защищено паролем, удовлетворяющим этому требованию. Это означает, что пароль должен иметь длину 14 байт, что эквивалентно 14-символьному паролю в кодировке ASCII или 7-символьному паролю в кодировке UTF-8. Вы можете использовать подкоманду elasticsearch-keystore passwd для изменения или установки пароля существующего хранилища ключей. Обратите внимание, что при защите хранилища ключей паролем, вам необходимо каждый раз предоставлять пароль при запуске Elasticsearch.
TLS
SSLv2 и SSLv3 не разрешены FIPS 140-2, поэтому SSLv2Hello и SSLv3 нельзя использовать для ssl.supported_protocols.
Использование шифров TLS в основном регулируется соответствующим криптографическим модулем (сертифицированным FIPS поставщиком безопасности, используемым вашей JVM). Все шифры, настроенные по умолчанию в Elasticsearch, совместимы с FIPS 140-2 и, следовательно, могут быть использованы в JVM FIPS 140-2. См. ssl.cipher_suites.
Хранилища и ключи TLS
Хранилища ключей могут быть использованы в ряде общих настройках TLS для удобного хранения ключей и материалов доверия. Ни JKS, ни PKCS#12 хранилища ключей не могут быть использованы в JVM с конфигурацией FIPS 140-2. Избегайте использования этих типов хранилищ ключей. Ваш поставщик FIPS 140-2 может предоставить совместимую реализацию хранилища ключей, которую можно использовать, или вы можете использовать файлы в формате PEM. Для использования ключей в формате PEM вы можете использовать соответствующие \*.key и *.certificate конфигурационные параметры, а для материалов доверия вы можете использовать *.certificate_authorities.
Соответствие FIPS 140-2 диктует, что длина открытых ключей, используемых для TLS, должна соответствовать силе используемого алгоритма симметричного ключа в TLS. В зависимости от значения ssl.cipher_suites, которое вы выберете, ключи TLS должны иметь соответствующую длину в соответствии со следующей таблицей:
Таблица 83. Сравнение сил ключей
Алгоритм симметричного ключа | Длина ключа RSA | Длина ключа ECC |
| 2048 | 224-255 |
| 3072 | 256-383 |
| 15630 | 512+ |
Хеширование паролей
Хотя Elasticsearch предлагает несколько алгоритмов для безопасного хэширования учётных данных на диске, только семейство алгоритмов, основанных на PBKDF2, соответствует стандарту FIPS 140-2 для хэширования сохранённых паролей. Однако, поскольку PBKDF2 по сути является функцией вывода ключа, ваш поставщик безопасности JVM может потребовать силу ключа в 112 бит. Хотя FIPS 140-2 не предписывает стандарты для паролей пользователей, это требование может повлиять на хэширование паролей в Elasticsearch. Для соответствия этому требованию, позволяя при этом использовать пароли, удовлетворяющие вашей политике безопасности, Elasticsearch предлагает pbkdf2_stretch, который является рекомендуемым алгоритмом хэширования при работе Elasticsearch в средах FIPS 140-2. pbkdf2_stretch выполняет один раунд SHA-512 над паролем пользователя перед передачей его в реализацию PBKDF2.
Вы по-прежнему можете использовать один из простых вариантов pbkdf2 вместо pbkdf2_stretch, если у вас есть внешние политики и инструменты, которые могут гарантировать, что все пароли пользователей для доменных, встроенных и файловых сфер имеют длину более 14 байт.
Вы должны установить параметр xpack.security.authc.password_hashing.algorithm на одно из доступных значений pbkdf_stretch_*. Когда режим FIPS-140 включён, значение по умолчанию для xpack.security.authc.password_hashing.algorithm равно pbkdf2_stretch. См. Алгоритмы хеширования кеша пользователей и паролей.
Изменения в конфигурации хэширования паролей не являются ретроактивными, поэтому хэшированные учётные данные существующих пользователей для доменных, встроенных и файловых сфер не обновляются на диске. Чтобы обеспечить соответствие FIPS 140-2, пересоздайте пользователей или измените их пароли с помощью инструмента командной строки elasticsearch-user для файловых сфер и API создания пользователей и изменения паролей для встроенных и доменных сфер. Другие типы сфер не затронуты и не требуют никаких изменений.
Хэширование кэшированных паролей
ssha256 (солёное sha256) рекомендуется для хэширования кеша. Хотя PBKDF2 соответствует стандарту FIPS-140-2, он — по своей природе — медленный и, следовательно, не подходит в качестве алгоритма хэширования кеша. Кэшированные учётные данные никогда не хранятся на диске, и солёное sha256 обеспечивает достаточный уровень безопасности для хэширования учётных данных в оперативной памяти без чрезмерной нагрузки на производительность. Вы можете использовать PBKDF2, однако вам следует предварительно тщательно оценить влияние на производительность. В зависимости от вашей развертки, дополнительная нагрузка PBKDF2 может отменить большинство преимуществ от использования кэша.
Установите все параметры cache.hash_algo на ssha256 или оставьте их неопределёнными, так как ssha256 является значением по умолчанию для всех параметров cache.hash_algo. См. Алгоритмы хеширования кеша пользователей и паролей.
Кэш пользователей будет очищен при перезапуске узла, поэтому любые существующие хеши, использующие несовместимые алгоритмы, будут удалены, а новые будут созданы с выбранным вами алгоритмом.
Настройка Elasticsearch elasticsearch.yml
- Установите
xpack.security.fips_mode.enabledнаtrueвelasticsearch.yml. Этот параметр используется для обеспечения конфигурации некоторых внутренних настроек в соответствии со стандартом FIPS 140-2 и предоставляет дополнительную проверку. - Установите
xpack.security.autoconfiguration.enabledнаfalse. Это отключит автоматическую конфигурацию параметров безопасности. Пользователи должны убедиться, что параметры безопасности правильно настроены для соответствия стандарту FIPS-140-2. Это применимо только для новых установок. - Установите
xpack.security.authc.password_hashing.algorithmсоответствующим образом, см. выше. - Другие соответствующие параметры безопасности. Например, TLS для транспортного и HTTP интерфейсов. (не рассматривается явно здесь или в примере ниже)
- Дополнительно: Установите
xpack.security.fips_mode.required_providersвelasticsearch.ymlдля обеспечения необходимых поставщиков безопасности (8.13+). см. ниже.
xpack.security.fips_mode.enabled: true xpack.security.autoconfiguration.enabled: false xpack.security.fips_mode.required_providers: ["BCFIPS", "BCJSSE"] xpack.security.authc.password_hashing.algorithm: "pbkdf2_stretch"
Проверка установленного поставщика безопасности
Для проверки установки и использования поставщика безопасности вы можете использовать любой из следующих шагов:
- Убедитесь, что необходимые поставщики безопасности настроены с наименьшим порядком в файле, на который указывает
java.security.properties. Например,security.provider.1имеет меньший порядок, чемsecurity.provider.2 - Установите
xpack.security.fips_mode.required_providersвelasticsearch.ymlв список необходимых поставщиков безопасности. Этот параметр используется для гарантии установки и настройки правильного поставщика безопасности. (8.13+) Если поставщик безопасности не установлен должным образом, Elasticsearch не запустится.["BCFIPS", "BCJSSE"]— значения, используемые для сертифицированного FIPS JCE и JSSE поставщика Bouncy Castle.
Учитываемые моменты при обновлении
Elasticsearch 8.0+ требует Java 17 или более поздней версии. Elasticsearch 8.13+ был протестирован с сертифицированной FIPS-реализацией Java 17 от Bouncy Castle и является рекомендуемым поставщиком безопасности Java при работе Elasticsearch в режиме FIPS 140-2. Обратите внимание - Elasticsearch не поставляется с сертифицированным поставщиком безопасности FIPS и требует явной установки и настройки.
В качестве альтернативы рассмотрите использование Elasticsearch Service в сертифицированной FedRAMP региона GovCloud.
Некоторые алгоритмы шифрования могут больше не быть доступны по умолчанию в обновлённых поставщиках безопасности FIPS 140-2. Отмечается, что Triple DES и PKCS1.5 RSA теперь не рекомендуются, и Bouncy Castle теперь требует явной конфигурации для продолжения использования этих алгоритмов.
Если вы планируете обновить существующий кластер до версии, которая может работать в JVM с конфигурацией FIPS 140-2, мы рекомендуем сначала выполнить поэтапное обновление до новой версии в вашей существующей JVM и выполнить все необходимые изменения конфигурации в подготовки к запуску в режиме FIPS 140-2. Затем вы можете выполнить поэтапный перезапуск узлов, запускайте каждый узел в JVM с конфигурацией FIPS 140-2. Во время перезапуска Elasticsearch:
- Обновляет параметры безопасности до последней, совместимой версии. JVM с FIPS 140-2 не может загружать предыдущие версии формата. Если ваш хранилище ключей не защищён паролем, вы должны вручную установить пароль. См. Хранилище ключей Elasticsearch.
- Обновляет самогенерированные пробные лицензии до последней версии, совместимой с FIPS 140-2.
Если ваша подписка уже поддерживает режим FIPS 140-2, вы можете выбрать поэтапное обновление, одновременно запускайте каждый обновлённый узел в JVM с конфигурацией FIPS 140-2. В этом случае вам также потребуется вручную сгенерировать elasticsearch.keystore и перенести все параметры безопасности в него, помимо необходимых изменений конфигурации, указанных ниже, перед запуском каждого узла.
Ограничения
Из-за ограничений, налагаемых соответствием стандарту FIPS 140-2, ряд функций недоступны при работе в режиме FIPS 140-2. Список следующий:
- Плагин Azure Classic Discovery
- Инструмент
elasticsearch-certutil. Однако,elasticsearch-certutilможет быть успешно использован в JVM без конфигурации FIPS 140-2 (указав переменную окруженияES_JAVA_HOMEна другую установку Java) для генерации ключей и сертификатов, которые могут быть позже использованы в JVM с конфигурацией FIPS 140-2. - Клиент SQL CLI не может работать в JVM с конфигурацией FIPS 140-2 при использовании TLS для транспортной безопасности или PKI для аутентификации клиента.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/fips-140-compliance.html