Утечка по времени при проверке MAC
Сравнение с ранним выходом длится тем дольше, чем больше совпавших начальных байтов. Измерьте время и восстановите секретный тег символ за символом.
Подписи внутри интерактивного демо пока на английском.
Secret tag on the server••••••••
Attacker’s guess so far········
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) всегда просматривает все байты, и столбцы выравниваются.