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
veyaSTRONGBOX
güvenlik düzeyine sahip bir anahtar özelliği zorunlu kılınmıştır. - Güvenlik düzeyi
SOFTWARE
veyaKEYSTORE
olan temel karakteristikler yalnızcakeystore2
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).
- Güvenli donanımda,
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 hemSIGN
hem deAGREE_KEY
içerebilir. - AES anahtarı için
Tag::BLOCK_MODE
, ECB, CBC ve CTR modlarını içerebilir.
- ECDSA anahtarının
- Ardından
begin()
isteği, 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 sahiptir.- 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 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:
- 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.