وضعیت مش و تامین

حالت بوت SDV نحوه رفتار عامل کشف سرویس SDV در یک ماشین مجازی SDV را هنگام تلاش برای اتصال به سایر عوامل کشف سرویس (که در سایر ماشین‌های مجازی SDV اجرا می‌شوند) برای ایجاد یک شبکه امن تعریف می‌کند. این مشابه مفهوم وضعیت دستگاه موجود در Android Verified Boot است.

حالت بوت SDV هنگام آماده‌سازی یا به‌روزرسانی حافظه‌ی ذخیره‌سازی ماشین مجازی خودرو (VVM Trust Store که به آن vvmtruststore نیز گفته می‌شود) استفاده می‌شود.

رفتار شبکه امن SDV

شبکه‌ی کشف سرویس (Service Discovery) بسته به مقادیر بوت دریافتی، در یکی از حالت‌های زیر قرار دارد: NormalWarning ) یا 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,
}

الگوریتم

الگوریتم محاسبه مقدار حالت دستگاه به شرح زیر است:

  1. deviceMode به صورت DeviceMode::Normal مشخص کنید.
  2. diceChainList به عنوان لیست زنجیره‌های DICE مربوط به یک ماشین مجازی SDV مشخص کنید.
  3. برای هر diceChain در diceChainList :
    1. cdiList به عنوان لیست گواهی‌های CDI در diceChain مشخص کنید:
    2. برای هر cdiCert در cdiList :
      1. cdiDeviceMode به عنوان DeviceMode مربوط به cdiCert.mode مشخص کنید.
      2. deviceMode روی min(deviceMode, cdiDeviceMode) تنظیم کنید.
  4. 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 را اجرا کنید.

  1. این ابزار با عامل محلی کشف سرویس (Service Discovery agent) ارتباط برقرار می‌کند و منتظر می‌ماند تا آن علامت دهد که شبکه امن SDV کامل شده است و عامل، لیست کلیدهای عمومی UDS را در /vvmtruststore/uds_pubs نوشته است.
  2. وقتی این اتفاق می‌افتد، ابزار هشِ /vvmtruststore/uds_pubs که تازه نوشته شده را دریافت کرده و آن را در خروجی نمایش می‌دهد.

آماده‌سازی کارخانه، مرحله ۱

شکل ۲. آماده‌سازی کارخانه، مرحله ۱.

مرحله 2: نوشتن تراست کارخانه VVM

روی یک ماشین مجازی از هر ECU:

  1. هش /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 ساخته شده است، گواهی‌های جدیدی تولید می‌کند.
  • فایل /vvmtruststore/uds_certs هر ماشین مجازی SDV را بنویسید.

تعویض قطعات، مرحله ۴

شکل ۹. تعویض قطعات، مرحله ۴.

مرحله ۵: در حالت بوت SDV قفل شده، دوباره راه‌اندازی کنید

تمام ماشین‌های مجازی را در حالت بوت SDV و در حالت LOCKED مجدداً راه‌اندازی کنید.

اگر شبکه امن SDV ناقص است، به مرحله 2 برگردید.

تعویض قطعات، مرحله ۵

شکل ۱۰. تعویض قطعات، مرحله ۵.