Gdy system Android HLOS otrzyma swoje wartości i certyfikaty CDI Androida HLOS z poprzedniego etapu, odczyta je, a następnie wygeneruje i usunie niezbędne tajne dane, takie jak pary kluczy publicznych i prywatnych oraz kolejne etapy CDI, na potrzeby wykrywania usług SDV.
Ten proces odbywa się jak najszybciej podczas uruchamiania w fazie
early-init w drugiej fazie inicjowania. Dzięki temu system Android HLOS zużywa i usuwa wartości CDI, zanim zostanie wykonany kod innej firmy.
Bootloader Androida (lub program ładujący gościa w hiperwizorze, jeśli nie ma bootloadera Androida) przekazuje te wartości przez jądro systemu Linux SDV do second stage init w przestrzeni użytkownika Androida:
- wartość CDI atestu warstwy Android HLOS;
- wartość CDI uszczelnienia warstwy Android HLOS;
- łańcuch DICE zakodowany w formacie CBOR do warstwy Android HLOS.
Te wartości używają formatu SdvDiceHandover. SdvDiceHandover to mapa zakodowana w formacie
CBOR opisana przez ten fragment CDDL:
SdvDiceHandover = {
1 : bstr .size 32, ; CDI_Attest
2 : bstr .size 32, ; CDI_Seal
3 : DiceCertChain, ; Android SDV DICE chain
}
Format DiceCertChain określa HAL IRemotelyProvisionedComponent DiceCertChain. W przypadku SdvDiceHandover nie jest wymagany
deterministycznie zakodowany format CBOR, ale jest on wysoce
zalecany, ponieważ obsługuje szerszy zakres zasad DICE.
Format SdvDiceHandover jest bardzo podobny do:
AndroidDiceHandoverformatu zdefiniowanego przez implementację referencyjną Open Profile for DICE ;PvmfwDiceHandoverformatu, któregopvmfwużywa do przekazywania łańcucha DICE do pVM. Na przykład Microdroid.
W przeciwieństwie do formatu AndroidDiceHandover i podobnie jak w przypadku formatu PvmfwDiceHandover format DiceCertChain jest wymagany, a nie opcjonalny.
Sterownik jądra Open Profile for DICE
Przekazywanie CDI Androida HLOS z programu rozruchowego Androida (lub modułu wczytującego gościa w hipernadzorcy, jeśli nie ma programu rozruchowego) do Androida HLOS opiera się na sterowniku jądra systemu Open Profile for DICE. Bootloader Androida zapisuje wpis łańcucha DICE w regionie pamięci gościa, który musi określić drzewo urządzenia (DT).
Sterownik odczytuje ten region pamięci określony przez DT i udostępnia go w przestrzeni użytkownika jako urządzenie /dev/open-dice0. Sterownik umożliwia odczytywanie i usuwanie tego regionu pamięci. Sterownik Open Profile for DICE występuje tylko w architekturach arm64, ponieważ drzewo urządzenia jest koncepcją dostępną tylko w architekturze arm64.
Określ region pamięci, który sterownik Open Profile for DICE udostępnia za pomocą
reserved-memory węzła w DT, który oznaczysz dla sterownika, określając
"google,open-dice" we właściwości compatible. Przykład:
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>;
};
};