এই পৃষ্ঠাটি কী-মাস্টার HAL-এর বাস্তবায়নকারীদের সাহায্য করার জন্য বিশদ প্রদান করে। এটি HAL-এর প্রতিটি ট্যাগ কভার করে, কোন কীমাস্টার সংস্করণে সেই ট্যাগটি পাওয়া যায় এবং ট্যাগটি পুনরাবৃত্তিযোগ্য কিনা। ট্যাগ বর্ণনায় উল্লেখ করা ছাড়া, নীচের সমস্ত ট্যাগগুলি মূল বৈশিষ্ট্যগুলি নির্দিষ্ট করার জন্য কী প্রজন্মের সময় ব্যবহার করা হয়।
কীমাস্টার 4-এর জন্য, platform/hardware/interfaces/keymaster/ keymaster-version /types.hal
এ ট্যাগগুলি সংজ্ঞায়িত করা হয়েছে, যেমন Keymaster 3-এর জন্য 3.0/types.hal এবং Keymaster 4-এর জন্য 4.0/types.hal৷ কীমাস্টার 2 এবং নীচের জন্য, platform/hardware/libhardware/include/hardware/keymaster_defs.h
এ ট্যাগগুলি সংজ্ঞায়িত করা হয়েছে।
ফাংশনগুলির জন্য, কীমাস্টার ফাংশন পৃষ্ঠাটি দেখুন।
ট্যাগ::ACTIVE_DATETIME
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
তারিখ এবং সময় নির্দিষ্ট করে যেখানে কী সক্রিয় হবে। এই সময়ের আগে, ErrorCode::KEY_NOT_YET_VALID
এর সাথে কী ব্যবহার করার কোনো প্রচেষ্টা ব্যর্থ হয়।
মান হল একটি 64-বিট পূর্ণসংখ্যা যা 1 জানুয়ারী, 1970 থেকে মিলিসেকেন্ডের প্রতিনিধিত্ব করে।
ট্যাগ::অ্যালগোরিদম
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
ক্রিপ্টোগ্রাফিক অ্যালগরিদম নির্দিষ্ট করে যার সাথে কী ব্যবহার করা হয়।
সম্ভাব্য মান নিম্নলিখিত গণনা দ্বারা সংজ্ঞায়িত করা হয়:
কীমাস্টার 3enum class Algorithm : uint32_t { RSA = 1, EC = 3, AES = 32, HMAC = 128, };Keymaster 2 এবং তার আগের
typedef enum { KM_ALGORITHM_RSA = 1, KM_ALGORITHM_EC = 3, KM_ALGORITHM_AES = 32, KM_ALGORITHM_HMAC = 128, } keymaster_algorithm_t;
ট্যাগ::ALL_APPLICATIONS
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
ভবিষ্যতে ব্যবহারের জন্য সংরক্ষিত.
ট্যাগ::ALLOW_WHILE_ON_BODY
সংস্করণ : 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
এই ট্যাগটি শুধুমাত্র অন-বডি সেন্সর সহ Android Wear ডিভাইসগুলির জন্য প্রযোজ্য৷ এই মুহুর্তে, এটি প্রত্যাশিত নয় যে কোনও TEE একটি অন-বডি সেন্সরে নিরাপদ অ্যাক্সেস প্রদান করতে পারে, বা অন-বডি সেন্সরগুলি খুব নিরাপদ, তাই এটি একটি সম্পূর্ণরূপে সফ্টওয়্যার-প্রবর্তিত বৈশিষ্ট্য হবে বলে আশা করা হচ্ছে।
ট্যাগ::ALL_USERS
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
ভবিষ্যতে ব্যবহারের জন্য সংরক্ষিত.
ট্যাগ::APPLICATION_DATA
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
যখন জেনারেটকি বা ইম্পোর্টকি প্রদান করা হয়, তখন এই ট্যাগটি সেই ডেটা নির্দিষ্ট করে যা কীটির সমস্ত ব্যবহারের সময় প্রয়োজনীয়। বিশেষ করে, exportKey এবং getKeyCharacteristics- এ কল করার জন্য clientId
প্যারামিটারে একই মান প্রদান করতে হবে এবং শুরু করার জন্য কলগুলিকে এই ট্যাগ এবং inParams
সেটের অংশ হিসাবে একই সম্পর্কিত ডেটা সরবরাহ করতে হবে। সঠিক তথ্য প্রদান না করা হলে, ফাংশনটি ErrorCode::INVALID_KEY_BLOB
প্রদান করে।
এই ট্যাগের বিষয়বস্তু ক্রিপ্টোগ্রাফিকভাবে কী-এর সাথে আবদ্ধ, যার অর্থ এমন কোনো প্রতিপক্ষের পক্ষে সম্ভব হবে না যার কাছে বিশ্বের সমস্ত নিরাপদ গোপনীয়তায় অ্যাক্সেস আছে কিন্তু ট্যাগ বিষয়বস্তুতে অ্যাক্সেস নেই যাতে কীটি ক্রিপ্টোগ্রাফি ছাড়াই ডিক্রিপ্ট করা যায়। ট্যাগ কন্টেন্ট, যা অ্যাপগুলি পর্যাপ্ত উচ্চ-এনট্রপি কন্টেন্ট নির্দিষ্ট করে আটকাতে পারে।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::APPLICATION_ID
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
যখন জেনারেটকি বা ইম্পোর্টকি প্রদান করা হয়, তখন এই ট্যাগটি সেই ডেটা নির্দিষ্ট করে যা কীটির সমস্ত ব্যবহারের সময় প্রয়োজনীয়। বিশেষ করে, exportKey এবং getKeyCharacteristics- এ কল করার জন্য clientId
প্যারামিটারে একই মান প্রদান করতে হবে এবং শুরু করার জন্য কলগুলিকে এই ট্যাগ এবং inParams
সেটের অংশ হিসাবে একই সম্পর্কিত ডেটা সরবরাহ করতে হবে। সঠিক তথ্য প্রদান না করা হলে, ফাংশনটি ErrorCode::INVALID_KEY_BLOB
প্রদান করে।
এই ট্যাগের বিষয়বস্তু ক্রিপ্টোগ্রাফিকভাবে কী-এর সাথে আবদ্ধ, যার অর্থ এটি এমন একজন প্রতিপক্ষ যে নিরাপদ বিশ্বের সমস্ত গোপনীয়তা অ্যাক্সেস করতে পারে—কিন্তু ট্যাগের বিষয়বস্তুতে তার অ্যাক্সেস নেই—কীটি ডিক্রিপ্ট করতে পারে না (ট্যাগটিকে জবরদস্তি না করে বিষয়বস্তু)।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ASSOCIATED_DATA
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
AES-GCM এনক্রিপশন বা ডিক্রিপশনের জন্য "সংশ্লিষ্ট ডেটা" প্রদান করে। এই ট্যাগটি এমন ডেটা আপডেট করতে এবং নির্দিষ্ট করে যা এনক্রিপ্ট করা/ডিক্রিপ্ট করা হয়নি, কিন্তু GCM ট্যাগ গণনা করতে ব্যবহৃত হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ATTESTATION_APPLICATION_ID
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
সম্ভাব্য অ্যাপ্লিকেশানগুলির সেট সনাক্ত করতে ব্যবহৃত হয় যার একটি মূল প্রত্যয়ন শুরু করেছে৷
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ATTESTATION_CHALLENGE
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
সত্যায়নে চ্যালেঞ্জ প্রদান করতে ব্যবহৃত হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ATTESTATION_ID_BRAND
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
Android-এ Build.BRAND
দ্বারা ফেরত দেওয়া ডিভাইসের ব্র্যান্ড নাম প্রদান করে। এই ক্ষেত্রটি তখনই সেট করা হয় যখন ডিভাইসের শনাক্তকারীর সত্যায়নের অনুরোধ করা হয়।
যদি ডিভাইসটি আইডি প্রত্যয়ন সমর্থন না করে (অথবা destroyAttestationIds()
আগে কল করা হয়েছিল এবং ডিভাইসটি আর তার আইডিগুলিকে সত্যায়িত করতে পারে না), তাহলে এই ট্যাগটি অন্তর্ভুক্ত যেকোন মূল প্রত্যয়ন অনুরোধ ErrorCode::CANNOT_ATTEST_IDS
এর সাথে ব্যর্থ হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ATTESTATION_ID_DEVICE
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
Android-এ Build.DEVICE
দ্বারা ফেরত দেওয়া ডিভাইসের ডিভাইসের নাম প্রদান করে। এই ক্ষেত্রটি তখনই সেট করা হয় যখন ডিভাইসের শনাক্তকারীর সত্যায়নের অনুরোধ করা হয়।
যদি ডিভাইসটি আইডি প্রত্যয়ন সমর্থন না করে (অথবা destroyAttestationIds()
আগে কল করা হয়েছিল এবং ডিভাইসটি আর তার আইডিগুলিকে সত্যায়িত করতে পারে না), তাহলে এই ট্যাগটি অন্তর্ভুক্ত যেকোন মূল প্রত্যয়ন অনুরোধ ErrorCode::CANNOT_ATTEST_IDS
এর সাথে ব্যর্থ হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ATTESTATION_ID_IMEI
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? হ্যাঁ
ডিভাইসের সমস্ত রেডিওর জন্য IMEI প্রদান করে। এই ক্ষেত্রটি তখনই সেট করা হয় যখন ডিভাইসের শনাক্তকারীর সত্যায়নের অনুরোধ করা হয়।
যদি ডিভাইসটি আইডি প্রত্যয়ন সমর্থন না করে (অথবা destroyAttestationIds()
আগে কল করা হয়েছিল এবং ডিভাইসটি আর তার আইডিগুলিকে সত্যায়িত করতে পারে না), তাহলে এই ট্যাগটি অন্তর্ভুক্ত যেকোন মূল প্রত্যয়ন অনুরোধ ErrorCode::CANNOT_ATTEST_IDS
এর সাথে ব্যর্থ হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ATTESTATION_ID_MANUFACTURER
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
Android-এ Build.MANUFACTURER
দ্বারা ফেরত দেওয়া ডিভাইসের প্রস্তুতকারকের নাম প্রদান করে। এই ক্ষেত্রটি তখনই সেট করা হয় যখন ডিভাইসের শনাক্তকারীর সত্যায়নের অনুরোধ করা হয়।
যদি ডিভাইসটি আইডি প্রত্যয়ন সমর্থন না করে (অথবা destroyAttestationIds()
আগে কল করা হয়েছিল এবং ডিভাইসটি আর তার আইডিগুলিকে সত্যায়িত করতে পারে না), তাহলে এই ট্যাগটি অন্তর্ভুক্ত যেকোন মূল প্রত্যয়ন অনুরোধ ErrorCode::CANNOT_ATTEST_IDS
এর সাথে ব্যর্থ হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ATTESTATION_ID_MEID
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? হ্যাঁ
ডিভাইসে সমস্ত রেডিওর জন্য MEID প্রদান করে। এই ক্ষেত্রটি তখনই সেট করা হয় যখন ডিভাইসের শনাক্তকারীর সত্যায়নের অনুরোধ করা হয়।
যদি ডিভাইসটি আইডি প্রত্যয়ন সমর্থন না করে (অথবা destroyAttestationIds()
আগে কল করা হয়েছিল এবং ডিভাইসটি আর তার আইডিগুলিকে সত্যায়িত করতে পারে না), তাহলে এই ট্যাগটি অন্তর্ভুক্ত যেকোন মূল প্রত্যয়ন অনুরোধ ErrorCode::CANNOT_ATTEST_IDS
এর সাথে ব্যর্থ হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ATTESTATION_ID_MODEL
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
Android এ Build.MODEL
দ্বারা ফেরত দেওয়া ডিভাইসের মডেল নাম প্রদান করে। এই ক্ষেত্রটি তখনই সেট করা হয় যখন ডিভাইসের শনাক্তকারীর সত্যায়নের অনুরোধ করা হয়।
যদি ডিভাইসটি আইডি প্রত্যয়ন সমর্থন না করে (অথবা destroyAttestationIds()
আগে কল করা হয়েছিল এবং ডিভাইসটি আর তার আইডিগুলিকে সত্যায়িত করতে পারে না), তাহলে এই ট্যাগটি অন্তর্ভুক্ত যেকোন মূল প্রত্যয়ন অনুরোধ ErrorCode::CANNOT_ATTEST_IDS
এর সাথে ব্যর্থ হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ATTESTATION_ID_PRODUCT৷
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
Android-এ Build.PRODUCT
দ্বারা ফেরত দেওয়া ডিভাইসের পণ্যের নাম প্রদান করে। এই ক্ষেত্রটি তখনই সেট করা হয় যখন ডিভাইসের শনাক্তকারীর সত্যায়নের অনুরোধ করা হয়।
যদি ডিভাইসটি আইডি প্রত্যয়ন সমর্থন না করে (অথবা destroyAttestationIds()
আগে কল করা হয়েছিল এবং ডিভাইসটি আর তার আইডিগুলিকে সত্যায়িত করতে পারে না), তাহলে এই ট্যাগটি অন্তর্ভুক্ত যেকোন মূল প্রত্যয়ন অনুরোধ ErrorCode::CANNOT_ATTEST_IDS
এর সাথে ব্যর্থ হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::ATTESTATION_ID_SERIAL
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
ডিভাইসের সিরিয়াল নম্বর প্রদান করে। এই ক্ষেত্রটি তখনই সেট করা হয় যখন ডিভাইসের শনাক্তকারীর সত্যায়নের অনুরোধ করা হয়।
যদি ডিভাইসটি আইডি প্রত্যয়ন সমর্থন না করে (অথবা destroyAttestationIds()
আগে কল করা হয়েছিল এবং ডিভাইসটি আর তার আইডিগুলিকে সত্যায়িত করতে পারে না), তাহলে এই ট্যাগটি অন্তর্ভুক্ত যেকোন মূল প্রত্যয়ন অনুরোধ ErrorCode::CANNOT_ATTEST_IDS
এর সাথে ব্যর্থ হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::AUTH_TIMEOUT
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
প্রমাণীকরণের পরে সেকেন্ডে সময় নির্দিষ্ট করে যার জন্য কী ব্যবহারের জন্য অনুমোদিত। যদি ট্যাগ::USER_SECURE_ID উপস্থিত থাকে এবং এই ট্যাগটি না থাকে, তাহলে প্রতিটি ব্যবহারের জন্য কীটির প্রমাণীকরণ প্রয়োজন (প্রমাণ-প্রতি-অপারেশন প্রবাহের বিশদ বিবরণের জন্য শুরু দেখুন)।
মান হল একটি 32-বিট পূর্ণসংখ্যা যা Tag::USER_SECURE_ID দ্বারা নির্দিষ্ট করা ব্যবহারকারীর সফল প্রমাণীকরণের পর সেকেন্ডের মধ্যে সময় নির্দিষ্ট করে যা Tag::USER_AUTH_TYPE দ্বারা নির্দিষ্ট করা প্রমাণীকরণ পদ্ধতিতে ব্যবহার করা যেতে পারে।
ট্যাগ::AUTH_TOKEN
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
শুরু , আপডেট বা শেষ করার জন্য একটি প্রমাণীকরণ টোকেন প্রদান করে, একটি কী ক্রিয়াকলাপের জন্য ব্যবহারকারীর প্রমাণীকরণ প্রমাণ করতে যা এটির প্রয়োজন হয় (কী আছে ট্যাগ::USER_SECURE_ID )।
মান হল একটি ব্লব যাতে একটি hw_auth_token_t
গঠন থাকে।
ট্যাগ::BLOB_USAGE_REQUIREMENTS
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
উত্পন্ন কী ব্যবহার করার জন্য প্রয়োজনীয় সিস্টেম পরিবেশের শর্তাবলী নির্দিষ্ট করে।
সম্ভাব্য মান নিম্নলিখিত গণনা দ্বারা সংজ্ঞায়িত করা হয়:
কীমাস্টার 3enum class KeyBlobUsageRequirements : uint32_t { STANDALONE = 0, REQUIRES_FILE_SYSTEM = 1, };Keymaster 2 এবং তার আগের
typedef enum { KM_BLOB_STANDALONE = 0, KM_BLOB_REQUIRES_FILE_SYSTEM = 1, } keymaster_key_blob_usage_requirements_t;
এই ট্যাগটি কী জেনারেশনের সময় নির্দিষ্ট করা যেতে পারে যাতে কীটি নির্দিষ্ট অবস্থায় ব্যবহারযোগ্য হয়। generateKey এবং getKeyCharacteristics থেকে মূল বৈশিষ্ট্যের সাথে এটি ফেরত দিতে হবে। যদি কলকারী Tag::BLOB_USAGE_REQUIREMENTS
উল্লেখ করে KeyBlobUsageRequirements::STANDALONE
মানের সাথে ট্রাস্টলেট একটি কী ব্লব প্রদান করে যা ফাইল সিস্টেম সমর্থন ছাড়াই ব্যবহার করা যেতে পারে। এটি এনক্রিপ্ট করা ডিস্ক সহ ডিভাইসগুলির জন্য গুরুত্বপূর্ণ, যেখানে ডিস্ক ডিক্রিপ্ট করার জন্য একটি Keymaster কী ব্যবহার না করা পর্যন্ত ফাইল সিস্টেম উপলব্ধ নাও হতে পারে।
ট্যাগ::BLOCK_MODE
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? হ্যাঁ
ব্লক সাইফার মোডগুলি নির্দিষ্ট করে যেগুলির সাথে কী ব্যবহার করা যেতে পারে। এই ট্যাগটি শুধুমাত্র AES কীগুলির জন্য প্রাসঙ্গিক৷
সম্ভাব্য মান নিম্নলিখিত গণনা দ্বারা সংজ্ঞায়িত করা হয়:
কীমাস্টার 3enum class BlockMode : uint32_t { ECB = 1, CBC = 2, CTR = 3, GCM = 32, };Keymaster 2 এবং তার আগের
typedef enum { KM_MODE_ECB = 1, KM_MODE_CBC = 2, KM_MODE_CTR = 3, KM_MODE_GCM = 32, } keymaster_block_mode_t;
এই ট্যাগটি পুনরাবৃত্তিযোগ্য, এবং AES কী ক্রিয়াকলাপের জন্য begin এর additionalParams
আর্গুমেন্টে একটি মোড নির্দিষ্ট করুন। যদি নির্দিষ্ট মোডটি কী-এর সাথে যুক্ত মোডে না থাকে, ErrorCode::INCOMPATIBLE_BLOCK_MODE
এর সাথে অপারেশন ব্যর্থ হয়।
ট্যাগ::BOOT_PATCHLEVEL
সংস্করণ : 4
Tag::BOOT_PATCHLEVEL বুট ইমেজ (কার্ণেল) নিরাপত্তা প্যাচ স্তর নির্দিষ্ট করে যেটির সাথে কী ব্যবহার করা যেতে পারে। এই ট্যাগটি কখনই কীমাস্টার TA-তে পাঠানো হয় না, কিন্তু TA দ্বারা হার্ডওয়্যার-প্রয়োগকৃত অনুমোদনের তালিকায় যোগ করা হয়। Tag::BOOT_PATCHLEVEL
মানের সাথে একটি কী ব্যবহার করার যে কোনো প্রচেষ্টা বর্তমানে চলমান সিস্টেম প্যাচলেভেলের থেকে ভিন্ন কারণ begin()
, getKeyCharacteristics()
বা exportKey()
ErrorCode::KEY_REQUIRES_UPGRADE
ফেরত দেয়। বিস্তারিত জানার জন্য upgradeKey()
দেখুন।
ট্যাগের মান হল YYYYMMDD ফর্মের একটি পূর্ণসংখ্যা, যেখানে YYYY হল শেষ আপডেটের চার-সংখ্যার বছর, MM হল দুই-অঙ্কের মাস এবং DD হল শেষ আপডেটের দুই-অঙ্কের দিন৷ উদাহরণস্বরূপ, 5 জুন, 2018 তারিখে সর্বশেষ আপডেট হওয়া একটি Android ডিভাইসে জেনারেট হওয়া একটি কীটির মান হবে 20180605৷ যদি দিনটি জানা না থাকে, তাহলে 00 প্রতিস্থাপিত হতে পারে৷
প্রতিটি বুট করার সময়, বুটলোডারকে অবশ্যই বুট ইমেজের প্যাচ স্তর সুরক্ষিত পরিবেশে প্রদান করতে হবে (মেকানিজম বাস্তবায়ন-সংজ্ঞায়িত)।
হার্ডওয়্যার-প্রবর্তিত হতে হবে।
ট্যাগ::BOOTLOADER_ONLY
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
শুধুমাত্র বুটলোডার কী ব্যবহার করতে পারে তা নির্দিষ্ট করে।
এই ট্যাগটি বুলিয়ান, তাই সম্ভাব্য মানগুলি সত্য (যদি ট্যাগটি উপস্থিত থাকে) এবং মিথ্যা (যদি ট্যাগটি উপস্থিত না থাকে)।
অ্যান্ড্রয়েড সিস্টেম থেকে Tag::BOOTLOADER_ONLY
এর সাথে একটি কী ব্যবহার করার কোনো প্রচেষ্টা ErrorCode::INVALID_KEY_BLOB
এর সাথে ব্যর্থ হয়।
ট্যাগ::CALLER_NONCE
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
নির্দিষ্ট করে যে কলার অপ্রয়োজনীয় ক্রিয়াকলাপগুলির জন্য একটি নন্স প্রদান করতে পারে৷
এই ট্যাগটি বুলিয়ান, তাই সম্ভাব্য মানগুলি সত্য (যদি ট্যাগটি উপস্থিত থাকে) এবং মিথ্যা (যদি ট্যাগটি উপস্থিত না থাকে)।
এই ট্যাগটি শুধুমাত্র AES কীগুলির জন্য ব্যবহৃত হয় এবং এটি শুধুমাত্র CBC, CTR এবং GCM ব্লক মোডগুলির জন্য প্রাসঙ্গিক৷ যদি ট্যাগটি উপস্থিত না থাকে, তাহলে বাস্তবায়নের যেকোনও অপারেশন প্রত্যাখ্যান করা উচিত যা Tag::NONCE ErrorCode::CALLER_NONCE_PROHIBITED
দিয়ে শুরু করতে দেয়।
ট্যাগ::CREATION_DATETIME
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
1 জানুয়ারী, 1970 থেকে মিলিসেকেন্ডে কীটি তৈরি করা হয়েছিল তা তারিখ এবং সময় নির্দিষ্ট করে। এই ট্যাগটি শুধুমাত্র ঐচ্ছিক এবং তথ্যগত।
ট্যাগ::ডাইজেস্ট
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? হ্যাঁ
ডাইজেস্ট অ্যালগরিদমগুলি নির্দিষ্ট করে যা সাইনিং এবং যাচাইকরণ ক্রিয়াকলাপ সম্পাদন করতে কী দিয়ে ব্যবহার করা যেতে পারে। এই ট্যাগটি RSA, ECDSA এবং HMAC কীগুলির সাথে প্রাসঙ্গিক৷
সম্ভাব্য মান নিম্নলিখিত গণনা দ্বারা সংজ্ঞায়িত করা হয়:
কীমাস্টার 3enum class Digest : uint32_t { NONE = 0, MD5 = 1, SHA1 = 2, SHA_2_224 = 3, SHA_2_256 = 4, SHA_2_384 = 5, SHA_2_512 = 6, };Keymaster 2 এবং তার আগের
typedef enum { KM_DIGEST_NONE = 0, KM_DIGEST_MD5 = 1, KM_DIGEST_SHA1 = 2, KM_DIGEST_SHA_2_224 = 3, KM_DIGEST_SHA_2_256 = 4, KM_DIGEST_SHA_2_384 = 5, KM_DIGEST_SHA_2_512 = 6, } keymaster_digest_t;
এই ট্যাগ পুনরাবৃত্তিযোগ্য. সাইনিং এবং যাচাইকরণ ক্রিয়াকলাপের জন্য, begin এর additionalParams
আর্গুমেন্টে একটি ডাইজেস্ট উল্লেখ করুন। যদি নির্দিষ্ট ডাইজেস্ট কী-এর সাথে যুক্ত ডাইজেস্টে না থাকে, ErrorCode::INCOMPATIBLE_DIGEST
এর সাথে অপারেশন ব্যর্থ হয়।
ট্যাগ::EC_CURVE
সংস্করণ : 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
কীমাস্টার 1-এ, EC কীগুলির জন্য ব্যবহৃত বক্ররেখাটি নির্দিষ্ট কী আকার থেকে অনুমান করা হয়েছিল। নমনীয়তা উন্নত করার জন্য, কীমাস্টার 2 বক্ররেখা নির্দিষ্ট করার একটি সুস্পষ্ট উপায় চালু করেছে। EC কী প্রজন্মের অনুরোধে Tag::EC_CURVE
, Tag::KEY_SIZE
বা উভয়ই থাকতে পারে।
সম্ভাব্য মান নিম্নলিখিত গণনা দ্বারা সংজ্ঞায়িত করা হয়:
কীমাস্টার 3enum class EcCurve : uint32_t { P_224 = 0, P_256 = 1, P_384 = 2, P_521 = 3, };Keymaster 2 এবং তার আগের
enum class EcCurve : uint32_t { P_224 = 0, P_256 = 1, P_384 = 2, P_521 = 3, };
যদি একটি প্রজন্মের অনুরোধে শুধুমাত্র Tag::KEY_SIZE
থাকে, তাহলে উপযুক্ত NIST বক্ররেখা বেছে নিয়ে Keymaster 1 লজিকে ফিরে যান।
যদি অনুরোধে শুধুমাত্র Tag::EC_CURVE
থাকে, তাহলে নির্দিষ্ট বক্ররেখা ব্যবহার করুন। Keymaster 3 এবং পরবর্তীতে, EcCurve
এ বক্ররেখা সংজ্ঞায়িত করা হয়েছে। Keymaster 2 এবং তার আগের জন্য, বক্ররেখাগুলি keymaster_ec_curve_t
এ সংজ্ঞায়িত করা হয়েছে।
যদি অনুরোধে উভয়ই থাকে, Tag::EC_CURVE
দ্বারা নির্দিষ্ট করা বক্ররেখা ব্যবহার করুন এবং নির্দিষ্ট কী আকার সেই বক্ররেখার জন্য উপযুক্ত কিনা তা যাচাই করুন। যদি না হয়, ErrorCode::INVALID_ARGUMENT
ফেরত দিন।
ট্যাগ::INCLUDE_UNIQUE_ID
সংস্করণ : 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
এই ট্যাগটি কী জেনারেশনের সময় নির্দিষ্ট করা হয়েছে তা নির্দেশ করার জন্য যে উত্পন্ন কীটির জন্য একটি প্রত্যয়ন শংসাপত্রে ট্যাগ::UNIQUE_ID দ্বারা নির্দিষ্ট করা একটি অ্যাপ-স্কোপড এবং সময়-সীমাবদ্ধ ডিভাইস-ইউনিক আইডি থাকা উচিত।
এই ট্যাগটি বুলিয়ান, তাই সম্ভাব্য মানগুলি সত্য (যদি ট্যাগটি উপস্থিত থাকে) এবং মিথ্যা (যদি ট্যাগটি উপস্থিত না থাকে)।
ট্যাগ::KEY_SIZE
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
কী এর অ্যালগরিদমের জন্য স্বাভাবিক উপায়ে পরিমাপ করা কীটির আকার, বিটে, নির্দিষ্ট করে। উদাহরণস্বরূপ, RSA কীগুলির জন্য, Tag::KEY_SIZE
সর্বজনীন মডুলাসের আকার নির্দিষ্ট করে। AES কীগুলির জন্য এটি গোপন কী উপাদানের দৈর্ঘ্য নির্দিষ্ট করে।
ট্যাগ::MAC_LENGTH
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
একটি MAC বা GCM প্রমাণীকরণ ট্যাগের অনুরোধকৃত দৈর্ঘ্য বিটগুলিতে প্রদান করে।
মান হল MAC দৈর্ঘ্য বিটে। এটি 8-এর একটি গুণিতক এবং অন্তত ট্যাগ::MIN_MAC_LENGTH কী-এর সাথে যুক্ত মানের হিসাবে বড়৷
ট্যাগ::MAX_USES_PER_BOOT
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
সিস্টেম পুনরায় বুট করার মধ্যে একটি কী ব্যবহার করা যেতে পারে তা সর্বাধিক সংখ্যক নির্দিষ্ট করে। এটি কী ব্যবহারের হার-সীমাবদ্ধ করার আরেকটি পদ্ধতি।
মান হল একটি 32-বিট পূর্ণসংখ্যা যা প্রতি বুট ব্যবহার করে।
যখন এই ট্যাগ সহ একটি কী একটি অপারেশনে ব্যবহার করা হয়, তখন শুরু কলের সময় একটি কী-সম্পর্কিত কাউন্টার বৃদ্ধি করা উচিত। কী কাউন্টার এই মানটি অতিক্রম করার পরে, ডিভাইসটি পুনরায় চালু না হওয়া পর্যন্ত ErrorCode::MAX_OPS_EXCEEDED
এর সাথে কী ব্যবহার করার পরবর্তী সমস্ত প্রচেষ্টা ব্যর্থ হয়। এটি বোঝায় যে একটি ট্রাস্টলেট এই ট্যাগ সহ কীগুলির জন্য ব্যবহারের কাউন্টারগুলির একটি টেবিল রাখে৷ কারণ কীমাস্টার মেমরি প্রায়শই সীমিত থাকে, এই টেবিলের একটি নির্দিষ্ট সর্বোচ্চ আকার থাকতে পারে এবং কীমাস্টার সেই ক্রিয়াকলাপগুলি ব্যর্থ করতে পারে যা টেবিলটি পূর্ণ হলে এই ট্যাগের সাথে কীগুলি ব্যবহার করার চেষ্টা করে৷ টেবিলে কমপক্ষে 16টি কী মিটমাট করা দরকার। টেবিলটি পূর্ণ হওয়ার কারণে কোনো অপারেশন ব্যর্থ হলে, কীমাস্টার ErrorCode::TOO_MANY_OPERATIONS
প্রদান করে।
ট্যাগ::MIN_MAC_LENGTH
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
এই ট্যাগটি MAC-এর ন্যূনতম দৈর্ঘ্য নির্দিষ্ট করে যা GCM মোড সমর্থন করে এমন HMAC কী এবং AES কীগুলির জন্য এই কী দিয়ে অনুরোধ বা যাচাই করা যেতে পারে।
এই মান হল ন্যূনতম MAC দৈর্ঘ্য, বিটে। এটি 8 এর একাধিক। HMAC কীগুলির জন্য, মানটি কমপক্ষে 64। GCM কীগুলির জন্য, মানটি কমপক্ষে 96 এবং 128-এর বেশি নয়।
ট্যাগ::MIN_SECONDS_BETWEEN_OPS
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
একটি কী ব্যবহার করে অনুমোদিত ক্রিয়াকলাপগুলির মধ্যে অতিবাহিত হওয়ার ন্যূনতম পরিমাণ নির্দিষ্ট করে৷ এটি প্রেক্ষাপটে কীগুলির ব্যবহার রেট-সীমিত করতে ব্যবহার করা যেতে পারে যেখানে সীমাহীন ব্যবহার পাশবিক শক্তি আক্রমণকে সক্ষম করতে পারে।
মান হল একটি 32-বিট পূর্ণসংখ্যা যা অনুমোদিত ক্রিয়াকলাপগুলির মধ্যে সেকেন্ডের প্রতিনিধিত্ব করে৷
এই ট্যাগ সহ একটি কী একটি অপারেশনে ব্যবহার করা হলে, ফিনিশের সময় একটি টাইমার শুরু করুন বা কল বাতিল করুন ৷ টাইমারের আগে প্রাপ্ত যে কোনো কল শুরু হলে তা নির্দেশ করে যে Tag::MIN_SECONDS_BETWEEN_OPS
দ্বারা নির্দিষ্ট করা ব্যবধানটি ErrorCode::KEY_RATE_LIMIT_EXCEEDED
সাথে ব্যর্থ হয়েছে। এটি বোঝায় যে একটি ট্রাস্টলেট এই ট্যাগ সহ কীগুলির জন্য ব্যবহারের কাউন্টারগুলির একটি টেবিল রাখে৷ কারণ কীমাস্টার মেমরি প্রায়শই সীমিত থাকে, এই টেবিলের একটি নির্দিষ্ট সর্বোচ্চ আকার থাকতে পারে এবং কীমাস্টার সেই ক্রিয়াকলাপগুলি ব্যর্থ করতে পারে যা টেবিলটি পূর্ণ হলে এই ট্যাগের সাথে কীগুলি ব্যবহার করার চেষ্টা করে৷ সারণীতে কমপক্ষে 32টি ইন-ব্যবহারের কীগুলিকে মিটমাট করতে হবে এবং কী ন্যূনতম-ব্যবহারের ব্যবধানের মেয়াদ শেষ হয়ে গেলে আক্রমনাত্মকভাবে টেবিল স্লটগুলি পুনরায় ব্যবহার করতে হবে। টেবিলটি পূর্ণ হওয়ার কারণে কোনো অপারেশন ব্যর্থ হলে, কীমাস্টার ErrorCode::TOO_MANY_OPERATIONS
প্রদান করে।
ট্যাগ::NO_AUTH_REQUIRED
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
উল্লেখ করে যে এই কী ব্যবহার করার জন্য কোনো প্রমাণীকরণের প্রয়োজন নেই। এই ট্যাগটি Tag::USER_SECURE_ID এর সাথে পারস্পরিকভাবে একচেটিয়া।
এই ট্যাগটি বুলিয়ান, তাই সম্ভাব্য মানগুলি সত্য (যদি ট্যাগটি উপস্থিত থাকে) এবং মিথ্যা (যদি ট্যাগটি উপস্থিত না থাকে)।
ট্যাগ::NONCE
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
AES GCM, CBC, বা CTR এনক্রিপশন বা ডিক্রিপশনের জন্য একটি ননস বা ইনিশিয়ালাইজেশন ভেক্টর (IV) প্রদান করে বা ফেরত দেয়। এই ট্যাগটি এনক্রিপশন এবং ডিক্রিপশন অপারেশন চলাকালীন শুরু করার জন্য প্রদান করা হয়। এটি শুধুমাত্র শুরু করার জন্য প্রদান করা হয় যদি কীটিতে ট্যাগ::CALLER_NONCE থাকে। যদি প্রদান না করা হয়, একটি উপযুক্ত নন্স বা IV এলোমেলোভাবে কীমাস্টার দ্বারা তৈরি করা হয় এবং শুরু থেকে ফিরে আসে।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷ অনুমোদিত দৈর্ঘ্য মোডের উপর নির্ভর করে: GCM ননসেস দৈর্ঘ্যে 12 বাইট; CBC এবং CTR IV এর দৈর্ঘ্য 16 বাইট।
ট্যাগ::ORIGIN
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
কোথায় কী তৈরি করা হয়েছে তা নির্দিষ্ট করে, যদি জানা থাকে। এই ট্যাগটি কী জেনারেশন বা আমদানির সময় নির্দিষ্ট করা যাবে না এবং ট্রাস্টলেট দ্বারা মূল বৈশিষ্ট্যগুলিতে যোগ করা আবশ্যক।
কীমাস্টার 3 সম্ভাব্য মানগুলি android::hardware::keymaster::v3_0::KeyOrigin
এ সংজ্ঞায়িত করা হয়েছে
enum class KeyOrigin : uint32_t { GENERATED = 0, DERIVED = 1, IMPORTED = 2, UNKNOWN = 3, };Keymaster 2 এবং তার আগের
সম্ভাব্য মানগুলি keymaster_origin_t
এ সংজ্ঞায়িত করা হয়েছে :
typedef enum { KM_ORIGIN_GENERATED = 0, KM_ORIGIN_IMPORTED = 2, KM_ORIGIN_UNKNOWN = 3, } keymaster_key_origin_t
মানের সম্পূর্ণ অর্থ নির্ভর করে শুধুমাত্র মানের উপর নয় বরং এটি হার্ডওয়্যার-প্রবর্তিত বা সফ্টওয়্যার-প্রবর্তিত বৈশিষ্ট্যের তালিকায় পাওয়া যায় কিনা তা নির্ভর করে।
GENERATED
নির্দেশ করে যে কীমাস্টার কী তৈরি করেছে। হার্ডওয়্যার-প্রবর্তিত তালিকায় থাকলে, কীটি সুরক্ষিত হার্ডওয়্যারে তৈরি করা হয়েছে এবং স্থায়ীভাবে হার্ডওয়্যার আবদ্ধ। যদি সফ্টওয়্যার-প্রবর্তিত তালিকায় থাকে, কীটি SoftKeymaster-এ তৈরি করা হয়েছে এবং হার্ডওয়্যার আবদ্ধ নয়।
DERIVED
ইঙ্গিত করে যে কীটি কীমাস্টারের ভিতরে প্রাপ্ত হয়েছিল। সম্ভবত অফ-ডিভাইস বিদ্যমান।
IMPORTED
নির্দেশ করে যে কীটি কীমাস্টারের বাইরে তৈরি করা হয়েছিল এবং কীমাস্টারে আমদানি করা হয়েছিল৷ হার্ডওয়্যার-প্রবর্তিত তালিকায় থাকলে, এটি স্থায়ীভাবে হার্ডওয়্যার আবদ্ধ, যদিও সুরক্ষিত হার্ডওয়্যারের বাইরের অনুলিপি বিদ্যমান থাকতে পারে। যদি সফ্টওয়্যার-প্রবর্তন তালিকায় থাকে, কীটি SoftKeymaster-এ আমদানি করা হয়েছিল এবং হার্ডওয়্যার আবদ্ধ নয়৷
UNKNOWN
শুধুমাত্র হার্ডওয়্যার-প্রবর্তিত তালিকায় উপস্থিত হওয়া উচিত। এটি নির্দেশ করে যে কীটি হার্ডওয়্যার আবদ্ধ, তবে এটি জানা নেই যে কীটি মূলত সুরক্ষিত হার্ডওয়্যারে তৈরি হয়েছিল নাকি আমদানি করা হয়েছিল। এটি শুধুমাত্র তখনই ঘটে যখন keymaster0 হার্ডওয়্যার keymaster1 পরিষেবাগুলিকে অনুকরণ করতে ব্যবহৃত হয়।
ট্যাগ::ORIGINATION_EXPIRE_DATETIME
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
স্বাক্ষর এবং এনক্রিপশনের উদ্দেশ্যে কীটির মেয়াদ শেষ হওয়ার তারিখ এবং সময় নির্দিষ্ট করে। এই সময়ের পরে, শুরু করার জন্য দেওয়া KeyPurpose::SIGN বা KeyPurpose::ENCRYPT সহ একটি কী ব্যবহার করার যে কোনো প্রচেষ্টা ErrorCode::KEY_EXPIRED
এর সাথে ব্যর্থ হয়।
মান হল একটি 64-বিট পূর্ণসংখ্যা যা 1 জানুয়ারী, 1970 থেকে মিলিসেকেন্ডের প্রতিনিধিত্ব করে।
ট্যাগ::OS_PATCHLEVEL
সংস্করণ : 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
এই ট্যাগটি কখনই কীমাস্টার TA-তে পাঠানো হয় না, কিন্তু TA দ্বারা হার্ডওয়্যার-প্রয়োগকৃত অনুমোদনের তালিকায় যোগ করা হয়।
ট্যাগের মান হল YYYYMM ফর্মের একটি পূর্ণসংখ্যা, যেখানে YYYY হল শেষ আপডেটের চার-অঙ্কের বছর এবং MM হল শেষ আপডেটের দুই-অঙ্কের মাস৷ উদাহরণস্বরূপ, ডিসেম্বর 2015 এ সর্বশেষ আপডেট হওয়া একটি Android ডিভাইসে তৈরি হওয়া একটি কীটির মান হবে 201512৷
বর্তমান প্যাচ স্তরের চেয়ে আলাদা প্যাচ স্তর রয়েছে এমন কীগুলি ব্যবহারযোগ্য নয়৷ এই ধরনের একটি মূল কারণ ব্যবহার করার চেষ্টা শুরু , GetKeyCharacteristics , অথবা ExportKey ফেরত দিতে ErrorCode::KEY_REQUIRES_UPGRADE
। আরও বিস্তারিত জানার জন্য সংস্করণ বাইন্ডিং দেখুন।
ট্যাগ::OS_VERSION
সংস্করণ : 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
এই ট্যাগটি কখনই কীমাস্টার TA-তে পাঠানো হয় না, কিন্তু TA দ্বারা হার্ডওয়্যার-প্রয়োগকৃত অনুমোদনের তালিকায় যোগ করা হয়।
ট্যাগের মান হল MMmmss ফর্মের একটি পূর্ণসংখ্যা, যেখানে MM হল প্রধান সংস্করণ সংখ্যা, mm হল ক্ষুদ্র সংস্করণ সংখ্যা এবং ss হল উপ-অপ্রধান সংস্করণ নম্বর৷ উদাহরণস্বরূপ, অ্যান্ড্রয়েড সংস্করণ 4.0.3-এ তৈরি একটি কী-এর জন্য, মান হবে 040003৷
ট্যাগ::প্যাডিং
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? হ্যাঁ
কী দিয়ে ব্যবহার করা যেতে পারে এমন প্যাডিং মোডগুলি নির্দিষ্ট করে। এই ট্যাগটি RSA এবং AES কীগুলির সাথে প্রাসঙ্গিক৷
সম্ভাব্য মান নিম্নলিখিত গণনা দ্বারা সংজ্ঞায়িত করা হয়:
কীমাস্টার 3enum class PaddingMode : uint32_t { NONE = 1, RSA_OAEP = 2, RSA_PSS = 3, RSA_PKCS1_1_5_ENCRYPT = 4, RSA_PKCS1_1_5_SIGN = 5, PKCS7 = 64, };Keymaster 2 এবং তার আগের
typedef enum { KM_PAD_NONE = 1, KM_PAD_RSA_OAEP = 2, KM_PAD_RSA_PSS = 3, KM_PAD_RSA_PKCS1_1_5_ENCRYPT = 4, KM_PAD_RSA_PKCS1_1_5_SIGN = 5, KM_PAD_PKCS7 = 64, } keymaster_padding_t;
PaddingMode::RSA_OAEP
এবং PaddingMode::RSA_PKCS1_1_5_ENCRYPT
শুধুমাত্র RSA এনক্রিপশন/ডিক্রিপশন কীগুলির জন্য ব্যবহৃত হয় এবং যথাক্রমে RSA PKCS#1v2 OAEP প্যাডিং এবং RSA PKCS#1 v1.5 এলোমেলো প্যাডিং নির্দিষ্ট করুন। PaddingMode::RSA_PSS
এবং PaddingMode::RSA_PKCS1_1_5_SIGN
শুধুমাত্র RSA স্বাক্ষর/যাচাইকরণ কীগুলির জন্য ব্যবহৃত হয় এবং যথাক্রমে RSA PKCS#1v2 PSS প্যাডিং এবং RSA PKCS#1 v1.5 নির্ধারক প্যাডিং নির্দিষ্ট করুন৷
PaddingMode::NONE
RSA বা AES কীগুলির সাথে ব্যবহার করা যাবে না। AES কীগুলির জন্য, যদি PaddingMode::NONE
ব্লক মোড ECB বা CBC এর সাথে ব্যবহার করা হয় এবং এনক্রিপ্ট বা ডিক্রিপ্ট করা ডেটা দৈর্ঘ্যে AES ব্লক আকারের একাধিক না হয়, তাহলে কলটি শেষ করতে ব্যর্থ হয় ErrorCode::INVALID_INPUT_LENGTH
।
PaddingMode::PKCS7
শুধুমাত্র AES কীগুলির সাথে এবং শুধুমাত্র ECB এবং CBC মোডগুলির সাথে ব্যবহার করা যেতে পারে৷
এই ট্যাগ পুনরাবৃত্তিযোগ্য. কল শুরু করার জন্য একটি প্যাডিং মোড অবশ্যই উল্লেখ করতে হবে। যদি নির্দিষ্ট মোডটি কীটির জন্য অনুমোদিত না হয় তবে ErrorCode::INCOMPATIBLE_BLOCK_MODE
এর সাথে অপারেশনটি ব্যর্থ হয়।
ট্যাগ::উদ্দেশ্য
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? হ্যাঁ
উদ্দেশ্যগুলির সেট নির্দিষ্ট করে যার জন্য কী ব্যবহার করা যেতে পারে।
সম্ভাব্য মান নিম্নলিখিত গণনা দ্বারা সংজ্ঞায়িত করা হয়:
কীমাস্টার 3enum class KeyPurpose : uint32_t { ENCRYPT = 0, DECRYPT = 1, SIGN = 2, VERIFY = 3, DERIVE_KEY = 4, // since 3.0 WRAP_KEY = 5, // since 3.0 };Keymaster 2 এবং তার আগের
typedef enum { KM_PURPOSE_ENCRYPT = 0, KM_PURPOSE_DECRYPT = 1, KM_PURPOSE_SIGN = 2, KM_PURPOSE_VERIFY = 3, } keymaster_purpose_t;
এই ট্যাগ পুনরাবৃত্তিযোগ্য; কীগুলি একাধিক মান দিয়ে তৈরি করা যেতে পারে, যদিও একটি অপারেশনের একটি একক উদ্দেশ্য থাকে। যখন একটি অপারেশন শুরু করার জন্য begin ফাংশন বলা হয়, তখন অপারেশনের উদ্দেশ্য নির্দিষ্ট করা হয়। যদি অপারেশনের জন্য নির্দিষ্ট করা উদ্দেশ্য কী দ্বারা অনুমোদিত না হয়, অপারেশনটি ErrorCode::INCOMPATIBLE_PURPOSE
এর সাথে ব্যর্থ হয়।
ট্যাগ::RESET_SINCE_ID_ROTATION
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
শেষ অনন্য আইডি ঘূর্ণন থেকে ডিভাইসটি ফ্যাক্টরি রিসেট হয়েছে কিনা তা নির্দিষ্ট করে৷ মূল প্রত্যয়নের জন্য ব্যবহৃত হয়।
এই ট্যাগটি বুলিয়ান, তাই সম্ভাব্য মানগুলি সত্য (যদি ট্যাগটি উপস্থিত থাকে) এবং মিথ্যা (যদি ট্যাগটি উপস্থিত না থাকে)।
ট্যাগ::ROLLBACK_RESISTANT
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
ইঙ্গিত করে যে কীটি রোলব্যাক-প্রতিরোধী, যার অর্থ হল deleteKey বা deleteAllKeys দ্বারা মুছে ফেলা হলে, কীটি স্থায়ীভাবে মুছে ফেলা এবং অব্যবহারের গ্যারান্টি দেওয়া হয়। এটা সম্ভব যে এই ট্যাগ ছাড়া কীগুলি মুছে ফেলা হতে পারে এবং তারপর ব্যাকআপ থেকে পুনরুদ্ধার করা যেতে পারে।
এই ট্যাগটি বুলিয়ান, তাই সম্ভাব্য মানগুলি সত্য (যদি ট্যাগটি উপস্থিত থাকে) এবং মিথ্যা (যদি ট্যাগটি উপস্থিত না থাকে)।
ট্যাগ::ROOT_OF_TRUST
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
অপারেটিং সিস্টেম বুট করা (যদি থাকে) যাচাই করার জন্য যাচাই করা বুট দ্বারা ব্যবহৃত কী বিশ্বাসের মূলটি নির্দিষ্ট করে। এই ট্যাগটি কখনই মূল বৈশিষ্ট্যে কীমাস্টারকে প্রদান করা হয় না বা ফেরত দেওয়া হয় না।
ট্যাগ::RSA_PUBLIC_EXPONENT
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
একটি RSA কী জোড়ার জন্য সর্বজনীন সূচকের মান নির্দিষ্ট করে। এই ট্যাগটি শুধুমাত্র RSA কীগুলির জন্য প্রাসঙ্গিক এবং সমস্ত RSA কীগুলির জন্য প্রয়োজনীয়৷
মানটি একটি 64-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা যা একটি RSA পাবলিক এক্সপোনেন্টের প্রয়োজনীয়তা পূরণ করে। এই মান একটি মৌলিক সংখ্যা হতে হবে. ট্রাস্টলেটগুলি 2^16+1 মানকে সমর্থন করে এবং অন্যান্য যুক্তিসঙ্গত মানগুলিকে সমর্থন করতে পারে, বিশেষ করে মান 3৷ যদি কোনো সূচক নির্দিষ্ট করা না থাকে বা যদি নির্দিষ্ট সূচকটি সমর্থিত না হয়, ErrorCode::INVALID_ARGUMENT
এর সাথে কী জেনারেশন ব্যর্থ হয়।
ট্যাগ::UNIQUE_ID
সংস্করণ : 3, 4
পুনরাবৃত্তিযোগ্য ? না
সত্যায়নে অনন্য আইডি প্রদান করতে ব্যবহৃত হয়।
মান হল একটি ব্লব, বাইটগুলির একটি নির্বিচারে দৈর্ঘ্যের অ্যারে৷
ট্যাগ::USAGE_EXPIRE_DATETIME
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
যাচাইকরণ এবং ডিক্রিপশনের উদ্দেশ্যে কীটির মেয়াদ শেষ হওয়ার তারিখ এবং সময় নির্দিষ্ট করে। এই সময়ের পরে, শুরু করার জন্য দেওয়া KeyPurpose::VERIFY বা KeyPurpose::DECRYPT সহ একটি কী ব্যবহার করার যে কোনো প্রচেষ্টা ErrorCode::KEY_EXPIRED
এর সাথে ব্যর্থ হয়।
মান হল একটি 64-বিট পূর্ণসংখ্যা যা 1 জানুয়ারী, 1970 থেকে মিলিসেকেন্ডের প্রতিনিধিত্ব করে।
ট্যাগ::USER_AUTH_TYPE
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? না
এই কী অনুমোদন করতে ব্যবহার করা যেতে পারে এমন ব্যবহারকারীর প্রমাণীকরণকারীর ধরন উল্লেখ করে। যখন কীমাস্টারকে এই ট্যাগের সাথে একটি কী দিয়ে অপারেশন করার জন্য অনুরোধ করা হয়, তখন এটি একটি প্রমাণীকরণ টোকেন পায় এবং টোকেনের authenticator_type
ক্ষেত্রটিকে ট্যাগের মানটির সাথে মেলে। উদাহরণস্বরূপ, (ntoh(token.authenticator_type) & auth_type_tag_value) != 0
, যেখানে ntoh
হল একটি ফাংশন যা নেটওয়ার্ক-অর্ডার করা পূর্ণসংখ্যাকে হোস্ট-অর্ডার করা পূর্ণসংখ্যাতে রূপান্তর করে এবং auth_type_tag_value
হল এই ট্যাগের মান।
মান হল গণনা থেকে মানের একটি 32-বিট পূর্ণসংখ্যা বিটমাস্ক:
কীমাস্টার 3enum class HardwareAuthenticatorType : uint32_t { NONE = 0u, // 0 PASSWORD = 1 << 0, FINGERPRINT = 1 << 1, ANY = UINT32_MAX, };Keymaster 2 এবং তার আগের
typedef enum { HW_AUTH_NONE = 0, HW_AUTH_PASSWORD = 1 << 0, HW_AUTH_FINGERPRINT = 1 << 1, // Additional entries should be powers of 2. HW_AUTH_ANY = UINT32_MAX, } hw_authenticator_type_t;
ট্যাগ::USER_SECURE_ID
সংস্করণ : 1, 2, 3, 4
পুনরাবৃত্তিযোগ্য ? হ্যাঁ
নির্দিষ্ট করে যে একটি কী শুধুমাত্র একটি নির্দিষ্ট নিরাপদ ব্যবহারকারী প্রমাণীকরণ অবস্থার অধীনে ব্যবহার করা যেতে পারে। এই ট্যাগটি Tag::NO_AUTH_REQUIRED এর সাথে পারস্পরিকভাবে একচেটিয়া।
মান হল একটি 64-বিট পূর্ণসংখ্যা যা প্রমাণীকরণ নীতির অবস্থার মান উল্লেখ করে যা একটি প্রমাণীকরণ টোকেনে উপস্থিত থাকতে হবে ( ট্যাগ::AUTH_TOKEN দিয়ে শুরু করার জন্য প্রদান করা হয়েছে) কীটির ব্যবহার অনুমোদন করতে। এই ট্যাগের সাথে একটি কী দিয়ে শুরু করার জন্য যে কোনো কল যা একটি প্রমাণীকরণ টোকেন প্রদান করে না, অথবা একটি মিলিত নীতি রাষ্ট্রের মান ছাড়া একটি প্রমাণীকরণ টোকেন প্রদান করে, ব্যর্থ হয়।
এই ট্যাগ পুনরাবৃত্তিযোগ্য. যদি প্রদত্ত মানগুলির যেকোনও প্রমাণীকরণ টোকেনের কোনও নীতি রাষ্ট্রের মানের সাথে মেলে, কীটি ব্যবহারের জন্য অনুমোদিত। অন্যথায় ErrorCode::KEY_USER_NOT_AUTHENTICATED
এর সাথে অপারেশন ব্যর্থ হয়।
ট্যাগ::VENDOR_PATCHLEVEL
সংস্করণ : 4
এই ট্যাগটি ভেন্ডর ইমেজ সিকিউরিটি প্যাচ লেভেল নির্দিষ্ট করে যার সাথে কী ব্যবহার করা যেতে পারে। এই ট্যাগটি কখনই কীমাস্টার TA-তে পাঠানো হয় না, কিন্তু TA দ্বারা হার্ডওয়্যার-প্রয়োগকৃত অনুমোদনের তালিকায় যোগ করা হয়। একটি Tag::VENDOR_PATCHLEVEL
মানের সাথে একটি কী ব্যবহার করার যে কোনো প্রচেষ্টা বর্তমানে চলমান সিস্টেম প্যাচলেভেল থেকে ভিন্ন হতে হবে অবশ্যই begin()
, getKeyCharacteristics()
বা exportKey()
ErrorCode::KEY_REQUIRES_UPGRADE
ফেরত দিতে হবে। বিস্তারিত জানার জন্য upgradeKey()
দেখুন।
ট্যাগের মান হল YYYYMMDD ফর্মের একটি পূর্ণসংখ্যা, যেখানে YYYY হল শেষ আপডেটের চার-সংখ্যার বছর, MM হল দুই-অঙ্কের মাস এবং DD হল শেষ আপডেটের দুই-অঙ্কের দিন৷ উদাহরণস্বরূপ, 5 জুন, 2018 তারিখে সর্বশেষ আপডেট হওয়া একটি Android ডিভাইসে তৈরি হওয়া একটি কীটির মান হবে 20180605৷
IKeymasterDevice HAL-কে অবশ্যই সিস্টেম প্রপার্টি ro.vendor.build.security_patch
থেকে বর্তমান ভেন্ডর প্যাচলেভেল পড়তে হবে এবং HAL প্রথম লোড করার সময় এটিকে নিরাপদ পরিবেশে পৌঁছে দিতে হবে (মেকানিজম ইমপ্লিমেন্টেশন-সংজ্ঞায়িত)। পরবর্তী বুট না হওয়া পর্যন্ত নিরাপদ পরিবেশ অবশ্যই অন্য প্যাচলেভেল গ্রহণ করবে না।
হার্ডওয়্যার-প্রবর্তিত হতে হবে।