Tagi autoryzacji

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_LENGTH w operacji podpisywania HMAC wskazuje żądaną długość HMAC;
  • kluczowymi cechami , czyli wartościami trwale powiązanymi z konkretnym kluczem (tzn. zawartymi w blobie klucza), np. Tag::EC_CURVE wskazuje, 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_ENVIRONMENT lub STRONGBOX jest egzekwowana w bezpiecznym sprzęcie.
    • Kluczowa cecha o poziomie bezpieczeństwa SOFTWARE lub KEYSTORE jest egzekwowana tylko przez usługę systemową keystore2 (dlatego taka cecha nie jest odporna na naruszenie bezpieczeństwa systemu operacyjnego).

Wiele tagów pełni zarówno funkcję kluczowych cech, jak i parametrów:

  • kluczowe cechy wskazują zestaw dozwolonych parametrów klucza, np.:
    • Tag::PURPOSE klucza ECDSA może obejmować zarówno SIGN, jak i AGREE_KEY.
    • Tag::BLOCK_MODE klucza 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ści Tag::PURPOSE kluczowych cech;
    • begin() w przypadku operacji AES musi zawierać pojedynczą wartość Tag::BLOCK_MODE w polu params, 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_SUBJECT wpł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: