ওপেন মোবাইল এপিআই (OMAPI) হলো একটি স্ট্যান্ডার্ড এপিআই যা কোনো ডিভাইসের সিকিওর এলিমেন্টের সাথে যোগাযোগের জন্য ব্যবহৃত হয়। অ্যান্ড্রয়েড ১৩-এর আগে, শুধুমাত্র অ্যাপ এবং ফ্রেমওয়ার্ক মডিউলগুলোর এই ইন্টারফেসে অ্যাক্সেস ছিল। এটিকে একটি ভেন্ডর স্টেবল ইন্টারফেসে রূপান্তর করার ফলে, HAL মডিউলগুলোও এখন OMAPI সার্ভিসের মাধ্যমে সিকিওর এলিমেন্টগুলোর সাথে যোগাযোগ করতে সক্ষম।
বর্তমান ইন্টারফেসের কোনো এপিআই পরিবর্তন না করেই এইচএএল মডিউলগুলোর জন্য ওএমএপিআই-তে একটি অ্যাক্সেস এন্ট্রি যোগ করা হয়েছে। এই ইন্টারফেস ব্যবহারকারী বিদ্যমান অ্যাপ্লিকেশন এবং ফ্রেমওয়ার্ক মডিউলগুলোর জন্য কোনো পরিবর্তনের প্রয়োজন নেই।
Android Ready SE প্রোগ্রামের অংশ হিসেবে আমরা Keymaster, KeyMint, Identity Credentials, এবং Remote Key Provisioning-এর মতো অ্যান্ড্রয়েডের মূল নিরাপত্তা বৈশিষ্ট্যগুলো Secure Element-গুলোতে উপলব্ধ করছি। এগুলো সক্রিয় করার জন্য, এই বৈশিষ্ট্যগুলোর HAL (ভেন্ডর কম্পোনেন্ট)-কে OMAPI ভেন্ডর স্টেবল ইন্টারফেসের মাধ্যমে Secure Element-এর সাথে যোগাযোগ করতে হয়।
নকশা স্থাপত্য

চিত্র ১. নকশা স্থাপত্য।
যেসব OEM তাদের ডিভাইসে সিকিওর এলিমেন্ট এবং অ্যান্ড্রয়েড রেডি SE ফিচার যুক্ত করছে, তাদের এই ইন্টারফেসটি সক্রিয় করতে হবে, কারণ এটি ডিফল্টরূপে নিষ্ক্রিয় থাকে। এই আপডেটের আগে, সিকিওর এলিমেন্ট অ্যাক্সেসের নিয়মগুলো প্যাকেজ নেম বা এর সিগনেচার হ্যাশ (ডিভাইস অ্যাপ্লিকেশন রেফারেন্স) এবং AID (SE অ্যাপ্লিকেশন রেফারেন্স) দ্বারা সংজ্ঞায়িত করা হতো। HAL মডিউলগুলোর প্যাকেজ নেম বা সিগনেচার সার্টিফিকেটের মতো কোনো অনন্য শনাক্তকারী ছিল না। অ্যান্ড্রয়েড ১৩ এবং তার পরবর্তী সংস্করণগুলোতে, OMAPI ভেন্ডর স্টেবল সার্ভিস HAL মডিউলগুলোকে সিকিওর এলিমেন্ট অ্যাক্সেস করার অনুমতি দেয়। SE ভেন্ডররা ১৬ বাইটের একটি অনন্য শনাক্তকারী UUID নির্ধারণ করতে পারে। HAL মডিউলগুলোতে এই অ্যাক্সেস নিয়মটি প্রয়োগ করার জন্য, SE ভেন্ডরদের তাদের ভেন্ডর UUID ম্যাপিং কনফিগ XML-এ এই ১৬ বাইটের অনন্য শনাক্তকারী UUID-টিকে HAL মডিউল UID-এর সাথে ম্যাপ করতে হবে।
সেকশন ৬.১, DeviceAppID-REF-DO পৃষ্ঠা: ৬৬ অনুযায়ী, OMAPI ভেন্ডর স্টেবল সার্ভিস প্রয়োজনে UUID-টিকে FF দিয়ে প্যাড করে ২০ বাইটের করে তোলে এবং এই ২০ বাইটের UUID-টিকে ডিভাইস অ্যাপ্লিকেশন রেফারেন্স হিসেবে ব্যবহার করে সিকিওর এলিমেন্টগুলোতে অ্যাক্সেস রুল সংজ্ঞায়িত করে।
ভেন্ডর UUID ম্যাপিং ফাইলের নামটি hal_uuid_map_ নামক পূর্বনির্ধারিত প্রিফিক্স দিয়ে গঠিত হয় এবং এর সাথে ro.boot.product.hardware.sku সিস্টেম প্রপার্টির মান যুক্ত করা হয়।
hal_uuid_map_value_of_ro.boot.product.hardware.sku.xml OMAPI ভেন্ডর স্টেবল সার্ভিস এই ফাইলটি /odm/etc/ , /vendor/etc/ এবং /etc/ ফোল্ডারগুলোতে খুঁজে থাকে। ভেন্ডর UUID ম্যাপিং কনফিগারেশন ফাইলের বিস্তারিত বিবরণ এখানে পাওয়া যাবে।
বাস্তবায়ন
একটি টার্গেট বিল্ডে OMAPI ভেন্ডর স্টেবল সার্ভিস ফিচারটি সক্রিয় করতে নিম্নলিখিত পরিবর্তনগুলি প্রয়োজন।
সিকিউরএলিমেন্ট
সিকিউরএলিমেন্ট ডিভাইস-নির্দিষ্ট ফোল্ডারগুলির অধীনে রিসোর্স ওভারলে ব্যবহার করে secure_element_vintf_enabled সার্ভিস ফ্ল্যাগটি সক্রিয় করুন।
<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>ডিভাইস অ্যাপ্লিকেশন রেফারেন্স হিসেবে UUID ব্যবহার করে HAL পরিষেবার জন্য Secure Element AR-গুলো প্রোভিশন করুন। ম্যাপিং কনফিগে একটি ম্যাপিং এন্ট্রি যোগ করুন, যেখানে আপনি এই UUID-টিকে HAL মডিউল UID(গুলো)-র সাথে ম্যাপ করতে পারবেন। এই ম্যাপিংয়ের মাধ্যমে ভেন্ডররা HAL মডিউলগুলোকে Secure Element অ্যাক্সেস করার অনুমতি দেয়। HAL মডিউলগুলোতে OMAPI ভেন্ডর স্টেবল সার্ভিস সক্রিয় করার জন্য OMAPI VTS টেস্টগুলোকে রেফারেন্স ইমপ্লিমেন্টেশন হিসেবে ব্যবহার করা যেতে পারে।
HAL মডিউলের sepolicy আপডেট করুন: HAL মডিউলের জন্য একটি sepolicy নিয়ম যোগ করুন, যাতে তাদের ডোমেইন 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