Вопрос или проблема
Я хотел бы настроить архитектуру шифрования на уровне файлов, при которой каждый файл шифруется собственным ключом, а каждый ключ шифруется с использованием мастер-ключа.
Есть ли хорошие статьи по этому поводу? Или какие-либо советы?
Вопросы, которые у меня есть, по сути:
- Где хранить ключ каждого файла
- Где хранить мастер-ключ
- Как перешифровать файлы, если я провожу ротацию ключей
- Как вращать ключи
Мои файлы хранятся в локальном S3, у меня также есть реляционная база данных, и я использую Vault (Hashicorp)
Эта задача сводится к проблеме “управления ключами”, так как все остальное по сути является решенной проблемой. Поэтому давайте сначала разберемся с сопутствующими вопросами.
Как перешифровать файлы, если я провожу ротацию ключей
Вы не перешифровываете файлы. Это требует много ресурсов CPU и I/O, и вам не нужно читать и записывать терабайты данных каждый раз, когда пользователь меняет свои ключи.
Что вы используете, так это то, что называется Шифрование конвертов: вы создаете симметричный ключ (ключ шифрования данных, или DEK) и шифруете файл. Вы используете другой ключ (ключ шифрования ключа, или KEK), чтобы зашифровать DEK и храните зашифрованный файл и зашифрованный DEK. Когда вы проводите ротацию KEK, вы сначала расшифровываете его старым KEK, шифруете новым KEK и храните. Файл не затрагивается.
Как вращать ключи
Это тривиально. Вы выдаете новые ключи, расшифровываете и перешифровываете все DEK, и это сделано. Старый ключ утратил все функции, потому что больше не может получить доступ к чему-либо, так что нет необходимости его уничтожать.
Теперь сложные вопросы:
Где хранить ключ каждого файла
Где хранить мастер-ключ
И это ваша проблема. Это требует больше процессов и выборов, чем технологий, так что нет “лучшего способа” для реализации.
Если вы управляете ключами, вы должны убедиться, что никто, кроме пользователя, не может получить доступ к ключу. Это можно достичь с помощью алгоритма вывода ключа, чтобы вывести ключ из пароля пользователя и использовать этот ключ для шифрования личного ключа пользователя (KEK). Затем вы можете хранить его в базе данных. Вы можете использовать мастер-ключ для шифрования этих ключей, что позволит вам реализовать процесс “восстановления пароля”. Но это создает большой недостаток: если мастер-ключ попадет в утечку, каждая учетная запись может быть скомпрометирована, и каждый файл расшифрован.
Если ваше хранилище данных будет использовать сквозное шифрование, KEK должен храниться на клиенте. Вы также должны защитить ключ на стороне клиента, так что шифрование его с помощью функции вывода ключа – хорошая идея. Недостаток в том, что вы не можете создать функцию “восстановления пароля”, потому что у вас нет пароля и вы не можете расшифровать KEK без него.
Хранение мастер-ключа зависит от ваших требований безопасности и бюджета. Аппаратный модуль безопасности (HSM) является хорошей отправной точкой. Это специализированное оборудование для хранения ключей, и его задача – не позволить получить доступ к личному ключу в открытом виде. Вы должны создать безопасный процесс для использования ключа в случае сброса пароля или другой необходимости.
Ответ или решение
Создание архитектуры шифрования на уровне файлов требует тщательного подхода к управлению ключами, так как каждый файл будет зашифрован своим уникальным ключом. Рассмотрим ключевые аспекты, касающиеся реализации данной архитектуры.
1. Структура шифрования
Для начала стоит упомянуть метод, который будет использоваться для шифрования: шифрование конвертов (envelope encryption). В рамках этого метода у вас будет два типа ключей:
- Ключ шифрования данных (DEK) — каждый файл шифруется с помощью своего DEK.
- Ключ шифрования ключа (KEK) — этот ключ используется для шифрования DEK.
Такой подход обеспечивает безопасность, не требуя повторного шифрования самого файла при ротации ключей.
2. Хранение ключей
Где хранить каждый файл ключ?
DEK можно хранить вместе с каждым файлом в зашифрованном виде. Например, вы можете сохранять DEK в метаданнах файла или в отдельной базе данных, связанной с идентификатором файла. Сам DEK шифруется с использованием KEK перед тем, как он будет сохранён.
Где хранить мастер-ключ (мolecular key)?
Мастер-ключ, который будет защищать KEK, должен храниться в надежном месте. Рациональным выбором будет использование Аппаратного модуля безопасности (HSM), который предоставляет высокий уровень защиты ключей и предотвращает доступ к ним в нешифрованном виде. Альтернативой могут быть решения на базе облачных сервисов, таких как AWS KMS или аналогичные.
3. Ротация ключей
Как ротировать ключи?
Ротация ключей — важный элемент обеспечения безопасности. При ротации KEK вам нужно следующее:
- Расшифровать DEK с использованием старого KEK.
- Зашифровать DEK с использованием нового KEK.
- Обновить зашифрованные DEK, сохранив всё в метаданнах или в базе данных.
Как повторно зашифровать файлы при ротации ключей?
При использовании шифрования конвертов вы не затрагиваете сами файлы. Необходимо лишь обновить зашифрованные DEK. Это значительно снижает затраты на переработку данных и минимизирует влияние на производительность.
4. Управление кибербезопасностью
Эффективное управление ключами — это не просто задача технологии; это целый процесс. Вам необходимо учесть следующие аспекты:
- Защита доступа к ключам: убедитесь, что только авторизованные пользователи могут получить доступ к DEK и KEK.
- Регулярная ротация ключей для повышения уровня безопасности.
- Процессы восстановления паролей: если вы планируете сохранить возможность восстановления, стоит внедрить защищённые механизмы для управления мастер-ключом.
Заключение
На основе вышесказанного, установка архитектуры пер-файлового шифрования представляется сложной задачей, требующей комплексного подхода к управлению ключами. Настоятельно рекомендую ознакомиться с такими ресурсами, как статьи о шифровании в облаке и управления ключами в IT-безопасности. Убедитесь, что ваша архитектура отвечает как функциональным, так и допустимым требованиям безопасности, что поможет защитить ваши данные на самом высоком уровне.
Таким образом, правильная реализация и управление архитектурой пер-файлового шифрования требует глубокого понимания безопасности данных и процессов управления ключами. Соответствующий уровень защиты в совокупности с эффективным управлением является залогом успеха.