โปรไฟล์ SDV สำหรับ DICE

โปรไฟล์ SDV สำหรับ Device Identifier Composition Engine (DICE) เป็นส่วนขยายของโปรไฟล์ Android สำหรับ DICE ใน SDV เครื่องเสมือนจะใช้ห่วงโซ่ DICE แบบขนาน 2 รายการ

  • Secure World DICE chain
  • ห่วงโซ่ DICE ของ SDV ใน Android

ฟิลด์เหล่านี้จากตัวอธิบายการกำหนดค่าของโปรไฟล์ Android สำหรับ DICE เกี่ยวข้องกับแต่ละห่วงโซ่ต่อไปนี้

ชื่อ คีย์ ประเภท คำอธิบาย
ชื่อคอมโพเนนต์ <0x0A -70002 tstr แนะนำในแต่ละเลเยอร์ CDI ชื่อคอมโพเนนต์ ระบุ สเตจอย่างชัดเจนใน เชน DICE ทั้งหมดของฮาร์ดแวร์ที่เรียกใช้ VM ของ Android SDV ในยานพาหนะ หรือแพลตฟอร์มยานพาหนะ
เวอร์ชันความปลอดภัย -70005 uint ต้องระบุในแต่ละขั้นตอนของ CDI ช่วยให้กำหนดนโยบาย DICE ที่ป้องกันไม่ให้ VM ระยะไกลเวอร์ชันที่ไม่ปลอดภัย เข้าร่วม SDV Secure Mesh
ชื่ออินสแตนซ์ของคอมโพเนนต์ <0x0 -70007 tstr ต้องระบุในเลเยอร์ CDI แรกของ VM เช่น หลังจากไฮเปอร์ไวเซอร์ สำหรับห่วงโซ่ DICE ของ SDV ใน Android ชื่อของอินสแตนซ์ SDV หากเลเยอร์ CDI หลายเลเยอร์มี ชื่ออินสแตนซ์คอมโพเนนต์ แต่ละเลเยอร์ ต้องมีค่าเดียวกัน

Secure World DICE chain

เชน DICE ของ Secure World เหมือนกับที่เซิร์ฟเวอร์การจัดสรรคีย์จากระยะไกล (RKP) ของ Android ได้รับจากอุปกรณ์ Android โดย IRemotelyProvisionedComponent HAL ของ generateCertificateRequestV2() จะแสดงเชน DICE นี้ต่อ Android

ตารางนี้แสดงห่วงโซ่ DICE ของ Secure World ตัวอย่าง

ขั้นตอนการเปิดเครื่อง เลเยอร์ CDI ของ DICE ออกโดย
Bootloader หลัก CDI[0] UDS
Bootloader รอง CDI[1] Bootloader หลัก
การบูต TEE CDI[2] Bootloader รอง
การบูต KeyMint TA CDI[3] (Leaf) TEE

หากต้องการใช้แอปพลิเคชันที่เชื่อถือได้ (TA) ของ KeyMint ให้ใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้

  • อินสแตนซ์ KeyMint เดียวสำหรับ VM ของ SDV ทั้งหมด: คุณต้องกำหนด CDI เดียวสำหรับ VM ทั้งหมด

หรือ

  • อินสแตนซ์ KeyMint 1 รายการสำหรับ VM ของ SDV แต่ละรายการ: คุณต้องกำหนดค่า CDI ที่แตกต่างกันสำหรับ VM แต่ละรายการ ค่า CDI แต่ละค่าต้องมีชื่ออินสแตนซ์คอมโพเนนต์ที่ตรงกับชื่ออินสแตนซ์คอมโพเนนต์ของ VM

ห่วงโซ่ DICE ของ SDV ใน Android

ห่วงโซ่ DICE ของ SDV ใน Android จะรับรองซอฟต์แวร์ที่ทำงานในเส้นทางการบูต ซึ่งนำผ่านไฮเปอร์ไวเซอร์ไปยังระบบปฏิบัติการระดับสูง (HLOS) ของ Android ที่ทำงานใน VM ของ SDV

ตารางนี้แสดงตัวอย่างห่วงโซ่ DICE ของ SDV ใน Android

