OpenID for Verifiable Credential Issuance (OpenID4VCI) spesifikasyonunun kullanıldığı tipik bir dijital kimlik bilgisi verme akışında, veren tarafın imzalanacak kimlik bilgisindeki anahtarın güvenli bir konumda saklandığını bilmesi gerekir. android_keystore_attestation kanıt türü (OpenID4VCI ile kullanılacak bir biçim), Android Keystore'dan donanım imzalı bir rapor sağlar. Bu rapor, anahtarın Güvenilir Yürütme Ortamı'nda (TEE) veya StrongBox'ta kilitlenmesini ve dışa aktarılamamasını ya da klonlanamamasını sağlar.
Donanım doğrulama işlemine genel bakış
Android anahtar deposunda bir anahtar oluşturulduğunda sistem, onay sertifikası oluşturabilir. Bu sertifika, cihazın donanımı tarafından korunan bir anahtarla imzalanır ve Google'ın elinde bulunan bir güven köküne geri döner.
android_keystore_attestation kanıtı, X.509 sertifika zincirleri dizisidir. Her zincir tek bir kimlik doğrulama anahtarını temsil eder ve yaprak sertifikası ile ara sertifikalar şeklinde yapılandırılır.
- Yaprak sertifikası: Anahtarı ve Android'e özel bir onay uzantısını içerir.
- Ara sertifikalar: Varlığı Android köküne bağlayın.
Doğrulama adımları
Düzenleyenler, onay üzerinde çeşitli doğrulamalar yapmalıdır.
- Zincirde Android onay uzantısını içeren sertifikayı (genellikle yaprak sertifikası) bulun. Bu sertifika, Android Keystore tarafından oluşturulan anahtarın onay verilerini içerir.
- Yeniden oynatma saldırılarını önlemek için uzantıdaki
attestationChallengealanının protokol tarafından sağlananc_nonceile eşleştiğini doğrulayın.
- İlgilendiğiniz uzantılardaki tüm onaylamaların değerini doğrulayın.
- Android anahtar deposu sertifikaları için iptal kontrolü gerçekleştirin.
Onay kanıtındaki değerler çeşitli kaynaklardan alınır:
- Düzenleyen: Düzenleyen tarafından çeşitli değerler sağlanır ve en yaygın olanlar, sunum sırasında filtrelemeye olanak tanımak için düzenleyen meta veri biçimine yerleştirilir.
- Sahip: Paket adı ve imza gibi değerler sahibinden alınır. Bunlar standart düzenleme prosedürleriyle paylaşılmaz ve sahibinden bağımsız olarak alınması gerekir.
- Protokol:
attestationChallengeile nonce gibi değerler protokolden gelir.
Onay verilerini doğrulama hakkında daha ayrıntılı talimatlar için aşağıdaki kaynaklara bakın:
- Anahtar onayı ile donanım destekli anahtar çiftlerini doğrulama
- Anahtar ve Kimlik Onaylama Uzantısı Biçimi
- Anahtar onayı kitaplığı
Onay kanıtı biçimi
Aşağıdaki örnekte, kimlik bilgisi isteğinde android_keystore_attestation kanıtı yer alıyor:
{
"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
}
Daha sonra, kimlik bilgisi isteğinin proofs nesnesinde depolanır.
{
"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
]
}
}
Kart sağlayıcı meta veri biçimi
Bir veren, belirli bir kimlik bilgisi yapılandırması için android_keystore_attestation nesnesini proof_types_supported nesnesine dahil ederek desteklediği kanıt türlerini belirtir.
Aşağıda, ihraç edenler için android_keystore_attestation nesnesi örneği verilmiştir:
{
"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"]
}
Bu, dıştaki proof_types_supported nesnesinin bir örneğidir:
{
"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"]
}
}
}
}
}
}
VCI onay taleplerini Android Keystore ile eşleme
Bu tablo, standart OpenID4VCI onay kanıtı türüne aşina olan kuruluşların benzer kavramların Android Keystore onayında nerede bulunduğunu anlamasına yardımcı olmak için bilgilendirici bir eşleme sağlar.
VCI onay talebi |
|
Beklenen değer konumu |
iss |
Anahtar deposu kök sertifikasının ortak anahtarı |
Yok |
iat |
Onay uzantısında |
Yok |
exp |
Varlık sertifikasındaki |
Yok |
attested_keys |
Her zincirin yaprak sertifikasında bulunan ortak anahtar |
Yok |
key_storage |
Onay uzantısında |
Kart sağlayıcı seçildi: Kart sağlayıcı meta verilerindeki |
user_authentication |
Onay uzantısındaki |
Kart sağlayıcı seçildi: Kart sağlayıcı meta verilerindeki |
nonce |
Onay uzantısında |
Protokolden: VCI'da açıklanan nonce uç noktasından alınan |
sertifika |
Yok |
Yok |
status |
Yok |
Yok |