OMAPI Vendor Stable Interface

การแนะนำ

Open Mobile API (OMAPI) เป็น API มาตรฐานที่ใช้ในการสื่อสารกับ Secure Element ของอุปกรณ์ ก่อน Android 13 มีเพียงแอปพลิเคชันและโมดูลเฟรมเวิร์กเท่านั้นที่สามารถเข้าถึงอินเทอร์เฟซนี้ได้ เมื่อแปลงเป็นอินเทอร์เฟซที่เสถียรของผู้จำหน่าย โมดูล HAL ยังสามารถสื่อสารกับองค์ประกอบที่ปลอดภัยผ่านบริการ OMAPI ได้อีกด้วย

มีการเพิ่มรายการการเข้าถึง OMAPI ใหม่สำหรับโมดูล HAL โดยไม่ต้องแก้ไข API ใดๆ ในอินเทอร์เฟซที่มีอยู่ในปัจจุบัน ไม่จำเป็นต้องแก้ไขแอปพลิเคชันและโมดูลเฟรมเวิร์กที่มีอยู่โดยใช้อินเทอร์เฟซนี้

ในฐานะส่วนหนึ่งของ โปรแกรม Android Ready SE เรากำลังสร้างฟีเจอร์ความปลอดภัยหลักของ Android เช่น Keymaster, Keymint, Identity Credentials และ Remote Key Provisioning ที่พร้อมใช้งานบน Secure Elements การเปิดใช้งานเหล่านี้ต้องใช้ HAL (ส่วนประกอบของผู้จำหน่าย) ของคุณลักษณะเหล่านี้เพื่อสื่อสารกับองค์ประกอบความปลอดภัยผ่านอินเทอร์เฟซที่เสถียรของผู้จำหน่าย OMAPI

สถาปัตยกรรมการออกแบบ

สถาปัตยกรรมการออกแบบ
รูปที่ 1 : สถาปัตยกรรมการออกแบบ

OEM ที่รวมคุณสมบัติ Secure Element และ Android Ready SE เข้ากับอุปกรณ์ของตนจำเป็นต้องเปิดใช้งานอินเทอร์เฟซนี้เนื่องจากถูกปิดใช้งานโดยค่าเริ่มต้น ก่อนการอัปเดตนี้ กฎการเข้าถึงองค์ประกอบความปลอดภัยถูกกำหนดโดยชื่อแพ็คเกจหรือแฮชลายเซ็น (การอ้างอิงแอปพลิเคชันอุปกรณ์) และ AID (การอ้างอิงแอปพลิเคชัน SE) โมดูล HAL ไม่มีตัวระบุเฉพาะ เช่น ชื่อแพ็คเกจหรือใบรับรองลายเซ็น ขณะนี้ใน Android 13 บริการ OMAPI Vendor Stable อนุญาตให้โมดูล HAL เข้าถึงองค์ประกอบที่ปลอดภัย ผู้จำหน่าย SE สามารถกำหนด UUID ตัวระบุเฉพาะขนาด 16 ไบต์ได้ หากต้องการใช้กฎการเข้าถึงนี้กับโมดูล HAL ผู้จำหน่าย SE จะต้องแมป UUID ตัวระบุที่ไม่ซ้ำกัน 16 ไบต์นี้กับ UID ของโมดูล HAL ใน XML การกำหนดค่าการแมป UUID ของผู้จำหน่าย

OMAPI Vendor Stable Service จะแพด 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 โดยใช้การซ้อนทับทรัพยากรภายใต้โฟลเดอร์เฉพาะอุปกรณ์

    <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 ARs สำหรับบริการ HAL โดยใช้ UUID เป็นข้อมูลอ้างอิงแอปพลิเคชันอุปกรณ์ เพิ่มรายการการแมปในการกำหนดค่าการแมปที่คุณสามารถแมป UUID นี้กับ UID ของโมดูล HAL ด้วยผู้จำหน่ายแผนที่นี้ อนุญาตให้โมดูล HAL เข้าถึง Secure Element การทดสอบ OMAPI VTS สามารถใช้เป็นการดำเนินการอ้างอิงสำหรับการเปิดใช้งาน 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 สำเร็จแล้วโดยเรียกใช้ การทดสอบ OMAPI VTS

    run vts -m VtsHalOmapiSeServiceV1_TargetTest
    run vts -m VtsHalOmapiSeAccessControlTestCases