FlowingDev

TOTP, dijelaskan: Gimana caranya HP-mu tahu jabat tangan rahasia

Pelajari gimana Time-Based One-Time Password (TOTP) menciptakan lapisan keamanan kedua yang aman pakai rahasia bersama dan waktu saat ini.

Coba tool-nya: Generator TOTP / 2FA

Dalam satu kalimat

TOTP adalah algoritma yang menghasilkan kode numerik temporer yang terus berubah dari sebuah rahasia bersama dan waktu saat ini, digunakan sebagai faktor kedua untuk login.

Masalah yang dipecahkannya

Jujur aja deh: password itu emang nyebelin tapi perlu. Kita sering lupa, sering pakai password yang sama untuk banyak akun, dan para penyerang itu jagonya minta ampun dalam mencurinya lewat phishing, bocornya database, dan nebak-nebak biasa. Cuma ngandelin password itu ibarat ngunci pintu depan tapi kuncinya ditaruh di bawah keset.

Di sinilah Multi-Factor Authentication (MFA), dan varian paling umumnya, Two-Factor Authentication (2FA), berperan. Idenya adalah untuk membuktikan identitasmu dengan lebih dari sekadar sesuatu yang kamu tahu (password). Kamu juga perlu sesuatu yang kamu punya (kayak HP-mu) atau sesuatu yang melekat padamu (kayak sidik jari).

Dulu, 2FA sering kali berarti dapet kode via SMS. Ini lebih baik daripada nggak sama sekali, tapi rentan terhadap serangan "SIM swapping", di mana penipu meyakinkan provider selulermu untuk mentransfer nomormu ke HP mereka. Tiba-tiba, mereka yang dapet kode 2FA-mu. Nggak keren, kan.

Masuklah authenticator berbasis aplikasi. Alih-alih mengandalkan keamanan jaringan telepon yang goyah, aplikasi di perangkatmu bisa menghasilkan kode secara lokal. Tapi gimana caranya aplikasi Google Authenticator-mu tahu cara bikin kode untuk akun GitHub-mu? Dan gimana Microsoft Authenticator-mu bisa "ngobrol" dengan Dropbox-mu?

Mereka semua bicara bahasa standar terbuka yang sama: TOTP, si Time-Based One-Time Password. TOTP adalah pahlawan tanpa tanda jasa yang memisahkan faktor keduamu dari satu perusahaan mana pun. Ini adalah standar terbuka yang interoperable yang memungkinkan aplikasi apa pun yang patuh untuk bekerja dengan layanan apa pun yang patuh. Ini adalah evolusi dari standar sebelumnya yang disebut HOTP (yang basisnya dari counter sederhana), tapi dengan memakai waktu sebagai bagian yang bergerak, TOTP jadi jauh lebih ramah pengguna.

Cara kerjanya di balik layar

TOTP itu kayak sulap. Kamu scan QR code sekali, dan selamanya, HP-mu dan server di belahan dunia lain bisa sepakat pada angka enam digit yang sama setiap 30 detik, tanpa perlu ngobrol lagi. Ini bukan sulap, cuma kriptografi yang cerdasnya kebangetan.

Yuk, kita bedah resepnya.

Rahasia Bersama: Kunci Menuju Kerajaan

Semuanya dimulai dari sebuah rahasia. Saat kamu mengaktifkan 2FA di sebuah layanan, server akan menghasilkan kunci rahasia acak (misalnya, 160 bit data acak murni). Rahasia ini adalah satu-satunya hal yang perlu diketahui oleh kamu dan server. Seluruh keamanan sistem ini bergantung pada terjaganya rahasia ini.

Tentu saja, untaian 160 bit acak itu nggak ramah pengguna banget. Jadi untuk kita para manusia, itu di-encode ke dalam format yang disebut Base32. Beda sama saudaranya, Base64, Base32 menggunakan alfabet yang lebih kecil, case-insensitive, dan menghindari karakter ambigu seperti 1 dan l, atau 0 dan O. Ini membuatnya mungkin (meski tetap aja ribet) untuk diketik manual kalau kamu nggak bisa scan QR code.

Rahasia Base32 yang umum terlihat seperti ini: JBSWY3DPEHPK3PXPJBSWY3DPEHPK3PXP

Cara paling umum untuk memasukkan rahasia ini ke aplikasi authenticator-mu adalah melalui QR code yang meng-encode URI khusus:

otpauth://totp/FlowingDev:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=FlowingDev

Aplikasi kamu akan scan ini, menyimpan nama penerbit (FlowingDev), nama akun (user@example.com), dan yang paling penting, secret-nya. Jabat tangannya selesai.

Bagian yang Bergerak: Waktu

"T" dalam TOTP adalah singkatan dari Time-Based (Berbasis Waktu). Ini adalah bahan krusial yang membuat kodenya berubah. Tapi sistem ini tidak menggunakan waktu presisi hingga milidetik—itu mustahil untuk disinkronkan. Sebaliknya, ia menggunakan langkah waktu (time step) yang diskrit.

