رابط برنامهنویسی کاربردی KeyMint (که قبلاً Keymaster نام داشت) به طور گسترده از تگهای مجوز که جفتهای نام-مقدار هستند، استفاده میکند. هر تگ ممکن دارای موارد زیر است:
- یک نام شمارشی (enum) با مقدار مرتبط
- یک نوع مرتبط (برای مثال، عدد صحیح، بایت، تاریخ، شمارشی)، که شامل نشانهای از مجاز بودن یا نبودن چندین مقدار است.
برای مثال، تگی با نام Tag::BLOCK_MODE دارای مقدار enum پایه 4 و یک نشانگر نوع TagType::ENUM_REP است که نشان میدهد مقدار مرتبط یک enum تکرارپذیر (در این مورد، 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()یک پارامتر purpose صریح دارد که باید با یکی از مقادیرTag::PURPOSEمربوط به ویژگیهای کلیدی مطابقت داشته باشد. -
begin()برای عملیات AES باید یک مقدار واحد برایTag::BLOCK_MODEدر فیلدparamsداشته باشد که باید با یکی از مقادیر موجود در ویژگیهای کلیدی مطابقت داشته باشد.
-
این تابع دوگانه به طور خاص برای جمعآوری تگهایی که به عنوان keyParams در یک عملیات تولید یا وارد کردن کلید ارسال میشوند، مرتبط است.
- برخی از برچسبها به عنوان پارامترهایی برای خود عملیات تولید کلید عمل میکنند. برای مثال،
Tag::CERTIFICATE_SUBJECTبا کنترل یک فیلد در گواهی X.509 بازگردانده شده، فقط بر فرآیند تولید کلید (نامتقارن) تأثیر میگذارد. - تگهای دیگر به عنوان ویژگیهای کلیدی به کلید تازه تولید شده متصل میشوند و در keyblob برگردانده شده محصور میشوند تا به طور دائم با کلید مرتبط باشند.
اطلاعات دقیق در مورد مقادیر برچسب را میتوانید در مشخصات رابط HAL زیر بیابید:
- KeyMint — همه تگها در
Tag.aidlدر شاخه انتشار اندروید مربوطه تعریف شدهاند. - Keymaster — برچسبها برای هر
keymaster-versionمربوطه درplatform/hardware/interfaces/keymaster/ keymaster-version /types.halتعریف میشوند، مانند3.0/types.halبرای Keymaster 3 و4.0/types.halبرای Keymaster 4. برای Keymaster 2 و پایینتر، برچسبها درplatform/hardware/libhardware/include/hardware/keymaster_defs.hتعریف میشوند.