โปรไฟล์ 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 เป็นฟังก์ชันแฮช