Yetkilendirme etiketleri

KeyMint (eski adıyla Keymaster) API'si, ad-değer çiftleri olan yetkilendirme etiketlerini yaygın olarak kullanır. Olası her etiketin:

  • İlişkili değere sahip bir enum adı
  • Birden fazla değere izin verilip verilmediğini belirten bir ilişkili tür (ör. tam sayı, bayt, tarih, enum)

Örneğin, Tag::BLOCK_MODE adlı etiketin temel enum değeri 4'tır ve ilişkili değerin yinelenebilir bir enum olduğunu belirten bir TagType::ENUM_REP tür işaretçisi vardır (bu örnekte BlockMode).

Etiketler API'de iki işlev görür:

  • API'de gerçekleştirilen bir işlem için parametreler olarak kullanılır. Örneğin, HMAC imzalama işlemindeki Tag::MAC_LENGTH, istenen HMAC uzunluğunu belirtir.
  • Anahtar özellikleri olarak, belirli bir anahtara kalıcı olarak bağlı olan (yani anahtar blob'una dahil edilen) değerlerdir. Örneğin, Tag::EC_CURVE bir anahtarın hangi eliptik eğri için olduğunu belirtir. Her bir temel özellik, özelliğin sistemin hangi bölümünden denetlendiğini belirten bir güvenlik düzeyiyle ilişkilendirilir:
    • Güvenli donanımda, TRUSTED_ENVIRONMENT veya STRONGBOX güvenlik düzeyine sahip bir anahtar özelliği zorunlu kılınmıştır.
    • Güvenlik düzeyi SOFTWARE veya KEYSTORE olan temel karakteristikler yalnızca keystore2 sistem hizmeti tarafından zorunlu kılındığından (bu nedenle bu tür karakteristikler işletim sistemi güvenliğinin ihlal edilmesine karşı dirençli değildir).

Birçok etiket hem temel özellik hem de parametre olarak kullanılır:

  • Anahtar özellikleri, bir anahtar için izin verilen parametre grubunu belirtir. Örneğin:
    • ECDSA anahtarının Tag::PURPOSE değeri hem SIGN hem de AGREE_KEY içerebilir.
    • AES anahtarı için Tag::BLOCK_MODE, ECB, CBC ve CTR modlarını içerebilir.
  • Ardından begin() isteği, işlem için belirli bir parametre değeri içerir. Örneğin:
    • begin(), temel özelliklerin Tag::PURPOSE değerlerinden biriyle eşleşmesi gereken açık bir amaç parametresine sahiptir.
    • AES işlemi için begin(), params alanında Tag::BLOCK_MODE için tek bir değer içermelidir. Bu değer, anahtar özelliklerindeki değerlerden biriyle eşleşmelidir.

Bu ikili işlev, özellikle bir anahtar oluşturma veya içe aktarma işleminde keyParams olarak iletilen etiketlerin toplanması için önemlidir.

  • Etiketlerden bazıları, anahtar oluşturma işleminin kendisi için parametre görevi görür. Örneğin, Tag::CERTIFICATE_SUBJECT etiketi, döndürülen X.509 sertifikasındaki bir alanı kontrol ederek yalnızca (asimetrik) anahtar oluşturma sürecini etkiler.
  • Diğer etiketler, yeni oluşturulan anahtara anahtar özellikleri olarak bağlanır ve anahtarla kalıcı olarak ilişkilendirilmeleri için döndürülen anahtar kümesine yerleştirilir.

Etiket değerleri hakkında ayrıntılı bilgileri aşağıdaki HAL arayüzü özelliklerinde bulabilirsiniz: