- Фундаменталната разлика във входната променлива: HOTP изчислява хешове от монотонно нарастващ брояч C, докато TOTP заменя C с времева стъпка от епохата T (CurrentUnixTime / 30).
- Директно наследяване: Математически TOTP е специализация на HOTP:
TOTP(K, Time) = HOTP(K, T). И двата алгоритъма използват абсолютно същата функция за динамично съкращаване (Dynamic Truncation). - Решаващият архитектурен фактор: HOTP изисква състояние (сървърите трябва да заключват и записват броячите на диск при всяка валидация). TOTP е без състояние (stateless), което позволява на съвременните облачни микроуслуги да валидират токени в разпределени клъстери без централизирани операции по запис в база данни.
Исторически корени: От патентовани хардуерни токени към отворени уеб стандарти
В началото на 2000-те години корпоративната двуфакторна автентикация беше доминирана от патентовани хардуерни ключодържатели като RSA SecurID. Тези затворени и скъпи устройства съдържаха вътрешни кварцови кристали, синхронизирани с патентовани корпоративни сървъри. Ако дадена организация искаше да предостави мултифакторна сигурност на хиляди служители, разходите за хардуер и лицензи бяха огромни.
За да освободят автентикацията от зависимостта от отделни доставчици, водещи технологични лидери създадоха консорциума OATH (Initiative for Open Authentication), целящ разработването на отворени, безплатни IETF стандарти, които всеки софтуерен инженер може свободно да изследва, внедрява и одитира:
HMAC-Based One-Time Password Algorithm. Разработен специално за микроконтролери с ниска консумация и физически бутон. Натискането на бутона увеличава вътрешния брояч и извежда 6-значен код на течнокристален дисплей.
Time-Based One-Time Password Algorithm. Проектиран по време на масовото навлизане на смартфоните. Чрез използването на мрежовата синхронизация на времето NTP през мобилните мрежи, TOTP напълно елиминира проблемите с физическото състояние на бутоните.
Архитектура на HOTP (RFC 4226) и байтова механика на динамичното съкращаване
Основната математическа дефиниция на HOTP е изключително компактна:
Анализ на параметрите:
K: Споделен симетричен таен ключ (обикновено Base32 декодирана 160-битова / 20-байтова двоична последователност).C: 8-байтов (64-битов) целочислен брояч в формат Big-Endian.HMAC-SHA-1: Криптографски хеш-код за автентикация на съобщения с ключ, генериращ 20-байтов (160-битов) дайджест.
🔍 Как динамичното съкращаване (DT) превръща 20 байта в 6 цифри:
Дайджестът на HMAC-SHA1 съдържа 160 бита (20 байта). Извличането на 6 равномерно разпределени десетични цифри изисква детерминиран и устойчив на колизии механизъм за избор, дефиниран в Раздел 5.3 на RFC 4226:
Нека тайният ключ е ASCII низът "12345678901234567890", а броячът C = 0. Резултатният HMAC-SHA1 дайджест в шестнадесетичен вид е:
1. Последният байт е 0x71. 0x71 & 0x0F = 0x01, следователно Offset = 1.
2. Байти от 1 до 4 са: 93 cf 18 50. Нулирането на старшия бит дава 0x13cf1850, което в десетична бройна система е точно 332,339,280.
3. 332339280 mod 1000000 = 339280. Резултатният 6-значен OTP е 339280!
Еволюцията на TOTP (RFC 6238): Времевата стъпка
HOTP изискваше броячът на клиента непрекъснато да бъде в синхрон със сървъра. При софтуерни устройства броенето на кликвания или натискания на бутони неизбежно води до човешки грешки.
RFC 6238 замени брояча C с дискретна времева стъпка T, извлечена директно от часовника на Unix епохата:
- CurrentUnixTime: Изминалите секунди от 1970-01-01 00:00:00 UTC.
- T0: Отправна точка за инициализация на епохата (по подразбиране 0 във всички съвременни системи).
- X (Времеви интервал / Time Step): Стандартната препоръчителна продължителност от 30 секунди.
- Функция за закръгляне надолу ⌊ ⌋: За всеки таймстамп в рамките на 30-секундния прозорец, стойността на T остава непроменена. Например между секунди 1728211200 и 1728211229 от епохата, T има абсолютно едно и също 64-битово целочислено значение.
Двоична сериализация: След като T се изчисли, то се пакетира в 8-байтов двоичен буфер в Big-Endian формат (идентичен по структура в паметта с брояча C в HOTP). Следователно обединената формула се свежда до:
TOTP(K, Time) = HOTP(K, T)
Тази математическа елегантност обяснява защо приложенията за автентикация сменят кодовете синхронно на всеки 30 секунди, без да се налага поддържане на постоянно състояние.
HS[31] & 0x0F); при SHA-512 (64-байтов дайджест) отместването се взема от байт 63 (HS[63] & 0x0F). В 99.9% от масовите уеб платформи (Google, Microsoft, GitHub, AWS) обаче SHA-1 остава стандарт поради универсалната съвместимост с мобилни клиенти.
Подробна сравнителна матрица (HOTP срещу TOTP)
| Параметър | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Входна променлива | Брояч на събития C (монотонно нарастващ) | Времева стъпка T (30-секунден Unix прозорец) |
| Валидност на токена | Неограничена (до употреба при следващо вписване) | Строго 30 секунди (автоматично обезсилване) |
| Сървърна архитектура | Със състояние (изисква атомарни записи в БД при всяко вписване) | Без състояние / Stateless (независима проверка по NTP) |
| Уязвимост на Replay атаки | Умерена (прихванат токен остава валиден до използването му) | Минимална (ограничена до оставащите секунди в текущия прозорец) |
| Основен сценарий на отказ | Десинхронизация на брояча (случайни натискания на бутона) | Времеви дрейф (отклонение в часовника на клиента) |
| Поддържани криптографски хешове | Единствено HMAC-SHA-1 | HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512 |
| Индустриално приложение | Остарели банкови токени, специализиран физически контрол на достъп | 99.9% от съвременните уеб автентикатори |
Десинхронизация срещу времеви дрейф: Инженерни решения
В реални разпределени среди клиентите и сървърите неизбежно се разминават във времето или стъпките. Криптографите са разработили конкретни защитни механизми за компенсиране:
Ако потребителят натисне бутона на токена си 5 пъти без да се впише, броячът на клиента достига C+5, докато сървърът остава на C.
RFC 4226 предвижда при вход сървърът да изчислява прозорец за проверка напред в диапазона [C+1, C+s] (обикновено s=20). При съвпадение сървърът прескача напред и моментално синхронизира брояча C.
Поради мрежово закъснение или леко отклонение в системния часовник на телефона (например изоставане с 10 секунди), кодовете могат да пристигнат в съседна времева стъпка.
Продукционните сървъри проверяват масив от 3 прозореца: [T-1, T, T+1], което на практика разширява допустимия интервал до 90 секунди.
Когато сървърът проверява дали въведеният от потребителя код съвпада с изчисления код, наивната проверка за равенство (като userOtp === serverOtp) прекъсва при първия несъответстващ символ. Нападател, измерващ микросекундни разлики във времето за отговор по мрежата, може итеративно да възстанови цифрите една по една. Корпоративните системи задължително налагат сравнения с константно време (например crypto.timingSafeEqual в Node.js), за да неутрализират атаките по страничен канал.
Защо TOTP победи в съвременния интернет
Окончателният триумф на TOTP над HOTP в уеб пространството бе продиктуван от три основни архитектурни предимства:
В разпределени облачни микроуслуги в множество региони всеки сървърен инстанс с NTP-синхронизиран часовник може самостоятелно да валидира TOTP токени, без да прави заявки или да заключва записи в централизирана база данни.
Смартфоните постоянно сверяват часовника си през клетките на мобилните оператори и GPS, което напълно елиминира проблема с времевия дрейф без необходимост от физическа поддръжка на отделни устройства.
HOTP токените остават валидни безсрочно до тяхното използване. TOTP токените изтичат автоматично след 30 секунди, обезсилвайки компрометирани логове и прихванати пакети от трафик.
Изпробвайте изчисляването на TOTP в реално време в 2FA-Tool
Вижте как вашият таен Base32 низ се преобразува в динамични 6-значни кодове чрез динамично съкращаване на HMAC-SHA1. 100% офлайн във вашия браузър.
📚 Свързани ръководства по сигурност
Как да прехвърлите 2FA акаунти между телефони чрез офлайн QR кодове и Google Cloud Sync.
Изисквания за съвместимост, съхранение на 16 резервни кода и предотвратяване на блокиране.
Как да възстановите достъпа до Google, Microsoft, Steam, Binance, Apple и Discord.