Device Identifier Composition Engine (DICE) là một quy cách của Trusted Computing Group (TCG) đã được áp dụng vào Android. Tính năng này tạo một tập hợp các danh tính mật mã mạnh mẽ, bất biến cho mỗi phần mềm cố định được tải trong trình tự khởi động. Các danh tính này cho phép xác minh từ xa trạng thái bảo mật của thiết bị, chỉ có thể bị xâm phạm bằng cách xâm nhập vào ROM.
Quy trình phái sinh DICE
Hình 1. Đơn giản hoá quy trình tạo DICE.
Quy trình phái sinh DICE đảm bảo rằng mọi thay đổi đối với bất kỳ hình ảnh chương trình cơ sở nào đều dẫn đến một giá trị nhận dạng duy nhất mới cho giai đoạn đó và mọi giai đoạn sau đó. Điều này là do mỗi giai đoạn phần mềm cố định đã tải đều đo lường và chứng nhận giai đoạn tiếp theo, tạo ra các danh tính duy nhất và các khoá liên kết giúp ngăn chặn việc bỏ qua hoặc giả mạo. Bộ nhớ chỉ đọc (ROM) xử lý phép đo, cấu hình và khoá bí mật duy nhất của thiết bị (UDS) bằng một hàm dẫn xuất khoá (KDF) để dẫn xuất khoá bí mật cần tải cho giai đoạn tiếp theo. Khoá bí mật này được gọi là giá trị nhận dạng thiết bị kết hợp (CDI).
Giai đoạn 0: Khởi động
Quy trình DICE bắt đầu bằng việc ROM của chipset tải UDS từ một nhóm dữ liệu bất biến, thường là các cầu chì. UDS này được cung cấp một cách an toàn bằng một giá trị ngẫu nhiên được mã hoá trong quá trình sản xuất chip. Sau khi đọc UDS, ROM sẽ sử dụng cơ chế khoá phần cứng phụ thuộc vào nhà cung cấp, chẳng hạn như chốt để khoá quyền truy cập UDS cho đến lần khởi động tiếp theo.
Giai đoạn 1: Tạo khoá ban đầu
ROM sử dụng UDS làm đầu vào cho hàm dẫn xuất khoá (KDF) để tạo cặp khoá bất đối xứng vĩnh viễn giúp xác định duy nhất thiết bị đó. Giai đoạn này đo lường giai đoạn tiếp theo của chương trình cơ sở, bao gồm cả siêu dữ liệu về môi trường khởi động, chẳng hạn như liệu có bật tính năng khởi động an toàn hay không. Sau đó, ROM kết hợp UDS, thông tin đo lường chương trình cơ sở và dữ liệu cấu hình trong KDF để lấy CDI đầu tiên. CDI này được truyền đến giai đoạn tiếp theo dưới dạng một khoá bí mật.
Giai đoạn 2 đến n: Phái sinh khoá đệ quy
Sau đó, quy trình này sẽ lặp lại. Trong tất cả các giai đoạn tiếp theo, CDI từ giai đoạn trước sẽ đóng vai trò là đầu vào cho một KDF mới. KDF này sử dụng CDI và hàm băm của hình ảnh chương trình cơ sở tiếp theo để tạo ra một CDI phái sinh mới. Mỗi giai đoạn tạo cặp khoá riêng và sử dụng cặp khoá đó để ký một chứng chỉ chứa các phép đo theo từng giai đoạn và siêu dữ liệu được liên kết khác.