Yetkilendirme etiketleri

KeyMint (eski adıyla Keymaster) API'si, ad-değer çiftleri olan yetkilendirme etiketlerini yoğun bir şekilde kullanır. Olası her etiketin özellikleri:

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

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

Etiketler, API'de iki işlevi yerine getirir:

  • API'de gerçekleştirilen bir işlemin parametreleri olarak. Örneğin, HMAC imzalama işlemindeki Tag::MAC_LENGTH, istenen HMAC uzunluğunu gösterir.
  • Temel özellikler olarak, belirli bir anahtara kalıcı olarak bağlı olan (yani anahtar blob'una dahil edilen) değerler. Örneğin, Tag::EC_CURVE, bir anahtarın hangi eliptik eğri için olduğunu gösterir. Her bir temel özellik, sistemin hangi bölümünün özelliği denetlediğini gösteren bir güvenlik seviyesiyle ilişkilendirilir:
    • Güvenlik düzeyi TRUSTED_ENVIRONMENT veya STRONGBOX olan önemli bir özellik, güvenli donanımda zorunlu kılınır.
    • Güvenlik seviyesi SOFTWARE veya KEYSTORE olan önemli bir özellik yalnızca keystore2 sisteme ait hizmet tarafından zorunlu kılınır (bu nedenle, bu tür bir özellik OS güvenliğinin ihlal edilmesine karşı dayanıklı değildir).

Birçok etiket hem temel özellik hem de parametre olarak işlev görür:

  • Temel özellikler, bir anahtar için izin verilen parametreler kümesini gösterir. Örneğin:
    • Bir ECDSA anahtarının Tag::PURPOSE değeri hem SIGN hem de AGREE_KEY değerini içerebilir.
    • AES anahtarının Tag::BLOCK_MODE, ECB, CBC ve CTR modlarını içerebilir.
  • Bir begin() isteği daha sonra 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 sahip.
    • 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 çift işlev, özellikle 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, anahtar özellikleri olarak yeni oluşturulan anahtara bağlanır ve döndürülen keyblob'a kapsüllenerek anahtarla kalıcı olarak ilişkilendirilir.

Etiket değerleri hakkında ayrıntılı bilgiyi aşağıdaki HAL arayüzü spesifikasyonlarında bulabilirsiniz: