Шифрование данных в Managed Service for ClickHouse
Managed Service for ClickHouse предоставляет инструменты для защиты данных, включая встроенные функции шифрования на уровне столбцов и возможность реализации шифрования на стороне клиента. Эти механизмы позволяют эффективно защищать конфиденциальные данные, такие как персональная и финансовая информация, обеспечивая соответствие требованиям безопасности.
Встроенные функции шифрования в ClickHouse
ClickHouse поддерживает встроенные криптографические функции для шифрования и расшифрования данных на уровне столбцов. Эти функции используют алгоритм AES с различными режимами шифрования (ECB, CBC, OFB, GCM, CTR и CFB), обеспечивая гибкость и безопасность.
Подробнее см. в официальной документации ClickHouse.
Основные функции шифрования
- encrypt(mode, plaintext, key, [iv, aad]) — шифрует plaintext с использованием указанного режима шифрования (mode), ключа (key), а также необязательного вектора инициализации (iv) и дополнительных аутентифицированных данных (aad);
- decrypt(mode, ciphertext, key, [iv, aad]) — расшифровывает ciphertext с использованием тех же параметров, которые применялись при шифровании;
aes_encrypt_mysql(mode, plaintext, key, [iv]) — функция шифрования, совместимая с MySQL, позволяющая шифровать данные так, чтобы они могли быть расшифрованы функцией AES_DECRYPT в MySQL;
aes_decrypt_mysql(mode, ciphertext, key, [iv]) — расшифровывает данные, зашифрованные в формате, совместимом с MySQL.
Рекомендации по использованию встроенных функций
Управление ключами — храните ключи шифрования и векторы инициализации в безопасных сервисах управления секретами.
Производительность — до версии ClickHouse 21.1 функции шифрования могли существенно влиять на производительность. В более новых версиях оптимизирована работа с криптографическими операциями, но рекомендуется тестировать производительность на больших объёмах данных.
Выбор режима шифрования — используйте безопасные режимы, такие как GCM или CBC, избегая ECB из-за его уязвимостей. Убедитесь, что режим шифрования соответствует требованиям вашего приложения.
Шифрование на стороне клиента (Client-Side Encryption)
Шифрование на стороне клиента позволяет зашифровывать данные перед их отправкой в ClickHouse и расшифровывать после получения, предоставляя дополнительный уровень контроля над безопасностью. Этот подход особенно полезен, если требуется минимизировать доступ к данным на стороне сервера.
Подробнее см. в официальной документации ClickHouse.
Как работает
Процесс шифрования — приложение шифрует данные перед их вставкой в ClickHouse (например, с помощью команды INSERT). Зашифрованные данные хранятся в базе в виде бинарных строк.
Процесс расшифрования — после получения данных (например, с помощью команды SELECT) приложение расшифровывает их с использованием соответствующего ключа.
Управление ключами — ключи хранятся на стороне клиента, поэтому недоступны для сервера ClickHouse.
Используемые технологии и библиотеки
Для реализации шифрования на стороне клиента используйте криптографические библиотеки, совместимые с языком программирования вашего приложения.
Примеры:
Python:
cryptography — библиотека для выполнения современных криптографических операций, включая AES-256 и другие алгоритмы;
PyCryptodome — библиотека с поддержкой широкого набора криптографических примитивов, таких как AES, RSA и ChaCha20;
JavaScript/Node.js:
crypto — встроенный модуль Node.js для шифрования, хеширования и генерации ключей;
crypto-js — легковесная библиотека для AES, SHA-256 и других операций;
Java:
Java Cryptography Extension (JCE) — встроенные средства Java для шифрования, включая AES и RSA;
Bouncy Castle — расширенная библиотека с поддержкой множества криптографических стандартов;
.NET:
System.Security.Cryptography — встроенная библиотека .NET для шифрования, хеширования и управления ключами.
Пример использования
Пример шифрования и расшифрования данных в Python с использованием библиотеки cryptography и клиента ClickHouse (clickhouse-driver):
где:
- <host> — IP-адрес ноды, к которой нужно подключиться. Подробнее см. раздел Доступ к кластеру ClickHouse.
Рекомендации
Управление ключами — храните ключи в сервисах управления секретами.
Алгоритмы — используйте AES-256 (режимы GCM или CBC). Избегайте устаревших алгоритмов (DES, MD5).
Производительность — шифруйте только конфиденциальные данные. Тестируйте производительность на больших объёмах.
Совместимость — храните зашифрованные данные как String или FixedString. Зашифрованные данные не поддерживают поиск и агрегацию.
Безопасность — включите TLS при создании кластера для защиты данных при передаче. Реализуйте обработку ошибок и аудит операций.
Комбинированный подход — используйте встроенные функции ClickHouse для простых задач, а шифрование на стороне клиента — для критически важных данных.