Interfejs KeyMint API (wcześniej Keymaster) w szerokim zakresie korzysta z tagów autoryzacji, które są parami nazwa-wartość. Każdy możliwy tag ma:
- nazwę enum z powiązaną wartością,
- powiązany typ (np. integer, bytes, date, enum), który zawiera informację o tym, czy dozwolone jest używanie wielu wartości.
Na przykład tag o nazwie
Tag::BLOCK_MODE
ma podstawową wartość enum 4 i znacznik typu TagType::ENUM_REP, który wskazuje, że powiązana wartość jest powtarzalnym enum (w tym
przypadku BlockMode).
Tagi pełnią w interfejsie API podwójną funkcję:
- są parametrami operacji wykonywanej w interfejsie API, np.
Tag::MAC_LENGTHw operacji podpisywania HMAC wskazuje żądaną długość HMAC; - są kluczowymi cechami , czyli wartościami trwale
powiązanymi z konkretnym kluczem (tzn. zawartymi w blobie klucza), np.
Tag::EC_CURVEwskazuje, do której krzywej eliptycznej należy klucz. Każda kluczowa cecha jest powiązana z poziomem bezpieczeństwa, który wskazuje która część systemu egzekwuje atrybut:- Kluczowa cecha o poziomie bezpieczeństwa
TRUSTED_ENVIRONMENTlubSTRONGBOXjest egzekwowana w bezpiecznym sprzęcie. - Kluczowa cecha o poziomie bezpieczeństwa
SOFTWARElubKEYSTOREjest egzekwowana tylko przez usługę systemowąkeystore2(dlatego taka cecha nie jest odporna na naruszenie bezpieczeństwa systemu operacyjnego).
- Kluczowa cecha o poziomie bezpieczeństwa
Wiele tagów pełni zarówno funkcję kluczowych cech, jak i parametrów:
- kluczowe cechy wskazują zestaw dozwolonych parametrów klucza,
np.:
Tag::PURPOSEklucza ECDSA może obejmować zarównoSIGN, jak iAGREE_KEY.Tag::BLOCK_MODEklucza AES może obejmować tryby ECB, CBC, i CTR.
- żądanie
begin()zawiera konkretną wartość parametru operacji, np.:begin()ma wyraźny parametr purpose, który musi być zgodny z jedną z wartościTag::PURPOSEkluczowych cech;begin()w przypadku operacji AES musi zawierać pojedynczą wartośćTag::BLOCK_MODEw poluparams, która musi być zgodna z jedną z wartości kluczowych cech.
Ta podwójna funkcja jest szczególnie istotna w przypadku zbioru tagów przekazywanych jako keyParams w operacji generowania lub importowania klucza.
- Niektóre tagi pełnią funkcję parametrów samej operacji generowania klucza. Na przykład tag
Tag::CERTIFICATE_SUBJECTwpływa tylko na proces generowania klucza (asymetrycznego), ponieważ kontroluje pole w zwróconym certyfikacie X.509. - Inne tagi są powiązane z nowo wygenerowanym kluczem jako kluczowe cechy i są hermetyzowane w zwróconym blobie klucza, dzięki czemu są trwale powiązane z kluczem.
Szczegółowe informacje o wartościach tagów znajdziesz w tych specyfikacjach interfejsu HAL:
- KeyMint – wszystkie tagi są zdefiniowane
w
Tag.aidlw odpowiedniej gałęzi Androida. - Keymaster – tagi są zdefiniowane
w
platform/hardware/interfaces/keymaster/keymaster-version/types.haldla każdej wersjikeymaster-version, np.3.0/types.halw przypadku Keymaster 3 i4.0/types.halw przypadku Keymaster 4. W przypadku Keymaster 2 i starszych, tagi są zdefiniowane wplatform/hardware/libhardware/include/hardware/keymaster_defs.h.