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
.