- Perbezaan Input Asas: HOTP mengira cincangan daripada pembilang yang meningkat secara monoton C, manakala TOTP menggantikan C dengan langkah masa zaman T (CurrentUnixTime / 30).
- Pewarisan Langsung: TOTP secara matematik adalah pengkhususan daripada HOTP:
TOTP(K, Time) = HOTP(K, T). Kedua-dua algoritma menggunakan fungsi Pemotongan Dinamik (Dynamic Truncation) yang sama persis. - Faktor Penentu Seni Bina: HOTP berkeadaan (stateful - pelayan mesti mengunci dan mengekalkan pembilang ke cakera pada setiap pengesahan). TOTP tanpa keadaan (stateless), membolehkan perkhidmatan mikro awan moden mengesahkan token merentas kluster seimbang beban teragih tanpa operasi penulisan pangkalan data berpusat.
Akar Sejarah: Daripada Token Perkakasan Hak Milik ke Piawaian Web Terbuka
Pada awal tahun 2000-an, pengesahan dua faktor korporat didominasi oleh peranti perkakasan proprietari seperti RSA SecurID. Peranti tertutup dan mahal ini mengandungi kristal kuarza dalaman yang disegerakkan ke pelayan perusahaan proprietari. Jika sesebuah organisasi ingin menyediakan keselamatan pelbagai faktor kepada beribu-ribu pekerja, kos perolehan perkakasan dan lesen proprietari adalah sangat membebankan.
Untuk membebaskan pengesahan daripada vendor proprietari, konsortium OATH (Initiative for Open Authentication) ditubuhkan oleh para peneraju industri untuk menyampaikan piawaian IETF terbuka dan bebas royalti yang boleh diperiksa, dilaksanakan, dan diaudit secara bebas oleh mana-mana jurutera perisian:
HMAC-Based One-Time Password Algorithm. Disesuaikan untuk mikropengawal berkuasa rendah dengan butang tolak fizikal. Menekan butang akan meningkatkan pembilang dalaman dan mencetak token 6 digit ke skrin LCD.
Time-Based One-Time Password Algorithm. Direka bentuk seiring dengan lonjakan penggunaan telefon pintar. Dengan memanfaatkan penyegerakan masa rangkaian NTP selular, TOTP menghapuskan ketidakpadanan keadaan butang fizikal sepenuhnya.
Seni Bina HOTP (RFC 4226) & Mekanik Bait Pemotongan Dinamik
Definisi matematik teras HOTP sangat ringkas dan berkesan:
Pecahan Parameter:
K: Kunci rahsia simetri yang dikongsi (biasanya jujukan binari 160-bit / 20-bait yang dinyahkod daripada Base32).C: Pembilang integer 8-bait (64-bit) berformat big-endian.HMAC-SHA-1: Kod pengesahan mesej cincangan berkunci yang menghasilkan ringkasan kriptografi 20-bait (160-bit).
🔍 Bagaimana Pemotongan Dinamik (DT) Menukar 20 Bait kepada 6 Digit:
Ringkasan HMAC-SHA1 mengandungi 160 bit (20 bait). Mengekstrak 6 digit perpuluhan seragam memerlukan mekanisme pemilihan berketentuan dan tahan perlanggaran yang ditakrifkan dalam Seksyen 5.3 RFC 4226:
Katakan kunci rahsia ialah ASCII "12345678901234567890" dan Pembilang C = 0. Ringkasan HMAC-SHA1 yang terhasil dalam heksadesimal ialah:
1. Bait terakhir ialah 0x71. 0x71 & 0x0F = 0x01, maka Offset = 1.
2. Bait 1 hingga 4 ialah: 93 cf 18 50. Menetapkan MSB kepada sifar menghasilkan 0x13cf1850, yang bersamaan dengan nilai perpuluhan 332,339,280.
3. 332339280 mod 1000000 = 339280. OTP 6 digit yang terhasil ialah 339280!
Evolusi TOTP (RFC 6238): Keajaiban Langkah Masa
HOTP memerlukan pembilang pada klien sentiasa disegerakkan dengan pelayan. Pada peranti perisian, mengira tekanan kekunci atau butang memperkenalkan kesilapan manusia secara berterusan.
RFC 6238 menggantikan pembilang C dengan langkah masa diskret T yang diperoleh terus daripada jam Unix epoch:
- CurrentUnixTime: Saat yang telah berlalu sejak 1970-01-01 00:00:00 UTC.
- T0: Rujukan permulaan epoch (lalai kepada 0 dalam semua pelaksanaan moden).
- X (Tetingkap Langkah Masa): Tempoh standard yang disyorkan iaitu 30 saat.
- Fungsi Lantai ⌊ ⌋: Untuk sebarang cap waktu dalam tetingkap 30 saat, T kekal tidak berubah. Sebagai contoh, antara saat epoch 1728211200 dan 1728211229, nilai T menilai kepada integer 64-bit yang sama persis.
Pensirilan Binari: Sebaik sahaja T dikira, ia dibungkus ke dalam penimbal bait binari 8-bait big-endian (serupa dari segi struktur memori dengan pembilang C dalam HOTP). Oleh yang demikian, formula bersatu dipermudahkan kepada:
TOTP(K, Time) = HOTP(K, T)
Keanggunan matematik ini menerangkan sebab aplikasi pengesah memperbaharui token secara serentak setiap 30 saat tanpa memerlukan penyegerakan keadaan berterusan.
HS[31] & 0x0F); dalam SHA-512 (ringkasan 64-bait), ofset diambil daripada bait 63 (HS[63] & 0x0F). Walau bagaimanapun, dalam 99.9% laman web komersial (Google, Microsoft, GitHub, AWS), SHA-1 kekal sebagai piawaian lalai sejagat kerana keserasian klien mudah alih warisan.
Matriks Perbandingan Komprehensif Bersebelahan (HOTP vs. TOTP)
| Dimensi | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Pemboleh Ubah Input | Pembilang Peristiwa C (meningkat secara monoton) | Langkah Masa T (tetingkap 30 saat Unix epoch) |
| Jangka Hayat Token | Tidak terhad (sah sehingga digunakan oleh log masuk seterusnya) | Ketat 30 saat (batal secara automatik) |
| Seni Bina Pelayan | Berkeadaan (memerlukan penulisan pangkalan data atomik setiap log masuk) | Tanpa keadaan (pengesahan NTP bebas) |
| Pendedahan Serangan Ulang Tayang | Sederhana (token yang dipintas kekal sah sehingga digunakan) | Minimum (terhad kepada baki saat dalam tetingkap semasa) |
| Mod Kegagalan Utama | Penyahsegerakan Pembilang (tekanan butang tidak sengaja) | Pelesapan Jam (sisihan masa telefon klien) |
| Cincangan Kriptografi Disokong | HMAC-SHA-1 eksklusif | HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512 |
| Penerimaan Industri | Token perbankan legasi, pintu keselamatan fizikal khusus | 99.9% pengesah web moden |
Penyahsegerakan vs Pelesapan Masa: Mitigasi Teknikal
Dalam persekitaran pengeluaran teragih, jam klien dan pelayan tidak dapat dielakkan daripada mengalami sisihan. Ahli kriptografi mereka bentuk tetingkap pampasan eksplisit untuk mengekalkan kebolehpercayaan:
Jika pengguna mengklik butang token mereka sebanyak 5 kali tanpa menghantar, pembilang klien mencapai C+5 manakala pelayan kekal pada C.
RFC 4226 menetapkan bahawa semasa pengesahan, pelayan mengira tetingkap pandang hadapan yang merangkumi [C+1, C+s] (biasanya s=20). Jika padanan berlaku, pelayan melompat ke hadapan dan menyegerakkan pembilang C serta-merta.
Disebabkan oleh kependaman rangkaian atau pelesapan jam peranti klien (contohnya jam telefon terlambat 10 saat), token mungkin tiba dalam langkah masa bersebelahan.
Pelayan pengeluaran menilai tatasusunan 3 tetingkap: [T-1, T, T+1], yang secara praktikal memperluaskan tetingkap penerimaan kepada 90 saat.
Apabila pelayan mengesahkan sama ada kod yang dihantar pengguna sepadan dengan kod yang dikira, semakan kesaksamaan rentetan lazim (seperti userOtp === serverOtp) tamat serta-merta pada aksara pertama yang tidak sepadan. Penyerang yang mengukur masa tindak balas pusing balik rangkaian mikroskopik boleh menyusun semula digit secara lelaran. Bahagian belakang perusahaan menguatkuasakan perbandingan kesaksamaan masa malar (cth., crypto.timingSafeEqual dalam Node.js) untuk mematahkan analisis saluran sisi pemasaan.
Mengapa TOTP Memenangi Internet Moden
Kemenangan mutlak TOTP ke atas HOTP di seluruh web didorong oleh tiga keperluan asas seni bina:
Dalam perkhidmatan mikro teragih merentas berbilang wilayah, mana-mana kejadian pelayan dengan jam yang disegerakkan NTP boleh mengesahkan token TOTP tanpa perlu menyoal atau mengunci rekod pangkalan data berpusat.
Telefon pintar secara berterusan menentukur jam sistem mereka melalui stesen pangkalan selular dan GPS, menghapuskan isu pelesapan jam tanpa memerlukan penyelenggaraan perkakasan fizikal.
Token HOTP kekal sah selama-lamanya sehingga digunakan. Token TOTP luput dalam masa 30 saat, meneutralkan log yang terjejas dan tangkapan paket pasif secara automatik.
Alami Pengiraan TOTP Masa Nyata dalam 2FA-Tool
Saksikan bagaimana rentetan rahsia Base32 anda berubah menjadi kod dinamik 6 digit melalui pemotongan dinamik HMAC-SHA1. 100% luar talian dalam pelayar anda.
📚 Panduan Keselamatan Berkaitan
Cara memindahkan akaun 2FA merentas telefon pintar menggunakan kod QR luar talian dan Penyegerakan Awan.
Peraturan pematuhan, penyimpanan kod pemulihan, interaksi kunci SSH, dan aliran kerja pemulihan akaun.
Cara memulihkan akses merentas akaun Google, Microsoft, Steam, Binance, Apple, dan Discord.