Interfejs KeyMint (wcześniej Keymaster) w dużym stopniu korzysta z tagów autoryzacji, które są parami nazwa-wartość. Każdy możliwy tag ma:
- Nazwa wyliczenia z powiązaną wartością
- Typ powiązany (np. liczba całkowita, bajty, data, wyliczenie), który zawiera informację o tym, czy dozwolonych jest wiele wartości.
Na przykład tag o nazwie Tag::BLOCK_MODE ma podstawową wartość wyliczenia 4 i znacznik typu TagType::ENUM_REP, który wskazuje, że powiązana wartość jest powtarzalnym wyliczeniem (w tym przypadku BlockMode).
Tagi pełnią w interfejsie API podwójną funkcję:
- Jako parametry operacji wykonywanej w interfejsie API, np.
Tag::MAC_LENGTHw operacji podpisywania HMAC, wskazuje żądaną długość HMAC. - Jako kluczowe cechy wartości, które są na stałe powiązane z określonym kluczem (czyli są zawarte w obiekcie binarnym klucza), np.
Tag::EC_CURVEwskazuje, dla której krzywej eliptycznej jest przeznaczony klucz. Każda kluczowa cecha jest powiązana z poziomem bezpieczeństwa, który wskazuje, która część systemu kontroluje atrybut:- Kluczowa cecha z poziomem bezpieczeństwa
TRUSTED_ENVIRONMENTlubSTRONGBOXjest wymuszana w bezpiecznym sprzęcie. - Kluczowa cecha o poziomie bezpieczeństwa
SOFTWARElubKEYSTOREjest wymuszana tylko przez usługę systemowąkeystore2(dlatego taka cecha nie jest odporna na naruszenie bezpieczeństwa systemu operacyjnego).
- Kluczowa cecha z poziomem bezpieczeństwa
Wiele tagów pełni funkcję zarówno kluczowych cech , jak i parametrów:
- Kluczowe cechy wskazują zestaw dozwolonych parametrów klucza, np.:
Tag::PURPOSEklucza ECDSA może zawierać zarównoSIGN, jak iAGREE_KEY.Tag::BLOCK_MODEklucza AES może obejmować tryby ECB, CBC i CTR.
- Żądanie
begin()zawiera wtedy konkretną wartość parametru operacji, np.:begin()ma parametr wyraźnego celu, który musi pasować do jednej 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 w charakterystyce klucza.
Ta podwójna funkcja jest szczególnie istotna w przypadku zbierania tagów przekazywanych jako keyParams podczas operacji generowania lub importowania klucza.
- Niektóre tagi działają jako parametry samej operacji generowania klucza. Na przykład tag
Tag::CERTIFICATE_SUBJECTwpływa tylko na proces generowania klucza (asymetrycznego), kontrolując pole w zwróconym certyfikacie X.509. - Pozostałe tagi są powiązane z nowo wygenerowanym kluczem jako jego cechy i są hermetyzowane w zwracanym obiekcie 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 wersji Androida. - Keymaster – tagi są zdefiniowane w
platform/hardware/interfaces/keymaster/keymaster-version/types.haldla każdego odpowiedniegokeymaster-version, np.3.0/types.haldla Keymastera 3 i4.0/types.haldla Keymastera 4. W przypadku Keymastera 2 i starszych wersji tagi są zdefiniowane wplatform/hardware/libhardware/include/hardware/keymaster_defs.h.