نمایه SDV برای DICE

پروفایل SDV برای موتور ترکیب شناسه دستگاه (DICE) افزونه‌ای از پروفایل اندروید برای DICE است. در SDV، یک ماشین مجازی از دو زنجیره DICE موازی استفاده می‌کند:

  • زنجیره امن DICE جهانی
  • زنجیره DICE اندروید SDV

این فیلدها از توصیفگر پیکربندی پروفایل اندروید برای DICE مربوط به هر یک از این زنجیره‌ها هستند:

نام کلید نوع توضیحات
نام کامپوننت -70002 tstr توصیه شده در هر لایه CDI . نام کامپوننت به طور واضح مرحله را در بین تمام زنجیره‌های سخت‌افزاری DICE که ماشین‌های مجازی SDV اندروید را روی یک وسیله نقلیه یا پلتفرم وسیله نقلیه اجرا می‌کنند، مشخص می‌کند.
نسخه امنیتی -70005 uint در هر مرحله CDI الزامی است. تعریف یک سیاست DICE را فعال می‌کند که از اتصال نسخه‌های ناامن ماشین مجازی از راه دور به شبکه امن SDV جلوگیری می‌کند.
نام نمونه کامپوننت -70007 tstr در اولین لایه CDI مخصوص ماشین مجازی الزامی است. برای مثال، پس از هایپروایزر، برای زنجیره SDV DICE اندروید. نام نمونه SDV. اگر چندین لایه CDI حاوی نام نمونه کامپوننت باشند، هر لایه باید مقدار یکسانی داشته باشد.

زنجیره امن DICE جهانی

زنجیره DICE مربوط به Secure World همان چیزی است که سرور Remote Key Provisioning (RKP) اندروید از دستگاه‌های اندروید دریافت می‌کند. generateCertificateRequestV2() مربوط به IRemotelyProvisionedComponent HAL این زنجیره DICE را در اختیار اندروید قرار می‌دهد.

این جدول یک نمونه زنجیره DICE از Secure World را نشان می‌دهد:

مرحله بوت لایه CDI دایس صادر شده توسط
بوت لودر اصلی CDI[0] یو دی اس
بوت لودر ثانویه CDI[1] بوت لودر اصلی
بوت TEE CDI[2] بوت لودر ثانویه
بوت TA کی‌مینت CDI[3] (برگ) تی

برای پیاده‌سازی برنامه‌ی کاربردی مورد اعتماد KeyMint (TA)، از یکی از این گزینه‌ها استفاده کنید:

  • یک نمونه KeyMint برای همه ماشین‌های مجازی SDV: شما باید یک CDI واحد برای همه ماشین‌های مجازی تعیین کنید.

یا،

  • یک نمونه KeyMint برای هر ماشین مجازی SDV: شما باید برای هر ماشین مجازی یک مقدار CDI متفاوت تعیین کنید. مقادیر CDI مجزا باید حاوی یک نام نمونه کامپوننت باشند که با نام نمونه کامپوننت ماشین مجازی مطابقت داشته باشد.

زنجیره DICE اندروید SDV

زنجیره DICE SDV اندروید، نرم‌افزاری را که در مسیر بوت از طریق هایپروایزر به سیستم عامل سطح بالای اندروید (HLOS) که روی ماشین‌های مجازی SDV اجرا می‌شود، اجرا می‌شود، تأیید می‌کند.

این جدول یک نمونه زنجیره DICE SDV اندروید را نشان می‌دهد:

مرحله بوت لایه CDI دایس صادر شده توسط
بوت لودر اصلی CDI[0] یو دی اس
بوت لودر ثانویه CDI[1] بوت لودر اصلی
هایپروایزر CDI[2] بوت لودر ثانویه
اندروید HLOS CDI[3] (برگ) (لودر اندروید در) هایپروایزر ۱

۱- هایپروایزر، بوت لودر اندروید را در سیستم عامل مهمان به عنوان یک لایه تأیید می‌کند. بوت لودر اندروید، HLOS اندروید را تأیید می‌کند.

گواهی CDI HLOS اندروید

بوت لودر اندروید (یا هایپروایزر، اگر بوت لودر اندروید وجود نداشته باشد و فقط یک برنامه "لودر" اندروید وجود داشته باشد که ماشین مجازی را درون هایپروایزر بارگذاری می‌کند) گواهی CDI اندروید HLOS را امضا می‌کند و HLOS اندروید را پوشش می‌دهد. به عنوان مثال، تمام کدهایی را که بوت لودر اندروید طبق Android Verified Boot (AVB) تأیید می‌کند، پوشش می‌دهد.

گواهی HLOS CDI اندروید باید حاوی مقادیر مختص SDV سیستم عامل اندروید باشد که آسیب‌پذیری‌های امنیتی را کاهش می‌دهد. به عنوان مثال، نشت اطلاعات محرمانه احتمالی با مسدود کردن ماشین‌های مجازی با آسیب‌پذیری‌های شناخته شده از SDV Secure Mesh. تأیید AVB بیشتر این مقادیر را فراهم می‌کند.