ขั้นตอนการเปิดเครื่อง เลเยอร์ CDI ของ DICE ออกโดย
Bootloader หลัก CDI[0] UDS
Bootloader รอง CDI[1] Bootloader หลัก
ไฮเปอร์ไวเซอร์ CDI[2] Bootloader รอง
Android HLOS CDI[3] (ใบไม้) (ตัวโหลด Android ใน)ไฮเปอร์ไวเซอร์1

1 ไฮเปอร์ไวเซอร์รับรอง Bootloader ของ Android ในเครื่องเสมือนเป็นเลเยอร์ Bootloader ของ Android รับรอง HLOS ของ Android

ใบรับรอง CDI ของ HLOS ใน Android

Android Bootloader (หรือไฮเปอร์ไวเซอร์ หากไม่มี Android Bootloader แต่มีเพียงโปรแกรม "Loader" ของ Android ที่โหลด VM ภายในไฮเปอร์ไวเซอร์) จะลงนามในใบรับรอง CDI ของ HLOS ของ Android และครอบคลุม HLOS ของ Android เช่น ครอบคลุมโค้ดทั้งหมดที่ Android Bootloader ตรวจสอบตาม Android Verified Boot (AVB)

ใบรับรอง CDI ของ HLOS ใน Android ต้องมีค่าเฉพาะ SDV ของ Android OS ที่ช่วยลดช่องโหว่ด้านความปลอดภัย เช่น การป้องกันการรั่วไหลของข้อมูลลับที่อาจเกิดขึ้น โดยการแบน VM ที่มีช่องโหว่ที่ทราบแล้วจาก SDV Secure Mesh การยืนยัน AVB จะให้ค่าส่วนใหญ่เหล่านี้

นอกจากนี้ยังส่งต่อข้อมูลไปยัง KeyMint ใน TEE ซึ่งใบรับรองจะ ลงนามโดย CDI ระดับล่างของห่วงโซ่ SecureWorld DICE และส่งไปยัง Android ใน DeviceInfo เพื่อเปิดใช้ฟีเจอร์ต่างๆ เช่น การรับรองคีย์และบัตรประจำตัวใน Android หลัก

ฟิลด์อินพุตโค้ดและใบรับรอง codeHash

ข้อมูลสรุป VBMeta (เอาต์พุตที่ Bootloader ของ Android ดำเนินการ เพื่อการยืนยัน AVB) ครอบคลุมซอฟต์แวร์ของ HLOS ของ Android ดังนั้น จึงทำหน้าที่เป็น android-dice-input-values สำหรับการอนุมาน ข้อมูลลับของ CDI และจะอยู่ในฟิลด์ dice-cert-fields ของ ใบรับรอง CDI

อัลกอริทึมแฮชที่แนะนําสําหรับ AVB คือ SHA-256 ซึ่งจะทําให้ได้ไดเจสต์ VBMeta ที่มีความยาว 32 ไบต์ ในทางตรงกันข้ามกับ Open Profile for DICE, Android Profile for DICE อนุญาตให้ android-dice-hash-algos ใช้ android-dice-input-values ที่มีความยาว 32 ไบต์ สําหรับโฟลว์ DICE รวมถึงการวางค่าที่มีความยาว 32 ไบต์เดียวกันเป็น codeHash ในใบรับรอง DICE

ตัวอธิบายการกำหนดค่า: ฟิลด์ในโปรไฟล์ Android สำหรับ DICE

นอกเหนือจากที่อธิบายไว้สำหรับเลเยอร์ CDI ทั้งหมดแล้ว ข้อกำหนดต่อไปนี้จะใช้กับ ฟิลด์ตัวอธิบายการกำหนดค่าจากโปรไฟล์ Android สำหรับ DICE

ชื่อ คีย์ ประเภท คำอธิบาย
เวอร์ชันคอมโพเนนต์ -70003 int เวอร์ชันระบบปฏิบัติการจาก AVB version-info-avb และ เหมือนกับ android.os.Build.VERSION.release
เวอร์ชันความปลอดภัย -70005 uint ระดับแพตช์ด้านความปลอดภัยของพาร์ติชัน system ในรูปแบบ YYYYMMDD
เครื่องหมาย VM ของ RKP -70006 null เครื่องหมาย VM ของ RKP ป้องกันไม่ให้ : การจัดสรรคีย์จากระยะไกล ออกใบรับรองสำหรับ ห่วงโซ่ DICE ของ SDV ใน Android

