Tag otorisasi

KeyMint API (sebelumnya Keymaster) banyak menggunakan tag otorisasi, yang merupakan pasangan nama-nilai. Setiap kemungkinan tag memiliki:

  • Nama enum dengan nilai terkait
  • Jenis terkait (misalnya, integer, byte, tanggal, enum), yang mencakup indikasi apakah beberapa nilai diizinkan

Misalnya, tag dengan nama Tag::BLOCK_MODE memiliki nilai enum dasar 4 dan penanda jenis TagType::ENUM_REP yang menunjukkan bahwa nilai terkait adalah enum yang dapat diulang (dalam kasus ini, BlockMode).

Tag memiliki fungsi ganda di API:

  • Sebagai parameter untuk operasi yang dilakukan pada API, misalnya, Tag::MAC_LENGTH pada operasi penandatanganan HMAC menunjukkan panjang HMAC yang diminta.
  • Sebagai karakteristik utama, nilai yang terikat secara permanen ke kunci tertentu (yaitu, disertakan dalam blob kunci), misalnya, Tag::EC_CURVE menunjukkan kurva elips mana yang digunakan untuk kunci. Setiap karakteristik utama dikaitkan dengan tingkat keamanan yang menunjukkan bagian sistem mana yang mengatur atribut:
    • Karakteristik utama dengan tingkat keamanan TRUSTED_ENVIRONMENT atau STRONGBOX diterapkan di hardware yang aman.
    • Karakteristik utama dengan tingkat keamanan SOFTWARE atau KEYSTORE hanya diterapkan oleh layanan sistem keystore2 (sehingga karakteristik tersebut tidak tahan terhadap kompromi OS).

Banyak tag berfungsi sebagai parameter karakteristik utama dan:

  • Karakteristik utama menunjukkan kumpulan parameter yang diizinkan untuk kunci, misalnya:
    • Tag::PURPOSE kunci ECDSA dapat mencakup SIGN dan AGREE_KEY.
    • Tag::BLOCK_MODE untuk kunci AES dapat mencakup mode ECB, CBC, dan CTR.
  • Permintaan begin() kemudian menyertakan nilai parameter tertentu untuk operasi, misalnya:
    • begin() memiliki parameter tujuan eksplisit yang harus cocok dengan salah satu nilai Tag::PURPOSE karakteristik utama.
    • begin() untuk operasi AES harus menyertakan satu nilai untuk Tag::BLOCK_MODE di kolom params, yang harus cocok dengan salah satu nilai dalam karakteristik kunci.

Fungsi ganda ini sangat relevan untuk pengumpulan tag yang diteruskan sebagai keyParams pada operasi pembuatan atau impor kunci.

  • Beberapa tag berfungsi sebagai parameter untuk operasi pembuatan kunci itu sendiri. Misalnya, tag Tag::CERTIFICATE_SUBJECT hanya memengaruhi proses pembuatan kunci (asimetris), dengan mengontrol kolom dalam sertifikat X.509 yang ditampilkan.
  • Tag lain terikat ke kunci yang baru dibuat sebagai karakteristik kunci, dan dienkapsulasi dalam keyblob yang ditampilkan sehingga tag tersebut terkait secara permanen dengan kunci.

Informasi mendetail tentang nilai tag dapat ditemukan dalam spesifikasi antarmuka HAL berikut: