Perfil de SDV para DICE

O perfil de SDV para o mecanismo de composição de identificador de dispositivo (DICE) é uma extensão do perfil do Android para DICE. No SDV, uma VM usa duas cadeias DICE paralelas:

  • Cadeia DICE segura do mundo
  • Cadeia DICE de SDV do Android

Estes campos do Descritor de configuração do perfil do Android para DICE são relevantes para cada uma dessas cadeias:

Nome Chave Tipo Descrição
Nome do componente -70002 tstr Recomendado em cada camada de CDI. O nome do componente identifica de forma inequívoca o estágio entre todas as cadeias de hardware do DICE que executam VMs SDV do Android em um veículo ou plataforma de veículo.
Versão de segurança -70005 uint Obrigatório em cada etapa do CDI. Permite definir uma política de DICE que impede que versões de VM remota não seguras entrem na malha segura do SDV.
Nome da instância do componente <0x0A -70007 tstr Obrigatório na primeira camada de CDI específica da VM. Por exemplo, depois do hipervisor, para a cadeia DICE de SDV do Android. Nome da instância do SDV. Se várias camadas de CDI contiverem o nome da instância do componente, cada camada precisará ter o mesmo valor.

Cadeia DICE segura do mundo

A cadeia DICE do Secure World é a mesma que o servidor de provisionamento de chaves remotas (RKP) do Android recebe dos dispositivos Android. O IRemotelyProvisionedComponent HAL generateCertificateRequestV2() expõe essa cadeia DICE ao Android.

Esta tabela mostra um exemplo de cadeia DICE do Secure World:

Etapa de inicialização Camada de CDI do DICE Emitido por
Carregador de inicialização principal CDI[0] UDS
Carregador de inicialização secundário CDI[1] Carregador de inicialização principal
Inicialização TEE CDI[2] Carregador de inicialização secundário
Inicialização de TA do KeyMint CDI[3] (Leaf) TEE

Para implementar o aplicativo confiável (TA) do KeyMint, use uma destas opções:

  • Única instância do KeyMint para todas as VMs do SDV:é necessário designar um único CDI para todas as VMs.

ou

  • Uma instância do KeyMint para cada VM do SDV:é necessário designar um valor de CDI diferente para cada VM. Os valores individuais de CDI precisam conter um nome de instância de componente que corresponda ao nome de instância de componente da VM.

Cadeia DICE de SDV do Android

A cadeia DICE do SDV Android certifica o software em execução no caminho de inicialização que passa pelo hipervisor até o sistema operacional de alto nível (HLOS) do Android em execução nas VMs do SDV.

Esta tabela mostra um exemplo de cadeia DICE de SDV do Android:

Etapa de inicialização Camada de CDI do DICE Emitido por
Carregador de inicialização principal CDI[0] UDS
Carregador de inicialização secundário CDI[1] Carregador de inicialização principal
Hipervisor CDI[2] Carregador de inicialização secundário
Android HLOS CDI[3] (folha) (Carregador do Android no) hipervisor1

1: o hipervisor certifica o carregador de inicialização do Android no convidado como uma camada. O carregador de inicialização do Android certifica o HLOS do Android.

Certificado CDI HLOS do Android

O carregador de inicialização do Android (ou o hipervisor, se não houver um carregador de inicialização do Android, mas apenas um programa "carregador" do Android que carrega a VM no hipervisor) assina o certificado CDI do HLOS do Android e cobre o HLOS do Android. Por exemplo, ele cobre todo o código que o carregador de inicialização do Android verifica de acordo com a Inicialização verificada do Android (AVB).

O certificado CDI do HLOS do Android precisa conter valores específicos do SDV do sistema operacional Android que mitigam vulnerabilidades de segurança. Por exemplo, possível vazamento de segredos ao proibir VMs com vulnerabilidades conhecidas da malha segura do SDV. A verificação do AVB fornece a maioria desses valores.

