الواجهة الثابتة لمورّد OMAPI

مقدّمة

Open Mobile API (OMAPI) هي واجهة برمجة تطبيقات عادية تُستخدَم للتواصل مع "العنصر الآمن" في الجهاز. قبل الإصدار 13 من نظام التشغيل Android، كانت التطبيقات ووحدات إطار العمل فقط هي التي يمكنها الوصول إلى هذه الواجهة. ومن خلال تحويلها إلى واجهة ثابتة خاصة بالمورّد، تصبح وحدات HAL قادرة أيضًا على التواصل مع العناصر الآمنة من خلال خدمة OMAPI.

تمت إضافة إذن وصول جديد إلى OMAPI لوحدات HAL بدون تعديل أي واجهات برمجة تطبيقات في الواجهة الحالية. ولا يلزم إجراء أي تعديلات على وحدات التطبيق وإطار العمل الحالية التي تستخدم هذه الواجهة.

في إطار برنامج Android Ready SE، نعمل على إتاحة ميزات أمان Android الأساسية، مثل Keymaster وKeyMint ومستندات تعريف الهوية وتوفير المفاتيح عن بُعد، على "عناصر الأمان". ويتطلّب تفعيل هذه الميزات أن تتواصل طبقات تجريد الأجهزة (مكوّنات المورّد) الخاصة بهذه الميزات مع "العنصر الآمن" من خلال واجهة OMAPI الثابتة الخاصة بالمورّد.

تصميم البنية

تصميم البنية
الشكل 1: بنية التصميم

على المصنّعين الأصليين للأجهزة الذين يدمجون ميزات Secure Element وAndroid Ready SE في أجهزتهم تفعيل هذه الواجهة لأنّها تكون غير مفعّلة تلقائيًا. قبل هذا التحديث، كانت قواعد الوصول إلى "العنصر الآمن" تُحدَّد حسب اسم الحزمة أو رموز التجزئة الخاصة بالتوقيع (مرجع تطبيق الجهاز) ومعرّف التطبيق (مرجع تطبيق "العنصر الآمن"). لم تكن وحدات HAL النمطية تتضمّن معرّفات فريدة، مثل أسماء الحِزم أو شهادات التوقيع. في نظام التشغيل Android 13، تتيح خدمة OMAPI Vendor Stable Service لوحدات HAL الوصول إلى العنصر الآمن. يمكن لمورّدي العناصر الآمنة تحديد معرّف فريد UUID بحجم 16 بايت. لتطبيق قاعدة الوصول هذه على وحدات HAL، على مورّدي SE ربط معرّف UUID الفريد المكوّن من 16 بايت بمعرّف UID لوحدة HAL في ملف XML الخاص بإعدادات ربط معرّف UUID الخاص بالمورّد.

تضيف خدمة OMAPI Vendor Stable Service قيمة FF إلى المعرّف الفريد العالمي (UUID) إذا لزم الأمر ليصبح 20 بايت، وذلك وفقًا للفقرة 6.1، صفحة DeviceAppID-REF-DO: 66 وتحدّد قواعد الوصول في العناصر الآمنة باستخدام المعرّف الفريد العالمي (UUID) المكوّن من 20 بايت كمرجع لتطبيق الجهاز.

يتم إنشاء اسم ملف ربط المعرّف الفريد العالمي الخاص بالمورّد باستخدام البادئة المحدّدة مسبقًا hal_uuid_map_ وإلحاقها بقيمة سمة النظام ro.boot.product.hardware.sku

    hal_uuid_map_value_of_ro.boot.product.hardware.sku.xml

تبحث خدمة OMAPI Vendor Stable عن هذا الملف ضمن المجلدات /odm/etc/ و/vendor/etc/ و/etc/. يمكنك الاطّلاع على وصف تفصيلي لملف إعدادات ربط المعرّف الفريد العالمي الخاص بالمورّد هنا.

التنفيذ

يجب إجراء التغييرات التالية لتفعيل ميزة "خدمة OMAPI Vendor Stable" في إصدار مستهدف.

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>

توفير عناصر Secure Element AR لخدمة HAL باستخدام أرقام تعريف عالمية فريدة (UUID) كمرجع لتطبيقات الجهاز. أضِف إدخال ربط في إعدادات الربط حيث يمكنك ربط هذا المعرّف الفريد العالمي (UUID) بمعرّفات فريدة (UID) لوحدات HAL. من خلال عملية الربط هذه، تسمح الجهات التابعة لمورّدي خدمات الربط لوحدات HAL بالوصول إلى "العنصر الآمن". يمكن استخدام اختبارات VTS لواجهة برمجة التطبيقات OMAPI كعمليات تنفيذ مرجعية لتفعيل خدمة OMAPI Vendor Stable Service في وحدات HAL.

تعديل sepolicy لوحدة HAL: أضِف قاعدة sepolicy لوحدة HAL للسماح لنطاقها بالوصول إلى خدمة OMAPI الثابتة الخاصة بالمورّد.

    allow hal_module_label secure_element_service:service_manager find

الاتصال بخدمة OMAPI الثابتة الخاصة بالمورّد: من وحدات HAL، استخدِم تصنيف خدمة OMAPI الخاص بالمورّد android.se.omapi.ISecureElementService/defaultandroid.se.omapi.ISecureElementService/default للاتصال بالخدمة.

التحقُّق

تأكَّد من تنفيذ خدمة OMAPI Vendor Stable Service بنجاح من خلال تشغيل اختبارات VTS الخاصة بواجهة برمجة التطبيقات OMAPI.

    run vts -m VtsHalOmapiSeServiceV1_TargetTest
    run vts -m VtsHalOmapiSeAccessControlTestCases