برچسب های مجوز

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 .