واجهة برمجة التطبيقات Open Mobile API (OMAPI) هي واجهة برمجة تطبيقات عادية تُستخدم للتواصل مع "العنصر الآمن" في الجهاز. قبل Android 13، كان بإمكان التطبيقات ووحدات إطار العمل فقط الوصول إلى هذه الواجهة. من خلال تحويلها إلى واجهة مستقرة خاصة بمورّد الأجهزة، يمكن لوحدات طبقة تجريد الأجهزة (HAL) أيضًا التواصل مع "العناصر الآمنة" من خلال خدمة OMAPI.
تمت إضافة إذن وصول إلى OMAPI لوحدات HAL بدون تعديل أي واجهات برمجة تطبيقات في الواجهة الحالية. لا يلزم إجراء أي تعديلات على التطبيقات الحالية ووحدات إطار العمل التي تستخدم هذه الواجهة.
كجزء من برنامج Android Ready SE نوفّر ميزات الأمان الأساسية في Android، مثل Keymaster وKeyMint وIdentity Credentials وRemote Key Provisioning، على "العناصر الآمنة". يتطلّب تفعيل هذه الميزات أن تتواصل طبقات HAL (مكوّنات المورّد) لهذه الميزات مع "العنصر الآمن" من خلال الواجهة المستقرة الخاصة بمورّد الأجهزة في OMAPI.
بنية التصميم

الشكل 1: بنية التصميم
على مصنّعي المعدات الأصلية الذين يدمجون "عنصرًا آمنًا" وميزات Android Ready SE في أجهزتهم تفعيل هذه الواجهة لأنّها تكون غير مفعّلة تلقائيًا. قبل هذا التحديث، كانت قواعد الوصول إلى "العنصر الآمن" محدّدة حسب اسم الحزمة أو قيم التجزئة لتوقيعها (مرجع تطبيق الجهاز) وAID (مرجع تطبيق "العنصر الآمن"). لم تكن لوحدات HAL معرّفات فريدة مثل أسماء الحزم أو شهادات التوقيع. في Android 13 والإصدارات الأحدث، تسمح خدمة OMAPI Vendor Stable Service لوحدات HAL بالوصول إلى "العنصر الآمن". يمكن لمورّدي "العناصر الآمنة" تحديد معرّف فريد UUID يتألف من 16 بايت. لتطبيق قاعدة الوصول هذه على وحدات HAL، على مورّدي "العناصر الآمنة" ربط هذا المعرّف الفريد UUID المكوّن من 16 بايت بمعرّف المستخدم UID لوحدة HAL في ملف XML لإعدادات ربط UUID الخاص بالمورّد.
تضيف خدمة OMAPI Vendor Stable Service قيمًا إلى المعرّف UUID ليصبح 20 بايت، إذا لزم الأمر وفقًا للقسم 6.1، صفحة DeviceAppID-REF-DO: 66، وتحدّد قواعد الوصول في "العناصر الآمنة" باستخدام هذا المعرّف UUID المكوّن من 20 بايت كمرجع لتطبيق الجهاز.
يتكوّن اسم ملف ربط UUID الخاص بالمورّد من البادئة المحدّدة مسبقًا
hal_uuid_map_ ويُضاف إليه قيمة خاصية النظام
ro.boot.product.hardware.sku
hal_uuid_map_value_of_ro.boot.product.hardware.sku.xml
تبحث خدمة OMAPI Vendor Stable Service عن هذا الملف ضمن المجلدات
/odm/etc/ و/vendor/etc/ و/etc/. يتوفّر هنا وصف تفصيلي لملف إعدادات ربط UUID الخاص بالمورّد.
التنفيذ
يجب إجراء التغييرات التالية لتفعيل ميزة OMAPI Vendor Stable Service في إصدار معيّن.
SecureElement
SecureElement
فعِّل علامة الخدمة
secure_element_vintf_enabled باستخدام تراكب الموارد ضمن
المجلدات الخاصة بالجهاز.
<bool name="secure_element_vintf_enabled">true</bool>
حدِّد ملف XML لربط UID وUUID لخدمتك.
<ref_do>
<uuid_ref_do>
<uids>
<uid>0</uid>
</uids>
<uuid>9f36407ead0639fc966f14dde7970f68</uuid>
</uuid_ref_do>
<uuid_ref_do>
<uids>
<uid>1096</uid>
<uid>1097</uid>
</uids>
<uuid>a9b7ba70783b317e9998dc4dd82eb3c5</uuid>
</uuid_ref_do>
</ref_do>جهِّز "العنصر الآمن" باستخدام مراجع الوصول لخدمة HAL باستخدام المعرّفات UUID كمراجع لتطبيق الجهاز. أضِف إدخال ربط في إعدادات الربط حيث يمكنك ربط هذا المعرّف UUID بمعرّفات المستخدم UID لوحدات HAL. باستخدام هذا الربط، يسمح المورّدون لوحدات HAL بالوصول إلى "العنصر الآمن". يمكن استخدام اختبارات OMAPI VTS كعمليات تنفيذ مرجعية لتفعيل خدمة OMAPI Vendor Stable Service في وحدات HAL.
عدِّل سياسة الأمان sepolicy لوحدة HAL: أضِف قاعدة sepolicy لوحدة HAL للسماح لنطاقها بالوصول إلى خدمة OMAPI Vendor Stable Service.
allow hal_module_label secure_element_service:service_manager find
الاتصال بخدمة OMAPI Vendor Stable Service: من وحدات HAL، استخدِم تصنيف خدمة مورّد OMAPI
android.se.omapi.ISecureElementService/defaultandroid.se.omapi.ISecureElementService/default
للاتصال بالخدمة.
التحقق من صحة البيانات
تأكَّد من أنّ خدمة OMAPI Vendor Stable Service قد تم تنفيذها بنجاح من خلال إجراء اختبارات OMAPI VTS.
run vts -m VtsHalOmapiSeServiceV1_TargetTest
run vts -m VtsHalOmapiSeAccessControlTestCases