Tutte le chiavi KeyMint devono essere associate a una radice di attendibilità per il dispositivo. La radice di attendibilità è una stringa di bit derivata dalla chiave pubblica utilizzata per verificare la firma dell'immagine di avvio, insieme allo stato di blocco del bootloader.
Le chiavi KeyMint devono anche essere associate alla versione del sistema operativo e al livello patch del dispositivo. Per supportare la struttura modulare di Treble, questa associazione della versione include livelli di patch separati per ogni partizione (boot, system e vendor). In questo modo, ogni partizione può essere aggiornata in modo indipendente, pur continuando a fornire la protezione dal rollback.
Per implementare questa associazione della versione, l'app attendibile (TA) KeyMint deve avere un modo per ricevere in modo sicuro la versione attuale del sistema operativo e i livelli di patch, nonché per garantire che le informazioni ricevute corrispondano a tutte le informazioni sul sistema in esecuzione.
- Dispositivi con Avvio verificato Android (AVB):
- I livelli di patch e la versione del sistema operativo
possono essere inclusi
in
vbmeta.img, in modo che il bootloader possa fornirli a KeyMint. - Per le partizioni concatenate, le informazioni sulla versione della partizione si trovano nel VBMeta concatenato.
- In generale, le informazioni sulla versione devono trovarsi nel
VBMeta structche contiene i dati di verifica (hash o hashtree) per una determinata partizione.
- I livelli di patch e la versione del sistema operativo
possono essere inclusi
in
- Dispositivi senza AVB:
- Le implementazioni di Avvio verificato devono fornire un hash dei metadati della versione al bootloader, in modo che quest'ultimo possa fornire l'hash a KeyMint.
boot.imgpuò continuare a memorizzare i livelli di patch nell'intestazione.system.imgpuò continuare ad archiviare i livelli di patch e la versione del sistema operativo nelle proprietà di sola lettura.vendor.imgmemorizza il livello di patch nella proprietà di sola letturaro.vendor.build.version.security_patch.- Il bootloader può fornire a KeyMint un hash di tutti i dati convalidati da Avvio verificato.
I seguenti tag descrivono le informazioni sulla versione per le partizioni pertinenti:
Tag::VENDOR_PATCHLEVEL: partizionevendorTag::BOOT_PATCHLEVEL: partizionebootTag::OS_PATCHLEVELeTag::OS_VERSION: partizionesystem;Tag::OS_VERSIONviene rimosso dall'intestazioneboot.img
Le implementazioni di KeyMint devono trattare tutti i livelli di patch in modo indipendente. Le chiavi sono utilizzabili se tutte le informazioni sulla versione corrispondono ai valori associati a una chiave. Se la versione corrente del dispositivo è più recente di qualsiasi valore associato a una chiave, KeyMint restituisce l'errore KEY_REQUIRES_UPGRADE a ogni tentativo di utilizzo della chiave. Keystore esegue quindi IKeyMintDevice::upgradeKey
per generare un nuovo keyblob associato ai livelli di patch attuali (e
Keystore elimina successivamente il keyblob precedente con una chiamata
a IKeyMintDevice::deleteKey).