Mecanismo de composição do identificador do dispositivo

O Mecanismo de composição de identificador de dispositivo (DICE, na sigla em inglês) é uma especificação do Trusted Computing Group (TCG) que foi 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 do DICE

Figura 1. Processo simplificado de derivação do 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 fase e todas as fases seguintes. Isso ocorre porque cada fase de firmware carregada mede e certifica a próxima, gerando identidades exclusivas e chaves associadas que impedem a evasão ou adulteração. A memória somente leitura (ROM) processa a medição, a configuração e a chave secreta exclusiva do dispositivo (UDS, na sigla em inglês) com uma função de derivação de chave (KDF, na sigla em inglês) para derivar a chave secreta do próximo estágio a ser carregado. Esse segredo é chamado de identificador de dispositivo composto (CDI, na sigla em inglês).

Etapa 0: inicialização

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

Fase 1: derivação inicial de chaves

O ROM usa o UDS como entrada para uma função de derivação de chaves (KDF) para gerar o par de chaves assimétricas permanente que identifica exclusivamente esse dispositivo. Ele mede o próximo estágio do firmware, incluindo metadados sobre o ambiente de inicialização, como se a inicialização segura está ativada. Em seguida, o ROM combina a UDS, a medição do firmware e os dados de configuração no KDF para extrair o primeiro CDI, que é transmitido para a próxima etapa como uma chave secreta.

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

O processo é repetido. Em todas as etapas subsequentes, o CDI da etapa anterior serve como entrada para um novo KDF. Esse KDF usa o CDI e o hash da próxima imagem de firmware para produzir um novo CDI derivado. Cada fase gera o próprio par de chaves e o usa para assinar um certificado contendo medições específicas da fase e outros metadados associados.