Eles também são entregues ao KeyMint no TEE, em que o certificado é assinado pelo CDI folha da cadeia SecureWorld DICE e transmitido ao Android no DeviceInfo para ativar recursos como atestado de chave e ID no Android principal.

Campos de entrada de código e certificado codeHash

O resumo VBMeta (uma saída que o carregador de inicialização do Android realiza para a verificação do AVB) abrange o software do HLOS do Android. Portanto, ele serve como o android-dice-input-values para derivar os segredos do CDI e entra no campo dice-cert-fields do certificado do CDI.

O algoritmo de hash recomendado para AVB é SHA-256, que resulta em uma síntese de VBMeta de 32 bytes. Ao contrário do perfil aberto para DICE, o perfil do Android para DICE permite android-dice-hash-algos usando android-dice-input-values de 32 bytes para o fluxo do DICE, além de colocar o mesmo valor de 32 bytes como o codeHash no certificado do DICE.

Descritor de configuração: campos no perfil do Android para DICE

Além do que é descrito para todas as camadas de CDI, as seguintes especificidades se aplicam aos campos do descritor de configuração do perfil do Android para DICE:

Nome Chave Tipo Descrição
Versão do componente -70003 int A versão do SO do sistema do AVB version-info-avb. Também é igual a android.os.Build.VERSION.release.
Versão de segurança -70005 uint O nível do patch de segurança da partição system no formato YYYYMMDD.
Marcador de VM do RKP -70006 null O marcador da VM RKP impede que o provisionamento de chaves remotas emita certificados para a cadeia DICE do SDV Android.

O marcador de RKP da VM precisa aparecer no primeiro certificado CDI da cadeia DICE do SDV do Android que não é comum à cadeia DICE do Secure World. Ele também NÃO pode aparecer em outros certificados CDI para evitar que o servidor RKP rkp-avf-support considere a cadeia DICE como proveniente de uma VM RKP.

Descritor de configuração: novos campos

O descritor de configuração do certificado CDI HLOS do Android precisa conter valores específicos do SDV além dos descritos no perfil do Android para DICE. O perfil do SDV para DICE reserva o intervalo de valores de chave [-71000, -71999] para essa finalidade. É possível adicionar campos específicos da implementação usando valores de chave fora do intervalo reservado. Os valores específicos do SDV são:

Nome Chave Tipo Descrição
Estado da inicialização verificada -71000 tstr green, yellow ou orange.
build fingerprint -71001 tstr String legível que identifica de maneira exclusiva este build, igual a ro.build.fingerprint. O CDD do Android, 3.2.2 Parâmetros de build, cdd-3-2-2 define isso. O VBMeta armazena isso como a propriedade chamada com.android.build.system.fingerprint
system_ext nível do patch de segurança -71002 uint Nível do patch de segurança da partição system_ext no formato YYYYMMDD.
product nível do patch de segurança -71003 uint Nível do patch de segurança da partição product no formato YYYYMMDD.
vendor nível do patch de segurança -71004 uint Nível do patch de segurança da partição vendor no formato YYYYMMDD.
boot nível do patch de segurança -71005 uint Nível do patch de segurança da partição boot (que contém o kernel do Linux) no formato YYYYMMDD.
Modo de inicialização do SDV -71006 tstr locked ou unlocked. Para saber mais, consulte Status e provisionamento da malha.

Seleção do valor de entrada do modo de CDI HLOS do Android

O android-dice-mode do certificado CDI HLOS do Android usa a seguinte definição:

AVB DESBLOQUEADO AVB LOCKED
Modo de inicialização do SDV DESBLOQUEADO Depurar Depurar
Modo de inicialização do SDV BLOQUEADO Não configurado (inválido) Normal

Função de derivação de chaves

O android-dice-kdf que deriva o par de chaves pública e privada do segredo CDI_Attest para o CDI HLOS do Android precisa ser HKDF com SHA512 como função de hash.