Trang này mô tả cách bật các tính năng hạt mã hoá liên kết dựa trên xe.
Tổng quan
Mục tiêu chính của tính năng hạt liên kết xe là bảo vệ thêm quyền riêng tư của người dùng bằng cách bảo vệ dữ liệu trên hệ thống Thông tin giải trí trên xe (IVI) khỏi bị xoá khỏi xe. Việc này được thực hiện bằng cách liên kết khoá mã hoá bộ nhớ với một số Bộ điều khiển điện tử (ECU) khác, chẳng hạn như nếu IVI bị tháo ra và đặt vào một xe khác (hoặc chạy trên băng thử nghiệm), thì dữ liệu người dùng đã mã hoá trên IVI sẽ không thể được giải mã.
Để liên kết các khoá mã hoá tệp, Vold sẽ kết hợp một mã gốc dành riêng cho xe với quá trình tạo khoá mã hoá khoá để các khoá này là duy nhất và được liên kết thực tế với xe. Hạt giống là một mảng byte, được OEM hiển thị dưới dạng một thuộc tính Lớp trừu tượng phần cứng của xe (VHAL) mới, STORAGE_ENCRYPTION_BINDING_SEED
. Các quyền của thuộc tính này bị hạn chế, vì vậy, chỉ có các trình nền hệ thống đặc quyền mới có thể truy vấn thuộc tính này.
Sơ đồ cấu trúc
Hình này minh hoạ cấu trúc của tính năng tích hợp liên kết với xe:
Hình 1. Cấu trúc liên kết với xe.
Bật tính năng liên kết dựa trên xe
Bạn phải bật rõ ràng tính năng liên kết phương thức mã hoá bộ nhớ với xe và không thể bật hoặc tắt tính năng này mà không đặt lại về trạng thái ban đầu. Điều này có nghĩa là bản cập nhật qua mạng không dây (OTA) không thể bật tính năng này mà không xoá sạch thiết bị. Nhà sản xuất thiết bị gốc (OEM) có thể chọn bật tính năng này khi nâng cấp nếu họ cũng đặt lại thiết bị về trạng thái ban đầu. Ví dụ: trong một lần bảo dưỡng.
Tính năng này được bật bằng cách hỗ trợ thuộc tính STORAGE_ENCRYPTION_BINDING_SEED
trong HAL xe do nhà cung cấp cung cấp. Thuộc tính này chứa một chuỗi byte có độ dài 16 byte và dự kiến sẽ được lưu trữ trên một ECU riêng biệt với IVI. Thuộc tính này ban đầu do Android Automotive OS (AAOS) đặt và tạo bằng Trình tạo số ngẫu nhiên được bảo mật bằng mật mã (CSRNG). Sau đó, AAOS sẽ đọc thuộc tính này trong các lần khởi động tiếp theo.
Cách VHAL lưu trữ giá trị của STORAGE_ENCRYPTION_BINDING_SEED
là tuỳ theo nhà cung cấp.
Chúng tôi có một số đề xuất chung để bảo vệ hạt giống:
- (Nên dùng) Hạt giống được lưu trữ trong ECU của xe được bảo vệ tốt về mặt vật lý. Nếu không, việc lấy cả IVI và ECU từ xe sẽ không quan trọng.
- (Nên dùng) IVI và ECU phải xác thực lẫn nhau để trao đổi hạt giống nhằm ngăn chặn các yêu cầu giả mạo hạt giống từ ECU.
- (Nên dùng) Bạn nên truyền hạt giống bằng một kênh bảo mật để ngăn chặn việc đánh hơi trên bus CAN.
Ngoài ra, hãy thêm nội dung sau để đảm bảo init.target.rc
của nhà cung cấp trên late-fs
trước mount_all --late
:
# feed vehicle binding seed to vold
exec_start vold_seed_binding
Bạn nên khởi động HAL của xe trong early_hal
thay vì hal now
.
Không thể truy cập vào bất kỳ thuộc tính hệ thống persist.*
nào trong early-hal
vì phân vùng /data
chưa được gắn.
Định cấu hình liên kết dựa trên xe
Nếu hạt giống ECU không khớp, thiết bị sẽ khởi động lại vào chế độ khôi phục và nhắc người dùng xoá phân vùng /data
hoặc thử lại.
Bạn có thể thay đổi hành vi nhắc và xoá dữ liệu trong builtins.cpp:
- Thay đổi
prompt_and_wipe_data
thànhwipe_data
. Thiết bị sẽ xoá sạch rồi khởi động lại mà không có lời nhắc. - Thông báo nhắc nằm trong recovery.cpp.
Hình 2. Thông báo nhắc.
Kiểm thử liên kết dựa trên xe
Kiểm thử mô phỏng
Một kiểm thử mô phỏng được cung cấp trong packages/services/Car/cpp/security/vehicle_binding_util/tests
.
Cách chạy kiểm thử mô phỏng này:
attest libvehicle_binding_util_test
Kiểm thử tích hợp
Một kiểm thử atest được cung cấp trong packages/services/Car/cpp/security/vehicle_binding_util/tests
.
Cách chạy kiểm thử tích hợp này:
atest vehicle_binding_integration_test