Серверное шифрование
Серверное шифрование обеспечивает дополнительный уровень защиты данных. Все данные шифруются на сервере перед записью в базу данных, независимо от состояния клиентского шифрования.
Обзор
Назначение
| Сценарий | Защита |
|---|---|
| Утечка базы данных | Данные зашифрованы серверным ключом |
| Резервные копии | Бэкапы содержат только шифротекст |
| Физический доступ к серверу | Без ключа данные не прочитать |
| CSE отключено | Серверное шифрование работает всегда |
Принцип работы
Данные от клиента
↓
[Серверное шифрование AES-256-CFB]
↓
База данных (шифротекст)
Алгоритм шифрования
Параметры
| Параметр | Значение |
|---|---|
| Алгоритм | AES-256-CFB |
| Длина ключа | 256 бит |
| Режим | CFB (Cipher Feedback) |
| IV | 128 бит, случайный для каждого шифрования |
| Библиотека | 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, внешние хранилища секретов, сертифицированные решения), обратитесь в техническую поддержку Пассворка для обсуждения вариантов интеграции.
Проверка целостности ключа
При запуске приложения проверяется целостность ключа:
- Загрузка ключа из файла
- Вычисление SHA-512 хеша ключа
- Сравнение с сохранённым хешем в базе данных
- При несовпадении — ошибка запуска
Это предотвращает использование неправильного ключа и повреждение данных.
Что шифруется на сервере
Серверным ключом шифруются следующие данные:
- Данные записей (пароли, дополнительные поля, вложения)
- Ключи сейфов
- Ключи записей
- Данные внешних ссылок
- Пароли LDAP-интеграций
- Пароли SMTP-сервера
Шифрование выполняется автоматически перед сохранением в базу данных, расшифровка — при чтении.
Конфигурация
Переменные окружения
| Переменная | Описание | Значение по умолчанию |
|---|---|---|
ENCRYPTION_KEY_PATH | Путь к файлу ключа | %init_dir%/encryption_key |
ENCRYPTION_CIPHER | Алгоритм шифрования | AES-256-CFB |