Section 2/171 menit
2. Masalah yang Dipecahkan
2. Masalah yang Dipecahkan
Password: Lemah, Mudah Bocor, dan Susah Diingat
Autentikasi berbasis password memiliki fundamental flaws yang tidak bisa diselesaikan dengan UX yang lebih baik.
swift
// ❌ TANPA Passkeys: autentikasi password konvensional
class PasswordAuthManager {
func login(username: String, password: String) async throws -> AuthToken {
// Masalah 1: password dikirim ke server → bisa dicegat
let hashedPassword = SHA256.hash(data: Data(password.utf8))
// Masalah 2: server menyimpan hash → bisa di-crack jika breach
let response = try await api.authenticate(
username: username,
passwordHash: hashedPassword.hexString
)
// Masalah 3: user menggunakan password yang sama di banyak service
// → credential stuffing attack
return response.token
}
}
// Konsekuensi:
// - 81% data breach melibatkan password yang dicuri/lemah (Verizon DBIR)
// - Phishing mengekspos 1000an password per hari
// - Password reuse membuat satu breach merusak semua akun user
swift
// ✓ DENGAN Passkeys: tidak ada shared secret yang bisa dicuri
class PasskeyAuthManager {
func authenticate(challenge: Data, relyingParty: String) async throws -> PasskeyAssertion {
// Private key TIDAK PERNAH meninggalkan Secure Enclave
// Server hanya menyimpan public key
// Tidak ada yang bisa dicuri dari server side
// Phishing tidak mungkin: credential bound ke domain
let assertion = try await performPasskeyAssertion(
challenge: challenge,
relyingPartyID: relyingParty
)
return assertion // hanya berisi signature, bukan secret
}
}
Phishing yang Mustahil Dilawan dengan Password
swift
// ❌ TANPA Passkeys: user bisa tertipu login ke site palsu
// malicious-bank.com terlihat identik dengan real-bank.com
// User mengetik username + password → dicuri
// ✓ DENGAN Passkeys: credential origin-bound
// ASAuthorizationController menolak otomatis jika domain tidak cocok
// Passkey untuk bank.com TIDAK AKAN pernah bisa dipakai di malicious-bank.com
// Sistem OS yang enforce ini, bukan developer app
Multi-Factor Authentication yang Menyusahkan
swift
// ❌ TANPA Passkeys: 2FA via SMS atau TOTP — friction tinggi
func loginFlow() async {
// Step 1: masukkan password
// Step 2: tunggu SMS OTP (delay, bisa hilang)
// Step 3: masukkan OTP dalam 30 detik
// Step 4: jika expired, minta OTP baru
// → User drop-off rate tinggi di step 2-4
}
// ✓ DENGAN Passkeys: biometrik IS multi-factor authentication
func loginWithPasskey() async {
// Satu gesture Face ID = 2FA:
// Factor 1: Something you HAVE (perangkat dengan private key)
// Factor 2: Something you ARE (biometrik)
// Selesai dalam <1 detik, tidak ada OTP
}