การส่งต่อ CDI ของ HLOS ใน Android

เมื่อ HLOS ของ Android ได้รับค่า CDI และใบรับรอง HLOS ของ Android จากขั้นตอนก่อนหน้าแล้ว ระบบจะอ่านค่าและใบรับรองดังกล่าว จากนั้นจะอนุมานและลบข้อมูลลับที่จำเป็น เช่น คู่คีย์สาธารณะและคีย์ส่วนตัว รวมถึงขั้นตอน CDI เพิ่มเติมสำหรับการค้นหาบริการ SDV

กระบวนการนี้จะเกิดขึ้นโดยเร็วที่สุดในขั้นตอนการบูตระหว่าง early-init ใน ขั้นตอนที่ 2 ของ init การดำเนินการดังกล่าวจะช่วยให้มั่นใจว่า HLOS ของ Android จะใช้และลบค่า CDI ก่อนที่โค้ดของบุคคลที่สามจะทำงาน

Bootloader ของ Android (หรือ Guest Loader ใน Hypervisor หากไม่มี Bootloader ของ Android) จะส่งค่าต่อไปนี้ผ่านเคอร์เนล Linux ของ SDV ไปยัง second stage init ใน User Space ของ Android

  • ค่า CDI ของการรับรองความถูกต้องของเลเยอร์ HLOS ของ Android
  • ค่า CDI ของการซีลของเลเยอร์ HLOS ของ Android
  • เชน DICE ที่เข้ารหัส CBOR จนถึงเลเยอร์ HLOS ของ Android

ค่าเหล่านี้ใช้รูปแบบ SdvDiceHandover SdvDiceHandover คือแผนที่ที่เข้ารหัส CBOR ซึ่งอธิบายโดยส่วน CDDL นี้

SdvDiceHandover = {
   1 : bstr .size 32, ; CDI_Attest
   2 : bstr .size 32, ; CDI_Seal
   3 : DiceCertChain, ; Android SDV DICE chain
}

IRemotelyProvisionedComponent ของ HAL DiceCertChain จะระบุ รูปแบบของ DiceCertChain คุณไม่จำเป็นต้องใช้ CBOR ที่เข้ารหัสแบบดีเทอร์มินิสติกสำหรับ SdvDiceHandover แม้ว่าเราจะขอแนะนำอย่างยิ่ง เนื่องจากรองรับนโยบาย DICE ที่หลากหลายมากขึ้น

รูปแบบ SdvDiceHandover คล้ายกับรูปแบบต่อไปนี้มาก

  • AndroidDiceHandover รูปแบบที่ Open Profile for DICE การติดตั้งใช้งานอ้างอิงกำหนด

  • PvmfwDiceHandover รูปแบบที่ pvmfw ใช้เพื่อส่งต่อเชน DICE ไปยัง pVM เช่น Microdroid

ต่างจากรูปแบบ AndroidDiceHandover และคล้ายกับรูปแบบ PvmfwDiceHandover ที่ DiceCertChain จำเป็นและไม่ใช่ตัวเลือก

ไดรเวอร์เคอร์เนลของ Open Profile for DICE

การส่งต่อ CDI ของ HLOS ของ Android จาก Bootloader ของ Android (หรือ Guest Loader ใน Hypervisor หากไม่มี Bootloader) ไปยัง HLOS ของ Android ขึ้นอยู่กับ ไดรเวอร์เคอร์เนลของ Open Profile for DICE Bootloader ของ Android จะเขียนรายการเชน DICE ลงในพื้นที่ในหน่วยความจำของ Guest ที่ Device Tree (DT) ต้องระบุ

ไดรเวอร์จะอ่านพื้นที่หน่วยความจำที่ DT ระบุและแสดงพื้นที่ดังกล่าวใน User Space เป็นอุปกรณ์ /dev/open-dice0 ไดรเวอร์อนุญาตให้อ่านและลบพื้นที่หน่วยความจำนี้ ไดรเวอร์ของ Open Profile for DICE มีอยู่ในสถาปัตยกรรม arm64 เท่านั้น เนื่องจากแผนผังอุปกรณ์เป็นแนวคิดที่ใช้ได้เฉพาะกับ arm64

ระบุพื้นที่หน่วยความจำที่ไดรเวอร์ของ Open Profile for DICE แสดงโดยใช้ reserved-memory โหนดใน DT ที่คุณแท็กสำหรับไดรเวอร์โดยระบุ "google,open-dice" ใน compatible พร็อพเพอร์ตี้ เช่น

reserved-memory {
  // The number of u32 cells to represent the address of a memory region
  #address-cells = <2>;
  // The number of u32 cells to represent the size of a memory region
  #size-cells = <2>;
  ranges;
  // The unit address (after the @) must match the address in the reg property
  dice@D1C30000 {
    compatible = "google,open-dice";
    no-map;
    // The address and the size of the memory region that is passed to the Open
    // Profile for DICE driver. The address must be page-aligned, and the size a
    // multiple of the page size. The first two hex numbers (cells) represent
    // the address of the memory region, the last two represent its size.
    reg = <0x0 0xD1C30000 0x0 0x1000>;
  };
};