ربط الإصدار

يجب ربط كل مفاتيح 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.

توضِّح العلامات التالية معلومات الإصدار للأقسام ذات الصلة:

يجب أن تتعامل عمليات تنفيذ KeyMint مع جميع مستويات التصحيح بشكل مستقل. تكون المفاتيح صالحة إذا كانت جميع معلومات الإصدار تتطابق مع القيم المرتبطة بمفتاح. إذا كان إصدار الجهاز الحالي أحدث من أي قيمة مرتبطة بمفتاح، تعرِض KeyMint الخطأ KEY_REQUIRES_UPGRADE عند أي محاولة لاستخدام المفتاح. بعد ذلك، ينفِّذ Keystore IKeyMintDevice::upgradeKey() لإنشاء ملف keyblob جديد مرتبط بمستويات التصحيح الحالية (ويقوم Keystore بعد ذلك بحذف ملف keyblob السابق من خلال طلب إلى IKeyMintDevice::deleteKey()).