Pernah perasan aplikasi seperti Google Authenticator masih boleh menjana kod pengesahan enam digit walaupun telefon berada dalam mod pesawat, tanpa Wi-Fi atau isyarat talian? Lebih menarik, laman web yang anda log masuk tetap boleh mengesahkan kod tersebut dengan serta-merta.
Ini kerana telefon anda tidak menghantar kod itu kepada pelayan (server), dan server juga tidak menyemak apa-apa pada telefon anda. Sebaliknya, kedua-dua pihak melakukan pengiraan yang sama secara berasingan dan akhirnya mendapat jawapan yang sama.
Teknologi ini dikenali sebagai Time-based One-Time Password (TOTP), iaitu kaedah yang digunakan oleh kebanyakan aplikasi pengesahan dua faktor (2FA) hari ini.
Apa Itu TOTP?
TOTP ialah algoritma yang menjana kata laluan sekali guna berdasarkan dua perkara, iaitu kunci rahsia yang dikongsi dan masa semasa. Ia diterbitkan sebagai dokumen RFC 6238 oleh Internet Engineering Task Force (IETF) pada Mei 2011.
TOTP sebenarnya versi lanjutan kepada HMAC-based One-Time Password (HOTP), algoritma lebih awal yang menggunakan kaunter berasaskan peristiwa.
Bezanya, TOTP menggantikan kaunter tersebut dengan nilai masa. Sebab itulah kod dalam aplikasi authenticator bertukar setiap 30 saat.
Standard yang sama digunakan oleh Google Authenticator, Microsoft Authenticator, Proton Authenticator dan pengurus kata laluan yang mempunyai fungsi 2FA terbina dalam. Kerana itu, kod QR daripada satu laman web boleh diimbas menggunakan mana-mana aplikasi tersebut.
Kod QR Sebenarnya Menyimpan Kunci Rahsia
Ramai menyangka imbasan kod QR semasa mengaktifkan 2FA akan “menghubungkan” telefon dengan akaun. Hakikatnya tidak begitu.
Kod QR itu mengandungi kunci rahsia (secret key) yang dijana oleh server. Apabila anda mengimbasnya, aplikasi authenticator menyimpan salinan kunci tersebut dalam telefon. Server pula menyimpan kunci yang sama untuk akaun anda.
Selepas proses itu selesai, telefon dan server tidak perlu berhubung lagi untuk tujuan menjana kod.
Tiga Langkah Untuk Hasilkan Kod
Setiap kali kod baharu dipaparkan, aplikasi melakukan tiga langkah berikut:
- Mengambil masa semasa dalam format Unix time, iaitu jumlah saat sejak 1 Januari 1970, kemudian membahagikannya dengan 30. Nombor bulat yang terhasil menjadi kaunter masa, dan nilainya berubah setiap 30 saat.
- Menggabungkan kaunter masa dengan kunci rahsia menggunakan HMAC, iaitu fungsi hash kriptografi. Secara lalai, kaedah ini menggunakan SHA-1, walaupun standard turut membenarkan SHA-256 dan SHA-512.
- Memendekkan hasil hash yang panjang itu kepada enam digit.
Apabila anda memasukkan kod, server melakukan pengiraan yang sama menggunakan kunci rahsia yang disimpan dan masa pada jamnya sendiri. Jika hasilnya sepadan, log masuk diluluskan.
Kenapa Ia Tak Perlukan Internet
Kedua-dua input yang diperlukan sudah pun ada dalam telefon. Kunci rahsia disimpan semasa proses imbasan, manakala masa diambil daripada jam telefon.
Jadi, kod itu tidak “dihantar” ke mana-mana. Ia dihasilkan dua kali secara berasingan, sekali di telefon anda dan sekali di server.
Disebabkan itu, perkara yang paling penting ialah ketepatan jam telefon. Jika jam peranti lari beberapa minit, kod yang dijana tidak akan sepadan dengan server.
Untuk mengurangkan masalah ini, RFC 6238 mencadangkan server menerima kod daripada satu tempoh 30 saat sebelumnya bagi mengambil kira kelewatan rangkaian.
Adakah TOTP Selamat Sepenuhnya?
TOTP jauh lebih selamat berbanding hanya menggunakan kata laluan. Namun, ia tetap mempunyai beberapa batasan.
Keselamatan TOTP bergantung sepenuhnya kepada kunci rahsia. Jika gambar kod QR atau kunci tersebut tertiris, sesiapa sahaja boleh menjana kod yang sama.
Sebab itu, anda tidak patut menyimpan tangkapan skrin kod QR 2FA di tempat yang mudah diakses orang lain.
TOTP juga tidak kebal terhadap phishing. Penjenayah siber boleh membina laman palsu yang meminta kata laluan dan kod 2FA, kemudian menggunakannya dengan segera pada laman sebenar sebelum kod tamat tempoh.
Kaedah seperti passkey dibangunkan untuk menangani kelemahan ini.
Selain itu, pastikan anda menyimpan kod sandaran (backup codes) yang diberikan semasa mengaktifkan 2FA. Kod ini penting sekiranya telefon hilang atau rosak.
Walaupun mempunyai batasan, 2FA berasaskan TOTP masih merupakan langkah keselamatan asas yang wajar diaktifkan pada akaun penting seperti e-mel, media sosial dan perkhidmatan kewangan.
