คีย์ KeyMint ทั้งหมดต้องเชื่อมโยงกับรูทของความน่าเชื่อถือสำหรับอุปกรณ์ รูทของความน่าเชื่อถือคือสตริงบิตที่ได้มาจากคีย์สาธารณะที่ใช้ในการยืนยันลายเซ็นของอิมเมจบูต พร้อมกับสถานะการล็อกของ Bootloader
นอกจากนี้ คีย์ KeyMint ต้องเชื่อมโยงกับเวอร์ชันระบบปฏิบัติการและระดับแพตช์ของอุปกรณ์ด้วย การเชื่อมโยงเวอร์ชันนี้มีระดับแพตช์แยกต่างหากสำหรับแต่ละพาร์ติชัน (boot, system และ vendor) เพื่อรองรับโครงสร้างแบบโมดูลาร์ของ Treble ซึ่งช่วยให้แต่ละพาร์ติชันอัปเดตได้อย่างอิสระ แต่ยังคงให้การป้องกันการย้อนกลับ
ในการใช้การเชื่อมโยงเวอร์ชันนี้ แอปที่เชื่อถือได้ (TA) ของ KeyMint ต้องมีวิธีรับเวอร์ชันระบบปฏิบัติการและระดับแพตช์ปัจจุบันอย่างปลอดภัย และตรวจสอบว่าข้อมูลที่ได้รับตรงกับข้อมูลทั้งหมดเกี่ยวกับระบบที่ทำงานอยู่
- อุปกรณ์ที่มีการเปิดเครื่องที่ได้รับการยืนยันของ Android (AVB)
- ระดับแพตช์และเวอร์ชันของระบบปฏิบัติการสามารถรวมไว้ใน
vbmeta.imgเพื่อให้ Bootloader ส่งข้อมูลดังกล่าวไปยัง KeyMint ได้ - สำหรับพาร์ติชันที่เชื่อมโยง ข้อมูลเวอร์ชันของพาร์ติชันจะอยู่ใน VBMeta ที่เชื่อมโยง
- โดยทั่วไป ข้อมูลเวอร์ชันควรอยู่ใน
VBMeta structที่มีข้อมูลการยืนยัน (แฮชหรือแฮชทรี) สำหรับพาร์ติชันหนึ่งๆ
- ระดับแพตช์และเวอร์ชันของระบบปฏิบัติการสามารถรวมไว้ใน
- อุปกรณ์ที่ไม่มี AVB:
- การติดตั้งใช้งานการเปิดเครื่องที่ได้รับการยืนยันต้องระบุแฮชของข้อมูลเมตาเวอร์ชันให้กับ Bootloader เพื่อให้ Bootloader ระบุแฮชให้กับ KeyMint ได้
boot.imgสามารถจัดเก็บระดับแพตช์ในส่วนหัวต่อไปได้system.imgจะยังคงจัดเก็บระดับแพตช์และเวอร์ชันระบบปฏิบัติการในพร็อพเพอร์ตี้แบบอ่านอย่างเดียวได้vendor.imgจะจัดเก็บระดับแพตช์ไว้ในพร็อพเพอร์ตี้แบบอ่านอย่างเดียวro.vendor.build.version.security_patch- Bootloader สามารถระบุแฮชของข้อมูลทั้งหมดที่ตรวจสอบโดยการเปิดเครื่องที่ได้รับการยืนยันไปยัง KeyMint
แท็กต่อไปนี้อธิบายข้อมูลเวอร์ชันสำหรับพาร์ติชันที่เกี่ยวข้อง
Tag::VENDOR_PATCHLEVEL: พาร์ติชันvendorTag::BOOT_PATCHLEVEL: พาร์ติชันbootTag::OS_PATCHLEVELและTag::OS_VERSION: พาร์ติชันsystemโดยระบบจะนำTag::OS_VERSIONออกจากส่วนหัวboot.img
การติดตั้งใช้งาน KeyMint ควรจัดการระดับแพตช์ทั้งหมดแยกกัน คีย์จะใช้งานได้หากข้อมูลเวอร์ชันทั้งหมดตรงกับค่าที่เชื่อมโยงกับคีย์ หากเวอร์ชันอุปกรณ์ปัจจุบันใหม่กว่าค่าใดๆ ที่เชื่อมโยงกับคีย์ KeyMint จะแสดงข้อผิดพลาด KEY_REQUIRES_UPGRADE เมื่อพยายามใช้คีย์ จากนั้น Keystore จะดำเนินการ IKeyMintDevice::upgradeKey เพื่อสร้าง Keyblob ใหม่ที่เชื่อมโยงกับระดับแพตช์ปัจจุบัน (และ Keystore จะลบ Keyblob ก่อนหน้าด้วยการเรียกใช้ IKeyMintDevice::deleteKey)