Предполагая, что:
- Ваше требование состоит в том, чтобы пользователь мог ввести свою пароль один раз, а затем получить доступ ко всем своим данным до конца своего сеанса.
- У вас естьбольшое количество данных для шифрования для каждой учетной записи (т.е. более одного счета).
Я бы сделал что-то вроде следующего:
- Зашифровать все данные, прикрепленные кучетная запись пользователя с использованием безопасного случайного ключа (ключа данных) и симметричного шифра (например, AES).
- Предоставьте каждой учетной записи открытый / закрытый ключ (ключ учетной записи) с выбранной пользователем парольной фразой.
- Зашифруйте ключ данных с помощью открытого ключа учетной записи и сохраните его.
- Создайте случайный ключ безопасности приложения (сеансовый ключ).
- Когда пользователь вводит ключевую фразу в свой пароль,используйте его для расшифровки своего ключа данных, а затем сразу же повторно зашифруйте его с помощью ключа сеанса и сохраните в своем сеансе или в файле cookie.Отдельно сохраните отметку времени в сеансе, отметив, когда ключ был зашифрован, и подпишите его, создав хэш отметки времени, зашифрованного ключа данных и ключа сеанса.
Когда они хотят посмотреть на некоторыеданные, затем:
- Извлеките зашифрованный ключ данных, временную метку и хэш подписи из сеанса.Пересчитайте хеш на основе метки времени, зашифрованного ключа данных и ключа сеанса и проверьте, соответствует ли он хешу из сеанса (т. Е. Что ничто не было подделано).
- Сравните метку времени с «сейчас», ирешите, достаточно ли это недавно, чтобы доверять ему (то есть, чтобы он не был украден человеком, находящимся в середине атаки).
- Если и только если все в порядке, расшифруйте ключ данных, используяключ сеанса.
- Используйте ключ данных для дешифрования данных.
Если вам нужна дополнительная безопасность, вы можете регулярно поворачивать ключ сеанса, чтобы гарантировать, что даже если злоумышленнику удастсячтобы получить зашифрованный тип данных из чьего-либо сеанса, им придется скомпрометировать само приложение в то же время , чтобы получить соответствующий ключ сеанса.
Это вполне может быть законченокомплекс для ваших нужд.Если нет, то, пожалуйста, имейте в виду, что я не криптограф, так что используйте это на свой страх и риск, и найдите кого-то, кто действительно знает, что они здесь делают, если вы вообще обеспокоены!
Надеждаэто помогает.