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

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

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

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

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

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

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

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

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

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

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

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

برنامج تشغيل النواة Open Profile for DICE

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

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

حدِّد منطقة الذاكرة التي يعرضها برنامج التشغيل Open Profile for DICE باستخدام عقدة reserved-memory في شجرة الجهاز التي تصنّفها لبرنامج التشغيل من خلال تحديد "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>;
  };
};