Rumusnya sederhana:

TimeStep = floor(CurrentUnixTime / 30)

  • CurrentUnixTime: Jumlah detik yang telah berlalu sejak 1 Januari 1970 (Unix Epoch).
  • / 30: Time step ini hampir secara universal adalah 30 detik.

Perhitungan ini menghasilkan sebuah integer yang hanya berubah setiap 30 detik. Pada pukul 10:00:00, TimeStep memiliki nilai T. Pada pukul 10:00:29, nilainya masih T. Tapi pada pukul 10:00:30, nilainya bertambah menjadi T+1. TimeStep inilah "pesan" yang akan kita autentikasi.

Keajaiban Kripto: HMAC-SHA1

Sekarang kita gabungkan rahasia statis dengan time step yang bergerak. Ini dilakukan menggunakan primitif kriptografi bernama HMAC (Hash-based Message Authentication Code).

HMAC_Result = HMAC-SHA1(SecretKey, TimeStep)

Anggap HMAC sebagai cara untuk membuat tanda tangan yang aman. HMAC mengambil kunci rahasia kita dan data yang ingin kita tandatangani (TimeStep) lalu mengaduknya bersama menggunakan fungsi hash—dalam hal ini, SHA-1 yang legendaris.

Outputnya adalah hash 20-byte (160-bit). Ini adalah string heksadesimal panjang yang benar-benar unik untuk rahasia spesifik dan time step spesifik itu. Ubah satu bit saja dari rahasianya atau tunggu 30 detik sampai time step berubah, dan kamu akan mendapatkan hash yang beda jauh banget.

Meskipun SHA-1 punya kelemahan yang diketahui untuk tujuan lain seperti menandatangani sertifikat, ia masih dianggap sangat aman kalau dipakai di dalam konstruksi HMAC. Banyak implementasi modern beralih ke HMAC-SHA256 atau HMAC-SHA512 biar lebih afdol.

Pemotongan: Menuju Enam Digit

String heksadesimal 20-byte bukanlah kode enam digit yang ramah pengguna. Langkah terakhir adalah "memotong" hash ini secara dinamis menjadi angka yang bisa kita gunakan.

  1. Cari Offset: Lihat 4 bit terakhir (nibble) dari hasil HMAC 20-byte. Ini memberi kita angka antara 0 dan 15. Inilah offset kita.
  2. Ambil 4 Byte: Mulai dari posisi offset itu di dalam hash 20-byte, ambil 4 byte berikutnya (32 bit).
  3. Bersihkan Bit Teratas: Ambil potongan 32-bit ini dan lakukan operasi bitwise AND dengan 0x7FFFFFFF. Ini secara efektif menyingkirkan bit paling pertama, yang menyelesaikan beberapa potensi masalah integer signed vs unsigned dan memastikan hasilnya selalu positif.
  4. Saatnya Modulo! Sekarang kamu punya integer 31-bit yang besar. Untuk menurunkannya menjadi 6 digit, kamu tinggal ambil modulo 1.000.000 (10^6).
  5. Tambahkan Nol di Depan: Hasilnya adalah kodemu! Jika angkanya, katakanlah, 4521, kamu tambahkan nol di depannya menjadi 004521.

Selesai! Baik HP-mu maupun server menjalankan perhitungan yang persis sama ini. Ketika kamu memasukkan kode, server membandingkan hasilnya dengan hasilmu. Untuk mengantisipasi sedikit pergeseran jam (clock drift) antara HP-mu dan server, server biasanya akan memeriksa kode untuk time step saat ini, satu sebelumnya, dan satu sesudahnya. Jika salah satunya cocok, kamu berhasil masuk.

Cerita dari dunia nyata

Upaya Pembajakan Akun GitHub yang Gagal Total

Seorang developer, lagi fokus-fokusnya ngoding, dapet email yang kelihatannya persis dari GitHub, memperingatkan adanya masalah keamanan. Dalam sekejap karena lengah, dia nge-klik link, mendarat di kloningan halaman login GitHub yang mirip banget, dan memasukkan username serta password-nya. Penyerang kini punya kredensialnya. Si phisher langsung mencoba login ke GitHub yang asli. Dia memasukkan password curian... dan disambut dengan prompt: "Silakan masukkan kode autentikasi dua faktor Anda." Si penyerang mentok total. Dia nggak punya HP si developer dan nggak punya cara untuk menghasilkan kode TOTP. Sementara itu, si developer dapet email asli dari GitHub tentang login baru, sadar akan kesalahannya, dan segera mengganti password-nya.

Pelajaran: TOTP berfungsi sebagai firewall krusial. Ia mengubah potensi pembobolan password yang katastropik menjadi percobaan login gagal yang tidak berbahaya.

Akses Darurat Saat Offline

