Обновить

«Подписываем данные SHA-256 с секретным ключом». Такую подпись подделывают, не зная ключа

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели8.3K
Всего голосов 13: ↑11 и ↓2+13
Комментарии7

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

Но если инфраструктура уже на SHA-2, менять алгоритм ради этого не нужно — достаточно перестать склеивать руками и звать HMAC.

Достаточно не отдавать клиенту все 256 бит соленого хэша а только часть из них. Например 128 бит из 256 отдаем а остальные 128 бит пусть мамкин хакер там у себя угадывает как хочет.

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

Не совсем полумера, усечение есть хорошо и часто применяется даже после HMAC.

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

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

Даже скорее ради заголовка

В jwt токенах хранят всякое, почему бы и тут не хранить, особенно если мы уверены (а не как в статье), что мамкин хацкер не сможет куку подделать.

Я не автор, но известны похожие реальные случаи применения для аутентификации hash(secret + message), уязвимые к атакам удлинения, например у Flickr и др. (отличия там в деталях, в частности, в качестве хэш-функции там использовалась MD5, которая как и SHA-256 подвержена атакам на удлинение, не куки, а аргументы API и т.д.) , а также в отчетах bugbounty/code review (сброс пароля по ссылке типа site.com/reset?user=john&token=HASH(secret + "user=john"), ссылки на скачивание файла типа file.zip?id=123&sig=HASH(secret + "id=123") и др.

Когда я был маленький и глупый (и интернет тогда был в весьма зачаточном состоянии, а md5 считалось еще вполне надежным алгоритмом), то хешировал строку secret+message+secret. В таком message уже не удлинить.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации