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, bir 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 düzeyiyle ilişkilendirilir:- Güvenlik düzeyi
TRUSTED_ENVIRONMENTveyaSTRONGBOXolan bir anahtar özelliği, güvenli donanımda zorunlu kılınır. - Güvenlik düzeyi
SOFTWAREveyaKEYSTOREolan bir temel özellik yalnızcakeystore2sistem hizmeti tarafından zorunlu kılınır (bu nedenle, bu tür bir özellik işletim sisteminin güvenliğinin ihlal edilmesine karşı dayanıklı değildir).
- Güvenlik düzeyi
Birçok etiket hem temel özellik hem de parametre olarak işlev görür:
- Anahtar özellikleri, bir anahtar için izin verilen parametreler grubunu gösterir. Örneğin:
- Bir ECDSA anahtarının
Tag::PURPOSE, hemSIGNhem deAGREE_KEYiçerebilir. - AES anahtarının
Tag::BLOCK_MODEbölümünde ECB, CBC ve CTR modları yer alabilir.
- Bir ECDSA anahtarının
- Bir
begin()isteği daha sonra işlem için belirli bir parametre değeri içerir. Örneğin:begin(), temel özelliklerinTag::PURPOSEdeğerlerinden biriyle eşleşmesi gereken açık bir amaç parametresine sahip.- AES işlemi için
begin(),paramsalanındaTag::BLOCK_MODEiç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 geçerlidir.
- Etiketlerden bazıları, anahtar oluşturma işleminin kendisi için parametre görevi görür. Örneğin,
Tag::CERTIFICATE_SUBJECTetiketi, 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:
- KeyMint: Tüm etiketler, ilgili Android sürüm dalında
Tag.aidliçinde tanımlanır. - Keymaster: Etiketler, her bir
keymaster-versioniçinplatform/hardware/interfaces/keymaster/keymaster-version/types.haliçinde tanımlanır. Örneğin, Keymaster 3 için3.0/types.halve Keymaster 4 için4.0/types.hal. Keymaster 2 ve önceki sürümlerde etiketlerplatform/hardware/libhardware/include/hardware/keymaster_defs.hiçinde tanımlanır.