승인 태그

KeyMint (이전 Keymaster) API는 이름-값 쌍인 승인 태그를 광범위하게 사용합니다. 가능한 각 태그에는 다음이 있습니다.

  • 연결된 값이 있는 enum 이름
  • 연결된 유형 (예: 정수, 바이트, 날짜, enum)으로, 여러 값이 허용되는지 여부를 나타내는 표시가 포함됩니다.

예를 들어 이름이 Tag::BLOCK_MODE인 태그에는 기본 열거형 값 4과 연결된 값이 반복 가능한 열거형 (이 경우 BlockMode)임을 나타내는 TagType::ENUM_REP 유형 마커가 있습니다.

태그는 API에서 두 가지 기능을 수행합니다.

  • API에서 실행되는 작업의 매개변수입니다. 예를 들어 HMAC 서명 작업의 Tag::MAC_LENGTH는 요청된 HMAC 길이를 나타냅니다.
  • 주요 특징으로서 특정 키에 영구적으로 바인딩된 값 (즉, 키 blob에 포함됨)은 예를 들어 Tag::EC_CURVE는 키가 어떤 타원 곡선을 위한 것인지 나타냅니다. 각 주요 특성은 시스템의 어느 부분이 속성을 관리하는지 나타내는 보안 수준과 연결됩니다.
    • 보안 수준이 TRUSTED_ENVIRONMENT 또는 STRONGBOX인 키 특성은 보안 하드웨어에서 적용됩니다.
    • 보안 수준이 SOFTWARE 또는 KEYSTORE인 주요 특징은 keystore2 시스템 서비스에 의해서만 적용됩니다. 따라서 이러한 특징은 OS 손상에 탄력적이지 않습니다.

많은 태그가 주요 특성 매개변수 역할을 모두 수행합니다.

  • 주요 특징은 키에 허용된 매개변수 집합을 나타냅니다. 예를 들면 다음과 같습니다.
    • ECDSA 키의 Tag::PURPOSE에는 SIGNAGREE_KEY이 모두 포함될 수 있습니다.
    • AES 키의 Tag::BLOCK_MODE에는 ECB, CBC, CTR 모드가 포함될 수 있습니다.
  • 그런 다음 begin() 요청에는 작업의 특정 매개변수 값이 포함됩니다. 예를 들면 다음과 같습니다.
    • begin()에는 주요 특징의 Tag::PURPOSE 값 중 하나와 일치해야 하는 명시적 목적 매개변수가 있습니다.
    • AES 작업의 begin()에는 params 필드에 Tag::BLOCK_MODE의 단일 값이 포함되어야 하며, 이는 키 특성의 값 중 하나와 일치해야 합니다.

이 이중 기능은 특히 키 생성 또는 가져오기 작업에서 keyParams로 전달된 태그 컬렉션과 관련이 있습니다.

  • 태그 중 일부는 키 생성 작업 자체의 매개변수 역할을 합니다. 예를 들어 Tag::CERTIFICATE_SUBJECT 태그는 반환된 X.509 인증서의 필드를 제어하여 (비대칭) 키 생성 프로세스에만 영향을 미칩니다.
  • 다른 태그는 새로 생성된 키에 키 특성으로 바인딩되고 반환된 keyblob에 캡슐화되어 키와 영구적으로 연결됩니다.

태그 값에 관한 자세한 내용은 다음 HAL 인터페이스 사양을 참고하세요.