Vincent
Created: June 17, 2025
Updated: July 8, 2025
See the original glossary version in English here.
Chứng thực (Attestation) có thể đề cập đến ba điều (trong ngôn ngữ nói, chúng thường được sử dụng thay thế cho nhau mặc dù chúng có ý nghĩa khác nhau nếu xét một cách chính xác):
Đầu tiên và tổng quát hơn, chứng thực trong lĩnh vực mật mã học là một thuật ngữ chỉ việc một bên "chứng thực" một cách mật mã cho một tuyên bố với một bên khác.
Thứ hai, trong giai đoạn đăng ký của WebAuthn, một đối tượng chứng thực (attestation object) được tạo ra bởi trình xác thực và trả về cho Bên tin cậy. Đây là một đối tượng chứa đựng các thông tin sau:
fmt
)attStmt
- xem bên dưới)authData
)Sơ đồ quy trình Đăng ký sau đây cho thấy vai trò của chứng thực (đối tượng) trong WebAuthn:
{ "root": { "id": "QFPlQVypLmmx71e0tmS3IfCFky0", "rawId": "QFPlQVypLmmx71e0tmS3IfCFky0", "response": { "attestationObject": { "fmt": "none", "attStmt": {}, "authData": { "rpIdHash": "t8DGRTBfls-BhOH2QC404lvdhe_t2_NkvM0nQWEEADc", "flags": { "userPresent": true, "userVerified": true, "backupEligible": true, "backupStatus": true, "attestedData": true, "extensionData": false }, "counter": 0, "aaguid": "00000000-0000-0000-0000-000000000000", "credentialID": "QFPlQVypLmmx71eOtmS3IfCFky0", "credentialPublicKey": "pQECAyYgASFYIEa-lpSiQ4P...", "parsedCredentialPublicKey": { "keyType": "EC2 (2)", "algorithm": "ES256 (-7)", "curve": 1, "x": "Rr6WlKJDg8MlbIq9mmHQzk2p2c_s7QoNKr7yMa7I8pM", "y": "tAELYp7h3sYNjZZIZgHPYiaSzF×QVT18cgZ_7wm13Vw" } } }, "clientDataJSON": { "type": "webauthn.create", "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp", "origin": "https://passkeys.eu", "crossOrigin": false }, "transports": ["hybrid", "internal"], "publicKeyAlgorithm": -7 }, "authenticatorAttachment": "cross-platform" } }
Trong ảnh chụp màn hình ở trên, không có AAGUID và không có tuyên bố chứng thực nào được cung cấp.
Tiếp tục đọc để xem phân tích kỹ thuật về các thuộc tính quan trọng nhất.
Trong WebAuthn, chứng thực đảm bảo rằng việc xác thực người dùng là an toàn và minh bạch. Với tuyên bố chứng thực, bạn có thể chắc chắn rằng một thông tin xác thực đã được tạo trên một trình xác thực / thiết bị cụ thể.
Các loại chứng thực này đề cập đến tuyên bố chứng thực (không phải đối tượng chứng thực). Chúng được coi là một tùy chọn ưu tiên bởi bên tin cậy (vì vậy trình xác thực có thể hoạt động khác đi vì đây chỉ là một tùy chọn ưu tiên).
none
): Đối với các trường hợp mà quyền riêng tư là mối quan tâm
hàng đầu hoặc có sự tham gia của các thiết bị được đồng bộ hóa, loại này không cung cấp
thông tin về thiết bị, đảm bảo quyền riêng tư của người dùng được giữ nguyên. Một lý do
khác để sử dụng giá trị này có thể là để tiết kiệm một chuyến đi khứ hồi đến một cơ quan
cấp chứng chỉ (CA). none
cũng là giá trị mặc định.indirect
): Bên tin cậy ưu tiên
nhận được chứng thực nhưng cho phép máy khách quyết định cách lấy các tuyên bố chứng
thực. Máy khách có thể thay thế các tuyên bố chứng thực do trình xác thực tạo ra bằng
các tuyên bố chứng thực ẩn danh để bảo vệ quyền riêng tư của người dùng.direct
): Đây là hình thức minh bạch nhất. Ở đây,
bên tin cậy yêu cầu trình xác thực cung cấp một tuyên bố
chứng thực, để bên tin cậy nhận được thông tin chi tiết về
thiết bị, bao gồm thương hiệu, kiểu máy và các chi tiết cụ thể khác. Mặc dù nó cung cấp
sự minh bạch cao nhất, nó có thể gây ra lo ngại về quyền riêng tư trong một số tình
huống hoặc có thể không thực sự hữu ích cho các thông tin xác thực được đồng bộ hóa.enterprise
): Bên tin cậy muốn
nhận một tuyên bố chứng thực có thể bao gồm thông tin nhận dạng duy nhất. Loại chứng
thực này thường được sử dụng trong các doanh nghiệp hoặc tổ chức muốn theo dõi các thiết
bị / trình xác thực cụ thể. Trình duyệt web (user agent)
không nên cung cấp chứng thực chi tiết này trừ khi cài đặt của chúng cho phép cụ thể cho
bên yêu cầu. Nếu cài đặt cho phép, trình duyệt nên thông báo cho thiết bị khi cần thiết
(khi bắt đầu quá trình) rằng loại chứng thực cụ thể này đang được yêu cầu. Sau đó, trình
duyệt sẽ chuyển ID duy nhất của thiết bị và bằng chứng chứng thực chính xác như nó nhận
được cho bên tin cậy.Đối tượng chứng thực chứa nhiều thuộc tính, dưới đây là giải thích nhanh về một số thuộc tính được chọn:
"attestationObject": { "fmt": "none", "attStmt": {}, "authData": { "rpIdHash": "t8DGRTBfls-BhOH2QC404lvdhe_t2_NkvM0nQWEEADc", "flags": { "userPresent": true, "userVerified": true, "backupEligible": true, "backupStatus": true, "attestedData": true, "extensionData": false }, "counter": 0, "aaguid": "00000000-0000-0000-0000-000000000000", "credentialID": "QFPlQVypLmmx71eOtmS3IfCFky0", "credentialPublicKey": "pQECAyYgASFYIEa-lpSiQ4P...", "parsedCredentialPublicKey": { "keyType": "EC2 (2)", "algorithm": "ES256 (-7)", "curve": 1, "x": "Rr6WlKJDg8MlbIq9mmHQzk2p2c_s7QoNKr7yMa7I8pM", "y": "tAELYp7h3sYNjZZIZgHPYiaSzF×QVT18cgZ_7wm13Vw" } }
attestationObject là một đối tượng được mã hóa bằng CBOR, chứa thông tin về các thông tin xác thực mới được tạo, khóa công khai và các dữ liệu liên quan khác:
Ngược lại với đối tượng chứng thực ở trên nơi attStmt
được để trống để dễ đọc, đây là
cách một tuyên bố chứng thực được điền đầy đủ sẽ trông như thế nào.
{ "alg": -65535, "sig": "MBHX7qov53SWqqPYCrxE5fcoAeDI83a0DzVJ2-N1KI6IAaCGGvINAIFzTEn44F6giANKte-8yEMDZbvbgDG1weaRj7SqsVaTty-TEQ", "ver": "2.0", "x5c": [ "MIIFwDCCA6oIaK6tZ7M", "MIIG6zCCBNpG18-MCJrHyrpMT-ul7RgxE4dFxqcG59ftTXqJ1f-X_Lpo7K-d7OgKoQrUgzxgATz8YXtFAk3rE1cHXvW9W52V637eAihKn9-UKC0ijzVXrBGX4Iq1o1M0ZfR-tFoOn498xasMCTnharKiM562GBLVJtlvV3DMSLEBl5SfuGM-qYjQgTQknXccks9guCmNaN_b2fo1DisbufXfjM3DVaMqx7IJpSc3wAnxooMrAYGpPM" ], "pubArea": "AAEACwAw_c3Ousz865mUPx8O3w", "certInfo": "_1RDR4AXAniCekfsiDI" }
alg
: Thuộc tính alg chỉ ra mã định danh thuật toán mật mã được trình xác thực sử dụng
để ký tuyên bố chứng thực.sig
: Thuộc tính sig chứa chữ ký số được tạo bởi trình xác thực. Chữ ký này được sử
dụng để xác minh tính xác thực của tuyên bố chứng thực.ver
: Thuộc tính ver chỉ định phiên bản của định dạng tuyên bố chứng thực.x5c
: Mảng x5c chứa một hoặc nhiều chứng chỉ X.509 tạo thành một đường dẫn chứng nhận,
giúp xác thực chứng thực.pubArea
: Thuộc tính pubArea chứa thông tin chi tiết về khóa công khai và các đặc điểm
của trình xác thực.certInfo
: Thuộc tính certInfo thường bao gồm thông tin về việc chứng nhận của trình
xác thực bởi một bên đáng tin cậy."clientDataJSON": { "type": "webauthn.create", "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp", "origin": "https://www.passkeys-debugger.io", "crossOrigin": false }
Đọc thêm về clientDataJSON
trong
bài viết thuật ngữ tương ứng.
"transports": [ "hybrid", "internal" ]
Thuộc tính transports chỉ ra các cơ chế mà qua đó một trình xác thực có thể giao tiếp với một máy khách. Một số kết hợp giá trị mẫu phổ biến là:
"transports": ["internal","hybrid"]
: Passkey có thể được sử dụng từ
trình xác thực nền tảng (ví dụ: Face ID, Touch ID,
Windows Hello) hoặc qua xác thực chéo thiết bị (sử dụng
mã QR & Bluetooth)."transports": ["internal"]
: Passkey có thể được sử dụng từ
trình xác thực nền tảng (ví dụ: Face ID, Touch ID,
Windows Hello)transports
được đặt: hành vi mặc định không đưa ra chỉ dẫn nào.Chứng thực (tuyên bố chứng thực) trong WebAuthn rất quan trọng vì nó cung cấp bằng chứng về tính chính hãng của một trình xác thực. Nó đảm bảo rằng quá trình xác thực được thực hiện bởi một thiết bị đáng tin cậy, từ đó bảo vệ chống lại các mối đe dọa bảo mật tiềm ẩn.
Ben Gould
Head of Engineering
I’ve built hundreds of integrations in my time, including quite a few with identity providers and I’ve never been so impressed with a developer experience as I have been with Corbado.
Hơn 3.000 nhà phát triển tin tưởng Corbado & làm cho Internet an toàn hơn với passkey. Có câu hỏi? Chúng tôi đã viết hơn 150 bài blog về passkey.
Tham gia Cộng đồng PasskeysCó, vì passkey có thể được đồng bộ hóa trên các thiết bị (ví dụ: từ iPhone sang MacBook
qua Keychain), các bên tin cậy không còn thực sự
xác định được thiết bị được chứng thực nào đang thực sự đăng nhập vào một ứng dụng hoặc
trang web. Do đó, Apple và Google đã quyết định rằng đối với các passkey được đồng bộ hóa,
họ sẽ không cung cấp tuyên bố chứng thực nữa. Tuy nhiên, để cải thiện trải nghiệm người
dùng cho các bên tin cậy và cho họ cơ hội nhận dạng và hiển thị passkey từ hệ sinh thái
của Apple và Google (iCloud Keychain và
Google Password Manager),
AAGUID vẫn sẽ được cung cấp (miễn là chứng thực được đặt thành
direct
hoặc indirect
trong cài đặt máy chủ WebAuthn cho
PublicKeyCredentialCreationOptions
. Xem
vấn đề GitHub này để biết chi tiết.
Nếu bạn muốn tích hợp xác thực bằng passkey vào
trang web và ứng dụng của mình, và muốn cung cấp cho người dùng trải nghiệm passkey tuyệt
vời, bạn nên xem xét những điều sau. Chúng tôi giả định bạn xây dựng giải pháp của mình
chủ yếu cho một kịch bản mà hầu hết người dùng của bạn sử dụng hệ điều hành Windows,
iOS, macOS hoặc
Android. Hơn nữa, chúng tôi giả định rằng hầu hết
các passkey (ngoài Windows) là các passkey được đồng bộ hóa. Vì cả iOS, macOS và
Android đều không còn gửi tuyên bố chứng thực nữa,
việc xác thực thực sự của một trình xác thực không còn được sử dụng (đối với Windows điều
này vẫn hoạt động, có lẽ vì Windows chưa cung cấp passkey được đồng bộ hóa qua
Windows Hello). Tuy nhiên, để có được
AAGUID, ví dụ để quản lý passkey tốt hơn trong cài đặt tài khoản,
chúng tôi khuyên bạn nên đặt ưu tiên chứng thực thành indirect
, vì điều này vẫn cho phép
lấy AAGUID trong khi tuyên bố chứng thực có thể được gửi (Windows)
hoặc không được gửi (iOS, macOS, Android).
Dịch vụ siêu dữ liệu FIDO cung cấp một kho lưu trữ siêu dữ liệu cho các trình xác thực khác nhau. Trong quá trình chứng thực, dịch vụ này có thể được truy vấn để lấy và xác thực chi tiết về trình xác thực, đảm bảo tính chính xác và tăng cường độ tin cậy của quy trình. Dịch vụ siêu dữ liệu FIDO kiểm tra tuyên bố chứng thực (không phải đối tượng chứng thực).
Có, chứng thực trực tiếp (trong tuyên bố chứng thực), mặc dù cung cấp sự minh bạch cao nhất bằng cách cung cấp thông tin chi tiết về thiết bị, có thể gây ra lo ngại về quyền riêng tư trong một số tình huống. Điều quan trọng là phải đánh giá nhu cầu về sự minh bạch so với quyền riêng tư khi chọn loại chứng thực.
WebAuthn cung cấp các loại ưu tiên chứng thực khác
nhau – không, gián tiếp, trực tiếp và doanh nghiệp. Đối với các tình huống mà
quyền riêng tư của người dùng
là quan trọng, attestation=none
có thể được sử dụng, loại này không cung cấp chi tiết về
thiết bị, đảm bảo quyền riêng tư của người dùng được bảo vệ.
Table of Contents
Enjoyed this read?
🤝 Join our Passkeys Community
Share passkeys implementation tips and get support to free the world from passwords.
🚀 Subscribe to Substack
Get the latest news, strategies, and insights about passkeys sent straight to your inbox.