Перейти к основному содержимому
Версия: 7.0

Серверное шифрование

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

Обзор

Назначение

СценарийЗащита
Утечка базы данныхДанные зашифрованы серверным ключом
Резервные копииБэкапы содержат только шифротекст
Физический доступ к серверуБез ключа данные не прочитать
CSE отключеноСерверное шифрование работает всегда

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

Данные от клиента

[Серверное шифрование AES-256-CFB]

База данных (шифротекст)

Алгоритм шифрования

Параметры

ПараметрЗначение
АлгоритмAES-256-CFB
Длина ключа256 бит
РежимCFB (Cipher Feedback)
IV128 бит, случайный для каждого шифрования
БиблиотекаOpenSSL (через PHP)

Режим CFB

Режим CFB (Cipher Feedback) имеет следующие особенности:

  • Превращает блочный шифр в потоковый
  • Не требует дополнения (padding)
  • Каждый блок зависит от предыдущего
  • IV должен быть уникальным для каждого шифрования

Структура зашифрованных данных

[IV (128 бит)] + [Шифротекст]

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


Серверный ключ шифрования

Генерация ключа

Ключ генерируется один раз при установке системы:

ПараметрЗначение
Размер256 бит
ИсточникКриптографически стойкий генератор
Энтропия256 бит
Формат храненияbase64:{base64_encoded_key}

Хранение ключа

Ключ может храниться двумя способами:

Способ 1: В файле (по умолчанию)

ПараметрЗначение
Путь по умолчанию{PROJECT_DIR}/init/encryption_key
Переопределение путиПеременная окружения ENCRYPTION_KEY_PATH
Форматbase64:{base64_encoded_key}

Способ 2: В переменной окружения

Ключ можно передать напрямую через переменную окружения, минуя файл.

Настройка прав доступа

При хранении ключа в файле обязательно настройте права доступа:

# Владелец — пользователь приложения (например, www-data)
chown www-data:www-data /path/to/encryption_key

# Права только на чтение для владельца
chmod 400 /path/to/encryption_key
Повышенные требования к хранению

Если в вашей организации действуют строгие политики безопасности или требования регуляторов по хранению криптографических ключей (HSM, внешние хранилища секретов, сертифицированные решения), обратитесь в техническую поддержку Пассворка для обсуждения вариантов интеграции.

Проверка целостности ключа

При запуске приложения проверяется целостность ключа:

  1. Загрузка ключа из файла
  2. Вычисление SHA-512 хеша ключа
  3. Сравнение с сохранённым хешем в базе данных
  4. При несовпадении — ошибка запуска

Это предотвращает использование неправильного ключа и повреждение данных.


Что шифруется на сервере

Серверным ключом шифруются следующие данные:

  • Данные записей (пароли, дополнительные поля, вложения)
  • Ключи сейфов
  • Ключи записей
  • Данные внешних ссылок
  • Пароли LDAP-интеграций
  • Пароли SMTP-сервера

Шифрование выполняется автоматически перед сохранением в базу данных, расшифровка — при чтении.


Конфигурация

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

ПеременнаяОписаниеЗначение по умолчанию
ENCRYPTION_KEY_PATHПуть к файлу ключа%init_dir%/encryption_key
ENCRYPTION_CIPHERАлгоритм шифрованияAES-256-CFB

Настройка алгоритма шифрования

Поддерживаемые алгоритмы

Система поддерживает любой алгоритм шифрования, доступный в OpenSSL на сервере. Это позволяет выбрать алгоритм в соответствии с требованиями вашей организации или регуляторов.

Примеры поддерживаемых алгоритмов:

ТипАлгоритмы
AES (256 бит)AES-256-CFB (по умолчанию), AES-256-GCM, AES-256-CBC, AES-256-CTR
AES (128 бит)AES-128-GCM, AES-128-CBC, AES-128-CTR
ChaCha20ChaCha20-Poly1305
Национальные стандартыCamellia, ARIA, ГОСТ (при наличии поддержки в OpenSSL)

Полный список доступных алгоритмов зависит от версии OpenSSL, установленной на сервере.

Просмотр доступных алгоритмов

Для просмотра всех алгоритмов, доступных на сервере:

php bin/console app:cipher-methods:list

Команда выводит список всех поддерживаемых cipher-методов и их алиасов из OpenSSL.

Изменение алгоритма

Способ 1: Через файл конфигурации

Создайте или отредактируйте файл init/config.env:

ENCRYPTION_CIPHER=AES-256-GCM

Способ 2: Через переменную окружения

export ENCRYPTION_CIPHER="AES-256-GCM"
Смена алгоритма
  • Смена алгоритма требует перешифровки всех данных (аналогично ротации ключа)
  • Перед сменой создайте резервную копию
  • Планируйте окно обслуживания для больших баз данных

Валидация алгоритма

Система проверяет корректность алгоритма при первом шифровании. Если указан неподдерживаемый алгоритм, операция завершится ошибкой.

Для проверки доступности алгоритма:

// Проверка поддержки алгоритма
in_array('AES-256-GCM', openssl_get_cipher_methods())

Взаимодействие с клиентским шифрованием

Двухуровневая модель

Поток данных при включённом CSE:

  1. Пользователь вводит пароль
  2. Клиент (браузер) шифрует данные ключом записи (AES-256-CBC) — Уровень 1 (CSE)
  3. Сервер получает уже зашифрованные данные
  4. Сервер шифрует их серверным ключом (OpenSSL AES-256-CFB) — Уровень 2 (Server-side)
  5. В базе данных хранится двойной шифротекст

При CSE отключено:

  • Данные приходят в открытом виде
  • Применяется только серверное шифрование
  • В БД хранится один уровень шифрования

Гарантии безопасности

СценарийCSE включеноCSE отключено
Утечка БДДва уровня защитыСерверное шифрование
Компрометация сервераCSE защищает данные⚠️ Данные доступны
Администратор БДНе может прочитатьВидит шифротекст