WebAuthn Attestation vs Assertion: Perbedaan Utama dalam Autentikasi

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.

FiturAttestationAssertion
FaseRegistrasi (Pendaftaran)Autentikasi (Login)
Tujuan UtamaValidasi perangkat & modelVerifikasi identitas pengguna
OutputAttestation Object (Metadata)Assertion Response (Signature)
KeterlibatanOpsional (tergantung kebijakan server)Wajib
Data yang dikirimPublic Key + Attestation StatementSignature + 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

  1. Registrasi (Attestation): Browser memanggil navigator.credentials.create(). Autentikator membuat pasangan kunci dan mengirimkan bukti asal-usul ke server.
  2. 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.