آنها همچنین در TEE به KeyMint تحویل داده می‌شوند، جایی که گواهی توسط leaf CDI از زنجیره SecureWorld DICE امضا می‌شود و در DeviceInfo به اندروید منتقل می‌شود تا ویژگی‌هایی مانند گواهی کلید و شناسه را در هسته اندروید فعال کند.

فیلدهای ورودی کد و گواهی codeHash

خلاصه VBMeta (خروجی که بوت لودر اندروید برای تأیید AVB انجام می‌دهد) نرم‌افزار HLOS اندروید را پوشش می‌دهد. بنابراین، به عنوان android-dice-input-values ​​برای استخراج اسرار CDI عمل می‌کند و به فیلد dice-cert-fields گواهی CDI می‌رود.

الگوریتم هش پیشنهادی برای AVB، SHA-256 است که منجر به یک خلاصه VBMeta به طول ۳۲ بایت می‌شود. برخلاف Open Profile for DICE، Android Profile for DICE به android-dice-hash-algos اجازه می‌دهد تا android-dice-input-values به طول ۳۲ بایت برای جریان DICE استفاده کنند و همچنین همان مقدار ۳۲ بایتی را به عنوان codeHash در گواهی DICE قرار دهند.

توصیفگر پیکربندی: فیلدهای موجود در پروفایل اندروید برای DICE

فراتر از آنچه برای همه لایه‌های CDI شرح داده شده است، جزئیات زیر در مورد فیلدهای توصیفگر پیکربندی از پروفایل اندروید برای DICE اعمال می‌شود:

نام کلید نوع توضیحات
نسخه کامپوننت -70003 int نسخه سیستم عامل از AVB version-info-avb . همچنین مشابه android.os.Build.VERSION.release است.
نسخه امنیتی -70005 uint سطح وصله امنیتی پارتیشن system با فرمت YYYYMMDD .
نشانگر RKP VM -70006 null نشانگر RKP VM مانع از صدور گواهی توسط Remote Key Provisioning برای زنجیره Android SDV DICE می‌شود.

نشانگر ماشین مجازی RKP باید در اولین گواهی CDI زنجیره DICE اندروید SDV که با زنجیره DICE امن جهان مشترک نیست، ظاهر شود . همچنین نباید در هیچ گواهی CDI دیگری ظاهر شود تا از اینکه سرور RKP rkp-avf-support زنجیره DICE را به عنوان یک ماشین مجازی RKP در نظر بگیرد، جلوگیری شود.

توصیفگر پیکربندی: فیلدهای جدید

توصیفگر پیکربندی گواهی HLOS CDI اندروید باید حاوی مقادیر خاص SDV فراتر از مقادیری باشد که پروفایل اندروید برای DICE توصیف می‌کند. پروفایل SDV برای DICE محدوده مقادیر کلیدی [-71000, -71999] را برای این منظور رزرو می‌کند. می‌توانید فیلدهای خاص پیاده‌سازی را با استفاده از مقادیر کلیدی خارج از محدوده رزرو شده اضافه کنید. مقادیر خاص SDV عبارتند از:

نام کلید نوع توضیحات
وضعیت بوت تأیید شده -71000 tstr یا green ، یا yellow یا orange .
ساخت اثر انگشت -71001 tstr رشته‌ای قابل خواندن توسط انسان که به طور منحصر به فرد این ساخت را مشخص می‌کند، همان ro.build.fingerprint . پارامترهای ساخت 3.2.2 اندروید CDD، cdd-3-2-2 این را تعریف می‌کند. VBMeta این را به عنوان ویژگی با نام com.android.build.system.fingerprint ذخیره می‌کند.
سطح وصله امنیتی system_ext -71002 uint سطح وصله امنیتی پارتیشن system_ext با فرمت YYYYMMDD .
سطح وصله امنیتی product -71003 uint سطح وصله امنیتی پارتیشن product با فرمت YYYYMMDD .
سطح وصله امنیتی vendor -71004 uint سطح وصله امنیتی پارتیشن vendor با فرمت YYYYMMDD .
سطح وصله امنیتی boot -71005 uint سطح وصله امنیتی پارتیشن boot (که شامل هسته لینوکس است) با فرمت YYYYMMDD .
حالت بوت SDV -71006 tstr locked یا unlocked . برای کسب اطلاعات بیشتر، به وضعیت مش و تأمین آن مراجعه کنید.

انتخاب مقدار ورودی حالت از Android HLOS CDI

android-dice-mode گواهی Android HLOS CDI از تعریف زیر استفاده می‌کند:

قفل AVB باز شد AVB قفل شده است
حالت بوت SDV آنلاک شد اشکال‌زدایی اشکال‌زدایی
حالت بوت SDV قفل شده است پیکربندی نشده (نامعتبر) عادی

تابع مشتق کلید

android-dice-kdf که جفت کلید عمومی و خصوصی را از راز CDI_Attest برای Android HLOS CDI استخراج می‌کند، باید HKDF با تابع هش SHA512 باشد.