Делает ли усечение хэша с ключом более безопасным?

#php #security #cookies

Вопрос:

Я хотел бы установить надежный файл cookie браузера, который позволяет пользователю обходить 2-факторную аутентификацию по электронной почте, если он ранее успешно входил в систему на данной машине. Идея заключалась бы в том, чтобы упростить вход на доверенные машины для удобства.

Моя идея состоит в том, чтобы создать хэш с ключом адреса электронной почты, например:

 <?php
define('HASH_KEY', '5sqAgsdwqNWEHpEz3pAFVQUb2Mr7acHtuezKSVykX52bCKeSJmo236HtE0U9Noj2);
$hash = hash_hmac('sha256', $email, HASH_KEY);
// E.g. '9fa0d85b36919dc87ee01171edf6bdc302ffbc78e0c7f1738d295e76e442ccd4'
 

А затем усеките его, чтобы сказать 16 цифр:

 $hash = substr($hash, 0, 16);
// E.g. '9fa0d85b36919dc87'
?>
 

Затем планируется сохранить усеченный хэш в файле cookie в качестве маркера надежного браузера. Затем, когда пользователь пытается войти в систему позже, полный хэш восстанавливается с использованием того же ключа HASH_KEY и адреса электронной почты, указанного при входе в систему, затем первые 16 цифр нового хэша сравниваются с файлом cookie. Если они совпадают, 2fa обходится, в противном случае мы требуем этого.

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

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

1. вероятно, все в порядке, 16 байт-это достаточная энтропия, чтобы обеспечить безопасность, если это просто флаг для пропуска 2-х факторов, и вы все еще выполняете вход в систему как обычно, id спорит с другими проверками на месте, например, количество неудачных входов в систему, вам даже сойдет с рук 4 символа

2. bs. Это не 16 байт «энтропии», потому что они взяты из базовой 64-кодированной строки (6 бит на символ). Кроме того, гораздо безопаснее использовать полный 256-битный вывод. Обычно лучше спрашивать об этом в отделе информационной безопасности . 4 символа обеспечивают вам 24 бита безопасности, что смехотворно мало.