Шифрование данных в 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).

    Функция шифрует строку 'Очень секретная информация' с ключом 'ваш_секретный_ключ', сохраняя зашифрованные данные в столбце sensitive_info.

  • AES_DECRYPT(encrypted_data, key_string) — расшифровывает данные encrypted_data с использованием того же ключа, который применялся при шифровании.

    Функция расшифровывает данные из столбца sensitive_info, возвращая исходную строку, если ключ верный.

Рекомендации

  1. Управление ключами — храните ключи шифрования в безопасном месте, например, в специализированных сервисах управления секретами. Избегайте хранения ключей в коде приложения или в базе данных.

  2. Производительность — тестируйте влияние шифрования на производительность, особенно при работе с большими объёмами данных.
  3. Безопасность режима:

Шифрование на стороне клиента (Client-Side Encryption)

Шифрование на стороне клиента позволяет зашифровывать данные перед их отправкой в MySQL и расшифровывать после получения. Это минимизирует доступ к данным на сервере.

Подробнее см. в официальной документации MySQL.

Как работает

  1. Приложение шифрует данные перед вставкой в MySQL (например, через команду INSERT) и расшифровывает после получения (через команду SELECT).

  2. Ключи хранятся на стороне клиента, что исключает их доступность для сервера.

Используемые библиотеки

  • Python:

    • cryptography — современная библиотека для выполнения криптографических операций, включая симметричное шифрование (AES-256) и управление ключами. Проста в использовании и поддерживает режимы GCM и CBC;

    • PyCryptodome — библиотека с поддержкой широкого набора алгоритмов (AES, RSA, ChaCha20) и криптографических примитивов;

  • JavaScript/Node.js:

    • crypto — встроенный модуль Node.js для шифрования, хеширования и генерации ключей. Подходит для базовых задач;

    • crypto-js — легковесная библиотека для операций шифрования (AES, SHA-256), удобна для веб-приложений;

  • Java:

    • Java Cryptography Extension (JCE) — встроенный инструментарий Java для шифрования, включая алгоритмы AES, RSA и SHA. Подходит для большинства приложений;

    • Bouncy Castle — расширенная библиотека с поддержкой множества криптографических стандартов и форматов, включая дополнительные режимы шифрования;

  • .NET:

    • System.Security.Cryptography — встроенная библиотека .NET для реализации шифрования (AES, RSA), хеширования и управления ключами. Обеспечивает высокую производительность и интеграцию с платформой.

Пример

где:

  • <host> — внутренний или публичный IP-адрес кластера MySQL, к которому нужно подключиться;
  • <логин> — логин пользователя;
  • <пароль> — пароль пользователя;
  • <имя базы данных> — имя базы данных, к которой нужно подключиться.

Подробнее см. раздел Доступ к кластеру MySQL.

Рекомендации

  1. Управление ключами — храните ключи в сервисах управления секретами. Регулярно обновляйте ключи.

  2. Алгоритмы — используйте AES-256 в режимах GCM и CBC. Избегайте устаревших алгоритмов (DES, MD5).

  3. Производительность — шифруйте только конфиденциальные данные и тестируйте производительность на больших объёмах.

  4. Совместимость — храните зашифрованные данные как TEXT или BLOB. Зашифрованные данные не поддерживают поиск и индексацию.

  5. Безопасностьвключите TLS при создании кластера для защиты данных при передаче между клиентом и сервером MySQL. Реализуйте обработку ошибок и аудит операций.