ربط الإصدار

يجب ربط جميع مفاتيح KeyMint بجذر الثقة للجهاز. جذر الثقة هو سلسلة بتات مشتقة من المفتاح العام المستخدم للتحقق من توقيع صورة التشغيل، إلى جانب حالة قفل برنامج الإقلاع.

يجب أيضًا ربط مفاتيح KeyMint بإصدار نظام التشغيل ومستوى رمز التصحيح على الجهاز. لدعم بنية Treble المعيارية، يتضمّن ربط الإصدار هذا مستويات تصحيح منفصلة لكل قسم (boot وsystem وvendor). يتيح ذلك تحديث كل قسم بشكل مستقل، مع توفير حماية من العودة إلى إصدار سابق.

لتنفيذ عملية ربط الإصدار هذه، يحتاج التطبيق الموثوق به (TA) في KeyMint إلى طريقة لتلقّي إصدار نظام التشغيل الحالي ومستويات رموز التصحيح بشكل آمن، والتأكّد من أنّ المعلومات التي يتلقّاها تتطابق مع جميع المعلومات المتعلّقة بالنظام قيد التشغيل.

  • الأجهزة التي تتضمّن ميزة "التشغيل المتحقّق منه في 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 لإنشاء كائن ثنائي كبير جديد للمفتاح مرتبط بمستويات رموز التصحيح الحالية (ويحذف Keystore بعد ذلك الكائن الثنائي الكبير السابق للمفتاح من خلال استدعاء دالة IKeyMintDevice::deleteKey).