Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

استئناف على إعادة التشغيل

عندما يتم تنزيل OTA وإعداده للتطبيق عبر تحديث A / B أو A / B الظاهري أو أي طريقة أخرى متاحة عبر فئة RecoverySystem ، ستحاول Resume-on-Reboot إلغاء قفل وحدة تخزين Credential Encrypted (CE) بعد إعادة تشغيل الجهاز إلى تطبيق OTA. يمكن إقران هذا بنظام OTA الذي يطبق التحديثات عندما يكون ذلك أكثر ملاءمة للمستخدم مثل الأوقات التي يُتوقع فيها أن يكون الجهاز خاملاً.

خلفية

بالنسبة لمطوري التطبيقات ، يدعم Android التمهيد المباشر الذي يمكّن التطبيقات من البدء قبل أن يفتح المستخدم وحدة تخزين Credential Encrypted (CE). نظرًا لأن المزيد من مطوري التطبيقات يستخدمون دعم Direct Boot ، يتمتع المستخدم بتجربة أفضل قبل إدخال عامل معرفة شاشة القفل (LSKF) بعد التمهيد.

يسمح Resume-on-Reboot بإلغاء تأمين تخزين CE لجميع التطبيقات ، بما في ذلك تلك التي لا تدعم التشغيل المباشر بعد ، بعد إعادة التشغيل التي بدأها OTA. تتيح هذه الميزة للمستخدمين تلقي إشعارات من جميع تطبيقاتهم المثبتة بعد إعادة التشغيل.

نموذج التهديد

يجب أن يحافظ تطبيق Resume-on-Reboot على خاصية أنه عندما يقع الجهاز في أيدي المهاجم ، يكون من الصعب للغاية على هذا المهاجم استعادة البيانات المشفرة بـ CE الخاصة بالمستخدم ، حتى إذا كان الجهاز قيد التشغيل ، يتم إلغاء تأمين تخزين CE ، وقام المستخدم بإلغاء قفل الجهاز بعد تلقي OTA ؛ لمقاومة الهجوم من الداخل ، نفترض أيضًا أن المهاجم حصل على حق الوصول إلى مفاتيح التوقيع المشفرة للبث.

على وجه التحديد ، نطلب عدم إمكانية قراءة تخزين CE بواسطة مهاجم يمتلك الجهاز فعليًا ومن ثم لديه هذه الإمكانات والقيود:

  • يمكن استخدام مفتاح التوقيع الخاص بأي بائع أو شركة لتوقيع رسائل عشوائية.
  • يمكن أن يتسبب في تلقي الجهاز OTA.
  • يمكن تعديل تشغيل أي جهاز (معالج التطبيقات ، الفلاش ، إلخ) باستثناء ما هو مفصل أدناه ، ولكن هذا التعديل ينطوي على تأخير لمدة ساعة واحدة على الأقل ودورة طاقة تؤدي إلى تدمير محتويات ذاكرة الوصول العشوائي.
  • لا يمكن تعديل تشغيل الأجهزة المقاومة للعبث (على سبيل المثال ، Titan M).
  • لا يمكن قراءة ذاكرة الوصول العشوائي للجهاز المباشر.
  • لا يمكن تخمين بيانات اعتماد المستخدم (PIN ، النمط ، كلمة المرور) أو التسبب في إدخالها بطريقة أخرى.

مبادئ توجيهية للمنفذ

اعتبارًا من يوليو 2020 ، تنقسم تطبيقات Resume-on-Reboot HAL إلى فئتين:

  1. إذا كانت أجهزة SoC تدعم استمرار ذاكرة الوصول العشوائي (RAM) عبر عمليات إعادة التشغيل ، فيمكن لمصنعي المعدات الأصلية استخدام التنفيذ الافتراضي في AOSP (الضمان الافتراضي لذاكرة الوصول العشوائي).
  2. إذا كانت أجهزة الجهاز أو SoC تدعم جيبًا آمنًا للأجهزة (معالج أمان منفصل مع ذاكرة الوصول العشوائي وذاكرة القراءة فقط) ، فيجب أيضًا:
    • كن قادرًا على اكتشاف إعادة تشغيل وحدة المعالجة المركزية الرئيسية.
    • الحصول على مصدر مؤقت للأجهزة يستمر عبر عمليات إعادة التشغيل ؛ أي ، يجب أن يكون الجيب قادرًا على اكتشاف إعادة التشغيل وانتهاء صلاحية مؤقت تم ضبطه قبل إعادة التشغيل.
    • دعم تخزين مفتاح مُستودع في ذاكرة الوصول العشوائي (RAM) / ذاكرة القراءة فقط (ROM) بحيث لا يمكن استعادتها بهجمات غير متصلة بالإنترنت. يجب تخزين مفتاح Resume-on-Reboot بطريقة تجعل من المستحيل على المطلعين أو المهاجمين استعادته.

ذاكرة الوصول العشوائي الضمان الافتراضي

