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
atauSTRONGBOX
diterapkan di hardware aman. - Karakteristik utama dengan tingkat keamanan
SOFTWARE
atauKEYSTORE
hanya diterapkan oleh layanan sistemkeystore2
(sehingga karakteristik tersebut tidak tahan terhadap kompromi OS).
- Karakteristik kunci dengan level keamanan
Banyak tag berfungsi sebagai karakteristik utama dan parameter:
- Karakteristik kunci menunjukkan kumpulan parameter yang diizinkan untuk kunci,
misalnya:
Tag::PURPOSE
kunci ECDSA dapat mencakupSIGN
danAGREE_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 nilaiTag::PURPOSE
karakteristik utama.begin()
untuk operasi AES harus menyertakan satu nilai untukTag::BLOCK_MODE
di kolomparams
, 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:
- KeyMint — Semua tag ditentukan
di
Tag.aidl
pada cabang rilis Android yang relevan. - Keymaster — Tag ditentukan
di
platform/hardware/interfaces/keymaster/keymaster-version/types.hal
untuk setiapkeymaster-version
, seperti3.0/types.hal
untuk Keymaster 3 dan4.0/types.hal
untuk Keymaster 4. Untuk Keymaster 2 dan yang lebih lama, tag ditentukan diplatform/hardware/libhardware/include/hardware/keymaster_defs.h
.