- Фундаментална разлика у улазном параметру: 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. Прилагођен за микроконтролере ниске потрошње са физичким дугметом. Притисак на тастер увећава интерни бројач и генерише шестоцифрени токен на LCD дисплеју.
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 бита).
🔍 Како динамичко одсецање (Dynamic Truncation) претвара 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. Резултујући шестоцифрени OTP код гласи 339280!
Еволуција TOTP (RFC 6238) протокола: Магија временског корака
HOTP је захтевао да бројач на клијенту буде у сталној синхронизацији са сервером. На софтверским уређајима бројање притисака на тастере или кликова доводи до честих људских грешака и раскорака.
RFC 6238 је заменио бројач C дискретним временским кораком T изведеним директно из Unix системског сата:
- CurrentUnixTime: Број секунди протеклих од 1970-01-01 00:00:00 UTC.
- T0: Референтна тачка иницијализације епохе (у свим модерним сервисима подразумевано је 0).
- X (Прозор временског корака): Стандардно препоручено трајање од 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 vs. TOTP)
| Димензија | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Улазна променљива | Бројач догађаја C (монотоно растући) | Временски корак T (30-секундни Unix epoch прозор) |
| Трајање важења токена | Неограничено (важи до следеће успешне пријаве) | Стриктно 30 секунди (аутоматски истиче) |
| Архитектура сервера | Са чувањем стања (захтева атомски упис у базу при свакој пријави) | Без чувања стања (независна NTP верификација) |
| Изложеност нападима понављања (Replay) | Умерена (пресретнути код важи док га корисник не потроши) | Минимална (ограничена на преостале секунде текућег прозора) |
| Основни узрок отказа | Десинхронизација бројача (случајни притисци на дугме) | Временско одступање (раскорак у сату телефона корисника) |
| Подржани криптографски хешеви | Искључиво HMAC-SHA-1 | HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512 |
| Заступљеност у индустрији | Стари банкарски привесци, специјализоване капије | 99,9% модерних веб аутентификатора |
Десинхронизација vs. Временско одступање: Техничка решења
У реалним дистрибуираним продукционим системима клијенти и сервери неизбежно долазе до благог раскорака. Криптографи су осмислили експлицитне компензационе прозоре како би одржали поузданост рада:
Ако корисник кликне дугме на свом токену 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 тајни низ трансформише у динамичке шестоцифрене кодове путем HMAC-SHA1 динамичког одсецања. 100% локално и безбедно у прегледачу.
📚 Повезани безбедносни водичи
Како безбедно пренети 2FA налоге између телефона користећи офлајн QR кодове и синхронизацију у облаку.
Обавезна правила, чување кодова за опоравак, коришћење SSH кључева и поступци спасавања налога.
Како повратити приступ сервисима Google, Microsoft, Steam, Binance, Apple и Discord.