Как сохранить пароль для расшифровки защищенных данных? - PullRequest
0 голосов
/ 28 апреля 2011

У меня есть парольная фраза для дешифрования данных с помощью открытого ключа в моем приложении rails.

Я спрашиваю пользователя «парольную фразу», когда этот пользователь пытается перейти в определенное меню (например, «выставление счетов») для расшифровки разумных данных.

Не рекомендуется сохранять парольную фразу непосредственно в пользовательском сеансе / файле cookie (по соображениям безопасности).

Итак, каков наилучший способ храненияэтот пароль без дыры в безопасности?

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

Предполагая, что:

  • Ваше требование состоит в том, чтобы пользователь мог ввести свою пароль один раз, а затем получить доступ ко всем своим данным до конца своего сеанса.
  • У вас естьбольшое количество данных для шифрования для каждой учетной записи (т.е. более одного счета).

Я бы сделал что-то вроде следующего:

  • Зашифровать все данные, прикрепленные кучетная запись пользователя с использованием безопасного случайного ключа (ключа данных) и симметричного шифра (например, AES).
  • Предоставьте каждой учетной записи открытый / закрытый ключ (ключ учетной записи) с выбранной пользователем парольной фразой.
  • Зашифруйте ключ данных с помощью открытого ключа учетной записи и сохраните его.
  • Создайте случайный ключ безопасности приложения (сеансовый ключ).
  • Когда пользователь вводит ключевую фразу в свой пароль,используйте его для расшифровки своего ключа данных, а затем сразу же повторно зашифруйте его с помощью ключа сеанса и сохраните в своем сеансе или в файле cookie.Отдельно сохраните отметку времени в сеансе, отметив, когда ключ был зашифрован, и подпишите его, создав хэш отметки времени, зашифрованного ключа данных и ключа сеанса.

Когда они хотят посмотреть на некоторыеданные, затем:

  • Извлеките зашифрованный ключ данных, временную метку и хэш подписи из сеанса.Пересчитайте хеш на основе метки времени, зашифрованного ключа данных и ключа сеанса и проверьте, соответствует ли он хешу из сеанса (т. Е. Что ничто не было подделано).
  • Сравните метку времени с «сейчас», ирешите, достаточно ли это недавно, чтобы доверять ему (то есть, чтобы он не был украден человеком, находящимся в середине атаки).
  • Если и только если все в порядке, расшифруйте ключ данных, используяключ сеанса.
  • Используйте ключ данных для дешифрования данных.

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

Это вполне может быть законченокомплекс для ваших нужд.Если нет, то, пожалуйста, имейте в виду, что я не криптограф, так что используйте это на свой страх и риск, и найдите кого-то, кто действительно знает, что они здесь делают, если вы вообще обеспокоены!

Надеждаэто помогает.

0 голосов
/ 29 апреля 2011

Я думаю, что лучше всего использовать зашифрованный куки-магазин. Вы можете найти больше информации об этом в этой статье:

Зашифрованный файл cookie здесь и здесь

Здесь , github проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...