Mecanismo de composição do identificador do dispositivo

O Mecanismo de composição de identificador de dispositivo (DICE) é uma especificação do Trusted Computing Group (TCG) adotada no Android. Ele cria um conjunto de identidades criptográficas fortes e imutáveis para cada parte do firmware carregada durante a sequência de inicialização. Essas identidades permitem a verificação remota da postura de segurança de um dispositivo, que só pode ser evitada comprometendo a ROM.

Processo de derivação do DICE

Processo simplificado de derivação de DICE

Figura 1. Processo simplificado de derivação de DICE.

O processo de derivação do DICE garante que qualquer mudança em qualquer imagem de firmware resulte em um novo identificador exclusivo para essa etapa e todas as etapas seguintes. Isso acontece porque cada estágio de firmware carregado mede e certifica o próximo, gerando identidades exclusivas e chaves associadas que impedem desvios ou adulterações. A memória somente leitura (ROM) processa a medição, a configuração e o segredo exclusivo do dispositivo (UDS) com uma função de derivação de chave (KDF) para derivar o segredo da próxima etapa a ser carregada. Esse segredo é chamado de identificador de dispositivo composto (CDI, na sigla em inglês).

Etapa 0: inicialização

O processo DICE começa com a ROM do chipset carregando o UDS de um banco de dados imutáveis, geralmente fusíveis. Ele é provisionado com segurança com um valor criptograficamente aleatório durante o processo de produção do chip. Depois de ler o UDS, a ROM usa um mecanismo de bloqueio de hardware dependente do fornecedor, como uma trava, para bloquear o acesso ao UDS até a próxima inicialização.

Etapa 1: derivação inicial de chaves

A ROM usa o UDS como entrada para uma função de derivação de chaves (KDF) para gerar o par de chaves assimétricas permanentes que identifica exclusivamente o dispositivo. Ele mede a próxima etapa do firmware, incluindo metadados sobre o ambiente de inicialização, como se a inicialização segura está ativada. Em seguida, a ROM combina os dados de UDS, medição de firmware e configuração na KDF para derivar o primeiro CDI, que é transmitido para a próxima etapa como um segredo.

Etapa 2 a n: derivação recursiva de chaves

O processo se repete. Em todas as etapas subsequentes, o CDI da etapa anterior serve como entrada para uma nova KDF. Essa KDF usa o CDI e o hash da próxima imagem de firmware para produzir um novo CDI derivado. Cada estágio gera um par de chaves e o usa para assinar um certificado que contém medições específicas do estágio e outros metadados associados.