رابط برنامهنویسی کاربردی موبایل باز (OMAPI) یک رابط برنامهنویسی کاربردی استاندارد است که برای ارتباط با عنصر امن دستگاه استفاده میشود. قبل از اندروید ۱۳، فقط برنامهها و ماژولهای چارچوب به این رابط دسترسی داشتند. با تبدیل آن به یک رابط پایدار فروشنده، ماژولهای HAL نیز قادر به ارتباط با عناصر امن از طریق سرویس OMAPI هستند.
یک ورودی دسترسی به OMAPI برای ماژولهای HAL بدون تغییر هیچ API در رابط کاربری فعلی اضافه شد. هیچ تغییری برای ماژولهای برنامه و چارچوب موجود که از این رابط استفاده میکنند، لازم نیست.
به عنوان بخشی از برنامه Android Ready SE، ما ویژگیهای امنیتی اصلی اندروید مانند Keymaster، KeyMint، Identity Credentials و Remote Key Provisioning را در Secure Elements در دسترس قرار میدهیم. فعال کردن این موارد مستلزم آن است که HALها (اجزای فروشنده) این ویژگیها از طریق رابط پایدار فروشنده OMAPI با Secure Element ارتباط برقرار کنند.
معماری طراحی

شکل ۱. معماری طراحی.
تولیدکنندگان اصلی تجهیزات (OEM) که ویژگیهای Secure Element و Android Ready SE را در دستگاههای خود ادغام میکنند، باید این رابط را فعال کنند زیرا به طور پیشفرض غیرفعال است. قبل از این بهروزرسانی، قوانین دسترسی به Secure Element توسط نام بسته یا هشهای امضای آن (مرجع برنامه دستگاه) و AID (مرجع برنامه SE) تعریف میشد. ماژولهای HAL شناسههای منحصر به فردی مانند نام بسته یا گواهیهای امضا نداشتند. در اندروید ۱۳ و بالاتر، سرویس پایدار فروشنده OMAPI به ماژولهای HAL اجازه میدهد تا به Secure Element دسترسی داشته باشند. فروشندگان SE میتوانند یک UUID شناسه منحصر به فرد ۱۶ بایتی تعریف کنند. برای اعمال این قانون دسترسی به ماژولهای HAL، فروشندگان SE موظفند این UUID شناسه منحصر به فرد ۱۶ بایتی را در پیکربندی نگاشت UUID فروشنده خود به UID ماژول HAL نگاشت کنند.
سرویس پایدار فروشنده OMAPI در صورت لزوم UUID را با FF پر میکند تا آن را به 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 این فایل را در پوشههای /odm/etc/ ، /vendor/etc/ و /etc/ جستجو میکند. توضیحات مفصل در مورد فایل پیکربندی نگاشت UUID فروشنده اینجا موجود است.
پیادهسازی
تغییرات زیر برای فعال کردن ویژگی OMAPI Vendor Stable Service در نسخه نهایی لازم است.
عنصر امن
عنصر امن پرچم سرویس secure_element_vintf_enabled با استفاده از resource overlay در پوشههای مخصوص دستگاه فعال کنید.
<bool name="secure_element_vintf_enabled">true</bool>
UID و نگاشت UUID را به صورت xml برای سرویس خود تعریف کنید.
<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>ARهای عنصر امن را برای سرویس HAL با استفاده از UUIDها به عنوان مرجع برنامه دستگاه، فراهم کنید. یک ورودی نگاشت در پیکربندی نگاشت اضافه کنید که در آن بتوانید این UUID را به UID(های) ماژول HAL نگاشت کنید. با این نگاشت، فروشندگان به ماژولهای HAL اجازه میدهند به عنصر امن دسترسی داشته باشند. تستهای OMAPI VTS میتوانند به عنوان پیادهسازیهای مرجع برای فعال کردن سرویس پایدار فروشنده OMAPI در ماژولهای HAL استفاده شوند.
بهروزرسانی سیاست جداسازی ماژول HAL: قانون سیاست جداسازی را برای ماژول 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 VTS، تأیید کنید که سرویس پایدار فروشنده OMAPI با موفقیت پیادهسازی شده است.
run vts -m VtsHalOmapiSeServiceV1_TargetTest
run vts -m VtsHalOmapiSeAccessControlTestCases