อินเทอร์เฟซแบบเสถียรของผู้ให้บริการ 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 ตอนนี้ Vendor Stable Service ของ OMAPI ช่วยให้โมดูล HAL เข้าถึง Secure Element ได้ ผู้ให้บริการ 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 ในบิลด์เป้าหมาย

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>

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