Algoritma Kata Sandi Sekali-Pakai berbasis Waktu (TOTP) adalah perpanjangan fungsi dari algoritma Kata Sandi Sekali-Pakai berbasis HMAC (HOTP) yang menghasilkan kata sandi satu kali pakai dengan cara memanfaatkan faktor waktu sebagai basis perhitungannya.
Dalam sistem autentikasi modern, TOTP menjadi fondasi utama bagi aplikasi seperti Google Authenticator, Authy, dan Microsoft Authenticator untuk menghasilkan kode verifikasi yang kedaluwarsa secara otomatis setiap 30 detik. Sistem ini memastikan bahwa meskipun kode berhasil disadap oleh pihak lain, kode tersebut tidak akan dapat digunakan kembali pada waktu yang berbeda.
Mekanisme Dasar dan Hubungan dengan HOTP
Secara arsitektural, TOTP diturunkan langsung dari HOTP (HMAC-based One-time Password). Perbedaan utamanya terletak pada variabel penghitung (counter) yang digunakan:
- HOTP: Menggunakan penghitung berbasis kejadian (event-based counter) yang bertambah setiap kali sebuah kode diminta.
- TOTP: Mengganti penghitung kejadian tersebut dengan nilai waktu saat ini yang dibagi dengan interval waktu tertentu (biasanya 30 detik).
| Fitur | HOTP (HMAC-Based) | TOTP (Time-Based) |
|---|---|---|
| Basis Variabel | Penghitung manual (Counter) | Waktu Unix (Epoch Time) |
| Masa Berlaku Kode | Hingga digunakan / increment berikutnya | Umumnya 30 detik |
| Sinkronisasi | Butuh penyesuaian jika counter terlewat | Membutuhkan sinkronisasi jam server dan klien |
Komponen Utama dalam Penghitungan TOTP
Proses penghitungan kode TOTP melibatkan tiga komponen esensial yang harus disepakati oleh server dan perangkat pengguna (klien):
- Kunci Rahasia Bersama (Secret Key): Sebuah string rahasia yang dibagikan saat pendaftaran autentikasi dua faktor (biasanya dipindai melalui QR Code).
- Waktu Saat Ini (Time T): Waktu berbasis UTC (Coordinated Universal Time) yang dihitung sejak Unix Epoch (1 Januari 1970).
- Fungsi HMAC-SHA: Fungsi hash kriptografi (biasanya HMAC-SHA-1, HMAC-SHA-256, atau HMAC-SHA-512) yang menggabungkan kunci rahasia dan waktu untuk menghasilkan nilai acak yang kemudian dipotong (truncated) menjadi 6 hingga 8 digit angka.
Langkah-Langkah Validasi di Sisi Server
Ketika pengguna memasukkan kode TOTP ke dalam sebuah layanan, server melakukan verifikasi melalui tahapan berikut:
- Server mengambil waktu saat ini pada sistemnya.
- Server menghitung ulang nilai TOTP berdasarkan kunci rahasia yang tersimpan di database untuk pengguna tersebut.
- Server membandingkan kode yang dimasukkan pengguna dengan hasil perhitungan lokal.
- Untuk mengatasi sedikit perbedaan waktu (drift) antara perangkat pengguna dan server, server biasanya memberikan toleransi jendela waktu (window tolerance), misalnya memeriksa satu interval sebelum atau sesudah waktu saat ini (±30 detik).