Section 3/172 menit

3. Teori: Cara Kerja Passkeys

3. Teori: Cara Kerja Passkeys

Kriptografi Kunci Publik

Passkeys menggunakan asymmetric cryptography (ECDSA dengan kurva P-256):

swift
Saat Registrasi:
┌─────────────────────────────────────────────────────────────┐
│ Perangkat (Secure Enclave)          Server (Relying Party)  │
│                                                              │
│ Generate keypair:                                            │
│   private key → DISIMPAN di Secure Enclave                   │
│   public key  ──────────────────────────────────────────►   │
│                                     Simpan public key        │
│                                     + user identifier        │
└─────────────────────────────────────────────────────────────┘

Saat Autentikasi:
┌─────────────────────────────────────────────────────────────┐
│ Perangkat                           Server                   │
│                                                              │
│              ◄── challenge (random bytes) ───────────────── │
│                                                              │
│ User: Face ID / Touch ID                                     │
│ Private key sign(challenge) ─────────────────────────────►  │
│                                     Verifikasi dengan        │
│                                     public key yg tersimpan  │
│                                     → Login berhasil!        │
└─────────────────────────────────────────────────────────────┘

Komponen WebAuthn

Relying Party ID (rpID): Domain yang mengidentifikasi siapa yang memiliki credential. Untuk app iOS, ini adalah domain yang terdaftar di Associated Domains. Untuk website, ini adalah effective domain.

Challenge: Random bytes yang dihasilkan server untuk setiap sesi — mencegah replay attack. Challenge harus berumur pendek (< 5 menit) dan single-use.

Credential ID: Identifier unik untuk setiap passkey — digunakan server untuk menemukan public key yang sesuai saat autentikasi.

User Handle: Stable identifier untuk user di sisi server — bukan username atau email, tapi opaque identifier (biasanya UUID). Digunakan untuk account selection UI.

Attestation (Registrasi): Bukti bahwa credential dibuat oleh authenticator yang legitimate. Untuk platform authenticator (Secure Enclave), Apple menyediakan "none" atau "apple" attestation format.

Assertion (Autentikasi): Bukti kepemilikan private key, berisi signature atas challenge + authenticator data.

Secure Enclave dan iCloud Keychain

Private key passkey disimpan di Secure Enclave — chip keamanan terpisah dari CPU utama yang tidak bisa diakses bahkan oleh sistem operasi. Private key tidak pernah bisa di-export, hanya bisa digunakan untuk signing saat user melakukan biometrik.

Untuk sync antar perangkat, passkeys di-backup ke iCloud Keychain dengan end-to-end encryption — Apple tidak bisa melihat isi private key. Passkeys bisa diakses dari perangkat Apple lain yang login dengan Apple ID yang sama.

Platform Authenticator vs Cross-Platform

Jenis Mechanism Kasus Penggunaan
Platform (iOS/macOS) Secure Enclave + biometrik Login di perangkat milik sendiri
Cross-platform (iOS 17+) QR code + Bluetooth proximity Login di komputer lain pakai HP
Security Key Hardware USB/NFC key Enterprise, keamanan sangat tinggi