⏱️ Kriptograpiya at Mga Protokol ng RFC ✓ Pagsusuri sa Mga Pamantayan ng IETF

Paliwanag sa TOTP vs HOTP: Pangunahing Pagkakaiba, Seguridad, at Prinsipyo ng Pagpapatakbo

Milyun-milyong developer at security engineer ang tumitingin sa lumilipat na 6-digit verification code araw-araw, ngunit kakaunti ang nakauunawa sa eleganteng mathematical machinery na gumagana sa ilalim ng screen. Mula sa mga event-driven counter ng RFC 4226 (HOTP) noong 2005 hanggang sa discrete time steps ng RFC 6238 (TOTP) noong 2011, sinusuri ng gabay na ito ang byte-level na algorithm ng Dynamic Truncation, mga kahinaan sa counter desynchronization, mga tolerance sa clock drift, at kung bakit TOTP ang sumakop sa modernong web.

2FA
Koponan ng Inhinyeriya sa Seguridad ng 2FA-Tool
Na-update noong Oktubre 2026
Tinatayang Oras ng Pagbasa: 14 min (2,600+ salita)
RFC 6238 RFC 4226 Dynamic Truncation
💡 Mga Kriptograpikong Aral (TL;DR)
  • Ang Pangunahing Pagkakaiba sa Input: Kinakalkula ng HOTP ang mga hash mula sa isang monotonically increasing counter C, samantalang pinapalitan ng TOTP ang C ng isang epoch time step T (CurrentUnixTime / 30).
  • Direktang Pamana: Sa matematika, ang TOTP ay isang espesyalisasyon ng HOTP: TOTP(K, Time) = HOTP(K, T). Parehong gumagamit ang dalawang algorithm ng eksaktong parehong function ng Dynamic Truncation.
  • Pang-arkitekturang Salik: Ang HOTP ay stateful (dapat i-lock at i-save ng mga server ang mga counter sa disk sa bawat validation). Ang TOTP ay stateless, na nagbibigay-daan sa mga modernong cloud microservice na mag-validate ng mga token sa mga distributed load-balanced cluster nang hindi nangangailangan ng centralized database write operation.
01

Mga Pinagmulang Kasaysayan: Mula sa Proprietaryong Hardware Token Hanggang sa Mga Bukas na Pamantayan ng Web

Noong unang bahagi ng dekada 2000, ang corporate two-factor authentication ay pinangungunahan ng mga proprietaryong key fob tulad ng RSA SecurID. Ang mga sarado at mamahaling device na ito ay naglalaman ng mga internal quartz crystal na naka-synchronize sa mga proprietaryong enterprise server. Kung nais ng isang organisasyon na magbigay ng multi-factor security sa libu-libong empleyado, napakataas ng gastos sa pagbili ng hardware at mga proprietaryong lisensya.

Upang palayain ang authentication mula sa mga proprietaryong vendor, binuo ng mga pinuno ng industriya ang OATH (Initiative for Open Authentication) upang maghatid ng mga bukas at walang-royalty na pamantayan ng IETF na malayang masusuri, maipatutupad, at ma-audit ng sinumang software engineer:

📜 2005: RFC 4226 (HOTP)

HMAC-Based One-Time Password Algorithm. Idinisenyo para sa mga low-power microcontroller na may pisikal na push button. Ang pagpindot sa button ay nagdaragdag sa internal counter at nagpi-print ng 6-digit token sa isang LCD screen.

📜 2011: RFC 6238 (TOTP)

Time-Based One-Time Password Algorithm. Idinisenyo kasabay ng mabilis na paglaganap ng mga smartphone. Sa pamamagitan ng paggamit ng cellular NTP network time synchronization, ganap na inalis ng TOTP ang mga mismatch sa estado ng pisikal na button.

02

Arkitektura ng HOTP (RFC 4226) at Byte Mechanics ng Dynamic Truncation

Ang pangunahing mathematical definition ng HOTP ay napakapayak sa paningin ngunit makapangyarihan:

HOTP(K, C) = Truncate(HMAC-SHA-1(K, C)) mod 10DigitCount

Pagkasira ng mga Parameter:

  • K: Shared symmetric secret key (karaniwang isang Base32 decoded 160-bit / 20-byte binary sequence).
  • C: 8-byte (64-bit) big-endian integer counter.
  • HMAC-SHA-1: Keyed-hash message authentication code na bumubuo ng 20-byte (160-bit) cryptographic digest.

🔍 Paano Kino-convert ng Dynamic Truncation (DT) ang 20 Bytes Tungo sa 6 Digits:

Ang isang HMAC-SHA1 digest ay naglalaman ng 160 bits (20 bytes). Ang pag-extract ng 6 na pare-parehong decimal digit ay nangangailangan ng isang deterministic at collision-resistant na mekanismo sa pagpili na tinukoy sa Seksyon 5.3 ng RFC 4226:

