Saat HLOS Android menerima nilai CDI dan rantai DICE dari tahap sebelumnya, HLOS akan membacanya, lalu mendapatkan dan menghapus rahasia yang diperlukan (seperti pasangan kunci publik dan pribadi serta tahap CDI selanjutnya) untuk Penemuan Layanan SDV.
Proses ini terjadi sesegera mungkin dalam bootflow selama
early-init dalam init tahap kedua. Dengan melakukannya, HLOS Android akan menggunakan dan menghapus nilai CDI sebelum kode pihak ketiga dijalankan.
Bootloader Android (atau loader tamu di hypervisor, jika tidak ada Bootloader Android) meneruskan nilai berikut melalui Kernel Linux SDV ke second stage init di ruang pengguna Android:
- Nilai CDI pengesahan lapisan HLOS Android.
- Menyegel nilai CDI lapisan HLOS Android.
- Rantai DICE yang dienkode CBOR hingga lapisan HLOS Android.
Nilai ini menggunakan format SdvDiceHandover. SdvDiceHandover adalah peta berenkode CBOR yang dijelaskan oleh fragmen CDDL ini:
SdvDiceHandover = {
1 : bstr .size 32, ; CDI_Attest
2 : bstr .size 32, ; CDI_Seal
3 : DiceCertChain, ; Android SDV DICE chain
}
DiceCertChain HAL IRemotelyProvisionedComponent menentukan
format DiceCertChain. Anda tidak memerlukan
CBOR yang dienkode secara deterministik untuk SdvDiceHandover, meskipun sangat
direkomendasikan karena mendukung berbagai kebijakan DICE.
Format SdvDiceHandover sangat mirip dengan:
Format
AndroidDiceHandoveryang ditentukan oleh penerapan referensi Open Profile for DICE,Format
PvmfwDiceHandoveryang digunakanpvmfwuntuk menyerahkan rantai DICE ke pVM. Misalnya, Microdroid.
Berbeda dengan AndroidDiceHandover dan serupa dengan format
PvmfwDiceHandover, DiceCertChain diperlukan dan tidak opsional.
Buka Profil untuk driver kernel DICE
Penyerahan CDI HLOS Android DICE dari Bootloader Android (atau pemuat tamu di hypervisor, jika tidak ada bootloader) ke HLOS Android bergantung pada driver kernel Open Profile for DICE. Bootloader Android menulis entri Rantai DICE ke region di memori tamu yang harus ditentukan oleh Device Tree (DT).
Driver membaca region memori yang ditentukan DT ini dan mengeksposnya ke
ruang pengguna sebagai perangkat /dev/open-dice0. Driver memungkinkan membaca dan menghapus
area memori ini. Driver Open Profile untuk DICE hanya ada pada arsitektur arm64 karena pohon perangkat adalah konsep khusus arm64.
Tentukan region memori yang diekspos oleh driver Open Profile for DICE menggunakan node
reserved-memory di DT yang Anda beri tag untuk driver dengan menentukan
"google,open-dice" di properti compatible. Contoh:
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>;
};
};