Khi HLOS Android nhận được các giá trị CDI và chuỗi DICE từ giai đoạn trước, hệ thống sẽ đọc các giá trị đó, sau đó lấy và xoá các bí mật cần thiết (chẳng hạn như cặp khoá công khai và riêng tư cũng như các giai đoạn CDI khác) cho Dịch vụ khám phá SDV.
Quá trình này diễn ra càng sớm càng tốt trong quy trình khởi động trong
early-init ở giai đoạn khởi động thứ hai. Việc này giúp đảm bảo rằng HLOS Android sử dụng và xoá các giá trị CDI trước khi bất kỳ mã bên thứ ba nào thực thi.
Trình tải khởi động Android (hoặc trình tải khách trong trình điều khiển ảo hoá, nếu không có Trình tải khởi động Android) sẽ truyền các giá trị sau đây thông qua Nhân Linux của SDV đến second stage init trong không gian của người dùng Android:
- Giá trị CDI chứng thực của lớp HLOS Android.
- Giá trị CDI niêm phong của lớp HLOS Android.
- Chuỗi DICE được mã hoá CBOR cho đến lớp HLOS Android.
Các giá trị này sử dụng định dạng SdvDiceHandover. SdvDiceHandover là một
bản đồ được mã hoá CBOR do đoạn CDDL này mô tả:
SdvDiceHandover = {
1 : bstr .size 32, ; CDI_Attest
2 : bstr .size 32, ; CDI_Seal
3 : DiceCertChain, ; Android SDV DICE chain
}
IRemotelyProvisionedComponent HAL DiceCertChain chỉ định định dạng của DiceCertChain. Bạn không cần
CBOR được mã hoá một cách xác định cho SdvDiceHandover, mặc dù bạn nên dùng vì định dạng này hỗ trợ nhiều chính sách DICE hơn.
Định dạng SdvDiceHandover rất giống với:
AndroidDiceHandoverđịnh dạng mà Hồ sơ mở cho DICE quá trình triển khai tham chiếu xác định,PvmfwDiceHandoverđịnh dạng màpvmfwdùng để chuyển chuỗi DICE sang pVM. Ví dụ: Microdroid.
Ngược lại với định dạng AndroidDiceHandover và tương tự như định dạng PvmfwDiceHandover, DiceCertChain là bắt buộc và không phải là không bắt buộc.
Trình điều khiển hạt nhân Hồ sơ mở cho DICE
Việc chuyển giao CDI HLOS Android của Trình tải khởi động Android (hoặc trình tải khách trong trình điều khiển ảo hoá, nếu không có trình tải khởi động) sang HLOS Android dựa vào trình điều khiển hạt nhân Hồ sơ mở cho DICE. Trình tải khởi động Android ghi mục Nhập chuỗi DICE vào một vùng trong bộ nhớ của khách mà Cây thiết bị (DT) phải chỉ định.
Trình điều khiển đọc vùng bộ nhớ này mà DT chỉ định và hiển thị vùng bộ nhớ đó cho không gian người dùng dưới dạng thiết bị /dev/open-dice0. Trình điều khiển cho phép đọc và xoá vùng bộ nhớ này. Trình điều khiển Hồ sơ mở cho DICE chỉ tồn tại trên kiến trúc arm64 vì cây thiết bị chỉ là một khái niệm arm64.
Chỉ định vùng bộ nhớ mà trình điều khiển Hồ sơ mở cho DICE hiển thị bằng cách sử dụng một
reserved-memory nút trong DT mà bạn gắn thẻ cho trình điều khiển bằng cách chỉ định
"google,open-dice" trong thuộc tính compatible. Ví dụ:
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>;
};
};