Tagi autoryzacji

Interfejs KeyMint (wcześniej Keymaster) korzysta z tagów autoryzacji, czyli par nazwa-wartość. Każdy możliwy tag ma:

  • nazwa wyliczenia z powiązaną wartością,
  • powiązany typ (np. liczba całkowita, bajty, data, enum), który zawiera wskazanie, czy dozwolone są liczne wartości;

Na przykład tag o nazwie Tag::BLOCK_MODE ma wartość podstawowej wartości wyliczalniczej 4 i znacznik typu TagType::ENUM_REP, który wskazuje, że powiązana wartość jest powtarzalnym typem wyliczalniczym (w tym przypadku BlockMode).

Tagi pełnią 2 funkcje w interfejsie API:

  • Jako parametry operacji wykonywanej w interfejsie API, np. Tag::MAC_LENGTH w operacji podpisywania HMAC, wskazuje żądaną długość HMAC.
  • Charakterystyki klucza to wartości, które są na stałe powiązane z danym kluczem (czyli są zawarte w pliku klucza). Na przykład Tag::EC_CURVE wskazuje, do której krzywej eliptycznej należy dany klucz. Każda kluczowa cecha jest powiązana z poziomem zabezpieczeń, który wskazuje, która część systemu kontroluje dany atrybut:
    • W sprzęcie zabezpieczonym jest wymuszana kluczowa cecha o poziomie zabezpieczeń TRUSTED_ENVIRONMENT lub STRONGBOX.
    • Kluczowa cecha o poziomie zabezpieczeń SOFTWARE lub KEYSTORE jest egzekwowana tylko przez usługę systemową keystore2 (a więc nie jest odporna na kompromisy w systemie operacyjnym).

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

  • Cechy klucza wskazują zestaw dozwolonych parametrów klucza, na przykład:
    • Tag::PURPOSE klucza ECDSA może zawierać zarówno SIGN, jak i AGREE_KEY.
    • Tag::BLOCK_MODE klucza AES może zawierać tryby ECB, CBC i CTR.
  • Żądanie begin() zawiera wtedy określoną wartość parametru dla operacji, na przykład:
    • begin() ma parametr „explicit purpose”, który musi być zgodny z jedną z wartości Tag::PURPOSE kluczowych cech.
    • begin() w operacji AES musi zawierać w polu params jedną wartość Tag::BLOCK_MODE, która musi być zgodna z jedną z wartości kluczowych cech.

Ta podwójna funkcja jest szczególnie przydatna w przypadku zbioru tagów przekazywanych jako keyParams w ramach operacji generowania kluczy lub importu.

  • Niektóre z nich pełnią funkcję parametrów operacji generowania klucza. Na przykład tag Tag::CERTIFICATE_SUBJECT wpływa tylko na proces (asymetrycznego) generowania klucza, kontrolując pole w zwróconym certyfikacie X.509.
  • Inne tagi są powiązane z nowo wygenerowanym kluczem jako jego cechy i są zaszyfrowane w zwracanym kluczu blob, dzięki czemu są na stałe powiązane z kluczem.

Szczegółowe informacje o wartościach tagów znajdziesz w tych specyfikacjach interfejsu HAL: