Dev48
ЯЗЫК
  • О нас
  • Услуги
  • Индустрии
  • Технологии
  • Статьи
  • Контакты
Забронировать звонок
    Главная/Статьи/Sozdanie sborki clickhouse sootvetstvuyuschey standartu fips
Dev48
info@dev48.org+375 29 320-40-96WhatsApp@isky_by

© 2026 · Все права защищены.

Создание сборки ClickHouse®, соответствующей стандарту FIPS

Источник: Altinity | Run open source ClickHouse® better•10 ноября 2026 г. в 15:35

Создание сборки ClickHouse®, соответствующей стандарту FIPS

FIPS 140 — это государственный стандарт для криптографических модулей. Altinity поставляет сборки ClickHouse, соответствующие стандартам FIPS.

Кратко (TL;DR): Altinity предоставляет сборку ClickHouse 25.3 с поддержкой FIPS для сред, где действуют требования FIPS. В этой сборке используется AWS-LC FIPS и обновлены такие зависимости, как Azure SDK, krb5 и драйвер MongoDB, для работы с библиотекой FIPS, в то время как функции, которые невозможно использовать в сборке FIPS, отключены. Сборка протестирована и проверена на соответствие требованиям FIPS.

В апреле 2026 года мы выпустили сборку ClickHouse 25.3.8 с поддержкой FIPS. В этой статье мы расскажем о трудностях, с которыми столкнулись в процессе ее создания.

Что такое FIPS?

FIPS 140 — это стандарт криптографических модулей правительства США. Организации в регулируемых отраслях (госсектор, финансы, здравоохранение) часто требуют, чтобы все криптографические операции выполнялись через модуль, прошедший валидацию FIPS. Сборка ClickHouse с поддержкой FIPS означает, что все TLS-соединения, шифрование данных на диске и хеширование для аутентификации используют сертифицированную криптографическую библиотеку вместо стандартной.

Altinity поддерживает сборки ClickHouse с поддержкой FIPS для клиентов, которые работают в условиях этих требований соответствия. Обычная сборка ClickHouse уже шифрует данные при передаче и в состоянии покоя, но поставляемая с ней криптографическая библиотека не проходила процесс валидации FIPS. Сборка FIPS заменяет ее на прошедшую такую валидацию.

Выбор криптографической библиотеки

