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_ENVIRONMENT
veyaSTRONGBOX
olan bir anahtar özelliği, güvenli donanımda zorunlu kılınır. - Güvenlik düzeyi
SOFTWARE
veyaKEYSTORE
olan bir temel özellik yalnızcakeystore2
sistem 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
, hemSIGN
hem deAGREE_KEY
içerebilir. - AES anahtarının
Tag::BLOCK_MODE
bö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::PURPOSE
değerlerinden biriyle eşleşmesi gereken açık bir amaç parametresine sahip.- AES işlemi için
begin()
,params
alanındaTag::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 geçerlidir.
- 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:
- KeyMint: Tüm etiketler, ilgili Android sürüm dalında
Tag.aidl
içinde tanımlanır. - Keymaster: Etiketler, her bir
keymaster-version
içinplatform/hardware/interfaces/keymaster/keymaster-version/types.hal
içinde tanımlanır. Örneğin, Keymaster 3 için3.0/types.hal
ve Keymaster 4 için4.0/types.hal
. Keymaster 2 ve önceki sürümlerde etiketlerplatform/hardware/libhardware/include/hardware/keymaster_defs.h
içinde tanımlanır.