Шифрование
Поле коллекции: шифрованиеProfessional Edition+Введение
Некоторые конфиденциальные бизнес-данные, такие как номера телефонов клиентов, адреса электронной почты, номера карт и т. д., можно зашифровать. После шифрования они хранятся в базе данных в виде шифротекста.

Способ шифрования
Плагин автоматически создаёт 应用密钥. Этот ключ хранится в каталоге /storage/apps/main/encryption-field-keys.
Имя файла 应用密钥 является идентификатором ключа, а расширение — .key. Не изменяйте имя файла без необходимости.
Храните файл 应用密钥 в надёжном месте. Если файл 应用密钥 будет утерян, расшифровать зашифрованные данные будет невозможно.
/storage/apps/${子应用name}/encryption-field-keysПринцип работы
Используется конвертное шифрование

Процесс создания ключа
- При первом создании зашифрованного поля система автоматически генерирует 32-битный
应用密钥и сохраняет его в кодировке base64 в каталоге хранения по умолчанию. - При каждом создании нового зашифрованного поля для этого поля генерируется случайный 32-битный
字段密钥, который затем шифруется с использованием应用密钥и случайно сгенерированного 16-битного字段加密向量(алгоритм шифрованияAES), после чего сохраняется в таблицеfields, в полеoptions.
Процесс шифрования поля
- При каждой записи данных в зашифрованное поле сначала из таблицы
fields, из поляoptions, извлекаются зашифрованные字段密钥и字段加密向量. - С помощью
应用密钥и字段加密向量расшифровывается зашифрованный字段密钥, затем данные шифруются с использованием字段密钥и случайно сгенерированного 16-битного数据加密向量(алгоритм шифрованияAES). - С использованием расшифрованного
字段密钥данные подписываются (алгоритм дайджестаHMAC-SHA256), а затем преобразуются в строку в кодировке base64 (созданный数据签名впоследствии используется для поиска данных). - 16-битный
数据加密向量и зашифрованный数据密文объединяются в двоичном виде и преобразуются в строку в кодировке base64. - Строка в кодировке base64
数据签名и объединённая строка в кодировке base64数据密文соединяются через разделитель '.'. - Итоговая объединённая строка сохраняется в базе данных.
Переменные окружения
Чтобы указать 应用密钥, можно использовать переменную окружения ENCRYPTION_FIELD_KEY_PATH. Плагин загрузит файл из указанного пути в качестве 应用密钥.
应用密钥Требования к формату файла:
- Расширение файла должно быть
.key. - Имя файла будет использоваться как идентификатор ключа; для обеспечения уникальности рекомендуется использовать UUID.
- Содержимое файла должно представлять собой 32-битные двоичные данные в кодировке base64.
Настройка поля

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

Способ фильтрации данных:
- Получите
字段密钥зашифрованного поля и используйте应用密钥для расшифровки字段密钥. - Подпишите введённый пользователем текст поиска с помощью
字段密钥(алгоритм дайджестаHMAC-SHA256). - Объедините подписанный текст поиска с разделителем
.и выполните поиск по префиксу зашифрованного поля в базе данных.
Ротация ключей
Перед выполнением команды ротации ключей nocobase key-rotation убедитесь, что приложение уже загрузило этот плагин.
После переноса приложения в новую среду, если вы не хотите продолжать использовать тот же ключ, что и в старой среде, можно использовать команду nocobase key-rotation, чтобы заменить 应用密钥.
Для выполнения команды ротации ключей необходимо указать ключ приложения из старой среды. После выполнения команды будет создан новый ключ приложения, который заменит старый ключ. Новый ключ приложения сохраняется в кодировке base64 в каталоге хранения по умолчанию.
Если заменяется дочернее приложение 应用密钥, необходимо добавить параметр --app-name и указать name

