Device Identifier Composition Engine (DICE) adalah spesifikasi Trusted Computing Group (TCG) yang telah diadopsi ke dalam Android. Fitur ini membuat serangkaian identitas kriptografis yang kuat dan tidak dapat diubah untuk setiap bagian firmware yang dimuat selama urutan booting. Identitas ini memungkinkan verifikasi jarak jauh terhadap postur keamanan perangkat, yang hanya dapat dihindari dengan membahayakan ROM.
Proses derivasi DICE
Gambar 1. Proses turunan DICE yang disederhanakan.
Proses derivasi DICE memastikan bahwa setiap perubahan pada image firmware akan menghasilkan ID unik baru untuk tahap tersebut dan setiap tahap setelahnya. Hal ini karena setiap tahap firmware yang dimuat mengukur dan memberikan sertifikasi pada tahap berikutnya, menghasilkan identitas unik dan kunci terkait yang mencegah pengabaian atau modifikasi tidak sah. Read-only memory (ROM) memproses pengukuran, konfigurasi, dan secret perangkat unik (UDS) dengan fungsi turunan kunci (KDF) untuk mendapatkan secret agar tahap berikutnya dapat dimuat. Rahasia ini disebut sebagai ID perangkat gabungan (CDI).
Tahap 0: Inisialisasi
Proses DICE dimulai dengan ROM chipset yang memuat UDS dari kumpulan data yang tidak dapat diubah, biasanya fuse. UDS ini disediakan dengan aman menggunakan nilai acak kriptografis selama proses produksi chip. Setelah membaca UDS, ROM menggunakan mekanisme penguncian hardware yang bergantung pada vendor seperti kait untuk mengunci akses UDS hingga booting berikutnya.
Tahap 1: Derivasi kunci awal
ROM menggunakan UDS sebagai input ke fungsi turunan kunci (KDF) untuk menghasilkan pasangan kunci asimetris permanen yang mengidentifikasi perangkat tersebut secara unik. Langkah ini mengukur tahap firmware berikutnya, termasuk metadata tentang lingkungan booting seperti apakah booting aman diaktifkan. ROM kemudian menggabungkan data UDS, pengukuran firmware, dan konfigurasi di KDF untuk mendapatkan CDI pertama, yang diteruskan ke tahap berikutnya sebagai secret.
Tahap 2 hingga n: Derivasi kunci rekursif
Kemudian, prosesnya berulang. Pada semua tahap berikutnya, CDI dari tahap sebelumnya berfungsi sebagai input untuk KDF baru. KDF ini menggunakan CDI dan hash image firmware berikutnya untuk menghasilkan CDI turunan baru. Setiap tahap menghasilkan pasangan kuncinya sendiri dan menggunakannya untuk menandatangani sertifikat yang berisi pengukuran khusus tahap dan metadata terkait lainnya.