Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

Шифрование

Поле коллекции: ШифрованиеProfessional Edition+

Введение

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

20251104192513

Метод шифрования

Warning

Плагин автоматически генерирует ключ приложения, который хранится в директории /storage/apps/main/encryption-field-keys.

Файл ключа приложения имеет имя, соответствующее ID ключа, с расширением .key. Пожалуйста, не изменяйте имя файла без необходимости.

Пожалуйста, обеспечьте надёжное хранение файла ключа приложения. В случае его утери зашифрованные данные не подлежат расшифровке.

Если плагин активирован для дочернего приложения, ключ по умолчанию сохраняется в директории /storage/apps/${имя_дочернего_приложения}/encryption-field-keys.

Принцип работы

Используется метод конвертного шифрования.

20251118151339

Процесс создания ключей

  1. При первом создании зашифрованного поля система автоматически генерирует 32-битный ключ приложения и сохраняет его в директории хранения по умолчанию в кодировке Base64.
  2. При каждом создании нового зашифрованного поля для него генерируется случайный 32-битный ключ поля. Затем он шифруется с использованием ключа приложения и случайно сгенерированного 16-битного вектора шифрования поля (алгоритм шифрования AES), после чего сохраняется в поле options таблицы fields.

Процесс шифрования поля

  1. При каждой записи данных в зашифрованное поле сначала извлекаются зашифрованный ключ поля и вектор шифрования поля из поля options таблицы fields.
  2. Зашифрованный ключ поля расшифровывается с использованием ключа приложения и вектора шифрования поля. Затем данные шифруются с помощью ключа поля и случайно сгенерированного 16-битного вектора шифрования данных (алгоритм шифрования AES).
  3. Данные подписываются с использованием расшифрованного ключа поля (алгоритм хеширования HMAC-SHA256) и преобразуются в строку в кодировке Base64 (полученная подпись данных в дальнейшем используется для поиска данных).
  4. 16-битный вектор шифрования данных и зашифрованный текст данных объединяются в двоичном формате, а затем кодируются в Base64.
  5. Строка подписи данных в кодировке Base64 и объединённый текст данных в кодировке Base64 соединяются с использованием разделителя ..
  6. Итоговая объединённая строка сохраняется в базе данных.

Переменные окружения

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

Требования к файлу ключа приложения:

  1. Расширение файла должно быть .key.
  2. Имя файла будет использоваться в качестве ID ключа; рекомендуется использовать UUID для обеспечения уникальности.
  3. Содержимое файла должно представлять собой 32-байтные двоичные данные, закодированные в Base64.
ENCRYPTION_FIELD_KEY_PATH=/path/to/my/app-keys/270263524860909922913.key

Настройка поля

20240802173721

Влияние на фильтрацию после шифрования

Зашифрованные поля поддерживают только следующие операции фильтрации: равно, не равно, существует, не существует.

20240802174042

Процесс фильтрации данных:

  1. Извлекается ключ поля зашифрованного поля и расшифровывается с использованием ключа приложения.
  2. С помощью ключа поля подписывается введённый пользователем текст (алгоритм хеширования HMAC-SHA256).
  3. Подписанный текст для поиска объединяется с разделителем . для выполнения поиска по префиксу в базе данных.

Ротация ключей

Warning

Перед использованием команды nocobase key-rotation убедитесь, что плагин загружен.

При миграции приложения в новую среду вы можете использовать команду nocobase key-rotation для замены ключа приложения.

Для выполнения команды ротации ключей необходимо указать ключ приложения из старой среды. После выполнения команды будет сгенерирован новый ключ приложения, который будет сохранён (в кодировке Base64) в директории по умолчанию.

# --key-path указывает на `ключ приложения` старой среды
 yarn nocobase key-rotation --key-path /path/to/old-app-keys/270263524860909922913.key

Для ротации ключа приложения дочернего приложения добавьте параметр --app-name:

 yarn nocobase key-rotation --app-name a_w0r211vv0az --key-path /path/to/old-app-keys/270263524860909922913.key