Sürüm bağlama

Tüm KeyMint anahtarları, cihazın güven köküne bağlı olmalıdır. Güven kökü, başlatma görüntüsünün imzasını doğrulamak için kullanılan ortak anahtardan ve bootloader kilit durumundan türetilen bir bit dizesidir.

KeyMint anahtarları, cihazın işletim sistemi sürümüne ve yama düzeyine de bağlı olmalıdır. Treble'ın modüler yapısını desteklemek için bu sürüm bağlama, her bölüm (boot, system ve vendor) için ayrı yama seviyeleri içerir. Bu sayede her bölüm bağımsız olarak güncellenebilir ve geri alma koruması sağlanır.

Bu sürüm bağlamayı uygulamak için KeyMint güvenilir uygulamasının (TA), mevcut işletim sistemi sürümünü ve yama seviyelerini güvenli bir şekilde alması ve aldığı bilgilerin çalışan sistemle ilgili tüm bilgilerle eşleştiğinden emin olması gerekir.

  • Android Doğrulanmış Başlatma (AVB) özelliğine sahip cihazlar:
    • Yama düzeyleri ve OS sürümü vbmeta.img'ye dahil edilebilir. Böylece bootloader bunları KeyMint'e sağlayabilir.
    • Zincirleme bölümler için bölümün sürüm bilgileri zincirleme VBMeta'da bulunur.
    • Genel olarak sürüm bilgileri, belirli bir bölüm için doğrulama verilerini (karma veya karma ağacı) içeren VBMeta struct içinde olmalıdır.
  • AVB'si olmayan cihazlar:
    • Doğrulanmış Başlatma uygulamalarının, sürüm meta verilerinin karmasını bootloader'a sağlaması gerekir. Böylece bootloader, karmayı KeyMint'e sağlayabilir.
    • boot.img, yama düzeylerini başlıkta depolamaya devam edebilir.
    • system.img, yama düzeylerini ve işletim sistemi sürümünü salt okunur özelliklerde depolamaya devam edebilir.
    • vendor.img, yama düzeyini salt okunur özellikte (ro.vendor.build.version.security_patch) depolar.
    • Bootloader, Doğrulanmış Başlatma tarafından doğrulanan tüm verilerin karmasını KeyMint'e sağlayabilir.

Aşağıdaki etiketler, ilgili bölümlerin sürüm bilgilerini açıklar:

KeyMint uygulamaları, tüm yama düzeylerini bağımsız olarak ele almalıdır. Tüm sürüm bilgileri bir anahtarla ilişkili değerlerle eşleşiyorsa anahtarlar kullanılabilir. Mevcut cihaz sürümü, bir anahtarla ilişkili herhangi bir değerden daha yeniyse KeyMint, anahtarı kullanma girişiminde KEY_REQUIRES_UPGRADE hatasını döndürür. Ardından Keystore, mevcut yama düzeylerine bağlı yeni bir keyblob oluşturmak için IKeyMintDevice::upgradeKey işlemini gerçekleştirir (ve Keystore daha sonra IKeyMintDevice::deleteKey çağrısıyla önceki keyblob'u siler).