Теги авторизации

API KeyMint (ранее Keymaster) широко использует теги авторизации , которые представляют собой пары имя-значение. Каждый возможный тег имеет:

  • Имя перечисления с соответствующим значением
  • Ассоциированный тип (например, целое число, байты, дата, перечисление), который включает указание на то, разрешены ли множественные значения

Например, тег с именем Tag::BLOCK_MODE имеет базовое значение перечисления 4 и маркер типа TagType::ENUM_REP , который указывает, что связанное значение является повторяемым перечислением (в данном случае BlockMode ).

Теги выполняют двойную функцию в API:

  • Например, в качестве параметров для операции, выполняемой через API, Tag::MAC_LENGTH в операции подписания HMAC указывает запрошенную длину HMAC.
  • В качестве ключевых характеристик , значения, которые постоянно привязаны к определенному ключу (то есть включены в ключевой блок), например, Tag::EC_CURVE указывает, для какой эллиптической кривой предназначен ключ. Каждая ключевая характеристика связана с уровнем безопасности, который указывает, какая часть системы контролирует атрибут:
    • В защищенном оборудовании реализована ключевая характеристика с уровнем безопасности TRUSTED_ENVIRONMENT или STRONGBOX .
    • Ключевая характеристика с уровнем безопасности SOFTWARE или KEYSTORE обеспечивается только системной службой keystore2 (и поэтому такая характеристика не устойчива к взлому ОС).

Многие теги выступают одновременно в качестве ключевых характеристик и параметров:

  • Характеристики ключа указывают набор допустимых параметров для ключа, например:
    • Tag::PURPOSE ключа ECDSA может включать как SIGN , так и AGREE_KEY .
    • Tag::BLOCK_MODE для ключа AES может включать режимы ECB, CBC и CTR.
  • Затем запрос begin() включает определенное значение параметра для операции, например:
    • begin() имеет явный параметр назначения, который должен соответствовать одному из значений ключевых характеристик Tag::PURPOSE .
    • begin() для операции AES должен включать одно значение для Tag::BLOCK_MODE в поле params , которое должно соответствовать одному из значений в ключевых характеристиках.

Эта двойная функция особенно актуальна для сбора тегов, переданных как keyParams при генерации ключей или операции импорта.

  • Некоторые теги действуют как параметры для самой операции генерации ключа. Например, тег Tag::CERTIFICATE_SUBJECT влияет только на процесс генерации (асимметричного) ключа, управляя полем в возвращаемом сертификате X.509.
  • Другие теги привязываются к вновь сгенерированному ключу как ключевые характеристики и инкапсулируются в возвращаемый ключевой блок, так что они навсегда связаны с ключом.

Подробную информацию о значениях тегов можно найти в следующих спецификациях интерфейса HAL:

  • KeyMint — Все теги определены в Tag.aidl в соответствующей ветке выпуска Android.
  • Keymaster — теги определены в platform/hardware/interfaces/keymaster/ keymaster-version /types.hal для каждой соответствующей keymaster-version , например, 3.0/types.hal для Keymaster 3 и 4.0/types.hal для Keymaster 4. Для Keymaster 2 и ниже теги определены в platform/hardware/libhardware/include/hardware/keymaster_defs.h .