// Hakbang 1: Kalkulahin ang Dynamic Offset
Offset = HS[19] & 0x0F
Kunin ang huling byte (index 19) ng 20-byte digest. Ang pag-mask gamit ang 0x0F ay nagbubukod sa mababang 4 bits, na nagbibigay ng integer na mahigpit na nasa pagitan ng 0 at 15 (0x0 hanggang 0xF). Tinitiyak nito na ang kasunod na 4-byte extraction ay hindi lalampas sa 20-byte buffer (dahil 15 + 4 = 19).
// Hakbang 2: I-extract ang 4 Magkakasunod na Byte na May Masking
P = ( (HS[Offset] & 0x7F) << 24 ) | ( (HS[Offset+1] & 0xFF) << 16 ) | ( (HS[Offset+2] & 0xFF) << 8 ) | ( HS[Offset+3] & 0xFF )
I-extract ang 4 bytes simula sa Offset. Ang mask na 0x7F ay nagiging zero sa most significant bit (MSB) upang maiwasan ang signed integer overflow sa iba't ibang arkitektura ng CPU (tinitiyak ang isang malinis at positibong 31-bit integer).
// Hakbang 3: Modulo Arithmetic para sa Huling Mga Digit
OTP = P mod 106 = P mod 1000000
Ang paggamit ng modulo 1,000,000 ay nagbubukod sa huling 6 decimal digits, na naglalagay ng mga panimulang zero kung kinakailangan (halimbawa, ang 748 ay nagiging "000748").
🧪 Konkretong Test Vector mula sa RFC 4226 Appendix D:

Ipagpalagay na ang secret key ay ASCII "12345678901234567890" at ang Counter ay C = 0. Ang nagreresultang HMAC-SHA1 digest sa hexadecimal ay:

cc 93 cf 18 50 8d 94 93 4c 64 b6 6d 8b fb 87 fb 23 cb 4b 71

1. Ang huling byte ay 0x71. 0x71 & 0x0F = 0x01, kaya Offset = 1.
2. Ang bytes 1 hanggang 4 ay: 93 cf 18 50. Ang pag-zero sa MSB ay nagbibigay ng 0x13cf1850, na sa decimal ay katumbas ng 332,339,280.
3. 332339280 mod 1000000 = 339280. Ang nagreresultang 6-digit OTP ay 339280!

03

Ebolusyon ng TOTP (RFC 6238): Ang Mahika ng Time-Step

Kinakailangan ng HOTP na panatilihing naka-sync ang counter sa client at sa server. Sa mga software device, ang pagbibilang ng mga keystroke o pagpindot sa button ay nagdudulot ng patuloy na pagkakamali ng tao.

Pinalitan ng RFC 6238 ang counter C ng isang discrete time step T na direktang nagmumula sa Unix epoch clock:

T = ⌊ (CurrentUnixTime - T0) / X ⌋
  • CurrentUnixTime: Mga segundong lumipas mula noong 1970-01-01 00:00:00 UTC.
  • T0: Sanggunian sa pagsisimula ng epoch (naka-default sa 0 sa lahat ng modernong deployment).
  • X (Time Step Window): Karaniwang inirerekomendang tagal na 30 segundo.
  • Floor Function ⌊ ⌋: Para sa anumang timestamp sa loob ng 30-segundong window, ang T ay nananatiling hindi nagbabago. Halimbawa, sa pagitan ng epoch seconds na 1728211200 at 1728211229, ang T ay nagreresulta sa eksaktong parehong 64-bit integer.

Binary Serialization: Kapag nakalkula na ang T, ito ay ibinabalot sa isang 8-byte big-endian binary byte buffer (katulad sa memory structure ng counter C sa HOTP). Dahil dito, ang pinag-isang formula ay nagiging simple:
TOTP(K, Time) = HOTP(K, T) Ipinapaliwanag ng mathematical elegance na ito kung bakit ang mga authenticator app ay sabay-sabay na nagpapalit ng mga token bawat 30 segundo nang hindi nangangailangan ng persistent state synchronization.

Suporta ng RFC 6238 para sa SHA-256 at SHA-512: Habang mahigpit na tinukoy ng RFC 4226 ang HMAC-SHA-1, pinalawig ng RFC 6238 ang suporta para sa HMAC-SHA-256 at HMAC-SHA-512. Sa SHA-256 (32-byte digest), ang offset ay kinukuha mula sa byte 31 (HS[31] & 0x0F); sa SHA-512 (64-byte digest), ang offset ay kinukuha mula sa byte 63 (HS[63] & 0x0F). Gayunpaman, sa 99.9% ng mga komersyal na website (Google, Microsoft, GitHub, AWS), ang SHA-1 ay nananatiling pamantayan dahil sa compatibility sa mga legacy mobile client.
04

Komprehensibong Paghahambing Matrix (HOTP vs. TOTP)