Seorang network engineer sedang dalam penerbangan ke sebuah konferensi. Tiga puluh menit setelah lepas landas, dia perlu memeriksa sistem produksi yang kritis. Nggak ada Wi-Fi di pesawat dan sinyal seluler nihil. 2FA berbasis SMS atau push notification bakal nggak berguna. Tapi dashboard-nya diamankan dengan TOTP. Dia membuka laptopnya, membuka halaman login, membuka aplikasi authenticator di HP-nya, dan mengetikkan kode enam digit. Aplikasi itu tidak butuh koneksi internet sama sekali; perhitungan matematikanya mandiri, hanya mengandalkan rahasia bersama dan jam internal HP. Dia berhasil login dan menyelesaikan masalahnya bahkan sebelum pramugari mulai menyajikan minuman.

Pelajaran: Kemampuan TOTP untuk bekerja sepenuhnya offline membuatnya sangat tangguh dan andal untuk akses kritis, di mana pun kamu berada.

Sakit Kepala Migrasi Lintas Platform... Beres

Seorang pengguna Android lama memutuskan untuk beralih ke iPhone. Dia membuka Google Authenticator dan ngeri karena nggak ada tombol "sinkronkan ke HP baru" yang simpel. Dia punya lebih dari 30 akun yang sudah di-set up, dan membayangkan harus melalui proses reset 2FA untuk setiap akun adalah sebuah mimpi buruk. Tapi kemudian dia ingat kebijakan keamanan pribadinya: untuk setiap layanan baru, dia selalu menyimpan screenshot QR code awal di password manager terenkripsi miliknya. Dia menginstal aplikasi authenticator baru di iPhone-nya, membuka password manager-nya, dan satu per satu, scan ulang QR code yang tersimpan. Dalam sepuluh menit, semua 30 akun berhasil dimigrasi dan berfungsi sempurna.

Pelajaran: Rahasia TOTP (sebagai string Base32 atau QR code) adalah kunci yang sesungguhnya. Menjadi independen dari satu aplikasi authenticator dengan mem-backup rahasiamu secara aman memberimu kepemilikan dan portabilitas sejati.

Kesalahan dan jebakan umum

  • Menganggap remeh rahasianya. QR code atau string Base32 yang diberikan saat penyiapan adalah kunci rahasianya. Jika penyerang mendapatkannya, mereka bisa menghasilkan kode yang valid selamanya. Jangan di-screenshot dan dibiarkan di desktop, jangan kirim ke email sendiri, dan jangan simpan di file teks biasa. Perlakukan seperti master password.
  • Lupa menyimpan kode pemulihan (recovery codes). Saat kamu mengaktifkan 2FA, hampir setiap layanan akan memberikan satu set kode pemulihan sekali pakai. CETAK KODENYA. Simpan di tempat yang aman (brankas sungguhan, atau minimal, di password manager-mu). Jika kamu kehilangan HP, kode-kode ini adalah satu-satunya jalanmu kembali ke akun tanpa melalui proses dukungan pelanggan yang menyakitkan.
  • Menganggap aplikasi authenticator-mu sudah di-backup. Banyak aplikasi authenticator sederhana (seperti Google Authenticator versi awal) hanya menyimpan rahasia di satu perangkat itu saja. Jika HP hilang atau di-reset, rahasianya hilang selamanya. Gunakan aplikasi yang menawarkan sinkronisasi cloud terenkripsi yang aman (seperti Authy atau 1Password) atau disiplin dalam mem-backup rahasiamu secara manual.
  • Mengabaikan pergeseran jam (clock drift). TOTP berbasis waktu. Jika jam di HP-mu meleset lebih dari satu atau dua menit dari waktu sebenarnya, kode yang dihasilkannya akan ditolak. Selalu atur HP dan komputermu ke "Atur waktu secara otomatis." Hampir selalu itulah biang keroknya ketika kode yang valid tiba-tiba berhenti bekerja.

Kenapa ini penting buatmu

Jika kamu seorang developer yang membangun sistem apa pun yang memiliki akun pengguna, kamu harus menerapkan MFA, dan TOTP adalah opsi standar terbuka terbaik di kelasnya untuk 2FA berbasis aplikasi. Ini lebih aman daripada SMS dan lebih terbuka daripada sistem push-notification milik perusahaan tertentu. Memahami cara menghasilkan rahasia, membuat URI otpauth://, dan memvalidasi token yang masuk adalah skill fundamental untuk membangun aplikasi yang aman.

Bahkan jika kamu tidak pernah mengimplementasikan sistem TOTP sendiri, kamu adalah pengguna sistem ini di platform seperti AWS, Cloudflare, GitHub, dan npm. Mengetahui cara kerja sulap di baliknya memberdayakanmu untuk menggunakannya dengan lebih aman. Ini membantumu memahami pentingnya melindungi rahasia awal, menyimpan kode pemulihanmu, dan memilih aplikasi authenticator yang tepat untuk kebutuhanmu. Ini menghilangkan misteri di balik enam digit angka kecil yang berdiri di antara datamu dan para penjahat.

Pelajari lebih dalam

Teori beres. Saatnya praktik — 100% di browser kamu.

Coba tool-nya: Generator TOTP / 2FA