В настоящее время я изучаю протоколы аутентификации пользователей для разрабатываемого веб-сайта.Я хотел бы создать файл cookie для аутентификации, чтобы пользователи могли оставаться в системе между страницами.
Вот мой первый bash:
cookie = user_id|expiry_date|HMAC(user_id|expiry_date, k)
Где k равно HMAC(user_id|expiry_date, sk)
sk - это 256-битный ключ, известный только серверу.HMAC - это хэш SHA-256.Обратите внимание, что '|'это разделитель, а не просто конкатенация.
В PHP это выглядит следующим образом:
$key = hash_hmac('sha256', $user_id . '|' . $expiry_time, SECRET_KEY);
$digest = hash_hmac('sha256', $user_id . '|' . $expiry_time, $key);
$cookie = $user_id . '|' . $expiry_time . '|' . $digest;
Я вижу, что он уязвим к атакам воспроизведения, как указано в Безопасный протокол cookie , но должен быть устойчивым кОбъемные атаки и криптографическое соединение.
ВОПРОС: Я на правильных линиях или есть огромная уязвимость, которую я пропустил?Есть ли способ защиты от атак воспроизведения, который работает с динамически назначаемыми IP-адресами и не использует сеансы?
ПРИМЕЧАНИЯ
Самый последний материал, который я прочитал:
Что нужно и чего не нужно делать для аутентификации клиента в Интернете aka Fu et al.
(https://pdos.csail.mit.edu/papers/webauth:sec10.pdf)
Безопасный протокол Cookie aka Liu et al.
(http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf)
, который расширяет предыдущий метод
Закаленные файлы сеансов без сохранения состояния
(http://www.lightbluetouchpaper.org/2008/05/16/hardened-stateless-session-cookies/)
, который также расширяется по предыдущему методу.
Поскольку тема чрезвычайно сложная, я ищу ответы только от экспертов по безопасности, имеющих реальный опыт создания и взлома схем аутентификации.