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.