Безопасное хранение ключа шифрования в сеансе?

#php #apache #encryption #mysqli #key-storage

#php #apache #шифрование #mysqli #хранилище ключей

Вопрос:

У меня есть веб-приложение, которое требует от пользователя регистрации и ввода некоторых личных данных.

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

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

Мои мысли по этому поводу на данный момент таковы:

  1. Пользователь входит в систему, и полученный по паролю ключ используется для расшифровки главного ключа
  2. Генерируется новый случайный ключ, который используется для шифрования главного ключа
  3. Сохраните недавно зашифрованный главный ключ в таблице сеансов базы данных
  4. Сохраняйте вновь сгенерированный случайный ключ в файле cookie в браузере пользователя, срок действия которого истекает в конце сеанса / выхода из системы.

Веб-приложение размещено третьей стороной, поэтому у меня нет возможности создавать зашифрованные разделы и т.д.

Кто-нибудь может предложить лучший способ сделать это?

Спасибо

Комментарии:

1. Этот вопрос кажется основанным на мнениях / слишком широким.

2. github.com/defuse/php-encryption — смотрите: KeyProtectedByPassword . Вы можете расшифровать его в $_SESSION и затем, пока вы используете HTTPS и хорошо настроили свой сервер, вы можете противостоять распространенным моделям угроз. Если у вас параноидальная модель угроз, вам, вероятно, вообще не следует размещаться у третьей стороны.