Мне нужно хранить конфиденциальные данные (например, фотографии клиентов) в базе данных SQL наиболее безопасным способом на случай нарушений безопасности. Данные не будут доступны клиентам, только внутренним процессам, которые выполняют некоторые проверки. У клиентов нет никаких входных данных, таких как пароли, они просто регистрируются у нас, и мы отслеживаем их данные. Шифрование на стороне клиента невозможно в текущей настройке, поэтому нам нужно шифровать на стороне сервера, и у нас также есть HSM в нашей частной сети с закрытыми ключами.
Одна из идей состояла в том, чтобы использовать шифрование с симметричным ключом и хранить этот ключ локально.Проблема с этим решением заключается в том, что если злоумышленник получит доступ к серверу и базе данных, он может легко получить этот ключ и расшифровать данные.
Другая идея заключалась в том, чтобы использовать модуль HSM, который есть у компании, и зашифровать симметричный ключ открытым ключом HSM. Когда серверу необходимо обработать данные, он отправляет зашифрованный ключ в HSM и обрабатывает симметричный ключ только в памяти. Проблема с этим решением заключается в том, что мне нужно хранить учетные данные подключения HSM, и если злоумышленник получит их и расшифрует симметричный ключ, вся база данных будет скомпрометирована.
Будет ли достаточно безопасно генерировать случайные симметричные ключи для каждого файла, который мы шифруем, затем шифровать симметричный ключ с помощью открытого ключа HSM и хранить как зашифрованные данные, так и зашифрованный символьный ключ?
И если да, то как лучше хранить? Строка pkcs7 base64?