

Passkey là gì?
Passkey (khóa truy cập) là phương thức đăng nhập không dùng mật khẩu, dựa trên tiêu chuẩn FIDO2 và WebAuthn. Thay vì gửi một chuỗi ký tự bí mật qua mạng, passkey sử dụng cặp khóa mã hóa được tạo ngay trên thiết bị của bạn, và chỉ có bạn mới có thể ký chữ ký chứng minh danh tính.
Điểm khác biệt cốt lõi so với mật khẩu truyền thống: khóa riêng tư không bao giờ rời khỏi thiết bị. Ngay cả khi máy chủ bị tấn công, kẻ xấu chỉ thu được khóa công khai — thứ vô dụng hoàn toàn với mục đích đăng nhập giả mạo. Nền tảng kỹ thuật được mô tả chi tiết tại MDN Web Authentication API và đặc tả FIDO Alliance.

Passkey hoạt động như thế nào?
Quy trình đăng nhập bằng passkey diễn ra theo bốn bước, không có mật khẩu nào được gửi đi cả:
- Đăng ký: khi bạn tạo passkey, thiết bị sinh ra một cặp khóa (khóa riêng tư và khóa công khai). Khóa công khai được gửi lên máy chủ, khóa riêng tư được lưu trong kho bí mật của hệ điều hành hoặc đồng bộ vào tài khoản đám mây của bạn.
- Bắt đầu đăng nhập: khi truy cập trang web, máy chủ gửi một thử thách ngẫu nhiên xuống trình duyệt.
- Xác thực cục bộ: thiết bị dùng khóa riêng tư ký số thử thách. Việc ký có thể được bảo vệ thêm bằng vân tay, nhận diện khuôn mặt hoặc mã PIN.
- Xác minh: máy chủ kiểm tra chữ ký bằng khóa công khai đã lưu. Chữ ký hợp lệ nghĩa là bạn đăng nhập thành công.
Điểm quan trọng là trình duyệt web không bao giờ chạm vào khóa riêng tư. Ngay cả khi trang web bị chèn mã độc, nó cũng không thể đánh cắp khóa vì khóa nằm trong phần cứng hoặc hệ điều hành, tách biệt khỏi tiến trình web.
Passkey khác gì so với mật khẩu và OTP?
Để hiểu rõ vì sao passkey nhanh chóng được các nền tảng lớn đón nhận, cần so sánh trực tiếp với các phương thức cũ.
| Tiêu chí | Mật khẩu | Mã OTP qua SMS | Passkey |
|---|---|---|---|
| Chống lừa đảo phishing | Không | Không | Có |
| Lưu trữ mật khẩu trên máy chủ | Có (băm) | Không | Chỉ khóa công khai |
| Tái sử dụng mật khẩu là rủi ro | Rất cao | Không áp dụng | Không |
| Trải nghiệm đăng nhập | Gõ nhiều lần | Chờ vài giây, tốn phí tin nhắn | Chạm một lần |
| Phụ thuộc mạng di động | Không | Có | Không |
OTP qua SMS tưởng an toàn hơn mật khẩu nhưng vẫn dễ bị tấn công SIM swap, và chi phí gửi tin nhắn là rào cản kinh tế khiến nhiều doanh nghiệp ngừng dùng. Passkey loại bỏ hoàn toàn cả hai rủi ro: không có bí mật để tái sử dụng, và không có kênh SMS để bị chặn.
Passkey đồng bộ và liên thiết bị
Có hai loại passkey chính, phân biệt theo cách lưu trữ:
Passkey đồng bộ trên đám mây
Loại phổ biến nhất. Khóa riêng tư được mã hóa bằng mật khẩu và đồng bộ qua tài khoản iCloud Keychain của Apple, Google Password Manager hoặc Microsoft account. Người dùng có thể đăng nhập liên tục khi đổi thiết bị, kể cả từ máy tính xuống điện thoại. Đây là lý do passkey được ví như “điểm mốc” trong hành trình loại bỏ mật khẩu.
Passkey gắn với thiết bị
Khóa được lưu trong chip bảo mật của chính thiết bị, ví dụ khóa bảo mật USB FIDO2. Passkey dạng này phù hợp với nhân viên doanh nghiệp hoặc hệ thống yêu cầu bảo mật cao, vì khóa không thể sao chép sang thiết bị khác. Đổi lại, mất thiết bị đồng nghĩa mất luôn passkey và phải trải qua quy trình khôi phục phức tạp.

