API KeyMint (قبلاً Keymaster) از تگ های مجوز استفاده گسترده ای می کند که جفت نام-مقدار هستند. هر تگ ممکن دارای:
- یک نام enum با مقدار مرتبط
- یک نوع مرتبط (به عنوان مثال، عدد صحیح، بایت، تاریخ، enum)، که شامل نشانی از مجاز بودن مقادیر متعدد است
به عنوان مثال، برچسب با نام 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در شعبه انتشار اندروید مربوطه تعریف شده اند. - 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 و زیر، برچسبها در Keymaster تعریف میشوند.platform/hardware/libhardware/include/hardware/keymaster_defs.h.