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::PURPOSESIGNএবংAGREE_KEYউভয়ই অন্তর্ভুক্ত থাকতে পারে। - একটি AES কী-এর
Tag::BLOCK_MODEECB, CBC, এবং CTR মোড অন্তর্ভুক্ত থাকতে পারে।
- একটি ECDSA কী-এর
- এরপর একটি
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এ সংজ্ঞায়িত করা হয়।