ยืนยันการบูต

การบูตที่ยืนยันแล้วกำหนดให้ต้องยืนยันโค้ดและข้อมูลที่เรียกใช้งานได้ทั้งหมด ซึ่งเป็นส่วนหนึ่งของ 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