AOSP لديه تطبيق Resume-on-Reboot HAL باستخدام استمرارية RAM. لكي ينجح هذا ، يجب على مصنعي المعدات الأصلية التأكد من أن SoCs تدعم استمرار ذاكرة الوصول العشوائي عبر عمليات إعادة التشغيل. يتعذر على بعض SoCs الاحتفاظ بمحتويات ذاكرة الوصول العشوائي عبر إعادة التشغيل ، لذلك يُنصح مصنعي المعدات الأصلية باستشارة شركاء SoC قبل تمكين HAL الافتراضي هذا. المرجع الأساسي لهذا في القسم أدناه.

عندما يتم تنزيل OTA وإعداده للتطبيق عن طريق تحديث A / B ، أو A / B الظاهري ، أو أي طريقة أخرى متاحة عبر فئة RecoverySystem ، سيحاول Resume-on-Reboot إلغاء قفل وحدة تخزين Credential Encrypted (CE) بعد الجهاز إعادة التشغيل لتطبيق تحديث OTA. يمكن إقران هذا بنظام OTA الذي يطبق التحديثات عندما يكون ذلك أكثر ملاءمة للمستخدم مثل الأوقات التي يُتوقع أن يكون فيها الجهاز خاملاً.

تدفق تحديث OTA باستخدام Resume-on-Reboot

يجب أن يكون التطبيق العميل OTA على الهاتف Manifest.permission.REBOOT و Manifest.permisson.RECOVERY أذونات لاستدعاء الأساليب اللازمة لتنفيذ استئناف على اساس اعادة التشغيل. مع وجود هذا الشرط الأساسي ، يكون تدفق التحديث هو:

  1. تحديث تنزيلات تطبيق عميل OTA
  2. يستدعي تطبيق عميل OTA إلى RecoverySystem#prepareForUnattendedUpdate مما يؤدي إلى مطالبة المستخدم RecoverySystem#prepareForUnattendedUpdate التعريف الشخصي أو النمط أو كلمة المرور الخاصة به على شاشة القفل أثناء فتح القفل التالي
  3. عندما يقوم المستخدم بعد ذلك بفتح قفل الجهاز على شاشة القفل ، يكون الجهاز جاهزًا لتطبيق التحديث
  4. يستدعي تطبيق عميل OTA إلى RecoverySystem#rebootAndApply والذي يؤدي على الفور إلى إعادة التشغيل

في نهاية هذا التدفق ، يتم إعادة تشغيل الجهاز وتقوم آلية Resume-on-Reboot بإلغاء تأمين وحدة تخزين بيانات الاعتماد المشفرة (CE). بالنسبة للتطبيقات ، يظهر هذا على أنه إلغاء قفل مستخدم عادي ، بحيث تتلقى جميع الإشارات ، مثل ACTION_LOCKED_BOOT_COMPLETED و ACTION_BOOT_COMPLETED كما تفعل عادةً.

تعديل تكوينات المنتج

لكي يتم وضع علامة على المنتج على أنه يدعم ميزة Resume-on-Reboot ، يجب أن يتضمن تطبيق RebootEscrow HAL ويتضمن ملف XML الخاص بعلامة الميزة. يعمل التنفيذ الافتراضي جيدًا على الأجهزة التي تستخدم إعادة التشغيل أثناء التشغيل (أي ، لا يتم إزالة الطاقة من الذاكرة الحيوية أثناء إعادة التشغيل).

إعادة تشغيل علامة ميزة الضمان

يجب أن تكون علامة الميزة موجودة أيضًا:

PRODUCT_COPY_FILES += \
    frameworks/native/data/etc/android.hardware.reboot_escrow.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.reboot_escrow.xml

تنفيذ HAL للضمان الافتراضي لإعادة التشغيل

لاستخدام التطبيق الافتراضي ، يجب حجز 65536 (0x10000) بايت للتطبيق. يجب عدم كتابة هذه البايتات في وحدة تخزين غير متطايرة لتحتفظ بخصائص الأمان.

تغييرات شجرة جهاز Linux kernel

في شجرة جهاز Linux kernel ، يجب عليك حجز ذاكرة لمنطقة pmem . في المثال التالي تم حجز 0x50000000 :

  reserved-memory {
    my_reservation@0x50000000 {
      no-map;
      reg = <0x50000000 0x10000>;
    }
  }

  reboot_escrow@0 {
    compatible = "pmem-region";
    reg = <0x50000000 0x10000>;
  };

تحقق من وجود جهاز جديد في دليل الحظر باسم /dev/block/pmem0 (مثل pmem1 أو pmem2 ).

تغييرات Device.mk

بافتراض أن جهازك الجديد من الخطوة السابقة يسمى pmem0 ، يجب إضافة الإدخالات الجديدة التالية إلى vendor/<oem>/<product>/device.mk :

# Resume on Reboot support
PRODUCT_PROPERTY_OVERRIDES += \
    ro.rebootescrow.device=/dev/block/pmem0
PRODUCT_PACKAGES += \
    android.hardware.rebootescrow-service.default

قواعد SELinux

يجب إضافة إدخالات جديدة إلى file_contexts للجهاز:

/dev/block/pmem0  u:object_r:rebootescrow_device:s0
/vendor/bin/hw/android\.hardware\.rebootescrow-service\.default  u:object_r:hal_rebootescrow_default_exec:s0