SDV সার্ভিস ডিসকভারি এজেন্টের দুই সেট কনফিগারেশন তথ্যের প্রয়োজন হয়:
- যানবাহন ভার্চুয়াল মেশিন কনফিগারেশন (VVM Config), যাতে একই মডেল বা প্ল্যাটফর্মের সকল যানবাহনের জন্য সাধারণ তথ্য থাকে।
- ভেহিকেল ভার্চুয়াল মেশিন ট্রাস্ট স্টোর (ভিভিএম ট্রাস্ট স্টোর), যেখানে সেই নির্দিষ্ট যানবাহনটির জন্য অনন্য তথ্য থাকে।
যানবাহন ভিএম কনফিগারেশন
ভেহিকেল ভিএম কনফিগ হলো product পার্টিশনের /etc ডিরেক্টরিতে অবস্থিত vvmconfig[.SUFFIX] নামের একটি ফাইল। vvmconfig ফাইলের সাফিক্সটি ঐচ্ছিক এবং Android SDV-এর কাছে এর কোনো অর্থ নেই। পার্টনাররা vvmconfig সাফিক্সে তাদের প্রয়োজন অনুযায়ী যেকোনো তথ্য যোগ করতে পারেন, যেমন গাড়ির প্ল্যাটফর্মের নাম বা প্রোডাক্টের নাম।
যদি সিস্টেমে একাধিক Vehicle VM Config ফাইল থাকে, তাহলে বুটলোডারকে androidboot.sdv.vvmconfig কার্নেল প্যারামিটার ব্যবহার করে নির্বাচিত ফাইলটি নির্দিষ্ট করতে হবে। এই প্যারামিটারে কোনো পাথ অংশ ছাড়া শুধুমাত্র ফাইলের নাম (যেমন, vvmconfig.example ) থাকতে হবে। উদাহরণস্বরূপ, /etc/vvmconfig.example একটি অবৈধ মান হবে।
যানবাহনের ভিএম কনফিগারেশন ফাইলটি নিম্নলিখিত 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)- এ সংজ্ঞায়িত করা হয়েছে।
RFC 9164 , “Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes”- এ ipv4-address এবং ipv6-address সংজ্ঞায়িত করা হয়েছে।
ডাইস নীতিমালা
OEM, Android SDV-কে একগুচ্ছ DICE পলিসি প্রদান করে, যা সেই সীমাবদ্ধতাগুলো নির্ধারণ করে যা বৈধ (এবং বিশ্বাসযোগ্য) DICE চেইনগুলোকে অবশ্যই মেনে চলতে হবে। এই পলিসি সংগ্রহটিকে অবশ্যই ভেহিকলের সমস্ত SDV VM-এর সাথে সম্পর্কিত সকল DICE চেইনকে অন্তর্ভুক্ত করতে হবে।
সমস্ত সিকিউর ওয়ার্ল্ড ডাইস চেইনকে অবশ্যই একটি অ্যান্ড্রয়েড এসডিভি ডাইস পলিসিতে ব্যর্থ হতে হবে। বিপরীতভাবে, সমস্ত অ্যান্ড্রয়েড এসডিভি ডাইস চেইনকে অবশ্যই একটি সিকিউর ওয়ার্ল্ড ডাইস পলিসিতে ব্যর্থ হতে হবে। এর অর্থ হলো, একটি অ্যান্ড্রয়েড এসডিভি ডাইস চেইনকে সিকিউর ওয়ার্ল্ড ডাইস চেইন হিসেবে সফলভাবে পাস করানো সম্ভব হবে না এবং এর বিপরীতটিও সত্য।
যানবাহন ভিএম ট্রাস্ট স্টোর
ভেহিকেল ভিএম ট্রাস্ট স্টোরে এসডিভি সিকিওর মেশ-এর সকল অংশগ্রহণকারীর ইউডিএস পাবলিক কী থাকে। এটি vvmtruststore নামের একটি স্বাক্ষরবিহীন পার্টিশন, যার ফাইল সিস্টেম ext4 এবং এটি /vvmtruststore ডিরেক্টরিতে মাউন্ট করা থাকে। এই পাবলিক কীগুলো ঐচ্ছিকভাবে ভিভিএম কনফিগ-এ নির্দিষ্ট করা রুট অথরিটি দ্বারা প্রত্যয়িত করা যেতে পারে।
যখন অ্যান্ড্রয়েড এইচএলওএস (Android HLOS) এসডিভি বুট মোড (SDV Boot Mode) unlocked বুট করা হয়, তখন এই পার্টিশনটি রিড-অ্যান্ড-রাইট (read-and-write) হিসেবে মাউন্ট হয়, অথবা যখন এসডিভি বুট মোড locked থাকে, তখন এটি রিড-অনলি (read-only) হিসেবে মাউন্ট হয়। এতে সর্বোচ্চ দুটি ফাইল থাকতে পারে: uds_pubs এবং uds_certs ।
uds_pubs হলো একটি CBOR ফাইল, যাতে বর্তমান SDV মেশ-এ SDV VM হোস্টকারী সমস্ত ECU-এর সকল UDS পাবলিক কী থাকে। প্রোভিশনিং-এর সময় পিয়ার SDV VM-গুলো দ্বারা প্রদত্ত DICE চেইন থেকে এই UDS পাবলিক কী-গুলো সংগ্রহ করা হয়। প্রোভিশনিং ফ্লো চলাকালীন 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 এ তালিকাভুক্ত সমস্ত কী-এর পরিবর্তে)। এই ফাইলটি OEM দ্বারা সরবরাহ করা আবশ্যক এবং এটি শুধুমাত্র যন্ত্রাংশ প্রতিস্থাপন প্রোভিশনিং ফ্লো-এর জন্য বাধ্যতামূলক।
uds_certs এ থাকা UDS সার্টিফিকেটগুলোকে অবশ্যই রিমোট প্রভিশনিং HAL-এ সংজ্ঞায়িত স্পেসিফিকেশনগুলো অনুসরণ করতে হবে। এছাড়াও, সার্টিফিকেটগুলোতে ব্যবহৃত ডিজিটাল সিগনেচার অবশ্যই P-256 বা P-384 কার্ভসহ Ed25519 বা ECDSA হতে হবে। রিমোট প্রভিশনিং HAL অনুসরণ করার অর্থ হলো, বিশেষত, UDS সার্টিফিকেট চেইনের লিফ সার্টিফিকেটের BasicConstraints এবং KeyUsage অবশ্যই UDS সার্টিফিকেটের জন্য নির্দিষ্ট করা নিয়ম অনুযায়ী হতে হবে, এবং একই সাথে সমস্ত ইন্টারমিডিয়েট ও রুট সার্টিফিকেটকে CA সার্টিফিকেটের নিয়মগুলো অনুসরণ করতে হবে।