Dimensyon HOTP (RFC 4226) TOTP (RFC 6238)
Input Variable Event Counter C (monotonically incrementing) Time Step T (30-segundong Unix epoch window)
Haba ng Buhay ng Token Walang takda (wasto hanggang magamit sa susunod na pag-login) Mahigpit na 30 segundo (awtomatikong mawawalan ng bisa)
Arkitektura ng Server Stateful (nangangailangan ng atomic database writes bawat pag-login) Stateless (independiyenteng NTP verification)
Exposure sa Replay Attack Katamtaman (ang naharang na token ay nananatiling wasto hanggang magamit) Napakaliit (limitado sa mga natitirang segundo sa kasalukuyang window)
Pangunahing Paraan ng Pagkabigo Counter Desynchronization (hindi sinasadyang pagpindot sa button) Clock Drift (pagkaantala o pagkaabante ng oras sa telepono ng client)
Sinusuportahang Cryptographic Hashes HMAC-SHA-1 lamang HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512
Paggamit sa Industriya Mga lumang banking fob, mga espesyal na pisikal na gate 99.9% ng mga modernong web authenticator
05

Desynchronization vs. Time Drift: Mga Teknikal na Solusyon

Sa mga distributed production environment, hindi maiiwasang magkaroon ng drift ang mga client at server. Nagdisenyo ang mga cryptographer ng mga tahasang compensation window upang mapanatili ang pagiging maaasahan:

⚙️ HOTP Mitigation: Look-Ahead Verification Window (s)

Kung pinindot ng isang user ang button ng kanyang token nang 5 beses nang hindi ito isinusumite, ang counter ng client ay aabot sa C+5 habang ang server ay mananatili sa C.
Tinutukoy ng RFC 4226 na sa oras ng authentication, kinakalkula ng server ang isang look-ahead window na sumasaklaw sa [C+1, C+s] (karaniwang s=20). Kung mayroong tumugma, ang server ay agad na aabante at i-synchronize ang counter C.

⏱️ TOTP Mitigation: Time Skew Tolerance (±1 Window)

Dahil sa network latency o clock drift ng client device (halimbawa, ang oras ng telepono ay nahuhuli nang 10 segundo), maaaring dumating ang mga token sa katabing time steps.
Sinusuri ng mga production server ang isang 3-window array: [T-1, T, T+1], na epektibong nagpapalawig sa acceptance window hanggang 90 segundo.

Mandatoryong Panuntunan Laban sa Replay: Upang maiwasan ang mga replay attack sa loob ng 90-segundong skew window, dapat i-cache at i-lock ng mga server ang mga nagamit nang token sa memory (hal. Redis) sa loob ng 90 segundo, at tanggihan ang mga dobleng pagsusumite.
🛡️ Constant-Time String Comparison (Pagtatanggol Laban sa Timing Attack):

Kapag sinusuri ng mga server kung ang isinumiteng code ng user ay tumutugma sa kinakalkulang code, ang mga simpleng string equality check (tulad ng userOtp === serverOtp) ay agad na humihinto sa unang hindi tumugmang character. Ang isang attacker na sumusukat sa microscopic network round-trip response times ay maaaring muling buuin ang mga digit nang paunti-unti. Nagpapatupad ang mga enterprise backend ng constant-time equality comparisons (tulad ng crypto.timingSafeEqual sa Node.js) upang pigilan ang side-channel timing analysis.

06

Kung Bakit TOTP ang Nanaig sa Modernong Internet

Ang mapagpasyang tagumpay ng TOTP laban sa HOTP sa buong web ay dulot ng tatlong pang-arkitekturang pangangailangan:

☁️ Stateless Cloud Scalability

Sa mga distributed multi-region microservices, ang sinumang server instance na may NTP-synchronized na orasan ay maaaring mag-validate ng mga TOTP token nang hindi kailangang mag-query o mag-lock ng centralized database record.

📱 Synergy sa Mobile Ecosystem

Patuloy na itinutugma ng mga smartphone ang kanilang mga system clock sa pamamagitan ng mga cellular base station at GPS, na nag-aalis sa clock drift nang hindi nangangailangan ng pisikal na pagpapanatili ng hardware.

🛡️ Makitid na 30-Segundong Attack Window

Ang mga HOTP token ay nananatiling wasto nang walang takda hanggang magamit. Ang mga TOTP token ay nag-e-expire sa loob ng 30 segundo, na awtomatikong nagpapawalang-bisa sa mga nakompromisong log at passive packet captures.

🧮 Pure Client-Side RFC 6238 Engine

Subukan ang Real-Time na Pagkalkula ng TOTP sa 2FA-Tool

Tingnan kung paano ang iyong Base32 secret string ay nagiging mga dynamic na 6-digit code sa pamamagitan ng HMAC-SHA1 dynamic truncation. 100% offline sa iyong browser.

Buksan ang Online Generator