เครื่องหมาย VM ของ RKP ต้องปรากฏในใบรับรอง CDI แรกของห่วงโซ่ DICE ของ Android SDV ที่ไม่มีร่วมกับห่วงโซ่ DICE ของ Secure World นอกจากนี้ ต้องไม่ปรากฏในใบรับรอง CDI อื่นๆ เพื่อป้องกันไม่ให้เซิร์ฟเวอร์ RKP rkp-avf-support พิจารณาว่าห่วงโซ่ DICE มาจาก RKP VM

ตัวอธิบายการกำหนดค่า: ฟิลด์ใหม่

ตัวอธิบายการกำหนดค่าของใบรับรอง CDI ของ HLOS ของ Android ต้องมีค่าเฉพาะ SDV นอกเหนือจากค่าที่โปรไฟล์ Android สำหรับ DICE อธิบายไว้ โปรไฟล์ SDV สำหรับ DICE จะสงวนช่วงค่าคีย์ [-71000, -71999] ไว้เพื่อวัตถุประสงค์นี้ คุณสามารถเพิ่มฟิลด์เฉพาะการติดตั้งใช้งานได้โดยใช้ค่าคีย์ นอกช่วงที่สงวนไว้ ค่าเฉพาะ SDV มีดังนี้

ชื่อ คีย์ ประเภท คำอธิบาย
สถานะการเปิดเครื่องที่ได้รับการยืนยัน -71000 tstr green, yellow หรือ orange ก็ได้
build fingerprint -71001 tstr สตริงที่มนุษย์อ่านได้ซึ่งระบุบิลด์นี้โดยไม่ซ้ำกัน เหมือนกับ ro.build.fingerprint Android CDD, 3.2.2 Build Parameters, cdd-3-2-2 กำหนดค่านี้ VBMeta จะจัดเก็บข้อมูลนี้เป็นพร็อพเพอร์ตี้ ชื่อ com.android.build.system.fingerprint
system_ext ระดับแพตช์ ด้านความปลอดภัย -71002 uint ระดับแพตช์ด้านความปลอดภัยของพาร์ติชัน system_ext ในรูปแบบ YYYYMMDD
product ระดับแพตช์ ด้านความปลอดภัย -71003 uint ระดับแพตช์ด้านความปลอดภัยของพาร์ติชัน product ในรูปแบบ YYYYMMDD
vendor ระดับแพตช์ ด้านความปลอดภัย -71004 uint ระดับแพตช์ด้านความปลอดภัยของพาร์ติชัน vendor ในรูปแบบ YYYYMMDD
boot ระดับแพตช์ ด้านความปลอดภัย -71005 uint ระดับแพตช์ด้านความปลอดภัยของboot พาร์ติชัน (ซึ่งมีเคอร์เนล Linux ) ในรูปแบบ YYYYMMDD
โหมดการบูต SDV -71006 tstr locked หรือ unlocked ดูข้อมูลเพิ่มเติมได้ที่สถานะและการจัดสรร Mesh

การเลือกค่าอินพุตโหมดของ CDI ของ HLOS ของ Android

android-dice-mode ของใบรับรอง CDI ของ HLOS ใน Android ใช้คำจำกัดความต่อไปนี้

ปลดล็อก AVB AVB ล็อกอยู่
โหมดเปิดเครื่อง SDV ปลดล็อกแล้ว แก้ไขข้อบกพร่อง แก้ไขข้อบกพร่อง
โหมดเปิดเครื่อง SDV ล็อกอยู่ ไม่ได้กำหนดค่า (ไม่ถูกต้อง) ปกติ

ฟังก์ชันการได้คีย์

android-dice-kdf ที่ได้คู่คีย์สาธารณะและส่วนตัวจากข้อมูลลับ CDI_Attest สำหรับ CDI ของ HLOS ใน Android ต้องเป็น HKDF ที่มี SHA512 เป็นฟังก์ชันแฮช