يجب ربط كل مفاتيح KeyMint بجهاز جذر موثوق به. جذر الثقة هو سلسلة بت مشتقة من المفتاح العام المستخدَم للتحقّق من توقيع صورة التمهيد، بالإضافة إلى حالة قفل أداة تحميل البرامج.
يجب
أيضًا ربط مفاتيح KeyMint بإصدار نظام التشغيل ومستوى التصحيح
للجهاز. لدعم البنية المُركّبة لإطار عمل Treble، يتضمّن ربط الإصدار هذا
مستويات تصحيحات منفصلة لكل قسم
(boot
وsystem
وvendor
). ويتيح ذلك
تعديل كل قسم بشكل مستقل، مع الحفاظ على توفير الحماية من الترجيع.
لتنفيذ عملية ربط الإصدار هذه، يحتاج التطبيق الموثوق KeyMint (TA) إلى طريقة لتلقّي إصدار نظام التشغيل الحالي ومستويات الرموز الإصلاحية بأمان، ولضمان أن تتطابق المعلومات التي يتلقّاها مع جميع المعلومات حول النظام الذي يعمل.
- الأجهزة التي تتضمّن ميزة "التمهيد التحقق منه" من Android (AVB):
- يمكن تضمين
مستوى التصحيح وإصدار نظام التشغيل في
vbmeta.img
، حتى يتمكّن برنامج الإقلاع من إرسالهما إلى KeyMint. - بالنسبة إلى الأقسام المتسلسلة، تكون معلومات الإصدار الخاصة بالقسم في VBMeta المتسلسل.
- بشكل عام، يجب أن تكون معلومات الإصدار في
VBMeta struct
التي تحتوي على بيانات التحقّق (التجزئة أو شجرة التجزئة) لقسم معيّن.
- يمكن تضمين
مستوى التصحيح وإصدار نظام التشغيل في
- الأجهزة غير المزوّدة بتقنية AVB:
- يجب أن تقدّم عمليات تنفيذ ميزة "التمهيد المتحقّق منه" تجزئة للبيانات الوصفية للإصدار إلى مشغّل التحميل، حتى يتمكّن مشغّل التحميل من تقديم التجزئة إلى KeyMint.
- يمكن أن يواصل
boot.img
تخزين مستويات التصحيح في العنوان. - يمكن
system.img
مواصلة تخزين مستويات التصحيح وإصدار نظام التشغيل في المواقع التي تتيح القراءة فقط. - تخزِّن
vendor.img
مستوى التصحيح في السمة للقراءة فقطro.vendor.build.version.security_patch
. - يمكن لبرنامج الإقلاع تقديم تجزئة لجميع البيانات التي تم التحقّق من صحتها من خلال ميزة "التمهيد التحقق منه" إلى KeyMint.
توضِّح العلامات التالية معلومات الإصدار للأقسام ذات الصلة:
Tag::VENDOR_PATCHLEVEL
:vendor
قسمTag::BOOT_PATCHLEVEL
: قسمboot
-
Tag::OS_PATCHLEVEL
وOS_VERSION
:system
قسم (تمّت إزالةOS_VERSION
من عنوانboot.img
).
يجب أن تتعامل عمليات تنفيذ KeyMint مع جميع مستويات التصحيح بشكل مستقل. تكون المفاتيح
صالحة إذا كانت جميع معلومات الإصدار تتطابق مع القيم المرتبطة بمفتاح. إذا كان
إصدار الجهاز الحالي أحدث من أي قيمة مرتبطة بمفتاح،
يعرض KeyMint الخطأ KEY_REQUIRES_UPGRADE
عند أي محاولة
لاستخدام المفتاح. بعد ذلك، ينفِّذ Keystore IKeyMintDevice::upgradeKey()
لإنشاء ملف keyblob جديد مرتبط بمستويات التصحيح الحالية (ويقوم Keystore بعد ذلك بحذف ملف keyblob السابق من خلال طلب
IKeyMintDevice::deleteKey()
).