Android HLOS CDI devri

Android HLOS, önceki aşamadan CDI değerlerini ve DICE zincirini aldığında bunları okur, ardından SDV hizmeti keşfi için gerekli sırları (ör. ortak ve özel anahtar çiftleri ve diğer CDI aşamaları) türetip siler.

Bu işlem, early-init sırasında ikinci aşama başlatma sırasında mümkün olan en kısa sürede gerçekleşir. Bu sayede, herhangi bir üçüncü taraf kodu yürütülmeden önce Android HLOS'un CDI değerlerini tüketip temizlemesi sağlanır.

Android Bootloader (veya Android Bootloader yoksa hipervizördeki konuk yükleyici), aşağıdaki değerleri SDV'nin Linux çekirdeği üzerinden Android kullanıcı alanındaki second stage init'ye iletir:

  • Android HLOS katmanının onaylama CDI değeri.
  • Android HLOS katmanının CDI değerini kapatma.
  • Android HLOS katmanına kadar CBOR kodlu DICE zinciri.

Bu değerler SdvDiceHandover biçimini kullanır. SdvDiceHandover, bu CDDL parçasıyla açıklanan bir CBOR kodlu haritadır:

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

IRemotelyProvisionedComponent HAL DiceCertChain, DiceCertChain biçimini belirtir. SdvDiceHandover için belirleyici şekilde kodlanmış CBOR gerekmez ancak daha geniş bir DICE politikası aralığını desteklediği için şiddetle tavsiye edilir.

SdvDiceHandover biçimi, aşağıdakilere çok benzer:

  • Open Profile for DICE referans uygulamasının tanımladığı AndroidDiceHandover biçimi,

  • PvmfwDiceHandover biçimi, pvmfw'nin DICE zincirini bir pVM'ye (ör. Microdroid) aktarmak için kullandığı biçimdir.

AndroidDiceHandover biçiminin aksine ve PvmfwDiceHandover biçimine benzer şekilde, DiceCertChain biçimi zorunludur ve isteğe bağlı değildir.

DICE çekirdek sürücüsü için profili açma

Android HLOS CDI'nin Android önyükleyicisinden (veya önyükleyici yoksa hipervizördeki konuk yükleyiciden) Android HLOS'a DICE aktarımı, Open Profile for DICE kernel driver'a dayanır. Android önyükleyicisi, DICE zinciri girişini konuğun belleğindeki bir bölgeye yazar. Bu bölge, cihaz ağacı (DT) tarafından belirtilmelidir.

Sürücü, DT'nin belirttiği bu bellek bölgesini okur ve kullanıcı alanına /dev/open-dice0 cihazı olarak sunar. Sürücü, bu bellek bölgesinin okunmasına ve silinmesine izin verir. DICE sürücüsü için Açık Profil yalnızca arm64 mimarilerinde bulunur. Bunun nedeni, cihaz ağacının yalnızca arm64'e özgü bir kavram olmasıdır.

Open Profile for DICE sürücüsünün, compatible özelliğinde "google,open-dice" belirterek sürücü için etiketlediğiniz DT'deki bir reserved-memory düğümünü kullanarak sunduğu bellek bölgesini belirtin. Örneğin:

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>;
  };
};