অনুমোদন ট্যাগ

KeyMint (পূর্বে Keymaster) API ব্যাপকভাবে অথরাইজেশন ট্যাগ ব্যবহার করে, যা হলো নাম-মান জোড়া। প্রতিটি সম্ভাব্য ট্যাগে রয়েছে:

  • সংশ্লিষ্ট মান সহ একটি এনাম নাম
  • একটি সংশ্লিষ্ট টাইপ (যেমন, ইন্টিজার, বাইটস, ডেট, এনাম), যেখানে একাধিক মান অনুমোদিত কিনা তার একটি ইঙ্গিত অন্তর্ভুক্ত থাকে।

উদাহরণস্বরূপ, Tag::BLOCK_MODE নামের ট্যাগটির বেস এনাম ভ্যালু হলো 4 এবং এর একটি TagType::ENUM_REP টাইপ মার্কার রয়েছে যা নির্দেশ করে যে এর সাথে যুক্ত ভ্যালুটি একটি রিপিটেবল এনাম (এই ক্ষেত্রে, BlockMode )।

এপিআই-তে ট্যাগগুলো দ্বৈত ভূমিকা পালন করে:

  • এপিআই-তে সম্পাদিত কোনো অপারেশনের প্যারামিটার হিসেবে, উদাহরণস্বরূপ, একটি HMAC সাইনিং অপারেশনে Tag::MAC_LENGTH অনুরোধকৃত HMAC দৈর্ঘ্য নির্দেশ করে।
  • মূল বৈশিষ্ট্য হিসেবে, যে মানগুলো একটি নির্দিষ্ট কী-এর সাথে স্থায়ীভাবে আবদ্ধ থাকে (অর্থাৎ, কী ব্লবে অন্তর্ভুক্ত থাকে), উদাহরণস্বরূপ, Tag::EC_CURVE নির্দেশ করে যে একটি কী কোন এলিপটিক কার্ভের জন্য। প্রতিটি মূল বৈশিষ্ট্য একটি নিরাপত্তা স্তরের সাথে যুক্ত থাকে, যা নির্দেশ করে সিস্টেমের কোন অংশ অ্যাট্রিবিউটটি নিয়ন্ত্রণ করে:
    • TRUSTED_ENVIRONMENT বা STRONGBOX নিরাপত্তা স্তরের একটি মূল বৈশিষ্ট্য সুরক্ষিত হার্ডওয়্যারে বলবৎ করা হয়।
    • SOFTWARE বা KEYSTORE নিরাপত্তা স্তরের একটি মূল বৈশিষ্ট্য শুধুমাত্র keystore2 সিস্টেম পরিষেবা দ্বারা প্রয়োগ করা হয় (এবং তাই এই ধরনের বৈশিষ্ট্য ওএস হ্যাকিংয়ের বিরুদ্ধে স্থিতিস্থাপক নয়)।

অনেক ট্যাগ মূল বৈশিষ্ট্য এবং প্যারামিটার উভয় হিসেবেই কাজ করে:

  • মূল বৈশিষ্ট্যগুলো একটি কী-এর জন্য অনুমোদিত প্যারামিটারগুলোর সেট নির্দেশ করে, উদাহরণস্বরূপ:
    • একটি ECDSA কী-এর Tag::PURPOSE SIGN এবং AGREE_KEY উভয়ই অন্তর্ভুক্ত থাকতে পারে।
    • একটি AES কী-এর Tag::BLOCK_MODE ECB, CBC, এবং CTR মোড অন্তর্ভুক্ত থাকতে পারে।
  • এরপর একটি begin() অনুরোধে অপারেশনটির জন্য একটি নির্দিষ্ট প্যারামিটার মান অন্তর্ভুক্ত থাকে, উদাহরণস্বরূপ:
    • begin() ফাংশনের একটি সুস্পষ্ট purpose প্যারামিটার থাকে, যা অবশ্যই মূল বৈশিষ্ট্যগুলোর Tag::PURPOSE মানগুলোর একটির সাথে মিলতে হবে।
    • একটি AES অপারেশনের জন্য begin() ফাংশনের params ফিল্ডে Tag::BLOCK_MODE জন্য একটিমাত্র মান অন্তর্ভুক্ত করতে হবে, যা অবশ্যই key characteristics-এর মানগুলোর মধ্যে একটির সাথে মিলতে হবে।

এই দ্বৈত কার্যকারিতাটি কী জেনারেশন বা ইম্পোর্ট অপারেশনে keyParams হিসেবে পাস করা ট্যাগগুলো সংগ্রহের ক্ষেত্রে বিশেষভাবে প্রাসঙ্গিক।

  • কিছু ট্যাগ সরাসরি কী জেনারেশন অপারেশনের প্যারামিটার হিসেবে কাজ করে। উদাহরণস্বরূপ, Tag::CERTIFICATE_SUBJECT ট্যাগটি ফেরত আসা X.509 সার্টিফিকেটের একটি ফিল্ড নিয়ন্ত্রণের মাধ্যমে শুধুমাত্র (অ্যাসিমেট্রিক) কী জেনারেশন প্রক্রিয়াকে প্রভাবিত করে।
  • অন্যান্য ট্যাগগুলো নতুন তৈরি হওয়া কী-টির সাথে কী ক্যারেক্টারিস্টিকস হিসেবে যুক্ত থাকে এবং ফেরত আসা কীব্লবের মধ্যে এনক্যাপসুলেট করা থাকে, যাতে সেগুলো কী-টির সাথে স্থায়ীভাবে সংযুক্ত থাকে।

ট্যাগ মান সম্পর্কে বিস্তারিত তথ্য নিম্নলিখিত HAL ইন্টারফেস স্পেসিফিকেশনগুলিতে পাওয়া যাবে:

  • KeyMint — সকল ট্যাগ সংশ্লিষ্ট অ্যান্ড্রয়েড রিলিজ ব্রাঞ্চের Tag.aidl ফাইলে সংজ্ঞায়িত করা আছে।
  • কীমাস্টার — প্রতিটি সংশ্লিষ্ট keymaster-version জন্য ট্যাগগুলি platform/hardware/interfaces/keymaster/ keymaster-version /types.hal এ সংজ্ঞায়িত করা হয়, যেমন কীমাস্টার ৩-এর জন্য 3.0/types.hal এবং কীমাস্টার ৪-এর জন্য 4.0/types.hal কীমাস্টার ২ এবং তার নিচের সংস্করণগুলির জন্য, ট্যাগগুলি platform/hardware/libhardware/include/hardware/keymaster_defs.h এ সংজ্ঞায়িত করা হয়।