Inti Perbedaan: Registrasi vs Autentikasi
Dalam protokol WebAuthn (Web Authentication API), Attestation dan Assertion adalah dua fase yang memiliki tujuan operasional yang berbeda secara fundamental. Attestation terjadi saat proses pendaftaran (registrasi) kunci keamanan atau perangkat autentikator, sedangkan Assertion terjadi saat proses login (autentikasi) untuk membuktikan kepemilikan kunci tersebut.
Attestation memberikan bukti kepada server mengenai integritas dan asal-usul perangkat autentikator (misalnya: apakah ini kunci fisik YubiKey atau biometrik bawaan laptop). Sebaliknya, Assertion adalah bukti kriptografis yang dikirimkan oleh autentikator kepada server untuk memverifikasi bahwa pengguna yang mencoba masuk adalah pemilik sah dari kredensial yang telah didaftarkan sebelumnya.
| Fitur | Attestation | Assertion |
|---|---|---|
| Fase | Registrasi (Pendaftaran) | Autentikasi (Login) |
| Tujuan Utama | Validasi perangkat & model | Verifikasi identitas pengguna |
| Output | Attestation Object (Metadata) | Assertion Response (Signature) |
| Keterlibatan | Opsional (tergantung kebijakan server) | Wajib |
| Data yang dikirim | Public Key + Attestation Statement | Signature + Client Data |
Mendalami WebAuthn Attestation
Attestation berfungsi sebagai mekanisme kepercayaan (trust). Saat pengguna mendaftarkan kunci keamanan, autentikator mengirimkan Attestation Statement yang ditandatangani oleh kunci privat milik produsen perangkat. Server menggunakan ini untuk memastikan bahwa perangkat tersebut memenuhi standar keamanan yang ditetapkan oleh penyedia layanan.
Penting untuk dicatat bahwa dalam banyak implementasi web, server sering kali meminta 'none' untuk attestation guna menjaga privasi pengguna, sehingga identitas spesifik perangkat tidak terlacak secara permanen oleh pihak ketiga.
Mendalami WebAuthn Assertion
Assertion adalah inti dari proses login tanpa kata sandi (passwordless). Ketika pengguna diminta untuk melakukan autentikasi, server mengirimkan challenge (tantangan) acak. Autentikator kemudian menandatangani tantangan tersebut menggunakan kunci privat yang tersimpan di dalam elemen aman (secure element) perangkat.
Server menerima tanda tangan tersebut dan memverifikasinya menggunakan kunci publik yang disimpan saat fase registrasi. Jika tanda tangan valid, akses diberikan. Proses ini memastikan bahwa meskipun server diretas, penyerang tidak akan mendapatkan kunci privat pengguna karena kunci tersebut tidak pernah meninggalkan perangkat keras autentikator.
Alur Kerja Teknis
- Registrasi (Attestation): Browser memanggil
navigator.credentials.create(). Autentikator membuat pasangan kunci dan mengirimkan bukti asal-usul ke server. - Login (Assertion): Browser memanggil
navigator.credentials.get(). Autentikator menandatangani tantangan server dengan kunci privat yang tersimpan.
Keamanan WebAuthn terletak pada fakta bahwa Assertion tidak dapat dipalsukan (phishing-resistant) karena tanda tangan terikat secara kriptografis pada domain (Origin) tempat kredensial tersebut dibuat.