การบูตที่ยืนยันแล้วกำหนดให้ต้องยืนยันโค้ดและข้อมูลที่เรียกใช้งานได้ทั้งหมด
ซึ่งเป็นส่วนหนึ่งของ Android เวอร์ชันที่กำลังบูตด้วยการเข้ารหัสลับก่อนที่จะนำไปใช้ ซึ่งรวมถึง
เคอร์เนล (โหลดจากพาร์ติชัน boot
), Device Tree (โหลด
จากพาร์ติชัน dtbo
), พาร์ติชัน system
, พาร์ติชัน vendor
และอื่นๆ
โดยปกติแล้ว ระบบจะยืนยันพาร์ติชันขนาดเล็ก เช่น boot
และ dtbo
ซึ่งอ่านได้ครั้งเดียวโดยการโหลดเนื้อหาทั้งหมดลงในหน่วยความจำ แล้วคำนวณแฮชของเนื้อหานั้น จากนั้นระบบจะเปรียบเทียบค่าแฮชที่คำนวณนี้กับค่าแฮชที่คาดไว้ หากค่าไม่ตรงกัน Android จะไม่โหลด
โปรดดูรายละเอียดเพิ่มเติมที่ลำดับการบูต
พาร์ติชันขนาดใหญ่ที่ใส่ในหน่วยความจำไม่ได้ (เช่น ระบบไฟล์) อาจใช้ แฮชทรีซึ่งการยืนยันเป็นกระบวนการต่อเนื่องที่เกิดขึ้นเมื่อมีการโหลดข้อมูล ลงในหน่วยความจำ ในกรณีนี้ ระบบจะคำนวณแฮชรูทของแฮชทรี ในระหว่างรันไทม์และตรวจสอบกับค่าแฮชรูทที่คาดไว้ Android มีไดรเวอร์ dm-verity เพื่อยืนยันพาร์ติชันขนาดใหญ่ หากเมื่อถึงจุดหนึ่ง แฮชรูทที่คำนวณแล้วไม่ตรงกับค่าแฮชรูทที่คาดไว้ ระบบจะไม่ใช้ข้อมูล และ Android จะเข้าสู่สถานะข้อผิดพลาด ดูรายละเอียดเพิ่มเติมได้ที่ dm-verity เสียหาย
โดยปกติแล้ว แฮชที่คาดไว้จะจัดเก็บไว้ที่ส่วนท้ายหรือส่วนต้น ของแต่ละพาร์ติชันที่ยืนยันแล้ว ในพาร์ติชันเฉพาะ หรือทั้ง 2 ที่ ที่สำคัญคือแฮชเหล่านี้ ได้รับการลงนาม (โดยตรงหรือโดยอ้อม) จากรูทของความน่าเชื่อถือ ตัวอย่างเช่น การใช้งาน AVB รองรับทั้ง 2 วิธี โปรดดูรายละเอียดที่การเปิดเครื่องที่ได้รับการยืนยันของ Android
การป้องกันการย้อนกลับ
แม้ว่ากระบวนการอัปเดตจะปลอดภัยอย่างสมบูรณ์ แต่ก็เป็นไปได้ที่ช่องโหว่ของเคอร์เนล Android ที่ไม่คงอยู่จะติดตั้ง Android เวอร์ชันเก่าที่เสี่ยงต่อการถูกโจมตีมากกว่าด้วยตนเอง รีบูตเป็นเวอร์ชันที่มีช่องโหว่ แล้วใช้ Android เวอร์ชันนั้นเพื่อติดตั้งช่องโหว่ที่คงอยู่ จากนั้นผู้โจมตีจะเป็นเจ้าของอุปกรณ์อย่างถาวร และทำอะไรก็ได้ รวมถึงปิดใช้การอัปเดต
การป้องกันการโจมตีประเภทนี้เรียกว่าการป้องกันการย้อนกลับ โดยปกติแล้ว การป้องกันการย้อนกลับจะดำเนินการโดยใช้ พื้นที่เก็บข้อมูลที่ตรวจพบการดัดแปลงเพื่อบันทึก Android เวอร์ชันล่าสุด และ ปฏิเสธที่จะบูต Android หากเป็นเวอร์ชันที่ต่ำกว่าเวอร์ชันที่บันทึกไว้ โดยปกติแล้ว ระบบจะติดตามเวอร์ชัน ในระดับพาร์ติชัน
ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีที่ AVB จัดการการป้องกันการย้อนกลับได้ที่ README ของ AVB
จัดการข้อผิดพลาดในการยืนยัน
การยืนยันอาจล้มเหลวในเวลาบูต (เช่น หากแฮชที่คำนวณในพาร์ติชัน boot
ไม่ตรงกับแฮชที่คาดไว้) หรือในเวลาที่รัน (เช่น หาก dm-verity พบข้อผิดพลาดในการยืนยันในพาร์ติชัน system
) หากการยืนยันล้มเหลวในเวลาที่เปิดเครื่อง อุปกรณ์จะ
เปิดเครื่องไม่ได้ และผู้ใช้ปลายทางจะต้องทำตามขั้นตอนเพื่อกู้คืนอุปกรณ์
หากการยืนยันไม่สำเร็จในขณะรันไทม์ ขั้นตอนจะซับซ้อนขึ้นเล็กน้อย หากอุปกรณ์ใช้ dm-verity ควรมีการกำหนดค่าในโหมด restart
ในโหมด
restart
หากพบข้อผิดพลาดในการยืนยัน ระบบจะรีสตาร์ทอุปกรณ์
ทันทีพร้อมตั้งค่าสถานะที่เฉพาะเจาะจงเพื่อระบุสาเหตุ โปรแกรมโหลด
บูตควรสังเกตเห็นแฟล็กนี้และเปลี่ยน dm-verity ไปใช้ข้อผิดพลาด I/O
(eio
) และอยู่ในโหมดนี้จนกว่าจะมีการติดตั้งอัปเดตใหม่
เมื่อบูตในโหมดeio
อุปกรณ์จะแสดงหน้าจอข้อผิดพลาด
เพื่อแจ้งให้ผู้ใช้ทราบว่าตรวจพบความเสียหายและอุปกรณ์อาจ
ทำงานไม่ถูกต้อง หน้าจอจะแสดงจนกว่าผู้ใช้จะปิด ในโหมด
eio
ไดรเวอร์ dm-verity จะไม่รีสตาร์ทอุปกรณ์หากพบ
ข้อผิดพลาดในการยืนยัน แต่จะแสดงข้อผิดพลาด EIO แทน และ
แอปจะต้องจัดการกับข้อผิดพลาด
โดยมีจุดประสงค์เพื่อให้โปรแกรมอัปเดตระบบทำงาน (จึงติดตั้งระบบปฏิบัติการใหม่ที่ไม่มีข้อผิดพลาดด้านความเสียหายได้) หรือเพื่อให้ผู้ใช้สามารถนำข้อมูลออกจากอุปกรณ์ได้มากที่สุด เมื่อติดตั้งระบบปฏิบัติการใหม่แล้ว Boot Loader
จะสังเกตเห็นระบบปฏิบัติการที่ติดตั้งใหม่และเปลี่ยนกลับไปเป็นโหมด restart