SDV 서비스 검색 에이전트에는 두 가지 구성 정보 세트가 필요합니다.
- 동일한 모델 또는 플랫폼의 모든 차량에 공통된 정보가 포함된 차량 가상 머신 구성 (VVM 구성)
- 특정 차량에 고유한 정보가 포함된 차량 가상 머신 신뢰 저장소 (VVM 신뢰 저장소)
차량 VM 구성
차량 VM 구성은 product 파티션의 /etc 디렉터리에 있는 vvmconfig[.SUFFIX]라는 파일입니다. vvmconfig 파일 확장자는 선택사항이며 Android SDV와는 관련이 없습니다. 파트너는 차량 플랫폼 이름 또는 제품 이름과 같이 유용하다고 생각되는 정보를 vvmconfig 확장자에 추가할 수 있습니다.
시스템에 차량 VM 구성 파일이 여러 개 있는 경우 부트로더는 androidboot.sdv.vvmconfig 커널 매개변수를 사용하여 선택한 파일을 지정해야 합니다. 이 매개변수에는 경로 구성요소 없이 파일 이름 (예: vvmconfig.example)만 포함되어야 합니다. 예를 들어 /etc/vvmconfig.example은 유효하지 않은 값입니다.
차량 VM 구성 파일은 다음 CDDL 프래그먼트에 정의된 CBOR 형식으로 제공됩니다.
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는 RFC 8152, CBOR 객체 서명 및 암호화
(COSE)에 정의되어 있습니다.
ipv4-address 및 ipv6-address는 RFC 9164, 간결한 바이너리
객체 표현(CBOR) 태그(IPv4 및 IPv6 주소와 프리픽스용)에 정의되어 있습니다.
DICE 정책
OEM은 유효한 (신뢰할 수 있는) DICE 체인이 준수해야 하는 제약 조건을 정의하는 DICE 정책 모음을 Android SDV에 제공합니다. 이 정책 모음은 차량의 모든 SDV VM과 관련된 모든 DICE 체인을 포함해야 합니다.
모든 보안 세계 DICE 체인은 Android SDV DICE 정책을 통과하지 못해야 합니다. 반대로 모든 Android SDV DICE 체인은 보안 세계 DICE 정책을 통과하지 못해야 합니다. 즉, Android SDV DICE 체인을 보안 세계 DICE 체인으로 통과할 수 없어야 하며 그 반대도 마찬가지입니다.
차량 VM 신뢰 저장소
차량 VM 신뢰 저장소에는 SDV 보안 메시의 모든 참여자의 UDS 공개 키가 포함되어 있습니다. 이는
ext4 파일 시스템이 있고 /vvmtruststore 디렉터리에 마운트된 vvmtruststore라는 서명되지 않은 파티션입니다. 이러한 공개 키는 선택적으로 VVM 구성에 지정된 루트 기관에서 인증할 수 있습니다.
이 파티션은 Android HLOS가
SDV 부팅 모드 unlocked로 부팅될 때 읽기 및 쓰기로 마운트되거나 SDV 부팅 모드가
locked일 때 읽기 전용으로 마운트됩니다. 최대 두 개의 파일(uds_pubs 및 uds_certs)이 있을 수 있습니다.
uds_pubs는 현재 SDV 메시에서 SDV VM을 호스팅하는 모든 ECU
의 모든 UDS 공개 키가 포함된 CBOR 파일입니다. 이러한 UDS 공개 키는 프로비저닝 중에 피어 SDV VM에서 제공하는 DICE 체인에서 수집됩니다.
이 파일은 sdv_provisioning_tool에 의해
프로비저닝 흐름 중에 생성됩니다.
uds_certs는 다음 CDDL 프래그먼트에 정의된 CBOR 파일입니다.
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 는 uds_pubs에 나열된 모든 키와 달리 로컬 기기의 UDS 공개 키에 대한 CA 서명 UDS 인증서만 보유합니다. 이 파일은 OEM에서 제공해야 하며 부품 교체 프로비저닝 흐름에만 필수입니다.
uds_certs의 UDS 인증서는 원격 프로비저닝 HAL에 정의된
사양을 따라야 합니다.
또한 디지털 서명 인증서에 서명하는 것은 곡선 P-256 또는 P-384가 있는 Ed25519 또는 ECDSA여야 합니다. 원격 프로비저닝 HAL을 따른다는 것은 특히 UDS 인증서 체인의 리프 인증서에 UDS 인증서에 지정된 대로 BasicConstraints 및 KeyUsage가 있어야 하며 모든 중간 및 루트 인증서는 CA 인증서 규칙을 따라야 함을 의미합니다.