Механизм композиции идентификаторов устройств (DICE) — это спецификация Trusted Computing Group, которая была принята в Android . Целью DICE является создание неизменяемой криптографической идентификации для устройства, а также дистанционно проверяемое измерение прошивки, загружаемой во время загрузки. Этот процесс дополнительно создает криптографические идентификаторы для каждой загружаемой части прошивки. Эти идентификаторы полностью зависят от базового идентификатора и каждого образа прошивки, загружаемого во время данной загрузки.
DICE запускается, когда ПЗУ для набора микросхем загружает уникальный секрет устройства (UDS) из банка неизменяемых данных, обычно с помощью плавких предохранителей, который был надежно снабжен криптографически случайным значением в процессе производства чипа. Когда ROM считывает этот секрет, он отключает любой дальнейший доступ к UDS, используя какой-либо аппаратный механизм блокировки, зависящий от поставщика, например защелку. Доступ к UDS не восстанавливается до следующей загрузки.
ПЗУ использует UDS в качестве входных данных для функции деривации ключей (KDF) для генерации постоянной асимметричной пары ключей, которая идентифицирует это конкретное устройство. ПЗУ загружает и измеряет следующий этап прошивки в последовательности загрузки, указывая при этом дополнительные метаданные о среде для конкретной загрузки, например, включена ли безопасная загрузка. ПЗУ обрабатывает измерения, конфигурацию и UDS с помощью KDF, чтобы получить секрет для загрузки следующего этапа. Этот секрет называется составным идентификатором устройства (CDI).
Затем процесс повторяется. CDI действует как UDS следующего этапа, этот этап получает пару ключей, а CDI вводится в KDF вместе с хешем следующего изображения, которое необходимо загрузить, для формирования другого производного значения CDI.
Загруженная микропрограмма использует сгенерированные пары ключей для подписи сертификатов подписи и шифрования объектов CBOR (COSE) Sign1. Каждый этап подписывает сертификат для следующего этапа, подлежащего загрузке. Этот сертификат включает в себя такую информацию, как измерение этого этапа, режим загрузки, открытый ключ CDI для этого этапа и другие связанные метаданные.
Рисунок 1. Упрощенный процесс вывода DICE.
Этот процесс помогает гарантировать, что любое изменение в загруженном образе встроенного ПО изменяет как его собственное значение CDI, так и значения CDI всех последующих этапов. Это означает, что каждая комбинация загруженной прошивки генерирует уникальные идентификаторы и соответствующие ключи. Кроме того, подписание осуществляется таким образом, чтобы гарантировать, что каждый этап измерен и сертифицирован предыдущим этапом, не позволяя любому этапу уклониться от измерения путем подделки собственного сертификата. Это означает, что, пока ПЗУ не скомпрометировано, состояние безопасности устройства можно исправить и удаленно проверить за пределами устройства.