SDV सर्विस डिस्कवरी एजेंट को कॉन्फ़िगरेशन की दो तरह की जानकारी की ज़रूरत होती है:
- वाहन की वर्चुअल मशीन का कॉन्फ़िगरेशन (वीवीएम कॉन्फ़िगरेशन). इसमें एक ही मॉडल या प्लैटफ़ॉर्म के सभी वाहनों के लिए सामान्य जानकारी होती है.
- वाहन की वर्चुअल मशीन का ट्रस्ट स्टोर (वीवीएम ट्रस्ट स्टोर). इसमें उस वाहन से जुड़ी खास जानकारी होती है.
वाहन के वीएम का कॉन्फ़िगरेशन
वाहन के वीएम का कॉन्फ़िगरेशन, vvmconfig[.SUFFIX] नाम की एक फ़ाइल होती है. यह product पार्टीशन की /etc डायरेक्ट्री में मौजूद होती है. vvmconfig फ़ाइल का सफ़िक्स ज़रूरी नहीं है. साथ ही, Android SDV के लिए इसका कोई मतलब नहीं है. पार्टनर, vvmconfig सफ़िक्स में कोई भी ऐसी जानकारी जोड़ सकते हैं जो उनके काम की हो. जैसे, वाहन के प्लैटफ़ॉर्म का नाम या प्रॉडक्ट का नाम.
अगर सिस्टम में एक से ज़्यादा Vehicle VM कॉन्फ़िगरेशन फ़ाइलें हैं, तो बूटलोडर को androidboot.sdv.vvmconfig कर्नल पैरामीटर का इस्तेमाल करके, चुनी गई फ़ाइल के बारे में बताना चाहिए. इस पैरामीटर में सिर्फ़ फ़ाइल का नाम होना चाहिए.जैसे,
vvmconfig.example. इसमें पाथ कॉम्पोनेंट नहीं होना चाहिए. उदाहरण के लिए,
/etc/vvmconfig.example एक अमान्य वैल्यू होगी.
वाहन के वीएम की कॉन्फ़िगरेशन फ़ाइल, CBOR फ़ॉर्मैट में दी जाती है. यह फ़ॉर्मैट, CDDL के इस फ़्रैगमेंट में तय किया गया है:
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 को आरएफ़सी 9164, IPv4 और IPv6 पतों और प्रीफ़िक्स के लिए, कॉन्साइज़ बाइनरी ऑब्जेक्ट रिप्रेजेंटेशन (सीबीओआर) टैग में तय किया गया है.
DICE की नीतियां
ओईएम, Android SDV को DICE नीतियों का एक कलेक्शन उपलब्ध कराता है. इसमें ऐसी पाबंदियां तय की जाती हैं जिनका पालन, मान्य (और भरोसेमंद) DICE चेन को करना होता है. इस नीति के कलेक्शन में, गाड़ी में मौजूद सभी SDV VM से जुड़ी सभी DICE चेन शामिल होनी चाहिए.
Secure World के सभी DICE चेन को Android SDV DICE नीति का उल्लंघन करना चाहिए. इसके उलट, सभी Android SDV DICE चेन को Secure World DICE नीति का पालन नहीं करना चाहिए. इसका मतलब है कि Android SDV DICE चेन को Secure World DICE चेन के तौर पर और Secure World DICE चेन को Android SDV DICE चेन के तौर पर पास नहीं किया जा सकता.
वाहन के वीएम का ट्रस्ट स्टोर
वाहन के वीएम ट्रस्ट स्टोर में, एसडीवी सिक्योर मेश में हिस्सा लेने वाले सभी लोगों के यूडीएस सार्वजनिक पासकोड होते हैं. यह vvmtruststore नाम का एक अनसाइंड पार्टिशन है. इसमें ext4 फ़ाइल सिस्टम है और इसे /vvmtruststore डायरेक्ट्री पर माउंट किया गया है. इन सार्वजनिक कुंजियों को VVMConfig में बताई गई रूट अथॉरिटी से प्रमाणित किया जा सकता है.
इस पार्टीशन को रीड-एंड-राइट के तौर पर तब माउंट किया जाता है, जब Android HLOS को SDV बूट मोड unlocked के साथ बूट किया जाता है. वहीं, इसे सिर्फ़ पढ़ने के लिए तब माउंट किया जाता है, जब SDV बूट मोड locked पर सेट होता है. इसमें ज़्यादा से ज़्यादा दो फ़ाइलें हो सकती हैं: uds_pubs और uds_certs.
uds_pubs एक CBOR फ़ाइल है. इसमें उन सभी ईसीयू की यूडीएस सार्वजनिक कुंजियां शामिल होती हैं जो मौजूदा एसडीवी मेश में एसडीवी वीएम होस्ट कर रहे हैं. इन यूडीएस सार्वजनिक कुंजियों को, पीयर एसडीवी वीएम से इकट्ठा किया जाता है. ये वीएम, प्रोविज़निंग के दौरान डीआईसीई चेन उपलब्ध कराते हैं.
इस फ़ाइल को sdv_provisioning_tool, प्रोविज़निंग फ़्लो के दौरान बनाता है.
uds_certs एक CBOR फ़ाइल है. इसे CDDL के इस फ़्रैगमेंट में तय किया गया है:
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 में दी गई सभी कुंजियां नहीं होती हैं. यह फ़ाइल, ओईएम को उपलब्ध करानी होती है. साथ ही, यह सिर्फ़ पार्ट बदलने की सुविधा देने के फ़्लो के लिए ज़रूरी है.
uds_certs में मौजूद यूडीएस सर्टिफ़िकेट को, रिमोट प्रोविज़निंग एचएएल में तय की गई खास बातों का पालन करना होगा.
इसके अलावा, डिजिटल हस्ताक्षर वाले सर्टिफ़िकेट Ed25519 या ECDSA वाले होने चाहिए. साथ ही, उनमें P-256 या P-384 कर्व होने चाहिए. रिमोट प्रोविज़निंग HAL का मतलब है कि यूडीएस सर्टिफ़िकेट चेन के लीफ़ सर्टिफ़िकेट में, यूडीएस सर्टिफ़िकेट के लिए तय किए गए BasicConstraints और KeyUsage होने चाहिए. वहीं, सभी इंटरमीडिएट और रूट सर्टिफ़िकेट, सीए सर्टिफ़िकेट के नियमों के मुताबिक होने चाहिए.