ใช้การเข้ารหัสไฟล์ที่ผูกกับยานพาหนะ

หน้านี้จะอธิบายวิธีเปิดใช้ฟีเจอร์ Seed การเข้ารหัสการเชื่อมโยงตามยานพาหนะ

ภาพรวม

เป้าหมายหลักของฟีเจอร์ SEED การเชื่อมโยงยานพาหนะคือการปกป้องความเป็นส่วนตัวของผู้ใช้เพิ่มเติมโดย ปกป้องข้อมูลในระบบสาระบันเทิงในยานพาหนะ (IVI) ไม่ให้นำออกจากรถ นี่คือ ซึ่งทำได้โดยการเชื่อมโยงคีย์การเข้ารหัสพื้นที่จัดเก็บกับหน่วยควบคุมอิเล็กทรอนิกส์ (ECU) อื่นๆ เพื่อที่ว่า IVI ถูกนำออกแล้ววางไว้ในรถคันอื่น (หรือวิ่งบนม้านั่งทดสอบ) ข้อมูลผู้ใช้ที่เข้ารหัสบน ถอดรหัส IVI ไม่ได้

Vold จะเชื่อมโยงคีย์การเข้ารหัสไฟล์กับ Seed เฉพาะยานพาหนะกับการเข้ารหัสคีย์เพื่อเชื่อมโยงคีย์การเข้ารหัสไฟล์ การสร้างกุญแจใหม่เพื่อให้กุญแจไม่ซ้ำกันและยึดโยงกับตัวรถ Seed คืออาร์เรย์ไบต์ แสดงเป็นคุณสมบัติใหม่ของ OEM ฮาร์ดแวร์สำหรับยานพาหนะแบบ Abstraction Layer (VHAL) STORAGE_ENCRYPTION_BINDING_SEED สิทธิ์ของพร็อพเพอร์ตี้นี้ถูกจำกัดเพื่อให้ โดยจะค้นหาได้โดย Daemon ของระบบที่ได้รับสิทธิ์เท่านั้น

แผนภาพสถาปัตยกรรม

ภาพนี้แสดงสถาปัตยกรรมของการผสานรวมยานพาหนะ:

รูปที่ 1 สถาปัตยกรรมที่เชื่อมโยงกับยานพาหนะ

เปิดใช้การเชื่อมโยงตามยานพาหนะ

ต้องเปิดใช้การเชื่อมโยงการเข้ารหัสพื้นที่เก็บข้อมูลกับรถยนต์อย่างชัดแจ้งและเปิดไม่ได้ หรือปิดโดยไม่รีเซ็ตเป็นค่าเริ่มต้นได้ ซึ่งหมายความว่าการอัปเดตผ่านอากาศ (OTA) ไม่สามารถ เปิดใช้งานฟีเจอร์นี้ได้โดยไม่ต้องล้างข้อมูลอุปกรณ์ OEM สามารถเลือกเปิดใช้ฟีเจอร์นี้ได้เมื่อ อัปเกรดหากรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้นด้วย เช่น เมื่อเข้ามารับบริการ

ฟีเจอร์นี้เปิดใช้โดยการรองรับพร็อพเพอร์ตี้ STORAGE_ENCRYPTION_BINDING_SEED ใน HAL ยานพาหนะที่ผู้ให้บริการจัดหา พร็อพเพอร์ตี้นี้เก็บสตริงไบต์ความยาว 16 ไบต์และ ควรจะอยู่ใน ECU ที่แยกต่างหากจาก IVI พร็อพเพอร์ตี้ได้รับการตั้งค่าเริ่มต้นโดย Android Automotive OS (AAOS) ซึ่งสร้างโดยใช้หมายเลขสุ่มที่ปลอดภัยในการเข้ารหัส โปรแกรมสร้าง (CSRNG) จากนั้น AAOS จะอ่านพร็อพเพอร์ตี้ในการเปิดเครื่องครั้งถัดไป

วิธีที่ VHAL จัดเก็บค่าของ STORAGE_ENCRYPTION_BINDING_SEED จะเป็นข้อมูลเฉพาะผู้ให้บริการ เรามีคำแนะนำทั่วไปในการปกป้องเมล็ดพันธุ์ดังนี้

  1. (แนะนำ) Seed จัดเก็บโดย ECU ในยานพาหนะที่อยู่จริง ได้รับการปกป้องอย่างดี หากไม่ การดึงทั้ง IVI และ ECU ออกจากกันก็ไม่ใช่เรื่องยาก ยานพาหนะ
  2. (แนะนำ) IVI และ ECU ควรตรวจสอบสิทธิ์ร่วมกันเพื่อแลกเปลี่ยน Seed เป็น เพื่อป้องกันคำขอ Seed จาก ECU
  3. (แนะนำ) ควรส่ง Seed โดยใช้ช่องทางที่ปลอดภัยเพื่อป้องกัน การดมกลิ่นรถเมล์ของ CAN

นอกจากนี้ ให้เพิ่มรายการต่อไปนี้เพื่อให้แน่ใจว่าผู้ให้บริการ init.target.rc เปิดใช้งาน late-fs ก่อน mount_all --late:

# feed vehicle binding seed to vold
exec_start vold_seed_binding

HAL ของยานพาหนะควรเริ่มใน early_hal แทน hal now ไม่สามารถเข้าถึงพร็อพเพอร์ตี้ของระบบ persist.* ใน early-hal ได้เนื่องจาก ยังไม่ได้ต่อเชื่อมพาร์ติชัน /data

กำหนดค่าการเชื่อมโยงยานพาหนะ

หาก ECU Seed ไม่ตรงกัน อุปกรณ์จะรีบูตเข้าสู่การกู้คืนและแจ้งให้ผู้ใช้ลบข้อมูล พาร์ติชัน /data หรือลองอีกครั้ง

เปลี่ยนการทำงานของข้อความแจ้งและล้างข้อมูลได้ใน Builtins.cpp

  1. เปลี่ยน prompt_and_wipe_data เป็น wipe_data อุปกรณ์จะล้างข้อมูลและ จากนั้นจะรีบูตโดยไม่มีข้อความแจ้ง
  2. ข้อความแจ้งอยู่ใน recovery.cpp

    รูปที่ 2 ข้อความแจ้ง

ทดสอบการเชื่อมโยงตามยานพาหนะ

การทดสอบจำลอง

มีการจำลองการทดสอบใน packages/services/Car/cpp/security/vehicle_binding_util/tests

วิธีทำการทดสอบจำลองนี้

attest libvehicle_binding_util_test

การทดสอบการผสานรวม

การทดสอบ A จะมีให้ใน packages/services/Car/cpp/security/vehicle_binding_util/tests

วิธีทำการทดสอบการผสานรวมนี้

atest vehicle_binding_integration_test