TOTP (Time-based One-Time Password) в 2FA
Давно хотел разобраться, как работают эти временные коды 2FA в GoogleAutentificator, ЯндексID и др.
Оказывается все, кто используют такую аутентификацию смогли договориться о едином стандарте шифрования.HMAC-based One-time Password Algorithm
Алгоритмы указаны в RFC 6238 и RFC 4226
А суть метода элегантна:
И клиент и сервер имеют единый секрет, зашифрованный в Base32. Вот тот самый QR, который мы сканируем.
С помощью него, текущего времени и алгоритма HMAC-SHA1 генерируется 20ти байтовый дайджест.
Который усекается до привычных нам 6 цифр.
И клиент и сервер делают это почти одновременно с равными промежутками, обычно 30 сек.
Именно поэтому эти коды совпадают.
Никакого постоянного обмена данными не требуется как в смс или пушах.
Главное - один раз обменяться секретами и всегда иметь синхронное время.
#2fa
