Шифрование данных в Managed Service for MySQL
Managed Service for MySQL предоставляет инструменты для защиты данных, включая встроенные функции шифрования на уровне столбцов и возможность шифрования на стороне клиента. Эти механизмы обеспечивают безопасность конфиденциальной информации, такой как персональные и финансовые данные.
Встроенные функции шифрования в MySQL
MySQL поддерживает встроенные криптографические функции для шифрования и расшифрования данных на уровне столбцов с использованием алгоритма AES.
Подробнее см. в официальной документации MySQL.
Основные функции
AES_ENCRYPT(plain_text, key_string) — шифрует строку plain_text с использованием ключа key_string и алгоритма AES (по умолчанию AES-128 в режиме ECB).
AES_DECRYPT(encrypted_data, key_string) — расшифровывает данные encrypted_data с использованием того же ключа, который применялся при шифровании.
Рекомендации
Управление ключами — храните ключи шифрования в безопасном месте, например, в специализированных сервисах управления секретами. Избегайте хранения ключей в коде приложения или в базе данных.
- Производительность — тестируйте влияние шифрования на производительность, особенно при работе с большими объёмами данных.
- Безопасность режима:
- включите TLS при создании кластера для защиты данных при передаче между клиентом и сервером MySQL;
- MySQL по умолчанию использует режим ECB, который менее безопасен. Для повышения безопасности рассмотрите шифрование на стороне клиента с более надёжными режимами, такими как GCM и CBC.
Шифрование на стороне клиента (Client-Side Encryption)
Шифрование на стороне клиента позволяет зашифровывать данные перед их отправкой в MySQL и расшифровывать после получения. Это минимизирует доступ к данным на сервере.
Подробнее см. в официальной документации MySQL.
Как работает
Приложение шифрует данные перед вставкой в MySQL (например, через команду INSERT) и расшифровывает после получения (через команду SELECT).
Ключи хранятся на стороне клиента, что исключает их доступность для сервера.
Используемые библиотеки
Python:
cryptography — современная библиотека для выполнения криптографических операций, включая симметричное шифрование (AES-256) и управление ключами. Проста в использовании и поддерживает режимы GCM и CBC;
PyCryptodome — библиотека с поддержкой широкого набора алгоритмов (AES, RSA, ChaCha20) и криптографических примитивов;
JavaScript/Node.js:
Java:
Java Cryptography Extension (JCE) — встроенный инструментарий Java для шифрования, включая алгоритмы AES, RSA и SHA. Подходит для большинства приложений;
Bouncy Castle — расширенная библиотека с поддержкой множества криптографических стандартов и форматов, включая дополнительные режимы шифрования;
.NET:
System.Security.Cryptography — встроенная библиотека .NET для реализации шифрования (AES, RSA), хеширования и управления ключами. Обеспечивает высокую производительность и интеграцию с платформой.
Пример
где:
- <host> — внутренний или публичный IP-адрес кластера MySQL, к которому нужно подключиться;
- <логин> — логин пользователя;
- <пароль> — пароль пользователя;
- <имя базы данных> — имя базы данных, к которой нужно подключиться.
Подробнее см. раздел Доступ к кластеру MySQL.
Рекомендации
Управление ключами — храните ключи в сервисах управления секретами. Регулярно обновляйте ключи.
Алгоритмы — используйте AES-256 в режимах GCM и CBC. Избегайте устаревших алгоритмов (DES, MD5).
Производительность — шифруйте только конфиденциальные данные и тестируйте производительность на больших объёмах.
Совместимость — храните зашифрованные данные как TEXT или BLOB. Зашифрованные данные не поддерживают поиск и индексацию.
Безопасность — включите TLS при создании кластера для защиты данных при передаче между клиентом и сервером MySQL. Реализуйте обработку ошибок и аудит операций.