SDV サービス ディスカバリ エージェントには、次の 2 つの構成情報が必要です。
- 車両仮想マシン構成(VVM 構成)。同じモデルまたはプラットフォームのすべての車両に共通の情報が含まれています。
- 車両仮想マシン トラスト ストア(VVM トラスト ストア)。特定の車両に固有の情報が含まれています。
車両 VM 構成
Vehicle VM Config は、product パーティションの /etc ディレクトリにある vvmconfig[.SUFFIX] という名前のファイルです。vvmconfig ファイル接尾辞は省略可能で、Android SDV には意味がありません。パートナーは、車両プラットフォーム名やプロダクト名など、有用な情報を vvmconfig 接尾辞に追加できます。
システムに複数の Vehicle VM Config ファイルがある場合、ブートローダーは 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 Object Signing and Encryption(COSE)で定義されています。
ipv4-address と ipv6-address は、RFC 9164(IPv4 アドレスと IPv6 アドレスおよびプレフィックスの簡潔なバイナリ オブジェクト表現(CBOR)タグ)で定義されています。
DICE ポリシー
OEM は、有効な(信頼できる)DICE チェーンが準拠する必要がある制約を定義する DICE ポリシーのコレクションを Android SDV に提供します。このポリシー コレクションは、車両内のすべての SDV VM に関連するすべての DICE チェーンを対象とする必要があります。
すべてのセキュア ワールド DICE チェーンは、Android SDV DICE ポリシーに違反する必要があります。逆に、すべての Android SDV DICE チェーンは Secure World DICE ポリシーに失敗する必要があります。つまり、Android SDV DICE チェーンを Secure World DICE チェーンとして、またはその逆として、正常に渡すことができないようにする必要があります。
車両 VM トラストストア
車両 VM トラスト ストアには、SDV セキュア メッシュのすべての参加者の UDS 公開鍵が含まれています。これは、ext4 ファイル システムで /vvmtruststore ディレクトリにマウントされた、vvmtruststore という名前の署名なしパーティションです。これらの公開鍵は、VVM 構成で指定されたルート認証局によって認証される場合があります。
このパーティションは、SDV ブートモードが unlocked の場合は読み取り / 書き込みとして、SDV ブートモードが locked の場合は読み取り専用としてマウントされます。最大 2 つのファイル(uds_pubs と uds_certs)が含まれることがあります。
uds_pubs は、現在の SDV Mesh で 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 公開鍵の CA 署名付き UDS 証明書のみが保持されます(uds_pubs にリストされているすべての鍵とは異なります)。このファイルは OEM によって提供される必要があり、部品交換プロビジョニング フローでのみ必須です。
uds_certs の UDS 証明書は、リモート プロビジョニング HAL で定義されている仕様に準拠する必要があります。また、デジタル署名署名証明書は、Ed25519 または ECDSA(曲線 P-256 または P-384)である必要があります。リモート プロビジョニング HAL に従うということは、特に、UDS 証明書チェーンのリーフ証明書は UDS 証明書で指定された BasicConstraints と KeyUsage を持ち、すべての中間証明書とルート証明書は CA 証明書のルールに従う必要があるということです。