في عملية إصدار بيانات اعتماد رقمية نموذجية باستخدام مواصفات OpenID لإصدار بيانات الاعتماد القابلة للتحقّق (OpenID4VCI)، يجب أن يعرف جهة الإصدار أنّ المفتاح داخل بيانات الاعتماد المطلوب توقيعها مخزّن في مكان آمن. يوفر نوع المستند android_keystore_attestation، وهو تنسيق مخصّص للاستخدام مع OpenID4VCI، تقريرًا موقّعًا من المعدّات من مخزن مفاتيح Android، ما يضمن قفل المفتاح في بيئة تنفيذ موثوقة (TEE) أو StrongBox وعدم إمكانية تصديره أو استنساخه.
نظرة عامة على خدمة "إثبات صحة الجهاز"
عند إنشاء مفتاح في Android Keystore، يمكن للنظام إنشاء شهادة إثبات صحة. هذه الشهادة موقَّعة بمفتاح محمي بواسطة أجهزة الجهاز، ويتم ربطها بجذر موثوق به تحتفظ به Google.
android_keystore_attestation الإثبات هو مجموعة من سلاسل شهادات X.509. تمثّل كل سلسلة مفتاح مصادقة واحدًا، ويتم تنظيمها من خلال شهادة ورقة تليها شهادات وسيطة.
- شهادة الخصائص التفصيلية: تحتوي على المفتاح وإضافة خاصة بشهادة المصادقة على Android.
- الشهادات المتوسطة: تربط الشهادة غير المخوّلة للتصديق بشهادة الجذر في Android.
خطوات إثبات الهوية
على الجهات المصدرة إجراء عمليات تحقّق متعدّدة من شهادة الإقرار.
- ابحث عن الشهادة في السلسلة التي تحتوي على إضافة بيان صحة الجهاز على Android (عادةً ما تكون شهادة الورقة الأخيرة). تحتوي هذه الشهادة على بيانات التصديق الخاصة بالمفتاح الذي أنشأه Android Keystore.
- تأكَّد من أنّ الحقل
attestationChallengeفي الإضافة يتطابق معc_nonceالذي يوفّره البروتوكول لمنع هجمات إعادة الإرسال.
- تحقَّق من قيمة جميع التأكيدات في الإضافات التي تهمّك.
- إجراء عملية تحقّق من الإبطال مقابل شهادات "مخزن مفاتيح Android"
تأتي القيم الواردة في مستند إثبات صحة الشهادة من عدة مصادر:
- الجهة المصدرة: تقدّم الجهة المصدرة قيمًا مختلفة، ويتم وضع القيم الأكثر شيوعًا في تنسيق البيانات الوصفية للجهة المصدرة للسماح بالفلترة أثناء العرض.
- الجهة المالكة: يتم الحصول على قيم مثل اسم الحزمة والتوقيع من الجهة المالكة. ولا تتم مشاركة هذه المستندات من خلال إجراءات الإصدار العادية، بل يجب الحصول عليها بشكل مستقل من صاحبها.
- البروتوكول: تأتي القيم، مثل الرقم العشوائي مع
attestationChallenge، من البروتوكول.
للحصول على تعليمات أكثر تفصيلاً حول التحقّق من صحة بيانات الشهادة، يُرجى الاطّلاع على المراجع التالية:
- التحقّق من أزواج المفاتيح المحمية بواسطة الأجهزة باستخدام مصادقة المفتاح
- تنسيق إضافة إثبات صحة المفتاح ورقم التعريف
- مكتبة مصادقة المفاتيح
تنسيق مستند إثبات المصادقة
في طلب بيانات الاعتماد، يتم تضمين android_keystore_attestation الدليل
في المثال التالي:
{
"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
}
يتم بعد ذلك تخزينها في الكائن proofs الخاص بطلب بيانات الاعتماد.
{
"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
]
}
}
تنسيق البيانات الوصفية لجهة الإصدار
يشير جهة الإصدار إلى أنواع المستندات التي تتيحها من خلال تضمين العنصر android_keystore_attestation ضمن العنصر proof_types_supported لإعدادات بيانات الاعتماد المحدّدة.
في ما يلي مثال على عنصر android_keystore_attestation الخاص بجهات الإصدار:
{
"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"]
}
في ما يلي مثال على عنصر proof_types_supported الخارجي:
{
"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"]
}
}
}
}
}
}
ربط بيانات مصادقة مستند تعريف المركبة بـ "مخزن مفاتيح Android"
يقدّم هذا الجدول عملية ربط معلوماتية لمساعدة الجهات التي تعرف نوع إثبات صحة البيانات المتوافق مع معيار OpenID4VCI على فهم الأماكن التي تتوفّر فيها المفاهيم المشابهة ضمن عملية إثبات صحة البيانات في Android Keystore.
مطالبة شهادة VCI |
|
موقع القيمة المتوقّعة |
iss |
المفتاح العام لشهادة الجذر في ملف تخزين المفاتيح |
لا ينطبق |
iat |
قيمة |
لا ينطبق |
exp |
حقل |
لا ينطبق |
attested_keys |
المفتاح العام المُضمَّن في شهادة العنصر الأخير من كل سلسلة |
لا ينطبق |
key_storage |
قيمة |
حقل "جهة الإصدار المحدّدة: |
user_authentication |
قيم |
حقل "جهة الإصدار المحدّدة: |
nonce |
قيمة |
من البروتوكول: قيمة |
شهادة الاعتماد |
لا ينطبق |
لا ينطبق |
status |
لا ينطبق |
لا ينطبق |