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

رابط برنامه‌نویسی کاربردی 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 تعریف می‌شوند.