Как защитить ключ шифрования в php?

Имеется задача - зашифровать данные (реквизиты) пользователей в базе данных (postgresql).
Ознакомился с вопросом другого пользователя. Однозначного ответа не нашел.
Требования: данные должны быть в сохранности, даже если получили доступ к серверу, слили базу, достали все скрипты проекта и прочее, прочее.

Ранее использовал perl(dancer). Там ситуацию решал следующим образом: перед запуском сервера загружал текстовый файл с ключом шифрования. Во время запуска dancer файл читался и удалялся. Ключ хранился, пока dancer работал. Если: dancer демон падал или входил пользователь с правами администратора - ключ шифрования стирался с памяти.

Текущая разработка должна быть реализована на php.
Склоняюсь к решению - написание расширения php, которое будет тянуть ключ шифрования с соседнего ресурса.
  • Вопрос задан
  • 469 просмотров
Пригласить эксперта
Ответы на вопрос 3
savostin
@savostin
Еще один программист
Делайте тоже самое - храните ключ в памяти.
В memcahed или в shared memory.
Можете в $ENV хранить (например создавать конфиг php-fpm с установленным $ENV динамически перед запуском и удалять его после запуска).
Только надо подумать об автоматическом рестарте, мало ли...
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Пишется демон (db-wrapper) на сокет, который получает ключ из файла (или другого хоста) для дешифрования результата БД внутри этого процесса-демона. Соль ключа - хранится внутри этого процесса с привязкой к домену или MAC-интерфейса.
Демон запускается от имени другого пользователя с урезанными правами, нежели чем web-сервер и PHP.

Можно дешифровать данные непосредственно на клиенте через JS.
Но, это уже совсем другая история....
Ответ написан
SagePtr
@SagePtr
Еда - это святое
На сервере ключ уворуют или внедрят код, который уворует.
На клиенте если просчитывать - тоже подменят скрипты и смогут уворовать.
Вижу пока что только один вариант - если в качестве клиента будет использоваться программа, подписанная ЭЦП автора, которая не будет полностью доверять серверу. А при скачивании обновлений проверять их ЭЦП и только тогда ставить. В итоге даже если сервер взломают, то не получат ключ, которым автор подписывает программу, и не подменят её, а ключи пользователей дальше клиента никуда не уйдут. Хотя и тут могут подменить инсталлятор программы, но получат его только новые пользователи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы