پروفایل 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 باشد.