حالت بوت SDV نحوه رفتار عامل کشف سرویس SDV در یک ماشین مجازی SDV را هنگام تلاش برای اتصال به سایر عوامل کشف سرویس (که در سایر ماشینهای مجازی SDV اجرا میشوند) برای ایجاد یک شبکه امن تعریف میکند. این مشابه مفهوم وضعیت دستگاه موجود در Android Verified Boot است.
حالت بوت SDV هنگام آمادهسازی یا بهروزرسانی حافظهی ذخیرهسازی ماشین مجازی خودرو (VVM Trust Store که به آن vvmtruststore نیز گفته میشود) استفاده میشود.
رفتار شبکه امن SDV
شبکهی کشف سرویس (Service Discovery) بسته به مقادیر بوت دریافتی، در یکی از حالتهای زیر قرار دارد: Normal )، Warning ) یا Fatal ).
در خودروهای تولیدی که به مشتریان تحویل داده میشود، SDV Secure Mesh باید در حالت Normal باشد. این مش برای تغییر از Normal به حالت Warning نیاز به مداخله تشخیصی دارد. در یک محیط تولیدی (به عنوان مثال، نه در حالت توسعه یا اشکالزدایی)، حالت Warning فقط در طول آمادهسازی رخ میدهد.
Fatal یک خطای اساسی است، مشابه خطای عدم تأیید امضا در تصویر system_ext در بوت لودر اندروید. اگر SDV Secure Mesh صرفاً به دلیل بهروزرسانی OTA از Normal به Fatal تغییر کند، بهروزرسانی خراب تلقی میشود و Mesh به نسخه Normal اولیه برمیگردد.
بخشهای بعدی، ایالتها را با جزئیات بیشتری شرح میدهند.
عادی
- از دیدگاه Service Discovery، بوت سیستم
SECUREاست. - سرویس دیسکاوری فقط با جفتهایی که به صورت امن بوت شدهاند، متصل میشود. جفتی که به صورت امن بوت شده باشد، به این معنی است که SDV Secure Mesh نیز امن است.
هشدار
- ممکن است بوت سیستم به دلیل غیرفعال بودن برخی از تأییدها، دچار مشکل شده باشد.
- کشف سرویس فقط با همتاهایی متصل میشود که دقیقاً مجموعه یکسانی از تأییدهای غیرفعال را به اشتراک میگذارند و تضمین میکنند که همه همتاها در SDV Secure Mesh ویژگیهای امنیتی یکسانی را به اشتراک میگذارند.
- موفقیت بوت همتا به دلیل خرابیهای محلی یا غیرفعال بودن ویژگیها قابل تأیید نیست.
- خارج از محیط یا موقعیت توسعه، این امر پیامدهای زیر را دارد:
- دادههای کاربر نباید در دسترس باشند. یعنی، نه باید منتقل شوند و نه تحت تأثیر ارتباطات از طریق SDV Secure Mesh قرار گیرند.
- فقط سرویسهای مورد نیاز برای جریانهای تأمین باید زمانی که مش در این حالت است، در دسترس باشند.
مهلک
- یک خطای بحرانی در مراحل بوت سیستم.
- حداقل یک نقص یا خطای اساسی وجود دارد که مانع از ایجاد شبکه توسط عامل کشف سرویس میشود. سرویسهای محلی نمیتوانند با سرویسهای راه دور ارتباط برقرار کنند.
- از دیدگاه Service Discovery، بوت سیستم
UNSECUREاست.
حالت بوت SDV
حالت بوت SDV دو مقدار ممکن دارد: LOCKED و UNLOCKED ). برای ایجاد شبکهی کشف سرویس (Service Discovery)، مقدار LOCKED نشان میدهد که خطاهای تأیید مهلک هستند و مقدار UNLOCKED به این معنی است که این خطاها مهلک نیستند.
| وضعیت | حالت بوت SDV | |
|---|---|---|
UNLOCKED | LOCKED | |
| فروشگاه محلی VVM Trust خالی است | هشدار | مهلک |
| زنجیره محلی DICE مفقود است | مهلک | مهلک |
| خرابی تأیید زنجیره محلی DICE | هشدار | مهلک |
| تطابق حالت SDV و AVB محلی | جدول تطابق حالت SDV محلی و AVB را ببینید | |
| مقایسه مقادیر حالت دستگاه از راه دور | به جدول مقایسه مقادیر در حالت دستگاه از راه دور مراجعه کنید | |
عدم تطابق uds_pubs از راه دور | هشدار | مهلک |
| عدم موفقیت در تأیید زنجیره DICE از راه دور (با استفاده از سیاستهای DICE ) | هشدار | مهلک |
| خرابی در احراز هویت از راه دور (handshake) | مهلک | مهلک |
تطابق حالت SDV و AVB محلی
جدول زیر نشان میدهد که چگونه حالت AVB و حالت بوت SDV بر رفتار SDV Secure Mesh تأثیر میگذارند. رنگها مطابق با تعریفشده در بخش ادغام ویژه اندروید در مستندات AVB هستند.
| حالت AVB x حالت بوت SDV | حالت بوت SDV | ||
|---|---|---|---|
UNLOCKED | LOCKED | ||
AVB LOCKED | سبز | هشدار | عادی |
| زرد | مهلک | مهلک | |
UNLOCKED AVB باز شد | نارنجی | هشدار | مهلک |
مقدار حالت دستگاه
در یک زنجیره DICE، هر گواهی CDI دارای یک مقدار حالت است. این مقدار، وضعیت امنیتی آن لایه را بر اساس ورودی پیکربندی آن توصیف میکند. برای بیان وضعیت امنیتی تمام نرمافزارهای روی دستگاه، مشخصات SDV یک مقدار حالت دستگاه را تعریف میکند. این مقدار از مقدار حالت تمام مراحل CDI در زنجیرههای DICE مربوط به یک ماشین مجازی SDV مشخص (یعنی Android HLOS و Secure World) مشتق میشود و از شمارش زیر استفاده میکند:
enum DeviceMode {
NotConfigured = 0,
Recovery = 1,
Debug = 2,
Normal = 3,
}
الگوریتم
الگوریتم محاسبه مقدار حالت دستگاه به شرح زیر است:
-
deviceModeبه صورتDeviceMode::Normalمشخص کنید. -
diceChainListبه عنوان لیست زنجیرههای DICE مربوط به یک ماشین مجازی SDV مشخص کنید. - برای هر
diceChainدرdiceChainList:-
cdiListبه عنوان لیست گواهیهای CDI درdiceChainمشخص کنید: - برای هر
cdiCertدرcdiList:-
cdiDeviceModeبه عنوانDeviceModeمربوط بهcdiCert.modeمشخص کنید. -
deviceModeرویmin(deviceMode, cdiDeviceMode)تنظیم کنید.
-
-
-
deviceModeبرگردانید.
مقایسه مقادیر حالت دستگاه از راه دور
یک عامل کشف سرویس (Service Discovery agent) فقط با سایر عواملی که مقدار حالت دستگاه (Device Mode Value) یکسانی دارند، ارتباط برقرار میکند.
مقدار Device Mode تضمین میکند که یک شبکه نمیتواند اعضایی با ویژگیهای امنیتی متفاوت داشته باشد. شبکه حاصل، وضعیت امنیتی یکسانی بین تمام اعضای خود دارد.
| مقدار حالت دستگاه | از راه دور | ||||
|---|---|---|---|---|---|
| پیکربندی نشده | اشکالزدایی | بهبودی | عادی | ||
| محلی | پیکربندی نشده | مهلک | مهلک | مهلک | مهلک |
| اشکالزدایی | مهلک | هشدار | مهلک | مهلک | |
| بهبودی | مهلک | مهلک | هشدار | مهلک | |
| عادی | مهلک | مهلک | مهلک | عادی | |
جریان تأمین کارخانه
این جریان تأمین در خط مونتاژ خودرو است، جایی که فرض میشود زیرساخت کلید عمومی در دسترس نیست. این جریان به یک مقدار ۳۲ بایتی ذخیره شده در حافظه یکبار مصرف (OTP) به نام Vehicle VM (VVM) Factory Trust یا vvmfactorytrust بستگی دارد. پس از تنظیم، این مقدار به عنوان پارامتری به نام androidboot.sdv.vvmfactorytrust به هسته منتقل میشود.
تمام ماشینهای مجازی در یک ECU باید حالت بوت SDV و اعتماد کارخانهای VVM یکسانی داشته باشند.
حالت اولیه
همه ECUها در ابتدا در حالت بوت SDV و در حالت UNLOCKED هستند، و VVM Factory Trust و Vehicle VM Trust Store خالی هستند، به غیر از هرگونه uds_certs موجود در vvmtruststore . شکل 1 مثالی را نشان میدهد که در آن سه SDV VM (VM-A، VM-B و VM-C) در دو ECU جداگانه (ECU-0 و ECU-1) توزیع شدهاند:
شکل ۱. آمادهسازی کارخانه، وضعیت اولیه.
مرحله ۱: اجرای sdv_provisioning_tool
تمام ماشینهای مجازی را از تمام ECUها بوت کنید.
روی هر ماشین مجازی، sdv_provisioning_tool را اجرا کنید.
- این ابزار با عامل محلی کشف سرویس (Service Discovery agent) ارتباط برقرار میکند و منتظر میماند تا آن علامت دهد که شبکه امن SDV کامل شده است و عامل، لیست کلیدهای عمومی UDS را در
/vvmtruststore/uds_pubsنوشته است. - وقتی این اتفاق میافتد، ابزار هشِ
/vvmtruststore/uds_pubsکه تازه نوشته شده را دریافت کرده و آن را در خروجی نمایش میدهد.
شکل ۲. آمادهسازی کارخانه، مرحله ۱.
مرحله 2: نوشتن تراست کارخانه VVM
روی یک ماشین مجازی از هر ECU:
- هش
/vvmtruststore/uds_pubsکه توسطsdv_provisioning_toolدر مرحله قبل خروجی داده شد را در VVM Factory Trust بنویسید. نحوه انجام این نوشتن، مختص تولیدکننده اصلی (OEM) یا فروشنده است و خارج از محدوده این مشخصات میباشد.
شکل ۳. آمادهسازی کارخانه، مرحله ۲.
مرحله ۳: در حالت بوت SDV قفل شده، دوباره راهاندازی کنید
تمام ماشینهای مجازی را در تمام ECUها در حالت بوت SDV و در حالت LOCKED مجدداً راهاندازی کنید.
عامل کشف سرویس، ماشینهای مجازی موجود در ECUها را با کلیدهای عمومی UDS فهرستشده در uds_pubs مورد اعتماد قرار میدهد، زیرا هش این فایل با VVM Factory Trust مطابقت دارد.
از آنجا که ECU ها با هم تهیه شده اند، به طور دائم به هم متصل هستند و از دیدگاه تأیید زنجیره DICE می توانند به عنوان یک قطعه سخت افزاری واحد در نظر گرفته شوند.
شکل ۴. آمادهسازی کارخانه، مرحله ۳.
جریان تعویض قطعات
این جریان آمادهسازی در یک تعمیرگاه یا گاراژ مجاز خودرو است، جایی که یک ECU معیوب باید با یک ECU جدید و آمادهسازی نشده جایگزین شود.
این جریان به گواهیهای UDS بستگی دارد که یا مستقیماً توسط مرجع ریشه مندرج در vvmconfig یا به طور غیرمستقیم، از طریق زنجیرهای از مراجع واسطه صادر میشوند.
حالت اولیه
همه ماشینهای مجازی از قبل در کارخانه آمادهسازی شدهاند و در حالت بوت SDV و در حالت LOCKED اجرا میشوند.
شکل ۵ مثالی را نشان میدهد که در آن ECU-0 دچار نقص شده و نیاز به تعویض دارد:
شکل ۵. تعویض قطعات، حالت اولیه.
مرحله 1: نصب ECU جدید
ECU جدید را که در حالت خالی و بدون تنظیمات است، نصب کنید.
در شکل ۶، هنگامی که ECU-2 (ECU جایگزین) روشن میشود، دو شبکه امن SDV مجزا وجود دارد: یکی در حالت Warning و دیگری در حالت Normal . هر دو شبکه امن SDV ناقص هستند.
شکل ۶. تعویض قطعات، مرحله ۱.
مرحله ۲: ریبوت در حالت بوت SDV آنلاک شده
تمام ماشینهای مجازی مربوط به همه ECUها را در حالت بوت SDV و در حالت UNLOCKED ریبوت کنید.
در شکل 7، ماشینهای مجازی B و VM-C به شبکه امن Warning SDV که تکمیل شده است، متصل میشوند.
شکل ۷. تعویض قطعات، مرحله ۲.
مرحله ۳: اجرای sdv_provisioning_tool
روی هر ماشین مجازی، sdv_provisioning_tool را اجرا کنید.
این ابزار با عامل محلی کشف سرویس (Service Discovery agent) ارتباط برقرار میکند و منتظر میماند تا آن علامت دهد که شبکه امن SDV کامل شده است و عامل، لیست کلیدهای عمومی UDS را در /vvmtruststore/uds_pubs نوشته است.
وقتی این اتفاق میافتد، ابزار هشِ /vvmtruststore/uds_pubs که تازه نوشته شده را دریافت کرده و آن را خروجی میدهد، اما این هش در این جریان استفاده نمیشود.
شکل ۸. تعویض قطعات، مرحله ۳.
مرحله 4: نصب گواهینامههای UDS
- فایل
/vvmtruststore/uds_pubsرا از یک ماشین مجازی SDV دلخواه استخراج کنید. فرقی نمیکند کدام یک، زیرا برای همه ماشینهای مجازی در یک SDV Secure Mesh یکسان است. - گواهیهای تأمین را برای تمام کلیدهای عمومی UDS که در
/vvmtruststore/uds_pubsفهرست شدهاند، بازیابی کنید.- این مرحله معمولاً شامل ارسال کلیدهای عمومی استخراجشده UDS (یا فایل
/vvmtruststore/uds_pubs) به یک سرور تأمینکننده از راه دور است. سرور یا گواهیهای از پیش موجود را بازیابی میکند یا با بررسی کلیدهای عمومی دریافتی در برابر پایگاه دادهای از کلیدهای عمومی شناختهشده UDS که در طول ساخت ECU ساخته شده است، گواهیهای جدیدی تولید میکند.
- این مرحله معمولاً شامل ارسال کلیدهای عمومی استخراجشده UDS (یا فایل
- فایل
/vvmtruststore/uds_certsهر ماشین مجازی SDV را بنویسید.
شکل ۹. تعویض قطعات، مرحله ۴.
مرحله ۵: در حالت بوت SDV قفل شده، دوباره راهاندازی کنید
تمام ماشینهای مجازی را در حالت بوت SDV و در حالت LOCKED مجدداً راهاندازی کنید.
اگر شبکه امن SDV ناقص است، به مرحله 2 برگردید.
شکل ۱۰. تعویض قطعات، مرحله ۵.