Tagi autoryzacji

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_LENGTH w 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_CURVE wskazuje, 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_ENVIRONMENT lub STRONGBOX jest wymuszana w bezpiecznym sprzęcie.
    • Kluczowa cecha o poziomie bezpieczeństwa SOFTWARE lub KEYSTORE jest wymuszana tylko przez usługę systemową keystore2 (dlatego taka cecha nie jest odporna na naruszenie bezpieczeństwa systemu operacyjnego).

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

  • Kluczowe cechy wskazują zestaw dozwolonych parametrów klucza, np.:
    • Tag::PURPOSE klucza ECDSA może zawierać zarówno SIGN, jak i AGREE_KEY.
    • Tag::BLOCK_MODE klucza 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ś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 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_SUBJECT wpł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: