وضعیت دستگاه نشان میدهد که چگونه میتوان نرمافزار را آزادانه روی دستگاه فلش کرد و آیا تأیید صحت اجرا میشود یا خیر. حالت های دستگاه LOCKED
و UNLOCKED
است. دستگاههای LOCKED
از فلش کردن نرمافزار جدید به دستگاه جلوگیری میکنند، در حالی که دستگاههای UNLOCKED
امکان تغییر را میدهند.
هنگامی که دستگاه روشن می شود، بوت لودر ابتدا بررسی می کند که آیا دستگاه LOCKED
است یا UNLOCKED
. اگر دستگاهی UNLOCKED
باشد، بوت لودر یک هشدار به کاربر نشان میدهد و سپس راهاندازی میشود، حتی اگر سیستمعامل بارگذاریشده توسط ریشه اعتماد امضا نشده باشد.
اگر دستگاه LOCKED
باشد، بوت لودر مراحل تأیید بوت را طی می کند تا نرم افزار دستگاه را تأیید کند. دستگاه های LOCKED
تنها در صورتی بوت می شوند که سیستم عامل بارگذاری شده به درستی توسط root of trust امضا شده باشد. برای جزئیات بیشتر، به جریان بوت مراجعه کنید.
تغییر وضعیت دستگاه
برای تغییر وضعیت دستگاه ، fastboot flashing [unlock | lock]
فرمان. برای محافظت از دادههای کاربر، تمام انتقالهای حالت، پارتیشنهای داده را پاک میکنند و قبل از حذف دادهها، تأیید کاربر را درخواست میکنند.
انتقال UNLOCKED
به LOCKED
زمانی پیش بینی می شود که کاربر یک دستگاه توسعه استفاده شده را خریداری کند. در نتیجه قفل کردن دستگاه، تا زمانی که هیچ هشداری وجود نداشته باشد، کاربر باید اطمینان داشته باشد که در حالتی است که توسط سازنده دستگاه تولید شده است. زمانی که برنامهنویسی بخواهد تأیید صحت دستگاه را برای اهداف توسعه غیرفعال کند، انتقال LOCKED
به UNLOCKED
انتظار میرود.
ریشه اعتماد
ریشه اعتماد کلید رمزنگاری است که برای امضای کپی اندروید ذخیره شده در دستگاه استفاده می شود. بخش خصوصی ریشه اعتماد فقط برای سازنده دستگاه شناخته شده است و برای امضای هر نسخه از Android در نظر گرفته شده برای توزیع استفاده می شود. بخش عمومی ریشه اعتماد در دستگاه تعبیه شده است و در مکانی ذخیره می شود که نمی توان آن را دستکاری کرد (معمولاً ذخیره سازی فقط خواندنی).
هنگامی که آندروید بارگیری می شود، بوت لودر از ریشه اعتماد برای تأیید صحت استفاده می کند. برای جزئیات بیشتر در مورد این فرآیند، به تأیید بوت مراجعه کنید. دستگاه ها ممکن است چندین بوت لودر داشته باشند و به همین دلیل ممکن است چندین کلید رمزنگاری در بازی وجود داشته باشد.
ریشه اعتماد قابل تنظیم توسط کاربر
دستگاه ها می توانند به صورت اختیاری به کاربر اجازه دهند تا ریشه اعتماد (به عنوان مثال، یک کلید عمومی) را پیکربندی کند. دستگاهها میتوانند و دستگاههای Google Pixel میتوانند از این ریشه اعتماد قابل تنظیم توسط کاربر برای Verified Boot علاوه بر ریشه اعتماد داخلی استفاده کنند.
اگر ریشه اعتماد قابل تنظیم توسط کاربر پیاده سازی شود، باید به گونه ای انجام شود که:
- برای تنظیم/پاک کردن ریشه اعتماد قابل تنظیم توسط کاربر، تأیید فیزیکی لازم است.
- ریشه اعتماد قابل تنظیم توسط کاربر فقط توسط کاربر نهایی قابل تنظیم است. قبل از اینکه کاربر نهایی دستگاه را دریافت کند، نمی توان آن را در کارخانه یا هر نقطه میانی تنظیم کرد.
- ریشه اعتماد قابل تنظیم توسط کاربر در ذخیره سازی غیرقابل دستکاری ذخیره می شود. دستکاری آشکار به این معنی است که میتوان تشخیص داد که آیا Android دادهها را دستکاری کرده است یا خیر، به عنوان مثال، آیا بازنویسی یا تغییر داده شده است.
- اگر یک root of trust قابل تنظیم توسط کاربر تنظیم شده باشد، دستگاه باید اجازه راهاندازی نسخه Android امضا شده با ریشه اعتماد داخلی یا ریشه اعتماد قابل تنظیم توسط کاربر را بدهد.
- هر بار که دستگاه با استفاده از ریشه اعتماد قابل تنظیم توسط کاربر بوت می شود، باید به کاربر اطلاع داده شود که دستگاه در حال بارگیری نسخه سفارشی اندروید است. به عنوان مثال، صفحه های هشدار، به دستگاه های
LOCKED
با مجموعه کلید سفارشی مراجعه کنید.
یکی از راههای پیادهسازی root of trust قابل تنظیم توسط کاربر، داشتن یک پارتیشن مجازی است که فقط زمانی میتوان آن را فلش کرد یا پاک کرد که دستگاه در حالت UNLOCKED
باشد. دستگاههای Google Pixel 2 از این رویکرد استفاده میکنند و پارتیشن مجازی avb_custom_key
نامیده میشود. فرمت داده های این پارتیشن خروجی دستور avbtool extract_public_key
است. در اینجا مثالی از نحوه تنظیم ریشه اعتماد قابل تنظیم توسط کاربر آورده شده است:
avbtool extract_public_key --key key.pem --output pkmd.bin
fastboot flash avb_custom_key pkmd.bin
ریشه اعتماد قابل تنظیم توسط کاربر را می توان با صدور زیر پاک کرد:
fastboot erase avb_custom_key