Демистификация веб-аутентификации

В настоящее время я изучаю протоколы аутентификации пользователей для разрабатываемого мной веб-сайта. Я хотел бы создать файл 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-адресами и не использует сеансы?

ПРИМЕЧАНИЯ

Самый последний материал, который я прочитал:
Что нужно и чего нельзя делать при аутентификации клиента на Интернет он же Fu et al.
( https://pdos.csail.mit.edu/papers/webauth:sec10.pdf )

Протокол безопасных файлов cookie он же Лю и др.
( http://www.cse.msu.edu/~alexliu/publications/Cookie/cookie.pdf )
который расширяет предыдущий метод

Защищенные файлы cookie сеанса без сохранения состояния
( http://www.lightbluetouchpaper.org/2008/05/16/hardened-stateless-session-cookies/ )
который также расширяет предыдущий метод.

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

12
задан Djiggy 15 January 2018 в 14:57
поделиться