Cách triển khai passkey cho website
Triển khai passkey cho một website hoặc ứng dụng đòi hỏi tích hợp ở cả phía máy chủ và phía máy khách.
Bước 1: Đăng ký lựa chọn nhà cung cấp
Bạn dùng thư viện xác thực uy tín xử lý phần mật mã WebAuthn, chẳng hạn SimpleWebAuthn (Node.js) hoặc webauthn-ruby và webauthn-py. Thư viện này giúp tạo thử thách, xác minh chữ ký, xử lý thuật toán ATTestation và cung cấp credential ID hợp lệ.
Bước 2: Thiết lập thuộc tính RP
Thông tin Relying Party gồm RP ID (tên miền) và RP Display Name. RP ID phải trùng với tên miền của website và phải là tên miền cha của mọi tên miền con dùng chung passkey. Cấu hình sai RP ID là nguyên nhân phổ biến nhất khiến passkey không hiển thị trong trình duyệt.
Bước 3: Tích hợp giao diện đăng nhập
Nút đăng nhập gọi navigator.credentials.create() khi tạo mới và navigator.credentials.get() khi xác thực. Giao diện nên cho phép người dùng nhập tên đăng nhập trước để trình duyệt chỉ hiển thị đúng passkey cần dùng, tránh lộ danh sách khóa.
Bước 4: Thiết kế quy trình khôi phục
Đây là điểm các đội phát triển hay bỏ sót. Nếu người dùng mất toàn bộ thiết bị, họ cần một lối vào khác: mã dự phòng, email, hoặc quy trình xác minh danh tính tại chỗ. Nên cung cấp ít nhất ba passkey cho mỗi tài khoản và cho phép xem danh sách thiết bị đã đăng nhập để chủ động thu hồi.
const credential = await navigator.credentials.get({
publicKey: {
challenge: serverChallenge,
rpId: 'example.com',
userVerification: 'preferred',
timeout: 60000
}
});
Các hệ sinh thái đã hỗ trợ
Passkey đã đi từ thí nghiệm thành tiêu chuẩn được triển khai rộng rãi:
- iOS 17, macOS Sonoma, iPadOS 17 của Apple hỗ trợ passkey đồng bộ tự động qua iCloud Keychain.
- Android 9 trở lên và Google Password Manager hỗ trợ passkey dùng khóa công khai khớp với kho lưu trữ đám mây của Google.
- Windows 11 hỗ trợ passkey đồng bộ qua tài khoản Microsoft.
- Safari 17, Chrome 108, Firefox 121, Edge 108 trở lên đều đã hỗ trợ WebAuthn ổn định. Tính năng đăng nhập bằng passkey cũng đã xuất hiện trên nhiều ứng dụng phổ biến như dịch vụ ngân hàng, mạng xã hội và ứng dụng tài chính.
Quỹ FIDO Alliance đang đẩy mạnh chiến dịch nâng cao nhận thức về passkey, với mục tiêu làm phổ biến thuật ngữ này đến mức người dùng hiểu và yêu cầu chủ động, thay vì phải giải thích từ đầu.
Lời kết luận
Passkey giải quyết trực tiếp hai vấn đề an ninh lớn nhất của mật khẩu: rò rỉ bí mật do tái sử dụng và các chiến dịch phishing giả mạo trang đăng nhập. Không có gì để đánh cắp, không có gì để nhập, và thông tin nhạy cảm không bao giờ rời khỏi thiết bị. Việc triển khai cần một thư viện WebAuthn uy tín cùng quy trình khôi phục tài khoản được thiết kế cẩn thận — và sau đó phần lớn rủi ro truy cập truyền thống biến mất.
