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

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