Выбор ответа Middle Аутентификация и права обновлено
Почему hmac.compare_digest
Вопрос
Почему токены, подписи и API-ключи сравнивают через hmac.compare_digest(a, b), а не a == b?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: == останавливается на первом несовпадении, и значение подбирают по времени. Обычное сравнение строк быстрее отвечает при раннем несовпадении.
Варианты ответа
==сравнивает только первые 32 символа строк, аcompare_digestвсю длинуcompare_digestещё и расшифровывает токен перед сравнением с эталоном- Это стилистическое правило PEP 8 для сравнения байтовых строк в криптографии
==останавливается на первом несовпадении, и значение подбирают по времениправильный ответ
Разбор
Обычное сравнение строк быстрее отвечает при раннем несовпадении. Измеряя время многих запросов, атакующий теоретически может угадывать значение символ за символом (timing attack). compare_digest сравнивает за время, не зависящее от позиции первого различия. Ограничений длины у == нет, расшифровки не происходит.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.