Выбор ответа Middle Аутентификация и права обновлено

Почему hmac.compare_digest

Вопрос

Почему токены, подписи и API-ключи сравнивают через hmac.compare_digest(a, b), а не a == b?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: == останавливается на первом несовпадении, и значение подбирают по времени. Обычное сравнение строк быстрее отвечает при раннем несовпадении.

Варианты ответа

  1. == сравнивает только первые 32 символа строк, а compare_digest всю длину
  2. compare_digest ещё и расшифровывает токен перед сравнением с эталоном
  3. Это стилистическое правило PEP 8 для сравнения байтовых строк в криптографии
  4. == останавливается на первом несовпадении, и значение подбирают по времениправильный ответ

Разбор

Обычное сравнение строк быстрее отвечает при раннем несовпадении. Измеряя время многих запросов, атакующий теоретически может угадывать значение символ за символом (timing attack). compare_digest сравнивает за время, не зависящее от позиции первого различия. Ограничений длины у == нет, расшифровки не происходит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме