Tag otorisasi

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

  • Nama enum dengan nilai terkait
  • Jenis terkait (misalnya, bilangan bulat, 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 hal ini, BlockMode).

Tag memiliki fungsi ganda di API:

  • Sebagai parameter untuk operasi yang dilakukan di API, misalnya, Tag::MAC_LENGTH pada operasi penandatanganan HMAC menunjukkan panjang HMAC yang diminta.
  • Sebagai karakteristik kunci, nilai yang secara permanen terikat dengan kunci tertentu (yaitu, disertakan dalam blob kunci), misalnya, Tag::EC_CURVE menunjukkan kurva elips yang digunakan kunci. Setiap karakteristik kunci dikaitkan dengan tingkat keamanan yang menunjukkan bagian sistem mana yang memantau atribut:
    • Karakteristik kunci dengan level keamanan TRUSTED_ENVIRONMENT atau STRONGBOX diterapkan di hardware 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 karakteristik utama dan parameter:

  • Karakteristik kunci menunjukkan kumpulan parameter yang diizinkan untuk kunci, misalnya:
    • Tag::PURPOSE kunci ECDSA dapat mencakup SIGN dan AGREE_KEY.
    • Tag::BLOCK_MODE untuk kunci AES mungkin 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 kunci atau impor.

  • 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 dengan kunci yang baru dibuat sebagai karakteristik kunci, dan dienkapsulasi dalam keyblob yang ditampilkan sehingga dikaitkan secara permanen dengan kunci.

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