DICE (Device Identifier Composition Engine) — это спецификация Trusted Computing Group (TCG) , которая была принята в Android . Она создает набор надежных, неизменяемых криптографических идентификаторов для каждого фрагмента прошивки, загружаемого во время загрузки. Эти идентификаторы позволяют удаленно проверять уровень безопасности устройства, чего можно избежать только путем компрометации ПЗУ.
процесс вывода DICE

Рисунок 1. Упрощенный процесс вывода DICE.
Процесс генерации DICE гарантирует, что любое изменение любого образа прошивки приводит к созданию нового уникального идентификатора для этого этапа и каждого последующего этапа. Это происходит потому, что каждый загруженный этап прошивки измеряет и сертифицирует следующий, генерируя уникальные идентификаторы и связанные с ними ключи, которые предотвращают обход или изменение. Постоянная память (ПЗУ) обрабатывает измерения, конфигурацию и уникальный секрет устройства (UDS) с помощью функции генерации ключа (KDF) для получения секрета для следующего загружаемого этапа. Этот секрет называется составным идентификатором устройства (CDI).
Этап 0: Инициализация
Процесс DICE начинается с загрузки UDS из банка неизменяемых данных, обычно это предохранители, в ПЗУ чипсета. В процессе производства чипа UDS надежно инициализируется криптографически случайным значением. После считывания UDS ПЗУ использует зависящий от производителя аппаратный механизм блокировки, например, защелку, для блокировки доступа к UDS до следующей загрузки.
Этап 1: Первоначальное определение ключа
ПЗУ использует UDS в качестве входных данных для функции вывода ключа (KDF) для генерации постоянной асимметричной пары ключей, которая однозначно идентифицирует данное устройство. Оно измеряет следующий этап прошивки, включая метаданные о среде загрузки, такие как включена ли безопасная загрузка. Затем ПЗУ объединяет UDS, данные измерений прошивки и данные конфигурации в KDF для получения первого CDI, который передается на следующий этап в качестве секрета.
Этап 2–n: Рекурсивное вычисление ключа
Затем процесс повторяется. На всех последующих этапах CDI с предыдущего этапа служит входными данными для нового KDF. Этот KDF использует CDI и хеш следующего образа прошивки для создания нового производного CDI. На каждом этапе генерируется собственная пара ключей, которая используется для подписи сертификата, содержащего измерения, специфичные для данного этапа, и другие связанные метаданные.