Trong quy trình phát hành thông tin xác thực kỹ thuật số điển hình bằng cách sử dụng
thông số kỹ thuật OpenID cho việc phát hành thông tin xác thực có thể xác minh (OpenID4VCI), tổ chức phát hành cần biết rằng khoá trong thông tin xác thực cần ký được lưu trữ
ở một vị trí an toàn. Loại bằng chứng android_keystore_attestation (một định dạng để
sử dụng với OpenID4VCI) cung cấp một báo cáo được ký bằng phần cứng từ
Kho khoá Android, đảm bảo khoá được khoá trong Môi trường thực thi đáng tin cậy
(TEE) hoặc StrongBox và không thể xuất hoặc sao chép.
Tổng quan về chứng thực phần cứng
Khi một khoá được tạo trong Kho khoá Android, hệ thống có thể tạo một chứng chỉ chứng thực. Chứng chỉ này được ký bằng một khoá được bảo vệ bởi phần cứng của thiết bị, liên kết trở lại một Gốc tin cậy do Google nắm giữ.
Bằng chứng android_keystore_attestation là một mảng các chuỗi chứng chỉ X.509. Mỗi chuỗi đại diện cho một khoá xác thực duy nhất và được cấu trúc theo một chứng chỉ gốc, sau đó là các chứng chỉ trung gian.
- Chứng chỉ gốc: Chứa khoá và tiện ích chứng thực dành riêng cho Android.
- Chứng chỉ trung gian: Kết nối gốc với Gốc Android.
Các bước xác minh
Nhà phát hành nên thực hiện một số bước xác thực trên chứng thực.
- Tìm chứng chỉ trong chuỗi có chứa tiện ích chứng thực Android (thường là chứng chỉ gốc). Chứng chỉ này chứa dữ liệu chứng thực cho khoá do Kho khoá Android tạo.
- Xác minh rằng trường
attestationChallengetrong tiện ích khớp vớic_noncedo giao thức cung cấp để ngăn chặn các cuộc tấn công phát lại.
- Xác minh giá trị của tất cả các câu khẳng định trong các tiện ích mà bạn quan tâm.
- Thực hiện kiểm tra thu hồi đối với các chứng chỉ Kho khoá Android.
Các giá trị trong bằng chứng chứng thực đến từ nhiều nguồn:
- Tổ chức phát hành: Tổ chức phát hành cung cấp nhiều giá trị và các giá trị phổ biến nhất được đưa vào định dạng siêu dữ liệu của tổ chức phát hành để cho phép lọc khi trình bày.
- Người nắm giữ: Các giá trị như tên gói và chữ ký đến từ người nắm giữ. Các giá trị này không được chia sẻ thông qua các quy trình phát hành tiêu chuẩn và cần được lấy riêng từ người nắm giữ.
- Giao thức: Các giá trị như nonce với
attestationChallengeđến từ giao thức.
Để biết hướng dẫn đầy đủ hơn về cách xác thực dữ liệu chứng thực, hãy xem các tài nguyên sau:
- Xác minh cặp khoá được hỗ trợ bằng phần cứng bằng chứng thực khoá
- Định dạng tiện ích chứng thực khoá và mã nhận dạng
- Thư viện chứng thực khoá
Định dạng bằng chứng chứng thực
Trong yêu cầu thông tin xác thực, bằng chứng android_keystore_attestation được đưa vào ví dụ sau:
{
"type": "array",
"description": "An array of certificate chains. Each chain attests a single key.",
"items": {
"type": "array",
"description": "An X.509 certificate chain. Each certificate is a Base64-encoded string. The first element in the chain is the leaf certificate with the extension, the last is the Android Keystore root certificate.",
"items": {
"type": "string",
"description": "A single X.509 certificate (Base64-NoWrap padded DER encoded)."
},
"minItems": 1
},
"minItems": 1
}
Sau đó, bằng chứng này được lưu trữ trong đối tượng proofs của yêu cầu thông tin xác thực.
{
"credential_configuration_id": "org.iso.18013.5.1.mDL",
"proofs": {
"android_keystore_attestation": [
[
"MII...", // Leaf certificate (contains Keystore extension)
"MII...", // Intermediate certificate
"MII..." // Android Root certificate
],
[ "MII...", "MII...", "MII..." ] // second proof
]
}
}
Định dạng siêu dữ liệu của tổ chức phát hành
Nhà phát hành cho biết các loại bằng chứng mà nhà phát hành hỗ trợ bằng cách đưa đối tượng android_keystore_attestation vào đối tượng proof_types_supported cho một cấu hình thông tin xác thực nhất định.
Đây là ví dụ về đối tượng android_keystore_attestation cho nhà phát hành:
{
"type": "object",
"properties": {
"proof_signing_alg_values_supported": {
"type": "array",
"description": "REQUIRED. As defined in OpenID4VCI 1.0 Section 12.2.4.",
"items": {
"type": "string",
"description": "Cryptographic algorithm identifiers used in the proof_signing_alg_values_supported Credential Issuer metadata parameter for this proof type are case sensitive strings and SHOULD be one of those defined in [IANA.JOSE]."
},
"minItems": 1
},
"key_attestations_required": {
"type": "object",
"description": "OPTIONAL. Specifies the minimum attestation requirements.",
"properties": {
"key_mint_security_level": {
"type": "string",
"description": "OPTIONAL. Minimum accepted keyMintSecurityLevel. Values defined in https://source.android.com/docs/security/features/keystore/attestation#securitylevel-values.",
"enum": ["Software", "TrustedEnvironment", "StrongBox"],
"default": "TrustedEnvironment"
},
"user_auth_types": {
"type": "array",
"description": "OPTIONAL. A list of authentication types which can authorize the use of the key. If empty, no authentication is required. If multiple, any are allowed.",
"items": {
"type": "string",
"description": "Allowed values are 'LSKF' and 'BIOMETRIC'. These values are meant to mimic the values used during the key generation process here.",
"enum": ["LSKF", "BIOMETRIC"]
},
"default": []
}
}
}
},
"required": ["proof_signing_alg_values_supported"]
}
Đây là ví dụ về đối tượng proof_types_supported bên ngoài:
{
"credential_configurations_supported": {
"org.iso.18013.5.1.mDL": {
"format": "mso_mdoc",
"doctype": "org.iso.18013.5.1.mDL",
"cryptographic_binding_methods_supported": [
"cose_key"
],
"credential_signing_alg_values_supported": [
-7, -9
],
"proof_types_supported": {
"android_keystore_attestation": {
"proof_signing_alg_values_supported": [
"ES256" // ecdsaWithSHA256
],
"key_attestations_required" : {
// OPTIONAL String - Representing the minimum accepted value for keyMintSecurityLevel values
// defined here ("Software"|"TrustedEnvironment"|"StrongBox"). Default value: "TrustedEnvironment"
"key_mint_security_level": "TrustedEnvironment",
// OPTIONAL List of Strings - Representing all allowed values for userAuthType values defined here.
// [] value will represent noAuthRequired. Default value: [].
"user_auth_types": ["LSKF", "BIOMETRIC"]
}
}
}
}
}
}
Ánh xạ các yêu cầu chứng thực VCI sang Kho khoá Android
Bảng này cung cấp thông tin ánh xạ để giúp các thực thể quen thuộc với loại bằng chứng chứng thực OpenID4VCI tiêu chuẩn hiểu được vị trí của các khái niệm tương tự trong chứng thực Kho khoá Android.
Yêu cầu chứng thực VCI |
Vị trí |
Vị trí giá trị dự kiến |
iss |
Khoá công khai của chứng chỉ gốc Kho khoá |
Không áp dụng |
iat |
Giá trị |
Không áp dụng |
exp |
Trường |
Không áp dụng |
attested_keys |
Khoá công khai có trong chứng chỉ gốc của mỗi chuỗi |
Không áp dụng |
key_storage |
Giá trị |
Nhà phát hành đã chọn: trường |
user_authentication |
Giá trị |
Nhà phát hành đã chọn: trường |
nonce |
Giá trị |
Từ giao thức: giá trị |
certification |
Không áp dụng |
Không áp dụng |
status |
Không áp dụng |
Không áp dụng |