← Прикладная криптографическая инженерияАутентификация и пароли

Утечка по времени при проверке MAC

Сравнение с ранним выходом длится тем дольше, чем больше совпавших начальных байтов. Измерьте время и восстановите секретный тег символ за символом.

Подписи внутри интерактивного демо пока на английском.

Secret tag on the server••••••••
Attacker’s guess so far········
0
1
2
3
4
5
6
7
8
9
a
b
c
d
e
f
requests so far 0brute force would need up to 16⁸ ≈ 4.3·10⁹ guesses
1 / 9
The server checks a secret 8-character tag with an early-exit compare: it stops at the first wrong character. Every extra matching character costs about 4 ns more. Timings here are simulated. Press play.

На что обратить внимание

  • Каждый верный символ добавляет несколько наносекунд. После усреднения по многим запросам эта разница заметна на фоне шума.
  • Атакующему нужно 16 попыток на шестнадцатеричный символ, а не 16ⁿ на весь тег: перебор становится линейным, а не экспоненциальным.
  • Сравнение за постоянное время (hmac.compare_digest, crypto.timingSafeEqual, CRYPTO_memcmp) всегда просматривает все байты, и столбцы выравниваются.