Device Identifier Composition Engine (DICE) adalah spesifikasi Trusted Computing Group yang telah diadopsi ke dalam Android. DICE bertujuan untuk membuat identitas kriptografis yang tidak dapat diubah untuk perangkat, beserta pengukuran firmware yang dapat diverifikasi dari jarak jauh yang dimuat selama proses booting. Proses ini juga membuat identitas kriptografis untuk setiap bagian firmware yang dimuat. Identitas ini sepenuhnya bergantung pada identitas dasar dan setiap image firmware yang dimuat selama booting tertentu.
DICE dimulai saat ROM untuk chipset memuat rahasia perangkat unik (UDS) dari bank data yang tidak dapat diubah, biasanya sekering, yang secara aman disediakan dengan nilai acak kriptografis selama proses produksi chip. Setelah ROM membaca secret ini, ROM akan menonaktifkan akses lebih lanjut ke UDS menggunakan beberapa mekanisme penguncian hardware yang bergantung pada vendor seperti kait. Akses ke UDS tidak dipulihkan hingga proses booting berikutnya.
ROM menggunakan UDS sebagai input ke fungsi turunan kunci (KDF) untuk menghasilkan pasangan kunci asimmetrik permanen yang mengidentifikasi perangkat tertentu tersebut. ROM memuat dan mengukur tahap firmware berikutnya dalam urutan booting, sembari menentukan metadata tambahan tentang lingkungan untuk booting tertentu, seperti apakah booting aman diaktifkan. ROM memproses pengukuran, konfigurasi, dan UDS dengan KDF untuk mendapatkan secret agar tahap berikutnya dapat dimuat. Rahasia ini disebut sebagai ID perangkat gabungan (CDI).
Proses tersebut kemudian diulang. CDI bertindak sebagai UDS tahap berikutnya, tahap tersebut memperoleh pasangan kunci, dan CDI dimasukkan ke dalam KDF bersama dengan hash gambar berikutnya yang akan dimuat untuk membentuk nilai CDI turunan lainnya.
Firmware yang dimuat menggunakan pasangan kunci yang dihasilkan untuk menandatangani sertifikat Sign1 CBOR Object Signing and Encryption (COSE). Setiap tahap menandatangani sertifikat di tahap berikutnya yang akan dimuat. Sertifikat ini mencakup informasi seperti pengukuran tahap tersebut, mode booting, kunci publik CDI untuk tahap tersebut, dan metadata terkait lainnya.
Gambar 1. Proses turunan DICE yang disederhanakan.
Proses ini membantu memastikan bahwa setiap perubahan pada image firmware yang dimuat akan mengubah nilai CDI-nya sendiri dan nilai CDI dari semua tahap berikutnya. Artinya, setiap kombinasi firmware yang dimuat akan menghasilkan identitas unik dan kunci terkait. Selain itu, penandatanganan dilakukan sedemikian rupa sehingga memastikan bahwa setiap tahap diukur dan disertifikasi oleh tahap sebelumnya, sehingga mencegah tahap apa pun menghindari pengukuran dengan memalsukan sertifikatnya sendiri. Artinya, selama ROM tidak dibobol, postur keamanan perangkat dapat di-patch dan diverifikasi dari jarak jauh di luar perangkat.