อินเทอร์เฟซที่ใช้งานได้จริงของผู้ให้บริการ OMAPI

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

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

ในส่วนของโปรแกรม Android Ready SE เราจะทำให้ฟีเจอร์ด้านความปลอดภัยหลักของ Android เช่น Keymaster, KeyMint, ข้อมูลเข้าสู่ระบบประจำตัว และการจัดสรรคีย์จากระยะไกลพร้อมใช้งานใน Secure Elements การเปิดใช้ฟีเจอร์เหล่านี้ต้องใช้ HAL (คอมโพเนนต์ของผู้ให้บริการ) ของฟีเจอร์ เหล่านี้เพื่อสื่อสารกับ Secure Element ผ่านอินเทอร์เฟซที่เสถียรของผู้ให้บริการ OMAPI

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

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

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

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

บริการที่เสถียรของผู้ให้บริการ OMAPI จะเพิ่ม FF ลงใน 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 จะค้นหาไฟล์นี้ในโฟลเดอร์ /odm/etc/, /vendor/etc/ และ /etc/ ดูคำอธิบายโดยละเอียดเกี่ยวกับการกำหนดค่าการแมป UUID ของผู้ให้บริการ ได้ที่ไฟล์ ที่นี่

การใช้งาน

ต้องมีการเปลี่ยนแปลงต่อไปนี้เพื่อเปิดใช้ฟีเจอร์ OMAPI Vendor Stable Service ในบิลด์เป้าหมาย

SecureElement

SecureElement

เปิดใช้Flag ของบริการ 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>

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

    run vts -m VtsHalOmapiSeServiceV1_TargetTest
    run vts -m VtsHalOmapiSeAccessControlTestCases