Alle KeyMint-Schlüssel müssen an eine Root of Trust für das Gerät gebunden sein. Die Root of Trust ist ein Bitstring, der aus dem öffentlichen Schlüssel abgeleitet wird, der zur Überprüfung der Signatur des Boot-Images verwendet wird, zusammen mit dem Sperrstatus des Bootloaders.
KeyMint-Schlüssel müssen auch an die Betriebssystemversion und den Patch-Level des Geräts gebunden sein. Zur Unterstützung der modularen Struktur von Treble umfasst diese Versionsbindung separate Patch-Level für jede Partition (boot, system und vendor). Dadurch kann jede Partition unabhängig aktualisiert werden, während gleichzeitig ein Rollback-Schutz geboten wird.
Um diese Versionsbindung zu implementieren, benötigt die vertrauenswürdige KeyMint-App (TA) eine Möglichkeit, die aktuelle Betriebssystemversion und die Patch-Level sicher zu empfangen und sicherzustellen, dass die empfangenen Informationen mit allen Informationen über das ausgeführte System übereinstimmen.
- Geräte mit Android-Bootmodus mit Verifikation (AVB):
- Die Patch-Level und die Betriebssystemversion
können
in
vbmeta.imgenthalten sein, damit der Bootloader sie an KeyMint weitergeben kann. - Bei verketteten Partitionen befinden sich die Versionsinformationen für die Partition in der verketteten VBMeta.
- Im Allgemeinen sollten Versionsinformationen in der
VBMeta structenthalten sein, die die Bestätigungsdaten (Hash oder Hashbaum) für eine bestimmte Partition enthält.
- Die Patch-Level und die Betriebssystemversion
können
in
- Geräte ohne AVB:
- Implementierungen des Bootmodus mit Verifikation müssen dem Bootloader einen Hash der Versionsmetadaten zur Verfügung stellen, damit der Bootloader den Hash an KeyMint weitergeben kann.
boot.imgkann weiterhin Patch-Level im Header speichern.system.imgkann Patch-Level und die Betriebssystemversion weiterhin in schreibgeschützten Attributen speichern.vendor.imgspeichert die Patch-Ebene im Attribut mit Lesezugriffro.vendor.build.version.security_patch.- Der Bootloader kann einen Hash aller Daten, die durch den Bootmodus mit Verifikation validiert wurden, an KeyMint senden.
Die folgenden Tags beschreiben Versionsinformationen für die relevanten Partitionen:
Tag::VENDOR_PATCHLEVEL:vendor-PartitionTag::BOOT_PATCHLEVEL:boot-PartitionTag::OS_PATCHLEVELundTag::OS_VERSION:system-Partition;Tag::OS_VERSIONwird aus demboot.img-Header entfernt
KeyMint-Implementierungen sollten alle Patch-Level unabhängig voneinander behandeln. Schlüssel können verwendet werden, wenn alle Versionsinformationen mit den Werten übereinstimmen, die einem Schlüssel zugeordnet sind. Wenn die aktuelle Geräteversion neuer ist als ein mit einem Schlüssel verknüpfter Wert, gibt KeyMint bei jedem Versuch, den Schlüssel zu verwenden, den Fehler KEY_REQUIRES_UPGRADE zurück. Der Keystore führt dann IKeyMintDevice::upgradeKey aus, um ein neues Schlüssel-Blob zu generieren, das an die aktuellen Patchebenen gebunden ist. Anschließend löscht der Keystore das vorherige Schlüssel-Blob mit einem Aufruf von IKeyMintDevice::deleteKey.