Когда Android HLOS получает значения CDI и цепочку DICE с предыдущего этапа, он считывает их, а затем вычисляет и удаляет необходимые секреты (такие как пары открытого и закрытого ключей и дальнейшие этапы CDI) для обнаружения сервисов SDV.
Этот процесс происходит как можно раньше в процессе загрузки во время early-init на втором этапе инициализации . Это гарантирует, что Android HLOS обработает и очистит значения CDI до выполнения какого-либо стороннего кода.
Загрузчик Android (или гостевой загрузчик в гипервизоре, если загрузчик Android отсутствует) передает следующие значения через ядро Linux SDV на second stage init в пользовательском пространстве Android:
- Значение CDI аттестации слоя HLOS Android.
- Запечатывание значения CDI слоя HLOS Android.
- Цепочка 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
}
Параметр DiceCertChain в HAL IRemotelyProvisionedComponent определяет формат DiceCertChain . Для SdvDiceHandover не требуется детерминированное кодирование CBOR , хотя оно настоятельно рекомендуется, поскольку поддерживает более широкий спектр политик DICE.
Формат SdvDiceHandover очень похож на:
Формат
AndroidDiceHandover, определенный в эталонной реализации Open Profile for DICE.Формат
PvmfwDiceHandover, используемыйpvmfwдля передачи цепочки DICE виртуальному серверу pVM. Например, Microdroid.
В отличие от AndroidDiceHandover и аналогично формату PvmfwDiceHandover , DiceCertChain является обязательным, а не необязательным.
Открытый профиль для драйвера ядра DICE
Передача CDI Android HLOS от загрузчика Android (или гостевого загрузчика в гипервизоре, если загрузчика нет) к Android HLOS осуществляется с помощью драйвера ядра Open Profile for DICE . Загрузчик Android записывает запись цепочки DICE в область памяти гостевой системы, которую должно указать дерево устройств (DT).
Драйвер считывает указанную в DT область памяти и предоставляет к ней доступ в пользовательском пространстве как устройство /dev/open-dice0 . Драйвер позволяет читать и очищать эту область памяти. Драйвер Open Profile for DICE существует только для архитектур arm64, поскольку концепция дерева устройств является специфичной только для 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>;
};
};