Episode ini membuka arah modern 2FA: WebAuthn dan passkeys yang tahan phishing tanpa shared secret. Kalian membandingkan TOTP, WebAuthn, dan SMS, lalu merancang strategi multi-faktor yang menawarkan passkeys untuk pengguna baru sambil mempertahankan TOTP untuk kompatibilitas.

Selama 14 episode kalian membangun TOTP — dan itu keputusan yang benar untuk kompatibilitas universal. Episode 17 mengangkat kepala untuk melihat ke depan: WebAuthn dan passkeys, standar FIDO2 yang mengubah cara autentikasi bekerja di 2026.
Perbedaan fundamentalnya bukan pada angka dan kode, tapi pada model kriptografi: TOTP membagi satu rahasia, WebAuthn tidak pernah berbagi rahasia sama sekali. Kalian akan memahami prinsip itu, membandingkan tiga pendekatan — TOTP, WebAuthn, dan SMS — lalu merancang strategi yang menawarkan keduanya tanpa membuat pengguna bingung.
WebAuthn mengganti shared secret dengan kriptografi asimetris. Perangkat pengguna membuat pasangan kunci: private key tidak pernah meninggalkan perangkat, public key disimpan server. Saat login, server mengirim tantangan acak, perangkat menandatanganinya dengan private key, dan server memverifikasi dengan public key.
Konsekuensinya besar: kebocoran database server tidak membahayakan — yang bocor hanya public key yang memang untuk dibagikan. Dan karena tidak ada secret yang bisa disalin, pencurian kredensial menjadi jauh lebih sulit.
Alur login WebAuthn mengikuti pola challenge-response:
1. Server membuat challenge acak
2. Browser mengirim challenge ke perangkat
3. Perangkat menandatangani dengan private key
4. Server memverifikasi dengan public key
5. Signature hanya valid untuk domain asalAlur di atas menjelaskan mengapa phishing tidak berdaya: signature yang dibuat untuk domain kalian otomatis ditolak di domain lain, sekalipun pengguna memasukkan seluruh alur login ke situs tiruan.
Signature WebAuthn hanya valid untuk satu domain (origin). Kode yang ditandatangani untuk bank.dev otomatis ditolak oleh bank.dev.attacker.com — bahkan jika pengguna mengklik tautan phishing dan memasukkan seluruh alur login. Inilah alasan WebAuthn disebut phishing-resistant, sementara TOTP yang bisa di-phishing secara real-time tidak.
Passkey adalah implementasi WebAuthn yang menyimpan kunci di platform: iCloud Keychain untuk Apple, Google Password Manager, atau Windows Hello. Kunci tersinkron antar perangkat pengguna yang sama lewat cloud, sehingga pengalaman terasa seperti password biasa — tapi dengan keamanan asimetris di belakangnya.
Perbandingan jujur ketiganya membantu keputusan desain:
Metode Tahan Phishing Offline Kerahasiaan Secret Sinkronisasi
TOTP tidak ya shared (dibagi) NTP perangkat
WebAuthn ya bergantung private key lokal cloud vendor
SMS OTP tidak tidak rahasia di operator operatorTOTP unggul di kompatibilitas dan kemandirian dari vendor, tapi bisa di-phishing secara real-time. WebAuthn menang di ketahanan phishing dengan konsekuensi kepercayaan pada cloud vendor untuk sinkronisasi. SMS adalah yang terlemah — SIM swapping dan intercept operator membuatnya hanya cocok sebagai recovery.
Baca tabel ini dengan teliti: tidak ada baris yang sempurna. Keputusan metode bukan mencari yang terbaik di semua kolom, melainkan memilih kompromi yang sesuai konteks aplikasi.
Mulai dari TOTP sebagai default universal. Tambahkan WebAuthn untuk pengguna yang menginginkan keamanan maksimal dan memakai platform modern. Jangan pernah menjadikan SMS faktor kedua utama — simpan untuk recovery atau lingkungan yang tidak punya alternatif.
Desain yang matang menawarkan pilihan saat enrollment: pengguna bisa memindai QR TOTP atau membuat passkey. Arahkan pengguna baru ke passkeys lewat rekomendasi dan posisi yang menonjol, tapi biarkan TOTP tetap tersedia satu klik — tidak semua pengguna nyaman dengan kunci yang terikat platform tertentu.
Implementasi passkeys bisa dimulai dengan library yang mengurus protokol:
npm install @simplewebauthn/server @simplewebauthn/browser@simplewebauthn/server menangani pembuatan dan verifikasi tantangan (challenge) WebAuthn di sisi server, sementara versi browser mengurus sisi client. Library ini menangani detail CBOR, attestation, dan transport yang rumit diimplementasikan manual.
Satu hal yang perlu diingat: passkey terikat pada perangkat atau akun cloud tertentu. Pastikan pengguna tahu bahwa pindah perangkat berarti perlu pendaftaran ulang atau sinkronisasi akun cloud vendor.
Keputusan penting: passkeys menambah, bukan mengganti, TOTP yang sudah dibangun. Pengguna dengan perangkat lama, browser tidak didukung, atau keinginan bekerja offline tetap dilayani TOTP. Rotasi secret, recovery codes, dan seluruh fondasi episode sebelumnya tetap relevan sebagai lapisan fallback yang andal.
Perkenalkan passkeys sebagai opsi, bukan kewajiban. Amati data: berapa persen pengguna memilih passkey, berapa yang bertahan setelah 30 hari. Baru putuskan apakah pengguna baru diwajibkan passkey setelah basis yang mapan terbentuk.
Pantau juga tingkat kegagalan enrollment passkey — jika tinggi, kemungkinan besar masalahnya ada di UX browser atau dukungan perangkat pengguna, bukan niat pengguna.
Perhatikan implikasi passkey tersinkron: kehilangan akses ke cloud vendor berarti kehilangan kunci — persis seperti kehilangan phone TOTP. Karena itu recovery codes dan TOTP fallback tetap menjadi jaring pengaman yang wajib, bahkan untuk pengguna passkey.
Tunjukkan status metode yang terdaftar di halaman keamanan, dan izinkan pengguna mencabut passkey perangkat yang hilang tanpa menghapus akun.
Episode 17 membuka arah modern 2FA: WebAuthn yang tahan phishing tanpa shared secret, perbandingan jujur TOTP, WebAuthn, dan SMS, serta strategi menawarkan passkeys untuk pengguna baru sambil mempertahankan TOTP sebagai fallback universal.
Inti yang harus dibawa pulang:
Di episode 18 selanjutnya kita akan membahas enterprise: enforcement dan compliance — mewajibkan MFA untuk role admin dan billing, phase-in dengan notifikasi 30 hari, kebijakan per-tenant, serta hubungannya dengan SOC 2 dan ISO 27001.