vvmconfig và vvmtruststore

Tác nhân Khám phá dịch vụ SDV cần có hai bộ thông tin cấu hình:

  1. Cấu hình máy ảo cho xe (VVM Config), chứa thông tin chung cho tất cả xe thuộc cùng một mẫu hoặc nền tảng.
  2. Kho tin cậy của máy ảo cho xe (VVM Trust Store), chứa thông tin riêng cho xe đó.
Nội dung vvmtruststore và vvmconfig
Hình 1: Nội dung của vvmtruststore và vvmconfig.

Cấu hình VM cho xe

Cấu hình VM cho xe là một tệp có tên vvmconfig[.SUFFIX] nằm trong thư mục /etc của phân vùng product. Hậu tố tệp vvmconfig là không bắt buộc và không có ý nghĩa gì đối với SDV Android. Đối tác có thể thêm mọi thông tin vào hậu tố vvmconfig mà họ thấy hữu ích, chẳng hạn như tên nền tảng xe hoặc tên sản phẩm.

Nếu hệ thống có nhiều tệp Cấu hình VM cho xe, thì trình tải khởi động phải chỉ định tệp đã chọn bằng cách sử dụng tham số kernel androidboot.sdv.vvmconfig. Tham số này chỉ được chứa tên tệp (ví dụ: vvmconfig.example), không có thành phần đường dẫn nào. Ví dụ: /etc/vvmconfig.example sẽ là một giá trị không hợp lệ.

Tệp Cấu hình VM cho xe được cung cấp ở định dạng CBOR được xác định trong đoạn CDDL sau:

VvmConfig = [
  version: 1,
  ; Public key of the UDS root provisioning authority
  udsCaPub: COSE_Key,
  ; Revocation list of intermediate CAs of UDS certificates
  udsCaRevList: KeyList,
  policies: DicePolicies,
  vmConfigs: VmConfigMap,
]

DicePolicies = [+ DicePolicy]

KeyList = [* COSE_Key]

; Maps a VM instance name to its configuration
VmConfigMap = {
  VmInstanceName => VmConfig
}

VmConfig = [
  ; IP addresses of this virtual machine.
  ips: [+ IpAndPort],
  ; Index of the DICE policy for the Android SDV VM DICE chain.
  android: PolicyIndex,
  ; Index of the DICE policy for the Secure World DICE chain used by the Android SDV VM.
  secureWorld: PolicyIndex,
]

IpAndPort = [
    ip: IpAddress,
    ; If not specified, the default Service Discovery agent port will be used.
    ? port: uint
]

IpAddress = ipv4-address / ipv6-address

; Index of a DicePolicy in the DicePolicies array.
PolicyIndex = uint

; The VM Name (as defind in the VVM Config). This must comply with VM Name identifier
; definition in Service Identity docs.
VmInstanceName = tstr

; INCLUDE /hardware/interfaces/security/authgraph/aidl/android/hardware/security/authgraph/DicePolicy.cddl for: DicePolicy

COSE_Key được xác định trong RFC 8152, CBOR Object Signing and Encryption (COSE).

ipv4-addressipv6-address được xác định trong RFC 9164, Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes.

Chính sách DICE

OEM cung cấp cho SDV Android một tập hợp các chính sách DICE xác định các ràng buộc mà chuỗi DICE hợp lệ (và đáng tin cậy) phải tuân thủ. Tập hợp chính sách này phải bao gồm tất cả chuỗi DICE liên quan đến tất cả VM SDV trong xe.

Tất cả chuỗi DICE của Thế giới bảo mật phải không đáp ứng Chính sách DICE của SDV Android. Ngược lại, tất cả chuỗi DICE của SDV Android phải không đáp ứng chính sách DICE của Thế giới bảo mật. Điều này có nghĩa là bạn không thể chuyển thành công Chuỗi DICE của SDV Android thành chuỗi DICE của Thế giới bảo mật và ngược lại.

Kho tin cậy của VM cho xe

Kho tin cậy của VM cho xe chứa các khoá công khai UDS của tất cả người tham gia Lưới bảo mật SDV. Đây là một phân vùng không được ký tên là vvmtruststore với hệ thống tệp ext4 và được gắn trên thư mục /vvmtruststore. Bạn có thể chọn chứng nhận các khoá công khai đó bằng cơ quan gốc được chỉ định trong Cấu hình VVM.

Phân vùng này được gắn dưới dạng đọc và ghi khi HLOS Android được khởi động ở Chế độ khởi động SDV unlocked hoặc chỉ đọc khi Chế độ khởi động SDV là locked. Phân vùng này có thể có tối đa 2 tệp: uds_pubsuds_certs.

uds_pubs là một tệp CBOR chứa tất cả khoá công khai UDS từ tất cả ECU đang lưu trữ VM SDV trong Lưới SDV hiện tại. Các khoá công khai UDS đó được thu thập từ chuỗi DICE do các VM SDV ngang hàng cung cấp trong quá trình cung cấp. Tệp này được tạo bởi sdv_provisioning_tool trong quy trình cung cấp.

uds_certs là một tệp CBOR được xác định trong đoạn CDDL sau:

UdsCertificates = [
  1, ; version
  *   UdsCertChain
]

UdsCertChain = [
  2* X509Certificate ; Root -> ... -> Leaf. "Root" is the vendor self-signed
                     ; cert, "Leaf" contains UDS_Public. There may also be
                     ; intermediate certificates between Root and Leaf.
]

; A bstr containing a DER-encoded X.509 certificate.
X509Certificate = bstr

uds_certs chỉ chứa các chứng chỉ UDS được CA ký của các khoá công khai UDS của thiết bị cục bộ (trái ngược với tất cả các khoá được liệt kê trong uds_pubs). Tệp này phải do OEM cung cấp và chỉ bắt buộc đối với quy trình cung cấp thay thế các bộ phận.

Các chứng chỉ UDS trong uds_certs phải tuân theo các thông số kỹ thuật được xác định trong HAL Cung cấp từ xa. Ngoài ra, các chứng chỉ ký chữ ký số phải là Ed25519 hoặc ECDSA với đường cong P-256 hoặc P-384. Việc tuân theo HAL Cung cấp từ xa có nghĩa là cụ thể, chứng chỉ gốc của chuỗi chứng chỉ UDS phải có BasicConstraintsKeyUsage như được chỉ định cho chứng chỉ UDS, trong khi tất cả chứng chỉ trung gian và gốc phải tuân theo các quy tắc cho chứng chỉ CA.