Нашей предыдущей сборкой с поддержкой FIPS была версия 24.3.5.48, выпущенная в сентябре 2024 года. В ней в качестве криптографического модуля использовался BoringSSL, прошедший валидацию по стандарту FIPS 140-2 (Security Policy #4407). Эта сборка была доступна только для платформы AMD64.

Начиная с базовой версии ClickHouse 24.4, BoringSSL was replaced with OpenSSL 3.2. Это означало, что мы больше не могли просто переносить BoringSSL в новые версии ClickHouse без поддержки постоянно растущего набора патчей. Это также привело к измеримому регрессу производительности SSL в базовых сборках.

Для сборки FIPS 25.3 у нас было три требования: перейти с FIPS 140-2 на 140-3 (новую редакцию стандарта), восстановить производительность SSL, потерянную при переходе на OpenSSL, и добавить поддержку ARM (Aarch64). AWS-LC FIPS 2.0.0, универсальная криптографическая библиотека, поддерживаемая командой AWS Cryptography, удовлетворяла всем трем требованиям. Она происходит от BoringSSL, включает оптимизированный под производительность ассемблерный код как для x86-64, так и для ARM, и была validated under FIPS 140-3 в октябре 2024 года.

Мы провели бенчмаркинг операций шифрования ClickHouse по всем поддерживаемым режимам шифрования, сравнив три сборки: 24.3 stable (BoringSSL), 25.3 stable (OpenSSL 3.2) и 25.3 FIPS (AWS-LC). Ниже приведены результаты для нескольких репрезентативных режимов:

Множители указаны относительно стабильной версии 24.3. Базовая сборка 25.3 работает в 5–13 раз медленнее старой версии 24.3, в зависимости от режима шифрования. Сборка FIPS с AWS-LC сокращает этот разрыв, оставаясь в пределах примерно 2× от исходной производительности BoringSSL и будучи при этом в 3–6 раз быстрее текущей базовой сборки на базе OpenSSL.

Сборка сервера FIPS

После выбора библиотеки следующим шагом была интеграция AWS-LC в систему сборки ClickHouse и обеспечение их совместной работы.

Сборка

Добавив AWS-LC в систему сборки ClickHouse, нам пришлось исправить все места, где код полагался на API OpenSSL 3, которые AWS-LC не предоставляет. ClickHouse и его зависимости теперь ориентированы на API OpenSSL 3, в то время как AWS-LC предоставляет старый API в стиле 1.1.1. Здесь были некоторые критические изменения, поэтому мы не рассчитывали на легкую прогулку.

Чтобы упростить процесс, сначала мы отключили все сторонние библиотеки (используя флаг конфигурации ‑DENABLE_LIBRARIES=0), чтобы посмотреть, где произойдет сбой. Сбой действительно произошел в нескольких местах из-за отсутствующих или несовместимых сигнатур функций. Чтобы исправить это, мы добавили evp_API_shim.h и внедрили его в каждый компонент, который зависел от целевой библиотеки OpenSSL.

Включение функций

Выполнив базовые настройки, мы начали осторожно включать зависимости одну за другой и проверять следующее:

  • Сборка завершается успешно.
  • ClickHouse работает без сбоев.
  • Функции, соответствующие библиотеке, работают должным образом.

Многие зависимости оказались простыми и работали так же, как в оригинальной версии 25.3.8, включая полную поддержку:

  • Хранилища Azure Blob Storage (через форк azure-sdk-for-cpp от Altinity, см. ниже);
  • gRPC;
  • Parquet;
  • Kafka, NATS, MySQL, MongoDB;
  • Cassandra, AMQP.

Некоторые из них потребовали изменений в evp_API_shim.h или в конфигурационных файлах соответствующих библиотек. Для двух потребовалось создать форки с прямым изменением исходного кода, а еще одна потребовала нетривиальных исправлений.

azure-sdk-for-cpp

Мы создали форк azure-sdk-for-cpp, чтобы исправить сборку. Изначально сборка завершалась ошибкой из-за отсутствия заголовочного файла <openssl/ocsp.h> в AWS-LC. Этот заголовок использовался Azure SDK для C++ для реализации проверки отзыва сертификатов. Он включается только тогда, когда EnableCertificateRevocationListCheck явно установлен в значение true в CurlTransportSslOptions (по умолчанию false), чего ClickHouse никогда не делает.

krb5

Для krb5 также был сделан форк, чтобы выполнить сборку с AWS-LC и отключить шифры, не одобренные FIPS (Camellia, DES/3DES). В результате аутентификация Kerberos в сборке FIPS требует, чтобы KDC поддерживал типы шифрования AES (aes256-cts-hmac-sha1-96 или aes128-cts-hmac-sha1-96). KDC, настроенный только на DES или 3DES, работать не будет.

Драйвер MongoDB

Драйвер MongoDB для C не потребовал создания форка, но его интеграция с TLS нуждалась в трех нетривиальных исправлениях в evp_API_shim.h. Все они проистекали из тонких различий в поведении между OpenSSL и AWS-LC, которые незаметны на уровне API: BIO_get_ssl молча возвращал неинициализированный указатель, поскольку обработчик контроллеров BIO в AWS-LC не поддерживает ожидаемый управляющий код; BIO_do_handshake ничего не делал, так как ни диспетчеризация конечного автомата, ни транспортное соединение BIO не работали так же, как в OpenSSL; а X509_VERIFY_PARAM_set1_host с именем нулевой длины полностью портил проверку сертификатов. Без этих исправлений любое TLS-соединение с MongoDB завершалось бы сбоем или аварийным завершением.

Имея эти форки и исправления, мы в конце концов смогли выполнить сборку с параметром ‑DENABLE_LIBRARIES=1, но оставили ‑DENABLE_RUST=0. В результате в сборке FIPS недоступны три функции ClickHouse:

  • Табличный движок DeltaLake и табличная функция deltaLake();
  • Язык запросов PRQL;
  • Интерактивный поиск Skim в clickhouse-client.

Компоненты на языке Rust, используемые этими функциями, в настоящее время не поддерживаются в данной сборке FIPS.

Тестирование

В какой-то момент мы заметили, что тест для кодека шифрования MergeTree завершается неудачно. Оказалось, что AES_128_GCM_SIV и AES_256_GCM_SIV не одобрены FIPS. Мы заменили их на одобренные FIPS аналоги: AES_128_GCM и AES_256_GCM.

Это критическое изменение для всех, кто использует столбцы с этими кодеками шифрования. Сборка FIPS намеренно использует другие байт-коды на диске, поэтому попытка прочитать данные, зашифрованные с помощью SIV, в сборке FIPS приводит к немедленной ошибке, а не к скрытому повреждению данных. Имена кодеков в DDL и разделы конфигурации также изменяются:

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

Валидация FIPS

Мы встроили тестовые наборы соответствия SSL и валидации ACVP для AWS-LC прямо в бинарный файл FIPS (clickhouse ssl-shim, clickhouse ssl-handshaker, clickhouse acvp-server). Это позволяет нам запускать полный набор из 8037 тестов соответствия TLS и 31 криптографического алгоритма ACVP против того самого бинарного файла, который поставляется клиентам, а не просто отдельной эталонной сборки криптографической библиотеки.

Обслуживание кода

Мы также провели значительную работу по обслуживанию кода, включая, помимо прочего:

  • Добавление нового конфигурационного элемента <cipherSuites> для управления шифрами TLS 1.3 — существующий элемент <cipherList> управляет только TLS 1.2 и ниже. Значение по умолчанию ограничивает TLS 1.3 набором TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256, исключая TLS_CHACHA20_POLY1305_SHA256, который не одобрен стандартом FIPS.
  • Исправление ClickHouse Keeper, чтобы он учитывал параметры <cipherList>, <cipherSuites>, <dhParamsFile> и <ecdhCurve> из конфигурации — ранее настройка TLS в Keeper молча игнорировала эти параметры.
  • Исправление параметра disableProtocols для корректной обработки tlsv1_3, который раньше молча игнорировался, из-за чего было невозможно отключить TLS 1.3 через конфигурацию.
  • Добавление проверок при запуске, которые выводят информацию о режиме FIPS, результатах тестов с известными ответами и результатах проверки целостности.
  • Добавление FIPS_CLICKHOUSE в таблицу system.build_options и исправление OPENSSL_VERSION и OPENSSL_IS_BORING_SSL, которые отображались пустыми в сборках FIPS.
  • Переключение внутреннего хэш-бэкенда PostgreSQL на делегирование через AWS-LC, чтобы хэширование аутентификации (SCRAM-SHA-256, MD5) проходило через проверенный модуль FIPS вместо собственной программной реализации PostgreSQL.
  • Удаление конечной точки Sentry вышестоящего репозитория по умолчанию и удаление запасных вариантов сборки Docker, которые устанавливают пакеты ClickHouse из вышестоящего репозитория.

Вы можете прочитать полный список изменений, чтобы узнать подробности.

Заключение

Сборки altinityfips предоставляют пользователям ClickHouse в государственном секторе, финансах, здравоохранении и других отраслях вариант, совместимый с FIPS. Наши усилия по изменению процесса сборки ClickHouse, а также форку или исправлению необходимых библиотек и инструментов являются еще одним примером приверженности Altinity созданию решений, необходимых нашим клиентам.

Присоединяйтесь к нашему Slack

ClickHouse является зарегистрированным товарным знаком ClickHouse, Inc.; Altinity не связана и не аффилирована с ClickHouse, Inc.

Получайте последние новости ClickHouse прямо на свой электронный ящик каждый месяц.

← Все статьи

О чём эта статья

Ещё в разделе «Данные и аналитика»

Все →
Исследование Dynatrace показывает, что амбиции в сфере ИИ опережают операционное подтверждение
Dynatrace

Исследование Dynatrace показывает, что амбиции в сфере ИИ опережают операционное подтверждение

Выпущен Elastic Stack 8.19.25
Elastic

Выпущен Elastic Stack 8.19.25

Nebul внедряет NetApp Novus для обеспечения работы суверенной инфраструктуры ИИ
NetApp

Nebul внедряет NetApp Novus для обеспечения работы суверенной инфраструктуры ИИ

Примечания к выпуску OneAgent версии 1.349
Dynatrace

Примечания к выпуску OneAgent версии 1.349

Защита сторонних скриптов, которые загружает ваш SDK аналитики
RudderStack

Защита сторонних скриптов, которые загружает ваш SDK аналитики

Обнаружение полей форм: меньше пропущенных полей, более аккуратные метки
Datalab

Обнаружение полей форм: меньше пропущенных полей, более аккуратные метки

Ещё от Altinity

Важное уведомление о безопасности для сборок ClickHouse® от Altinity – Обновление от 5 ноября
Altinity

Важное уведомление о безопасности для сборок ClickHouse® от Altinity – Обновление от 5 ноября

Altinity и EnterpriseDB объединяют усилия для создания суверенных систем данных на базе ИИ
Altinity

Altinity и EnterpriseDB объединяют усилия для создания суверенных систем данных на базе ИИ

Важное уведомление о безопасности для сборок Altinity для ClickHouse®
Altinity

Важное уведомление о безопасности для сборок Altinity для ClickHouse®

Важное предупреждение о безопасности для сборок Altinity ClickHouseⓇ
Altinity

Важное предупреждение о безопасности для сборок Altinity ClickHouseⓇ

Распространенные ошибки при проектировании схемы для логов в ClickHouse®
Altinity

Распространенные ошибки при проектировании схемы для логов в ClickHouse®

Представляем CAS: готовое разделение вычислений и хранилища для таблиц ClickHouse® MergeTree
Altinity

Представляем CAS: готовое разделение вычислений и хранилища для таблиц ClickHouse® MergeTree