Механизм составления идентификаторов устройств

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

Процесс вывода DICE

Упрощенный процесс деривации 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. Каждый этап генерирует свою собственную пару ключей и использует ее для подписи сертификата, содержащего измерения для конкретного этапа и другие связанные метаданные.