تسليم بيانات اعتماد HLOS CDI في Android

عندما يتلقّى نظام التشغيل Android HLOS قيم شهادات تعريف المكوّنات (CDI) وشهاداته لنظام التشغيل Android HLOS من المرحلة السابقة، يقرأها ثم يستخلص ويمحو الأسرار اللازمة، مثل أزواج المفاتيح العامة والخاصة ومراحل شهادات تعريف المكوّنات (CDI) الإضافية، لاكتشاف خدمة SDV.

تحدث هذه العملية في أقرب وقت ممكن في عملية التشغيل أثناء early-init في المرحلة الثانية من عملية init. يضمن ذلك أن يستهلك نظام التشغيل Android HLOS قيم شهادات تعريف المكوّنات (CDI) ويمحوها قبل تنفيذ أي رمز تابع لجهة خارجية.

يمرّر برنامج Android Bootloader (أو أداة تحميل نظام التشغيل الضيف في برنامج Hypervisor، إذا لم يكن هناك برنامج Android Bootloader) القيم التالية من خلال Linux Kernel الخاص بخدمة SDV إلى second stage init في مساحة مستخدم Android:

  • قيمة شهادة تعريف المكوّنات (CDI) الخاصة بطبقة نظام التشغيل Android HLOS
  • قيمة شهادة تعريف المكوّنات (CDI) الخاصة بطبقة نظام التشغيل Android HLOS
  • سلسلة DICE بترميز CBOR حتى طبقة نظام التشغيل Android HLOS

تستخدِم هذه القيم تنسيق SdvDiceHandover. SdvDiceHandover هي خريطة بترميز CBOR يصفها جزء CDDL هذا:

SdvDiceHandover = {
   1 : bstr .size 32, ; CDI_Attest
   2 : bstr .size 32, ; CDI_Seal
   3 : DiceCertChain, ; Android SDV DICE chain
}

تحدّد واجهة HAL ‏IRemotelyProvisionedComponent DiceCertChain تنسيق DiceCertChain. لا تحتاج إلى CBOR بترميز محدد لـ SdvDiceHandover، على الرغم من أنّه يُنصح بشدة باستخدامه لأنّه يتيح نطاقًا أوسع من سياسات DICE.

يشبه تنسيق SdvDiceHandover إلى حدٍ كبيرٍ ما يلي:

  • AndroidDiceHandover تنسيق الذي يحدّده التنفيذ المرجعي لـ Open Profile for DICE ،

  • PvmfwDiceHandover التنسيق الذي تستخدمه pvmfw لتسليم سلسلة DICE إلى جهاز pVM. على سبيل المثال، Microdroid

على عكس تنسيق AndroidDiceHandover وبشكل مشابه لتنسيق PvmfwDiceHandover، تكون السمة DiceCertChain مطلوبة وليست اختيارية.

برنامج تشغيل kernel لـ Open Profile for DICE

يعتمد تسليم شهادة تعريف المكوّنات (CDI) الخاصة بنظام التشغيل Android HLOS من برنامج Android Bootloader (أو أداة تحميل نظام التشغيل الضيف في برنامج Hypervisor، إذا لم يكن هناك برنامج Bootloader) إلى نظام التشغيل Android HLOS يعتمد على برنامج تشغيل kernel لـ Open Profile for DICE. يكتب برنامج Android Bootloader إدخال سلسلة DICE في منطقة في ذاكرة نظام التشغيل الضيف يجب أن تحدّدها شجرة الجهاز (DT).

يقرأ برنامج التشغيل منطقة الذاكرة هذه التي تحدّدها شجرة الجهاز (DT) ويعرضها لمساحة المستخدم كجهاز /dev/open-dice0. يسمح برنامج التشغيل بقراءة منطقة الذاكرة هذه ومحوها. لا يتوفّر برنامج تشغيل Open Profile for DICE إلا على بنية arm64 لأنّ شجرة الجهاز (DT) هي مفهوم خاص ببنية arm64 فقط.

حدِّد منطقة الذاكرة التي يعرضها برنامج تشغيل Open Profile for DICE باستخدام عقدة reserved-memory في شجرة الجهاز (DT) التي يمكنك وضع علامة عليها لبرنامج التشغيل من خلال تحديد "google,open-dice" في السمة compatible. على سبيل المثال:

reserved-memory {
  // The number of u32 cells to represent the address of a memory region
  #address-cells = <2>;
  // The number of u32 cells to represent the size of a memory region
  #size-cells = <2>;
  ranges;
  // The unit address (after the @) must match the address in the reg property
  dice@D1C30000 {
    compatible = "google,open-dice";
    no-map;
    // The address and the size of the memory region that is passed to the Open
    // Profile for DICE driver. The address must be page-aligned, and the size a
    // multiple of the page size. The first two hex numbers (cells) represent
    // the address of the memory region, the last two represent its size.
    reg = <0x0 0xD1C30000 0x0 0x1000>;
  };
};