بيانات اعتماد الهوية
تستخدم أجهزة Android بيانات اعتماد الهوية. لإدارة بيانات الاعتماد على الجهاز بأمان. بيانات الاعتماد الخاصة بالهوية المكتبة توفّر عددًا من ميزات الأمان التي يجب أن تستخدمها جهة الإصدار لضمان توفير أكبر قدر ممكن من الأمان على منظومة Google المتكاملة
رقم موقَّع
"تحدٍ" أمام مكتبة "بيانات اعتماد الهوية" (والمشار إليها في واجهة برمجة التطبيقات هذه باسم رقم nonce) عند استرداد شهادة هوية الجهاز، التي يتم إرسالها إلى جهة الإصدار في RegisterDeviceRequest. تم توقيع رقم التعريف هذا وتضمينه في إضافة المصادقة للجهاز. وشهادة الاعتماد. يتيح ذلك لجهة إصدار الثقة مدى الحداثة. من الشهادة والإقرار، وأنه لا تتم إعادة تشغيلها بواسطة خادم في منتصف الاتصالات.
الملفات الشخصية للتحكم في الوصول
تتيح الملفات الشخصية للتحكم في الوصول لجهة الإصدار تحديد كيفية يريد حماية البيانات التي يتم تخزينها ضمن بيانات اعتماد الهوية. تشير رسالة الأشكال البيانية يمكن لجهة الإصدار تحديد ما إذا كانت مصادقة المستخدم مطلوبة للوصول إلى البيانات والمدة التي يتعين على المستخدم فيها إجراء المصادقة. المستقبل (ليس المتوافقة حاليًا) تشمل حالات استخدام هذه الميزة تحديد القرّاء يمكنهم الوصول إلى عنصر البيانات. تفاصيل حول كيفية تنسيق التحكم في الوصول ملفات التعريف في تنسيق كائن بيانات الاعتماد.
مستند إثبات توفير المتطلبات اللازمة
يُعد إثبات توفير عنصر وسيلة الدفع لجهات إصدار البطاقة لمعرفة تم تخزين بيانات الاعتماد بنجاح ضمن "بيانات اعتماد الهوية". ينبغي على جهة الإصدار عدم إصدار أوامر MSO لبيانات اعتماد إلى أن تصلهم إثباتًا ويتحققوا منها توفير المتطلبات اللازمة. تم توثيق هذا العنصر أكثر في مستندات "بيانات اعتماد الهوية".
تنسيقات العناصر
تخضع جميع هذه الكائنات للتشفير التام بين الأطراف بين الجهاز جهة الإصدار. ونتيجة لذلك، لا تمتلك خوادم Google القدرة على تسوية هذه الكائنات، وقد تكون بعض هذه الكائنات بتنسيقات مختلفة عن باقي كائنات واجهة برمجة التطبيقات. على سبيل المثال، يتم تنسيق "بيانات الاعتماد" بتنسيق CBOR بدلاً من من JSON، فهذا ما هو متوقع على مستوى Android.
بيانات الاعتماد
تحتوي بيانات الاعتماد على عناصر البيانات وكيفية الوصول إليها. أُنشأها جون هنتر، الذي كان متخصصًا
يحتوي على كائنين أساسيين، هما provisionedData وaccessControlProfiles. تشير رسالة الأشكال البيانية
provisionedData يحتوي على جميع مساحات الاسم ذات الصلة بأي من
نوع بيانات الاعتماد هو. على سبيل المثال، بالنسبة لرخصة القيادة المحمولة، سيكون هذا
org.iso.18013.5.1 وorg.aamva.18013.5.1 إدخالات البيانات وقيمها
داخل مساحات الاسم ملفات تعريف التحكم في الوصول ذات الصلة. هذا هو
كقائمة من أرقام التعريف، حيث يتجاوب رقم التعريف مع ملف شخصي للتحكم في الوصول في
قائمة accessControlProfiles. في المثال أدناه، تشير السمة [0] في كل بيانات إلى
يشير الإدخال إلى ملف التحكم في الوصول برقم التعريف 0، وليس الفهرس 0.
في ما يلي مثال على عنصر بيانات خريطة CBOR غير مرمّز.
{ "provisionedData": { "org.iso.18013.5.1": [ { "name": "family_name", "value": "Smith", "accessControlProfiles": [ 1 ] }, { "name": "given_name", "value": "Stewart", "accessControlProfiles": [ 1 ] }, { "name": "birth_date", "value": { "tag": 1004, "value": "1965-09-01" }, "accessControlProfiles": [ 1 ] }, { "name": "issue_date", "value": { "tag": 1004, "value": "2022-08-01" }, "accessControlProfiles": [ 1 ] }, { "name": "expiry_date", "value": { "tag": 1004, "value": "2027-08-01" }, "accessControlProfiles": [ 1 ] }, { "name": "issuing_authority", "value": "IA", "accessControlProfiles": [ 1 ] }, { "name": "issuing_country", "value": "US", "accessControlProfiles": [ 1 ] }, { "name": "document_number", "value": "D04320785", "accessControlProfiles": [ 1 ] }, { "name": "portrait", "value": { "type": "Buffer", "data": [ 167, 30, 148, 218, 204, 75, 112, 162, 138, 40, 52, 63, 255 ] }, "accessControlProfiles": [ 1 ] }, { "name": "un_distinguishing_sign", "value": "USA", "accessControlProfiles": [ 1 ] }, { "name": "driving_privileges", "value": [ { "expiry_date": { "tag": 1004, "value": "2027-08-01" }, "issue_date": { "tag": 1004, "value": "2022-08-01" }, "vehicle_category_code": "B" } ], "accessControlProfiles": [ 1 ] }, { "name": "sex", "value": 1, "accessControlProfiles": [ 1 ] }, { "name": "height", "value": 170, "accessControlProfiles": [ 1 ] }, { "name": "weight", "value": 79, "accessControlProfiles": [ 1 ] }, { "name": "eye_colour", "value": "Blue", "accessControlProfiles": [ 1 ] }, { "name": "hair_colour", "value": "Gray", "accessControlProfiles": [ 1 ] }, { "name": "age_in_years", "value": 57, "accessControlProfiles": [ 1 ] }, { "name": "age_over_18", "value": true, "accessControlProfiles": [ 1 ] }, { "name": "age_over_21", "value": true, "accessControlProfiles": [ 1 ] }, { "name": "resident_address", "value": "1600 Amphitheatre Pkwy ", "accessControlProfiles": [ 1 ] }, { "name": "issuing_jurisdiction", "value": "US-CA", "accessControlProfiles": [ 1 ] }, { "name": "resident_city", "value": "Mountain View", "accessControlProfiles": [ 1 ] }, { "name": "resident_state", "value": "CA", "accessControlProfiles": [ 1 ] }, { "name": "resident_postal_code", "value": "94043", "accessControlProfiles": [ 1 ] }, { "name": "resident_country", "value": "US", "accessControlProfiles": [ 1 ] } ], "org.iso.18013.5.1.aamva": [ { "name": "DHS_compliance", "value": "F", "accessControlProfiles": [ 1 ] }, { "name": "domestic_driving_privileges", "value": [ { "domestic_vehicle_class": { "domestic_vehicle_class_code": "D", "domestic_vehicle_class_description": "Operator", "expiry_date": { "tag": 1004, "value": "2027-08-01" }, "issue_date": { "tag": 1004, "value": "2022-08-01" } }, "domestic_vehicle_restrictions": [ { "domestic_vehicle_restriction_code": "B", "domestic_vehicle_restriction_description": "Corrective lenses (also automated - vision screening)" } ] } ], "accessControlProfiles": [ 1 ] }, { "name": "aamva_version", "value": "1", "accessControlProfiles": [ 1 ] }, { "name": "family_name_truncation", "value": "N", "accessControlProfiles": [ 1 ] }, { "name": "given_name_truncation", "value": "N", "accessControlProfiles": [ 1 ] }, { "name": "organ_donor", "value": true, "accessControlProfiles": [ 1 ] } ] }, "accessControlProfiles": [ { "id": 1, "userAuthenticationRequired": true, "timeoutMillis": 10000 } ] }
من المفترض أن يتم بعد ذلك تشفير هذا الكائن بتنسيق CBOR، ثم بترميز base64. إنْ كنت في بيئة الاختبار، ولم يتم تشفير البيانات، يجب أن يكون بترميز CBOR ثم بترميز base64.
يُرجى العلم أنّ المثال أعلاه هو خريطة CBOR غير مرمّزة، وليست بتنسيق JSON. إذا كانت سلسلة JSON بترميز CBOR، فلن يتم تحليله بشكل صحيح بواسطة جهاز Android.
أغراض أمان الأجهزة الجوّالة
يحدّد المعيار ISO/IEC 18013-5 عنصر أمان جوّال (MSO) لضمان أنّ رخصة mDL عدم التلاعب بالبيانات وأنها صادرة عن جهة موثوق بها.
تحتوي MSO على ما يلي:
- قيم الملخص: هي قيم فريدة يتم إنشاؤها لكل بيانات. في "بيانات اعتماد mDL" ويتم استخدامها للتحقق من عدم وجود منذ توقيع اتفاقية MSO.
- مفتاح الجهاز: مفتاح فريد يتم إنشاؤه لكل جهاز جوّال التي تخزن بيانات الاعتماد. ويُستخدَم لربط MSO بالجهاز ومنع استخدامه على الأجهزة الأخرى.
- معلومات الصلاحية: تشمل تاريخَي البدء والانتهاء اللذَين يتم فيهما MSO صالح.
- توقيع بنية المعلومات: هذا توقيع رقمي يتم إنشاؤه من قبل هيئة الإصدار (IA) باستخدام مفتاحها الخاص. ويُستخدَم هذا الحقل للتحقّق من أنّ MSO صادر عن هيئة موثوقة.
ويحتوي MSO على بنية CCDL التالية:
MobileSecurityObjectBytes = #6.24(bstr .cbor MobileSecurityObject)
MobileSecurityObject = {
"digestAlgorithm" : tstr, ; Message digest algorithm used
"valueDigests" : ValueDigests, ; Array of digests of all data elements
"deviceKeyInfo" : DeviceKeyInfo,
"docType" : tstr, ; DocType as used in Documents
"validityInfo" : ValidityInfo
}
DeviceKeyInfo = {
"deviceKey" : DeviceKey
? "keyAuthorizations" : KeyAuthorizations,
? "keyInfo" : KeyInfo
}
DeviceKey = COSE_Key ; Device key in COSE_Key as defined in RFC 8152
KeyAuthorizations = {
? "nameSpaces" : AuthorizedNameSpaces
? "dataElements" : AuthorizedDataElements
}
AuthorizedNameSpaces = [+ NameSpace]
AuthorizedDataElements = {+ NameSpace => DataElementsArray}
DataElementsArray = [+ DataElementIdentifier]
KeyInfo = { * int => any} ; Positive integers are RFU, negative integers may be used for proprietary use
ValueDigests = {
"nameSpaces" : NameSpacesDigests
}
NameSpacesDigests = {
+ NameSpace => DigestIDs
}
DigestIDs = {
+ DigestID => Digest
}
ValidityInfo = {
"signed" : tdate,
"validFrom" : tdate,
"validUntil" : tdate,
? "expectedUpdate" : tdate
}
NameSpace = tstr ; NameSpace as used in IssuerSigned
DigestID = uint ; DigestID as used in IssuerSigبيانات المصادقة الثابتة
بيانات المصادقة الثابتة، التي تتألف كلاً من
يجب أن تكون جهة الإصدار من إنشاء digestIdMapping وissuerAuth.
يتألف digestIdMapping لمساحة اسم معيّنة من مصفوفة من
IssuerSignedItem أمثلة، يحتوي كلّ منها على قيمة فارغة للسمة elementValue.
بالإضافة إلى ذلك، يتم إنشاء issuerAuth من خلال توقيع
MobileSecurityObjectBytes باستخدام COSE_Sign1.
StaticAuthDataBytes = (bstr .cbor StaticAuthData) StaticAuthData = { "digestIdMapping" : DigestIdMapping, "issuerAuth" : IssuerAuth } DigestIdMapping = { NameSpace => [ + IssuerSignedItemBytes ] } ; Defined in ISO 18013-5 ; NameSpace = String DataElementIdentifier = String DigestID = uint IssuerAuth = COSE_Sign1 ; The payload is MobileSecurityObjectBytes IssuerSignedItemBytes = #6.24(bstr .cbor IssuerSignedItem) IssuerSignedItem = { "digestID" : uint, ; Digest ID for issuer data auth "random" : bstr, ; Random value for issuer data auth "elementIdentifier" : DataElementIdentifier, ; Data element identifier "elementValue" : DataElementValue ; Data element value }
عند استدعاء /provisionMobileSecurityObjects
نقطة النهاية، يتم تشفير StaticAuthDataBytes باستخدام HPKE، ويتم نقلها
كجزء من الرد.
إليك نموذج رمز برمجي لإنشاء كائنات MSO وبيانات المصادقة الثابتة.