Vincolo della versione

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 struct che contiene i dati di verifica (hash o hashtree) per una determinata partizione.
  • 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.img può continuare a memorizzare i livelli di patch nell'intestazione.
    • system.img può continuare ad archiviare i livelli di patch e la versione del sistema operativo nelle proprietà di sola lettura.
    • vendor.img memorizza il livello di patch nella proprietà di sola lettura ro.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:

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).