এই পৃষ্ঠাটি কীমাস্টার হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HALs) বাস্তবায়নকারীদের সহায়তা করার জন্য বিশদ প্রদান করে। এটি API-এর প্রতিটি ফাংশন কভার করে এবং কোন কীমাস্টার সংস্করণে সেই ফাংশনটি উপলব্ধ এবং ডিফল্ট বাস্তবায়ন বর্ণনা করে। ট্যাগগুলির জন্য, কীমাস্টার ট্যাগ পৃষ্ঠাটি দেখুন।
সাধারণ বাস্তবায়ন নির্দেশিকা
নিম্নলিখিত নির্দেশিকাগুলি API-এর সমস্ত ফাংশনে প্রযোজ্য৷
ইনপুট পয়েন্টার পরামিতি
সংস্করণ : 1, 2
ইনপুট পয়েন্টার প্যারামিটার যা একটি প্রদত্ত কলের জন্য ব্যবহার করা হয় না NULL
হতে পারে। কলারকে স্থানধারক প্রদান করার প্রয়োজন নেই। উদাহরণস্বরূপ, কিছু কী প্রকার এবং মোড শুরু করার জন্য inParams
আর্গুমেন্ট থেকে কোনো মান ব্যবহার নাও করতে পারে, তাই কলার inParams
NULL
এ সেট করতে পারে বা একটি খালি প্যারামিটার সেট প্রদান করতে পারে। কলাররা অব্যবহৃত পরামিতিও প্রদান করতে পারে এবং কীমাস্টার পদ্ধতিতে ত্রুটি প্রকাশ করা উচিত নয়।
যদি একটি প্রয়োজনীয় ইনপুট পরামিতি NULL হয়, তাহলে কীমাস্টার পদ্ধতিগুলি ErrorCode::UNEXPECTED_NULL_POINTER
ফেরত দেবে।
Keymaster 3 থেকে শুরু করে, কোন পয়েন্টার প্যারামিটার নেই। সমস্ত পরামিতি মান বা const রেফারেন্স দ্বারা পাস করা হয়.
আউটপুট পয়েন্টার পরামিতি
সংস্করণ : 1, 2
ইনপুট পয়েন্টার প্যারামিটারের মতো, অব্যবহৃত আউটপুট পয়েন্টার প্যারামিটার NULL
হতে পারে। যদি একটি পদ্ধতির একটি আউটপুট প্যারামিটারে ডেটা ফেরত দিতে হয় যা NULL
বলে পাওয়া যায়, তাহলে এটি ErrorCode::OUTPUT_PARAMETER_NULL
প্রদান করবে।
Keymaster 3 থেকে শুরু করে, কোন পয়েন্টার প্যারামিটার নেই। সমস্ত পরামিতি মান বা const রেফারেন্স দ্বারা পাস করা হয়.
API অপব্যবহার
সংস্করণ : 1, 2, 3
কলকারীরা এমন অনেক উপায়ে অনুরোধ করতে পারে যা অর্থহীন বা বোকা কিন্তু প্রযুক্তিগতভাবে ভুল নয়। এই ধরনের ক্ষেত্রে ব্যর্থ হওয়ার জন্য বা ডায়াগনস্টিক ইস্যু করার জন্য কীমাস্টার বাস্তবায়নের প্রয়োজন হয় না। খুব ছোট কীগুলির ব্যবহার, অপ্রাসঙ্গিক ইনপুট প্যারামিটারের স্পেসিফিকেশন, IV বা ননসেসের পুনঃব্যবহার, কোন উদ্দেশ্য ছাড়াই কী তৈরি করা (অতএব অকেজো) এবং এই জাতীয়গুলি বাস্তবায়ন দ্বারা নির্ণয় করা উচিত নয়। প্রয়োজনীয় পরামিতি বাদ দেওয়া, অবৈধ প্রয়োজনীয় পরামিতিগুলির স্পেসিফিকেশন এবং অনুরূপ ত্রুটিগুলি নির্ণয় করা আবশ্যক।
কীমাস্টার মডিউলগুলিতে কলগুলি বুদ্ধিমান এবং দরকারী তা নিশ্চিত করা অ্যাপস, ফ্রেমওয়ার্ক এবং অ্যান্ড্রয়েড কীস্টোরের দায়িত্ব৷
ফাংশন
হার্ডওয়্যার বৈশিষ্ট্যগুলি পান
সংস্করণ : 3
নতুন getHardwareFeatures
পদ্ধতি ক্লায়েন্টদের কাছে অন্তর্নিহিত সুরক্ষিত হার্ডওয়্যারের কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য প্রকাশ করে। পদ্ধতিটি কোন আর্গুমেন্ট নেয় না এবং চারটি মান প্রদান করে, সমস্ত বুলিয়ান:
-
isSecure
true
যদি কীগুলি সুরক্ষিত হার্ডওয়্যারে (TEE, ইত্যাদি) সংরক্ষণ করা হয় এবং কখনই এটি ছেড়ে না যায়। -
supportsEllipticCurve
true
যদি হার্ডওয়্যারটি NIST বক্ররেখা (P-224, P-256, P-384, এবং P-521) সহ উপবৃত্তাকার কার্ভ ক্রিপ্টোগ্রাফি সমর্থন করে। -
true
CryptographysupportsSymmetricCryptography
যদি হার্ডওয়্যার AES এবং HMAC সহ সিমেট্রিক ক্রিপ্টোগ্রাফি সমর্থন করে। -
supportsAttestation
true
যদি হার্ডওয়্যার কিমাস্টার পাবলিক কী প্রত্যয়ন শংসাপত্র তৈরি করে, একটি সুরক্ষিত পরিবেশে ইনজেকশন করা কী দিয়ে স্বাক্ষরিত।
এই পদ্ধতিটি শুধুমাত্র যে ত্রুটি কোডগুলি ফেরত দিতে পারে তা হল ErrorCode:OK
, ErrorCode::KEYMASTER_NOT_CONFIGURED
বা একটি ত্রুটি কোড যা সুরক্ষিত হার্ডওয়্যারের সাথে যোগাযোগ করতে ব্যর্থতার ইঙ্গিত দেয়।
getHardwareFeatures() generates(bool isSecure, bool supportsEllipticCurve, bool supportsSymmetricCryptography, bool supportsAttestation, bool supportsAllDigests, string keymasterName, string keymasterAuthorName);
কনফিগার
সংস্করণ : 2
এই ফাংশনটি Keymaster 2-এ চালু করা হয়েছিল এবং Keymaster 3-এ অবমুক্ত করা হয়েছিল, কারণ এই তথ্য সিস্টেমের বৈশিষ্ট্য ফাইলগুলিতে পাওয়া যায়, এবং প্রস্তুতকারক বাস্তবায়ন স্টার্টআপের সময় সেই ফাইলগুলি পড়ে।
কীমাস্টার কনফিগার করে। এই পদ্ধতিটি ডিভাইসটি খোলার পরে এবং এটি ব্যবহার করার আগে একবার বলা হয়। এটি কীমাস্টারকে KM_TAG_OS_VERSION এবং KM_TAG_OS_PATCHLEVEL প্রদান করতে ব্যবহৃত হয়। এই পদ্ধতিটি বলা না হওয়া পর্যন্ত, অন্যান্য সমস্ত পদ্ধতি KM_ERROR_KEYMASTER_NOT_CONFIGURED
প্রদান করে। এই পদ্ধতি দ্বারা প্রদত্ত মানগুলি শুধুমাত্র প্রতি বুটে একবার কীমাস্টার দ্বারা গৃহীত হয়। পরবর্তী কলগুলি ফিরে আসে KM_ERROR_OK
, কিন্তু কিছুই করে না৷
যদি কীমাস্টার বাস্তবায়ন সুরক্ষিত হার্ডওয়্যারে হয় এবং প্রদত্ত OS সংস্করণ এবং প্যাচ স্তরের মানগুলি বুটলোডার দ্বারা সুরক্ষিত হার্ডওয়্যারের সাথে প্রদত্ত মানগুলির সাথে মেলে না (অথবা যদি বুটলোডার মান প্রদান না করে), তাহলে এই পদ্ধতিটি KM_ERROR_INVALID_ARGUMENT
প্রদান করে, এবং অন্যান্য সমস্ত পদ্ধতি KM_ERROR_KEYMASTER_NOT_CONFIGURED
ফেরত দেওয়া অব্যাহত রাখে।
keymaster_error_t (*configure)(const struct keymaster2_device* dev, const keymaster_key_param_set_t* params);
addRngEntropy
সংস্করণ : 1, 2, 3
এই ফাংশনটি Keymaster 1-এ add_rng_entropy
হিসাবে চালু করা হয়েছিল এবং Keymaster 3 তে নামকরণ করা হয়েছিল।
কী, IV, ইত্যাদির জন্য এলোমেলো সংখ্যা তৈরি করার জন্য Keymaster 1 বাস্তবায়ন দ্বারা ব্যবহৃত পুলে কলার-প্রদত্ত এনট্রপি যোগ করে।
কীমাস্টার বাস্তবায়নের জন্য তাদের পুলে প্রদত্ত এনট্রপি সুরক্ষিতভাবে মিশ্রিত করতে হবে, এতে অবশ্যই একটি হার্ডওয়্যার র্যান্ডম নম্বর জেনারেটর থেকে অভ্যন্তরীণভাবে জেনারেট করা এনট্রপি থাকতে হবে। মিক্সিং পরিচালনা করা উচিত যাতে একজন আক্রমণকারী যার হয় addRngEntropy
প্রদত্ত বিট বা হার্ডওয়্যার-জেনারেটেড বিটগুলির সম্পূর্ণ নিয়ন্ত্রণ আছে, কিন্তু উভয়ই নয়, এনট্রপি পুল থেকে উৎপন্ন বিটগুলির পূর্বাভাস দেওয়ার ক্ষেত্রে কোনও অ-নগন্য সুবিধা নেই৷
কীমাস্টার বাস্তবায়ন যেগুলি তাদের অভ্যন্তরীণ পুলে এনট্রপি অনুমান করার চেষ্টা করে অনুমান করে যে addRngEntropy
দ্বারা প্রদত্ত ডেটাতে কোনও এনট্রপি নেই। কীমাস্টার বাস্তবায়ন ErrorCode::INVALID_INPUT_LENGTH
ফেরত দিতে পারে যদি তাদের একটি কলে 2 KiB-এর বেশি ডেটা দেওয়া হয়।
কী তৈরি করুন
সংস্করণ : 1, 2, 3
এই ফাংশনটি Keymaster 1-এ generate_key
হিসাবে চালু করা হয়েছিল এবং Keymaster 3-এ নামকরণ করা হয়েছিল।
একটি নতুন ক্রিপ্টোগ্রাফিক কী তৈরি করে, যুক্ত অনুমোদনগুলি নির্দিষ্ট করে, যা স্থায়ীভাবে কীটির সাথে আবদ্ধ। কীমাস্টার বাস্তবায়নের ফলে প্রজন্মের সময়ে নির্দিষ্ট করা অনুমোদনের সাথে অসামঞ্জস্যপূর্ণ কোনো কী ব্যবহার করা অসম্ভব হয়ে পড়ে। অনুমোদনের ক্ষেত্রে যেগুলি সুরক্ষিত হার্ডওয়্যার প্রয়োগ করতে পারে না, সুরক্ষিত হার্ডওয়্যারের বাধ্যবাধকতা নিশ্চিত করার জন্য সীমাবদ্ধ যে কী এর সাথে যুক্ত অপ্রয়োগযোগ্য অনুমোদনগুলি সংশোধন করা যাবে না, যাতে getKeyCharacteristics- এর প্রতিটি কল আসল মান ফিরিয়ে দেয়। উপরন্তু, generateKey
দ্বারা প্রত্যাবর্তিত বৈশিষ্ট্যগুলি হার্ডওয়্যার-প্রবর্তিত এবং সফ্টওয়্যার-প্রবর্তিত তালিকার মধ্যে সঠিকভাবে অনুমোদন বরাদ্দ করে। আরও বিস্তারিত জানার জন্য getKey বৈশিষ্ট্য দেখুন।
generateKey
এর জন্য প্রদত্ত পরামিতিগুলি কী ধরনের তৈরি করা হচ্ছে তার উপর নির্ভর করে। এই বিভাগে প্রতিটি ধরনের কী-এর জন্য প্রয়োজনীয় এবং ঐচ্ছিক ট্যাগগুলির সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে। ট্যাগ::টাইপ নির্দিষ্ট করার জন্য অ্যালগোরিদম সর্বদা প্রয়োজনীয়।
RSA কী
নিম্নলিখিত পরামিতিগুলি একটি RSA কী তৈরি করতে প্রয়োজনীয়৷
- ট্যাগ::KEY_SIZE বিটগুলিতে, পাবলিক মডুলাসের আকার নির্দিষ্ট করে। যদি বাদ দেওয়া হয়, পদ্ধতিটি
ErrorCode::UNSUPPORTED_KEY_SIZE
প্রদান করে। সমর্থিত মানগুলি হল 1024, 2048, 3072 এবং 4096৷ প্রস্তাবিত মানগুলি হল সমস্ত কী মাপ যা 8 এর গুণিতক৷ - ট্যাগ::RSA_PUBLIC_EXPONENT RSA পাবলিক এক্সপোনেন্ট মান নির্দিষ্ট করে। যদি বাদ দেওয়া হয়, পদ্ধতিটি
ErrorCode::INVALID_ARGUMENT
প্রদান করে। সমর্থিত মানগুলি হল 3 এবং 65537৷ প্রস্তাবিত মানগুলি হল 2^64 পর্যন্ত সমস্ত প্রধান মান৷
নিম্নলিখিত পরামিতিগুলি একটি RSA কী তৈরি করার জন্য প্রয়োজনীয় নয়, তবে সেগুলি ছাড়া একটি RSA কী তৈরি করা একটি কী তৈরি করে যা ব্যবহারযোগ্য নয়৷ যাইহোক, generateKey
ফাংশন কোনো ত্রুটি ফেরত দেয় না যদি এই প্যারামিটারগুলি বাদ দেওয়া হয়।
- ট্যাগ::উদ্দেশ্য অনুমোদিত উদ্দেশ্য নির্দিষ্ট করে। সমস্ত উদ্দেশ্য RSA কীগুলির জন্য সমর্থিত হতে হবে, যেকোনো সংমিশ্রণে।
- ট্যাগ::ডাইজেস্ট ডাইজেস্ট অ্যালগরিদম নির্দিষ্ট করে যা নতুন কী দিয়ে ব্যবহার করা যেতে পারে। সমস্ত ডাইজেস্ট অ্যালগরিদমকে সমর্থন করে না এমন বাস্তবায়নে অসমর্থিত ডাইজেস্টগুলি অন্তর্ভুক্ত করে এমন মূল প্রজন্মের অনুরোধগুলি গ্রহণ করতে হবে। অসমর্থিত ডাইজেস্টগুলি ফিরিয়ে দেওয়া মূল বৈশিষ্ট্যগুলির মধ্যে "সফ্টওয়্যার-প্রবর্তিত" তালিকায় স্থাপন করা উচিত। এর কারণ হল কী সেই অন্যান্য ডাইজেস্টের সাথে ব্যবহারযোগ্য, কিন্তু হজম করা সফ্টওয়্যারে সঞ্চালিত হয়। তারপর হার্ডওয়্যারকে
Digest::NONE
দিয়ে অপারেশন করতে বলা হয়। - ট্যাগ::প্যাডিং প্যাডিং মোডগুলি নির্দিষ্ট করে যা নতুন কী দিয়ে ব্যবহার করা যেতে পারে। সমস্ত ডাইজেস্ট অ্যালগরিদমগুলিকে সমর্থন করে না এমন প্রয়োগগুলিকে
PaddingMode::RSA_PSS
এবংPaddingMode::RSA_OAEP
মূল বৈশিষ্ট্যগুলির সফ্টওয়্যার-প্রবর্তিত তালিকায় রাখতে হবে যদি কোনও অসমর্থিত ডাইজেস্ট অ্যালগরিদম নির্দিষ্ট করা থাকে৷
ECDSA কী
শুধুমাত্র ট্যাগ::KEY_SIZE একটি ECDSA কী তৈরি করতে প্রয়োজনীয়৷ এটি ইসি গ্রুপ নির্বাচন করতে ব্যবহৃত হয়। সমর্থিত মানগুলি হল 224, 256, 384 এবং 521, যা যথাক্রমে NIST p-224, p-256, p-384 এবং p521 বক্ররেখা নির্দেশ করে৷
Tag::DIGEST একটি দরকারী ECDSA কী-এর জন্যও প্রয়োজনীয়, কিন্তু প্রজন্মের জন্য প্রয়োজনীয় নয়।
AES কী
একটি AES কী তৈরি করতে শুধুমাত্র Tag::KEY_SIZE প্রয়োজন। যদি বাদ দেওয়া হয়, পদ্ধতিটি ErrorCode::UNSUPPORTED_KEY_SIZE
প্রদান করে। সমর্থিত মান হল 128 এবং 256, 192-বিট AES কীগুলির জন্য ঐচ্ছিক সমর্থন সহ।
নিম্নলিখিত পরামিতিগুলি AES কীগুলির জন্য বিশেষভাবে প্রাসঙ্গিক, তবে একটি তৈরি করার জন্য প্রয়োজনীয় নয়:
-
Tag::BLOCK_MODE
ব্লক মোডগুলি নির্দিষ্ট করে যেগুলির সাথে নতুন কী ব্যবহার করা যেতে পারে৷ -
Tag::PADDING
ব্যবহার করা যেতে পারে এমন প্যাডিং মোডগুলি নির্দিষ্ট করে৷ এটি শুধুমাত্র ECB এবং CBC মোডের জন্য প্রাসঙ্গিক।
যদি GCM ব্লক মোড নির্দিষ্ট করা থাকে, তাহলে ট্যাগ প্রদান করুন::MIN_MAC_LENGTH । যদি বাদ দেওয়া হয়, পদ্ধতিটি ErrorCode::MISSING_MIN_MAC_LENGTH
প্রদান করে। ট্যাগের মান 8 এর গুণিতক এবং 96 এবং 128 এর মধ্যে।
HMAC কী
HMAC কী জেনারেশনের জন্য নিম্নলিখিত প্যারামিটারগুলি প্রয়োজন:
- ট্যাগ::KEY_SIZE বিটগুলিতে কী আকার নির্দিষ্ট করে। 64-এর থেকে ছোট মান এবং 8-এর গুণিতক নয় এমন মানগুলি সমর্থিত নয়৷ 64 থেকে 512 পর্যন্ত 8 এর সমস্ত গুণিতক সমর্থিত। বড় মান সমর্থিত হতে পারে.
- ট্যাগ::MIN_MAC_LENGTH MAC-এর ন্যূনতম দৈর্ঘ্য নির্দিষ্ট করে যা এই কী দিয়ে তৈরি বা যাচাই করা যেতে পারে। মানটি 8 এর গুণিতক এবং কমপক্ষে 64।
- ট্যাগ::ডাইজেস্ট কীটির জন্য ডাইজেস্ট অ্যালগরিদম নির্দিষ্ট করে। ঠিক একটি ডাইজেস্ট নির্দিষ্ট করা হয়েছে, অন্যথায়
ErrorCode::UNSUPPORTED_DIGEST
ফেরত দিন। যদি ডাইজেস্ট ট্রাস্টলেট দ্বারা সমর্থিত না হয়, তাহলেErrorCode::UNSUPPORTED_DIGEST
ফেরত দিন।
মূল বৈশিষ্ট্য
যদি বৈশিষ্ট্যের আর্গুমেন্ট অ-NULL হয়, তাহলে generateKey
নতুন জেনারেট হওয়া কী-এর বৈশিষ্ট্যগুলিকে সঠিকভাবে হার্ডওয়্যার-প্রবর্তিত এবং সফ্টওয়্যার-প্রবর্তিত তালিকায় বিভক্ত করে। কোন বৈশিষ্ট্য কোন তালিকায় যায় তার বর্ণনার জন্য getKeyCharacteristics দেখুন। ট্যাগ::APPLICATION_ID এবং Tag::APPLICATION_DATA ব্যতীত, কী জেনারেশনের জন্য নির্দিষ্ট করা সমস্ত প্যারামিটারগুলি ফেরত দেওয়া বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে। যদি এই ট্যাগগুলি কী প্যারামিটারের মধ্যে অন্তর্ভুক্ত করা হয়, তবে সেগুলি প্রত্যাবর্তিত বৈশিষ্ট্যগুলি থেকে সরানো হয় যাতে প্রত্যাবর্তিত কী ব্লব পরীক্ষা করে তাদের মানগুলি খুঁজে পাওয়া সম্ভব না হয়৷ যাইহোক, এগুলি ক্রিপ্টোগ্রাফিকভাবে কী ব্লবের সাথে আবদ্ধ থাকে, যাতে কী ব্যবহার করার সময় সঠিক মান প্রদান না করা হয়, ব্যবহার ব্যর্থ হয়। একইভাবে, Tag::ROOT_OF_TRUST কী ক্রিপ্টোগ্রাফিকভাবে আবদ্ধ, কিন্তু কী তৈরি বা আমদানির সময় এটি নির্দিষ্ট করা যায় না এবং ফেরত দেওয়া হয় না।
প্রদত্ত ট্যাগগুলি ছাড়াও, ট্রাস্টলেট Tag::ORIGIN , KeyOrigin::GENERATED
মান সহ যোগ করে এবং যদি কী রোলব্যাক প্রতিরোধী হয়,
রোলব্যাক প্রতিরোধ
রোলব্যাক রেজিস্ট্যান্স মানে হল একবার ডিলিটকি বা ডিলিট অ্যালকি দিয়ে একটি কী মুছে ফেলা হলে, এটি সুরক্ষিত হার্ডওয়্যার দ্বারা নিশ্চিত করা হয় যে এটি আর কখনও ব্যবহারযোগ্য হবে না। রোলব্যাক রেজিস্ট্যান্স ব্যতীত ইমপ্লিমেন্টেশনগুলি সাধারণত একটি কী ব্লব, একটি এনক্রিপ্ট করা এবং প্রমাণীকৃত ফর্ম হিসাবে কলারের কাছে জেনারেট করা বা আমদানি করা কী উপাদান ফেরত দেয়। যখন কীস্টোর কী ব্লবটি মুছে দেয়, তখন কীটি চলে যায়, কিন্তু একজন আক্রমণকারী যিনি পূর্বে মূল উপাদানটি পুনরুদ্ধার করতে পেরেছিলেন তিনি সম্ভাব্যভাবে এটিকে ডিভাইসে পুনরুদ্ধার করতে পারেন।
একটি কী রোলব্যাক প্রতিরোধী হয় যদি সুরক্ষিত হার্ডওয়্যার গ্যারান্টি দেয় যে মুছে ফেলা কীগুলি পরে পুনরুদ্ধার করা যাবে না। এটি সাধারণত একটি বিশ্বস্ত অবস্থানে অতিরিক্ত কী মেটাডেটা সংরক্ষণ করে করা হয় যা আক্রমণকারী দ্বারা ম্যানিপুলেট করা যায় না। মোবাইল ডিভাইসে, এর জন্য ব্যবহৃত প্রক্রিয়াটি সাধারণত রিপ্লে প্রোটেক্টেড মেমরি ব্লক (RPMB)। যেহেতু তৈরি করা যেতে পারে এমন কীগুলির সংখ্যা মূলত সীমাহীন এবং রোলব্যাক প্রতিরোধের জন্য ব্যবহৃত বিশ্বস্ত স্টোরেজটি আকারে সীমিত হতে পারে, এই পদ্ধতিটি সফল হওয়া দরকার এমনকি যদি নতুন কীটির জন্য রোলব্যাক প্রতিরোধ প্রদান করা না যায়। সেক্ষেত্রে, Tag::ROLLBACK_RESISTANT মূল বৈশিষ্ট্যের সাথে যোগ করা উচিত নয়।
GetKey বৈশিষ্ট্য
সংস্করণ : 1, 2, 3
এই ফাংশনটি কীমাস্টার 1-এ get_key_characteristics
হিসাবে চালু করা হয়েছিল এবং কীমাস্টার 3-এ পুনঃনামকরণ করা হয়েছিল।
প্রদত্ত কী-এর সাথে সম্পর্কিত পরামিতি এবং অনুমোদন ফেরত দেয়, দুটি সেটে বিভক্ত: হার্ডওয়্যার-প্রবর্তিত এবং সফ্টওয়্যার-প্রবর্তিত। এখানে বর্ণনাটি generateKey এবং importKey দ্বারা প্রত্যাবর্তিত মূল বৈশিষ্ট্যের তালিকায় সমানভাবে প্রযোজ্য।
যদি Tag::APPLICATION_ID
কী তৈরি বা আমদানির সময় প্রদান করা হয়, তাহলে clientId
আর্গুমেন্টে এই পদ্ধতিতে একই মান প্রদান করা হয়। অন্যথায়, পদ্ধতিটি ErrorCode::INVALID_KEY_BLOB
প্রদান করে। একইভাবে, যদি Tag::APPLICATION_DATA
জেনারেশন বা আমদানির সময় প্রদান করা হয়, তাহলে appData
আর্গুমেন্টে এই পদ্ধতিতে একই মান প্রদান করা হয়।
এই পদ্ধতি দ্বারা প্রত্যাবর্তিত বৈশিষ্ট্যগুলি নির্দিষ্ট কীটির ধরন এবং ব্যবহার সম্পূর্ণরূপে বর্ণনা করে।
একটি প্রদত্ত ট্যাগ হার্ডওয়্যার-প্রবর্তিত বা সফ্টওয়্যার-প্রবর্তিত তালিকার অন্তর্গত কিনা তা নির্ধারণের সাধারণ নিয়ম হল যে ট্যাগের অর্থ যদি সুরক্ষিত হার্ডওয়্যার দ্বারা সম্পূর্ণরূপে নিশ্চিত করা হয় তবে এটি হার্ডওয়্যার প্রয়োগ করা হয়। অন্যথায়, এটি সফ্টওয়্যার প্রয়োগ করা হয়েছে। নীচে নির্দিষ্ট ট্যাগের একটি তালিকা রয়েছে যার সঠিক বরাদ্দ অস্পষ্ট হতে পারে:
- Tag::ALGORITHM , Tag::KEY_SIZE , এবং Tag::RSA_PUBLIC_EXPONENT হল কীটির অন্তর্নিহিত বৈশিষ্ট্য। হার্ডওয়্যার দ্বারা সুরক্ষিত যে কোনও কীর জন্য, এই ট্যাগগুলি হার্ডওয়্যার-প্রবর্তিত তালিকায় রয়েছে।
- ট্যাগ::ডাইজেস্ট মানগুলি যা সুরক্ষিত হার্ডওয়্যার দ্বারা সমর্থিত হয় হার্ডওয়্যার-সমর্থিত তালিকায় রাখা হয়। অসমর্থিত ডাইজেস্টগুলি সফ্টওয়্যার-সমর্থিত তালিকায় যায়৷
- ট্যাগ::প্যাডিং মানগুলি সাধারণত হার্ডওয়্যার-সমর্থিত তালিকায় যায়, যদি না এমন একটি সম্ভাবনা থাকে যে একটি নির্দিষ্ট প্যাডিং মোড সফ্টওয়্যার দ্বারা সঞ্চালিত হতে পারে৷ সেই ক্ষেত্রে, তারা সফ্টওয়্যার-প্রবর্তিত তালিকায় যায়। এই ধরনের একটি সম্ভাবনা RSA কীগুলির জন্য উত্থাপিত হয় যা নিরাপদ হার্ডওয়্যার দ্বারা সমর্থিত নয় এমন ডাইজেস্ট অ্যালগরিদমগুলির সাথে PSS বা OAEP প্যাডিংয়ের অনুমতি দেয়৷
- ট্যাগ::USER_SECURE_ID এবং Tag::USER_AUTH_TYPE শুধুমাত্র হার্ডওয়্যার-প্রবর্তিত হয় যদি ব্যবহারকারীর প্রমাণীকরণ হার্ডওয়্যার প্রয়োগ করা হয়। এটি সম্পন্ন করার জন্য, কীমাস্টার ট্রাস্টলেট এবং প্রাসঙ্গিক প্রমাণীকরণ ট্রাস্টলেট উভয়কেই সুরক্ষিত থাকতে হবে এবং প্রমাণীকরণ টোকেনগুলি স্বাক্ষর ও যাচাই করতে ব্যবহৃত একটি গোপন HMAC কী শেয়ার করতে হবে। বিস্তারিত জানার জন্য প্রমাণীকরণ পৃষ্ঠা দেখুন।
- Tag::ACTIVE_DATETIME , Tag::ORIGINATION_EXPIRE_DATETIME , এবং Tag::USAGE_EXPIRE_DATETIME ট্যাগগুলির জন্য একটি যাচাইযোগ্যভাবে সঠিক প্রাচীর ঘড়িতে অ্যাক্সেস প্রয়োজন৷ সর্বাধিক সুরক্ষিত হার্ডওয়্যারের শুধুমাত্র অ-সুরক্ষিত OS দ্বারা প্রদত্ত সময়ের তথ্যে অ্যাক্সেস থাকে, যার অর্থ ট্যাগগুলি সফ্টওয়্যার প্রয়োগ করা হয়৷
- Tag::ORIGIN সবসময় হার্ডওয়্যার-বাউন্ড কীগুলির জন্য হার্ডওয়্যার তালিকায় থাকে। সেই তালিকায় এর উপস্থিতি হল যেভাবে উচ্চ স্তরগুলি নির্ধারণ করে যে একটি কী হার্ডওয়্যার-সমর্থিত।
importKey
সংস্করণ : 1, 2, 3
এই ফাংশনটি কীমাস্টার 1-এ import_key
হিসাবে চালু করা হয়েছিল এবং কীমাস্টার 3-এ নামকরণ করা হয়েছিল।
Keymaster হার্ডওয়্যারে মূল উপাদান আমদানি করে। কী সংজ্ঞা পরামিতি এবং আউটপুট বৈশিষ্ট্যগুলি নিম্নলিখিত ব্যতিক্রমগুলি সহ generateKey
এর মতোই পরিচালনা করা হয়:
- ট্যাগ::KEY_SIZE এবং ট্যাগ::RSA_PUBLIC_EXPONENT (শুধুমাত্র RSA কীগুলির জন্য) ইনপুট পরামিতিগুলিতে প্রয়োজনীয় নয়৷ যদি প্রদান না করা হয়, ট্রাস্টলেট প্রদত্ত মূল উপাদান থেকে মান নির্ণয় করে এবং মূল বৈশিষ্ট্যগুলিতে উপযুক্ত ট্যাগ এবং মান যোগ করে। যদি পরামিতি প্রদান করা হয়, তাহলে ট্রাস্টলেট মূল উপাদানের বিরুদ্ধে তাদের যাচাই করে। অমিলের ক্ষেত্রে, পদ্ধতিটি
ErrorCode::IMPORT_PARAMETER_MISMATCH
প্রদান করে। - ফেরত দেওয়া Tag::ORIGIN-এর
KeyOrigin::IMPORTED
মতই মান রয়েছে।
রপ্তানি কী
সংস্করণ : 1, 2, 3
এই ফাংশনটি কীমাস্টার 1-এ export_key
হিসাবে চালু করা হয়েছিল এবং কীমাস্টার 3-এ নাম পরিবর্তন করা হয়েছিল।
একটি কীমাস্টার RSA বা EC কী জোড়া থেকে একটি সর্বজনীন কী রপ্তানি করে।
যদি Tag::APPLICATION_ID
কী তৈরি বা আমদানির সময় প্রদান করা হয়, তাহলে clientId
আর্গুমেন্টে এই পদ্ধতিতে একই মান প্রদান করা হয়। অন্যথায়, পদ্ধতিটি ErrorCode::INVALID_KEY_BLOB
প্রদান করে। একইভাবে, যদি Tag::APPLICATION_DATA
জেনারেশন বা আমদানির সময় প্রদান করা হয়, তাহলে appData
আর্গুমেন্টে এই পদ্ধতিতে একই মান প্রদান করা হয়।
ডিলিট কী
সংস্করণ : 1, 2, 3
এই ফাংশনটি Keymaster 1-এ delete_key
হিসাবে চালু করা হয়েছিল এবং Keymaster 3-এ নামকরণ করা হয়েছিল।
প্রদত্ত কী মুছে দেয়। এই পদ্ধতিটি ঐচ্ছিক, এবং এটি শুধুমাত্র কীমাস্টার মডিউল দ্বারা প্রয়োগ করা হয় যা রোলব্যাক প্রতিরোধ প্রদান করে।
ডিলিট সব কী
সংস্করণ : 1, 2, 3
এই ফাংশনটি Keymaster 1-এ delete_all_keys
হিসাবে চালু করা হয়েছিল এবং Keymaster 3-এ পুনঃনামকরণ করা হয়েছিল।
সব কী মুছে দেয়। এই পদ্ধতিটি ঐচ্ছিক, এবং এটি শুধুমাত্র কীমাস্টার মডিউল দ্বারা প্রয়োগ করা হয় যা রোলব্যাক প্রতিরোধ প্রদান করে।
প্রমাণীকরণ আইডি ধ্বংস করুন
সংস্করণ : 3
destroyAttestationIds()
পদ্ধতিটি স্থায়ীভাবে নতুন (ঐচ্ছিক, কিন্তু অত্যন্ত প্রস্তাবিত) আইডি প্রত্যয়ন বৈশিষ্ট্যটি নিষ্ক্রিয় করতে ব্যবহৃত হয়। এই পদ্ধতিটি কল করার পরে যদি TEE-এর কাছে নিশ্চিত করার কোন উপায় না থাকে যে আইডি প্রত্যয়ন স্থায়ীভাবে অক্ষম করা হয়েছে, তাহলে আইডি প্রত্যয়নটি মোটেই কার্যকর করা উচিত নয়, এই ক্ষেত্রে এই পদ্ধতিটি কিছুই করে না এবং ErrorCode::UNIMPLEMENTED
প্রদান করে। আইডি প্রত্যয়ন সমর্থিত হলে, এই পদ্ধতিটি প্রয়োগ করা প্রয়োজন এবং ভবিষ্যতের সমস্ত আইডি প্রত্যয়ন প্রচেষ্টা স্থায়ীভাবে অক্ষম করতে হবে। পদ্ধতিটি যেকোন সংখ্যক বার বলা যেতে পারে। যদি আইডি প্রত্যয়ন ইতিমধ্যেই স্থায়ীভাবে অক্ষম করা থাকে, তবে পদ্ধতিটি কিছুই করে না এবং ErrorCode::OK
প্রদান করে।
এই পদ্ধতিটি শুধুমাত্র যে ত্রুটি কোডগুলি ফেরত দিতে পারে তা হল ErrorCode::UNIMPLEMENTED
(যদি আইডি প্রত্যয়ন সমর্থিত না হয়), ErrorCode:OK
, ErrorCode::KEYMASTER_NOT_CONFIGURED
বা নিরাপদ হার্ডওয়্যারের সাথে যোগাযোগ করতে ব্যর্থতার ইঙ্গিত করে ত্রুটি কোডগুলির একটি৷
শুরু
সংস্করণ : 1, 2, 3
একটি ক্রিপ্টোগ্রাফিক অপারেশন শুরু করে, নির্দিষ্ট কী ব্যবহার করে, নির্দিষ্ট উদ্দেশ্যের জন্য, নির্দিষ্ট পরামিতিগুলির সাথে (যথাযথ হিসাবে), এবং একটি অপারেশন হ্যান্ডেল ফেরত দেয় যা অপারেশন সম্পূর্ণ করতে আপডেট এবং ফিনিস সহ ব্যবহৃত হয়। অপারেশন হ্যান্ডেলটি প্রমাণীকৃত ক্রিয়াকলাপে "চ্যালেঞ্জ" টোকেন হিসাবেও ব্যবহৃত হয় এবং এই জাতীয় ক্রিয়াকলাপগুলির জন্য প্রমাণীকরণ টোকেনের challenge
ক্ষেত্রে অন্তর্ভুক্ত করা হয়।
একটি কীমাস্টার বাস্তবায়ন কমপক্ষে 16টি সমসাময়িক ক্রিয়াকলাপ সমর্থন করে। কীস্টোর 15 পর্যন্ত ব্যবহার করে, একটি পাসওয়ার্ড এনক্রিপশনের জন্য ব্যবহার করার জন্য ভল্ডের জন্য রেখে দেয়। যখন কীস্টোরে 15টি অপারেশন চলছে ( begin
বলা হয়েছে, কিন্তু finish
বা abort
বলা হয়নি) এবং এটি একটি 16 তম শুরু করার জন্য একটি অনুরোধ পায়, তখন এটি সক্রিয় ক্রিয়াকলাপগুলির সংখ্যা হ্রাস করার জন্য সবচেয়ে সাম্প্রতিক ব্যবহৃত অপারেশনকে abort
কল করার আগে 14 থেকে নতুন অনুরোধ করা অপারেশন শুরু করতে begin
।
যদি Tag::APPLICATION_ID বা Tag::APPLICATION_DATA কী তৈরি বা আমদানির সময় নির্দিষ্ট করা হয়, তাহলে এই পদ্ধতিতে inParams
আর্গুমেন্টে মূলভাবে নির্দিষ্ট করা মান সহ সেই ট্যাগগুলিকে অন্তর্ভুক্ত করার জন্য কল begin
।
অনুমোদন প্রয়োগ
এই পদ্ধতির সময়, নিম্নলিখিত কী অনুমোদনগুলি ট্রাস্টলেট দ্বারা প্রয়োগ করা হয় যদি বাস্তবায়ন তাদের "হার্ডওয়্যার-প্রবর্তিত" বৈশিষ্ট্যগুলিতে রাখে এবং যদি অপারেশনটি একটি সর্বজনীন কী অপারেশন না হয়। পাবলিক কী ক্রিয়াকলাপ, যার অর্থ KeyPurpose::ENCRYPT
এবং KeyPurpose::VERIFY
, RSA বা EC কী সহ, অনুমোদনের প্রয়োজনীয়তা পূরণ না হলেও সফল হতে দেওয়া হয়৷
- ট্যাগ::উদ্দেশ্য :
begin()
কলে উল্লিখিত উদ্দেশ্যটিকে মূল অনুমোদনের উদ্দেশ্যগুলির একটির সাথে মিলতে হবে, যদি না অনুরোধকৃত অপারেশনটি একটি সর্বজনীন কী অপারেশন হয়। যদি নির্দিষ্ট উদ্দেশ্য মেলে না এবং অপারেশনটি একটি সর্বজনীন কী অপারেশন না হয়, তাহলেErrorCode::UNSUPPORTED_PURPOSE
রিটার্নbegin
। পাবলিক কী ক্রিয়াকলাপগুলি অসমমিত এনক্রিপশন বা যাচাইকরণ ক্রিয়াকলাপ। - ট্যাগ::ACTIVE_DATETIME শুধুমাত্র একটি বিশ্বস্ত UTC সময় উৎস উপলব্ধ হলেই প্রয়োগ করা যেতে পারে৷ যদি বর্তমান তারিখ এবং সময় ট্যাগ মানের আগে হয়, তাহলে পদ্ধতিটি
ErrorCode::KEY_NOT_YET_VALID
প্রদান করে। - ট্যাগ::ORIGINATION_EXPIRE_DATETIME শুধুমাত্র তখনই প্রয়োগ করা যেতে পারে যদি একটি বিশ্বস্ত UTC সময় উৎস উপলব্ধ থাকে৷ যদি বর্তমান তারিখ এবং সময় ট্যাগ মানের চেয়ে পরে হয় এবং উদ্দেশ্যটি হয়
KeyPurpose::ENCRYPT
বাKeyPurpose::SIGN
, পদ্ধতিটিErrorCode::KEY_EXPIRED
প্রদান করে। - ট্যাগ::USAGE_EXPIRE_DATETIME শুধুমাত্র একটি বিশ্বস্ত UTC সময় উৎস উপলব্ধ হলেই প্রয়োগ করা যেতে পারে৷ যদি বর্তমান তারিখ এবং সময় ট্যাগ মানের চেয়ে পরে হয় এবং উদ্দেশ্যটি হয়
KeyPurpose::DECRYPT
বাKeyPurpose::VERIFY
, পদ্ধতিটিErrorCode::KEY_EXPIRED
প্রদান করে। - ট্যাগ::MIN_SECONDS_BETWEEN_OPS কে একটি বিশ্বস্ত আপেক্ষিক টাইমারের সাথে তুলনা করা হয় যা কীটির শেষ ব্যবহার নির্দেশ করে। যদি শেষ ব্যবহারের সময় এবং ট্যাগ মান বর্তমান সময়ের চেয়ে কম হয়, তবে পদ্ধতিটি
ErrorCode::KEY_RATE_LIMIT_EXCEEDED
প্রদান করে। গুরুত্বপূর্ণ বাস্তবায়ন বিবরণের জন্য ট্যাগ বিবরণ দেখুন. - ট্যাগ::MAX_USES_PER_BOOT একটি সুরক্ষিত কাউন্টারের সাথে তুলনা করা হয় যা বুট সময় থেকে কীটির ব্যবহার ট্র্যাক করে। যদি পূর্ববর্তী ব্যবহারের গণনা ট্যাগ মান অতিক্রম করে, পদ্ধতিটি
ErrorCode::KEY_MAX_OPS_EXCEEDED
প্রদান করে। - ট্যাগ::USER_SECURE_ID এই পদ্ধতি দ্বারা প্রয়োগ করা হয় শুধুমাত্র যদি কীটিতে ট্যাগ::AUTH_TIMEOUT থাকে। যদি কীটিতে উভয়ই থাকে, তাহলে এই পদ্ধতিটি অবশ্যই একটি বৈধ Tag::AUTH_TOKEN
inParams
এ পাবে। প্রমাণীকরণ টোকেনটি বৈধ হওয়ার জন্য, নিম্নলিখিতগুলিকে সত্য হতে হবে:- HMAC ক্ষেত্র সঠিকভাবে যাচাই করে।
- কী থেকে ট্যাগ::USER_SECURE_ID মানগুলির মধ্যে অন্তত একটি টোকেনের সুরক্ষিত ID মানগুলির মধ্যে অন্তত একটির সাথে মেলে৷
- কীটিতে একটি Tag::USER_AUTH_TYPE আছে যা টোকেনের প্রমাণ প্রকারের সাথে মেলে।
যদি এই শর্তগুলির মধ্যে কোনটি পূরণ না হয় তবে পদ্ধতিটি
ErrorCode::KEY_USER_NOT_AUTHENTICATED
প্রদান করে। - ট্যাগ::CALLER_NONCE কলকারীকে একটি ননস বা ইনিশিয়ালাইজেশন ভেক্টর (IV) নির্দিষ্ট করার অনুমতি দেয়। যদি কীটিতে এই ট্যাগ না থাকে, কিন্তু কলকারী এই পদ্ধতিতে ট্যাগ::NONCE প্রদান করে,
ErrorCode::CALLER_NONCE_PROHIBITED
ফেরত দেওয়া হয়। - ট্যাগ::BOOTLOADER_ONLY নির্দিষ্ট করে যে শুধুমাত্র বুটলোডার কী ব্যবহার করতে পারে। বুটলোডার চালানো শেষ হওয়ার পরে যদি এই পদ্ধতিটিকে একটি বুটলোডার-কেবল কী দিয়ে ডাকা হয়, তাহলে এটি
ErrorCode::INVALID_KEY_BLOB
প্রদান করে।
RSA কী
সমস্ত RSA কী ক্রিয়াকলাপগুলি inParams
এ ঠিক একটি প্যাডিং মোড নির্দিষ্ট করে৷ অনির্দিষ্ট বা একাধিকবার নির্দিষ্ট করা হলে, পদ্ধতিটি ErrorCode::UNSUPPORTED_PADDING_MODE
প্রদান করে।
RSA সাইনিং এবং ভেরিফিকেশন অপারেশনের জন্য একটি ডাইজেস্ট প্রয়োজন, যেমনটি OAEP প্যাডিং মোডের সাথে RSA এনক্রিপশন এবং ডিক্রিপশন অপারেশন করে। এই ক্ষেত্রে, কলার inParams
এ ঠিক একটি ডাইজেস্ট নির্দিষ্ট করে। অনির্দিষ্ট বা একাধিকবার নির্দিষ্ট করা হলে, পদ্ধতিটি ErrorCode::UNSUPPORTED_DIGEST
প্রদান করে।
ব্যক্তিগত কী ক্রিয়াকলাপ ( KeyPurpose::DECYPT
এবং KeyPurpose::SIGN
) এর জন্য ডাইজেস্ট এবং প্যাডিংয়ের অনুমোদন প্রয়োজন, যার অর্থ হল মূল অনুমোদনগুলিতে নির্দিষ্ট মান থাকতে হবে। যদি তা না হয়, পদ্ধতিটি যথাযথভাবে ErrorCode::INCOMPATIBLE_DIGEST
বা ErrorCode::INCOMPATIBLE_PADDING
প্রদান করে। অননুমোদিত ডাইজেস্ট বা প্যাডিং সহ সর্বজনীন কী ক্রিয়াকলাপ ( KeyPurpose::ENCRYPT
এবং KeyPurpose::VERIFY
) অনুমোদিত।
PaddingMode::NONE
বাদ দিয়ে, সমস্ত RSA প্যাডিং মোড শুধুমাত্র কিছু নির্দিষ্ট উদ্দেশ্যে প্রযোজ্য। বিশেষভাবে, PaddingMode::RSA_PKCS1_1_5_SIGN
এবং PaddingMode::RSA_PSS
শুধুমাত্র স্বাক্ষর এবং যাচাইকরণ সমর্থন করে, যখন PaddingMode::RSA_PKCS1_1_1_5_ENCRYPT
এবং PaddingMode::RSA_OAEP
শুধুমাত্র এনক্রিপশন এবং ডিক্রিপশন সমর্থন করে। পদ্ধতিটি ErrorCode::UNSUPPORTED_PADDING_MODE
প্রদান করে যদি নির্দিষ্ট মোডটি নির্দিষ্ট উদ্দেশ্য সমর্থন না করে।
প্যাডিং মোড এবং ডাইজেস্টের মধ্যে কিছু গুরুত্বপূর্ণ মিথস্ক্রিয়া রয়েছে:
-
PaddingMode::NONE
নির্দেশ করে যে একটি "raw" RSA অপারেশন করা হয়েছে। স্বাক্ষর বা যাচাই করা হলে,Digest::NONE
নির্দিষ্ট করা নেই। আনপ্যাডেড এনক্রিপশন বা ডিক্রিপশনের জন্য কোন ডাইজেস্টের প্রয়োজন নেই। -
PaddingMode::RSA_PKCS1_1_5_SIGN
প্যাডিংয়ের জন্য একটি ডাইজেস্ট প্রয়োজন। ডাইজেস্ট হতে পারেDigest::NONE
, এই ক্ষেত্রে কীমাস্টার বাস্তবায়ন একটি সঠিক PKCS#1 v1.5 স্বাক্ষর কাঠামো তৈরি করতে পারে না, কারণ এটি DigestInfo কাঠামো যোগ করতে পারে না। পরিবর্তে, বাস্তবায়ন0x00 || 0x01 || PS || 0x00 || M
, যেখানে M হল প্রদত্ত বার্তা এবং PS হল প্যাডিং স্ট্রিং। RSA কী-এর আকার বার্তাটির চেয়ে কমপক্ষে 11 বাইট বড় হতে হবে, অন্যথায় পদ্ধতিটিErrorCode::INVALID_INPUT_LENGTH
প্রদান করে। -
PaddingMode::RSA_PKCS1_1_1_5_ENCRYPT
প্যাডিংয়ের জন্য ডাইজেস্টের প্রয়োজন নেই। -
PaddingMode::RSA_PSS
প্যাডিংয়ের জন্য একটি ডাইজেস্ট প্রয়োজন, যাDigest::NONE
হতে পারে না।Digest::NONE
নির্দিষ্ট না থাকলে, পদ্ধতিটিErrorCode::INCOMPATIBLE_DIGEST
প্রদান করে। উপরন্তু, RSA কী-এর আকার ডাইজেস্টের আউটপুট আকারের চেয়ে কমপক্ষে 2 + D বাইট বড় হতে হবে, যেখানে D হল ডাইজেস্টের আকার, বাইটে। অন্যথায় পদ্ধতিটিErrorCode::INCOMPATIBLE_DIGEST
প্রদান করে। লবণের আকার ডি। -
PaddingMode::RSA_OAEP
প্যাডিং-এর জন্য একটি ডাইজেস্ট প্রয়োজন, যাDigest::NONE
হতে পারে না।Digest::NONE
নির্দিষ্ট না থাকলে, পদ্ধতিটিErrorCode::INCOMPATIBLE_DIGEST
প্রদান করে।
ইসি কী
ইসি কী অপারেশনগুলি inParams
ঠিক একটি প্যাডিং মোড নির্দিষ্ট করে। অনির্দিষ্ট বা একাধিকবার নির্দিষ্ট করা হলে, পদ্ধতিটি ErrorCode::UNSUPPORTED_PADDING_MODE
প্রদান করে।
প্রাইভেট কী ক্রিয়াকলাপ ( KeyPurpose::SIGN
) এর জন্য ডাইজেস্ট এবং প্যাডিং এর অনুমোদন প্রয়োজন, যার অর্থ হল মূল অনুমোদনগুলিতে নির্দিষ্ট মান থাকতে হবে। যদি না হয়, ErrorCode::INCOMPATIBLE_DIGEST
ফেরত দিন। অননুমোদিত ডাইজেস্ট বা প্যাডিং সহ সর্বজনীন কী অপারেশন ( KeyPurpose::VERIFY
) অনুমোদিত।
AES কী
AES কী অপারেশনগুলি inParams
ঠিক একটি ব্লক মোড এবং একটি প্যাডিং মোড নির্দিষ্ট করে৷ যদি উভয় মান অনির্দিষ্ট হয় বা একাধিকবার নির্দিষ্ট করা হয়, ErrorCode::UNSUPPORTED_BLOCK_MODE
বা ErrorCode::UNSUPPORTED_PADDING_MODE
ফেরত দিন। নির্দিষ্ট মোডগুলি কী দ্বারা অনুমোদিত হতে হবে, অন্যথায় পদ্ধতিটি ErrorCode::INCOMPATIBLE_BLOCK_MODE
বা ErrorCode::INCOMPATIBLE_PADDING_MODE
প্রদান করে।
যদি ব্লক মোড BlockMode::GCM
হয়, inParams
Tag::MAC_LENGTH
নির্দিষ্ট করে, এবং নির্দিষ্ট মান হল 8-এর একটি গুণিতক যা মূল অনুমোদনগুলিতে Tag::MIN_MAC_LENGTH
এর মানের থেকে 128-এর বেশি বা কম নয়। MAC দৈর্ঘ্য 128-এর বেশি বা 8-এর বেশি নয়, ErrorCode::UNSUPPORTED_MAC_LENGTH
ফেরত দিন। কীটির ন্যূনতম দৈর্ঘ্যের চেয়ে কম মানগুলির জন্য, ErrorCode::INVALID_MAC_LENGTH
ফেরত দিন।
যদি ব্লক মোড BlockMode::GCM
বা BlockMode::CTR
হয়, তাহলে নির্দিষ্ট প্যাডিং মোডটি PaddingMode::NONE
হতে হবে। BlockMode::ECB
বা BlockMode::CBC
জন্য, মোডটি PaddingMode::NONE
বা PaddingMode::PKCS7
হতে পারে। যদি প্যাডিং মোড এই শর্তগুলি পূরণ না করে, ErrorCode::INCOMPATIBLE_PADDING_MODE
ফেরত দিন।
যদি ব্লক মোড BlockMode::CBC
, BlockMode::CTR
, বা BlockMode::GCM
হয়, তাহলে একটি ইনিশিয়ালাইজেশন ভেক্টর বা ননস প্রয়োজন। বেশির ভাগ ক্ষেত্রেই, কলকারীদের IV বা ননস প্রদান করা উচিত নয়। সেক্ষেত্রে, কীমাস্টার ইমপ্লিমেন্টেশন একটি র্যান্ডম IV বা nonce তৈরি করে এবং Tag::NONCE- এ outParams
এর সাথে ফেরত দেয়। CBC এবং CTR IV হল 16 বাইট। GCM nonces হল 12 বাইট। যদি মূল অনুমোদনগুলিতে Tag::CALLER_NONCE থাকে, তাহলে কলকারী ট্যাগ::NONCE-এর সাথে একটি IV বা ননস প্রদান করতে পারেন inParams
এ। ট্যাগ::CALLER_NONCE অনুমোদিত না হলে যদি একটি নন্স প্রদান করা হয়, তাহলে ErrorCode::CALLER_NONCE_PROHIBITED
ফেরত দিন। ট্যাগ::CALLER_NONCE অনুমোদিত হওয়ার সময় যদি একটি নন্স প্রদান না করা হয়, তাহলে একটি এলোমেলো IV/nonce তৈরি করুন।
HMAC কী
HMAC কী অপারেশন Tag::MAC_LENGTH
inParams
এ নির্দিষ্ট করে। নির্দিষ্ট মানটি অবশ্যই 8 এর একটি গুণিতক হতে হবে যা ডাইজেস্টের দৈর্ঘ্যের চেয়ে বেশি বা মূল অনুমোদনগুলিতে Tag::MIN_MAC_LENGTH
এর মানের থেকে কম নয়৷ ডাইজেস্ট দৈর্ঘ্যের চেয়ে বেশি MAC দৈর্ঘ্যের জন্য বা 8-এর বহুগুণ নয়, ErrorCode::UNSUPPORTED_MAC_LENGTH
ফেরত দিন। কীটির ন্যূনতম দৈর্ঘ্যের চেয়ে কম মানগুলির জন্য, ErrorCode::INVALID_MAC_LENGTH
ফেরত দিন।
আপডেট
সংস্করণ : 1, 2, 3
বিগ দিয়ে শুরু হওয়া চলমান অপারেশনে প্রক্রিয়া করার জন্য ডেটা প্রদান করে। অপারেশন operationHandle
প্যারামিটার দ্বারা অপারেশন নির্দিষ্ট করা হয়।
বাফার হ্যান্ডলিংয়ের জন্য আরও নমনীয়তা প্রদান করতে, এই পদ্ধতির বাস্তবায়নে সরবরাহ করা হয়েছে তার চেয়ে কম ডেটা ব্যবহার করার বিকল্প রয়েছে। পরবর্তী কলগুলিতে বাকি ডেটা ফিড করার জন্য কলার দায়বদ্ধ। inputConsumed
প্যারামিটারে ইনপুট খাওয়ার পরিমাণ ফেরত দেওয়া হয়। বাস্তবায়ন সর্বদা কমপক্ষে একটি বাইট ব্যবহার করে, যদি না অপারেশনটি আর গ্রহণ করতে না পারে; যদি শূন্য বাইটের বেশি প্রদান করা হয় এবং শূন্য বাইট ব্যবহার করা হয়, কলকারীরা এটিকে একটি ত্রুটি বিবেচনা করে এবং অপারেশন বাতিল করে।
আপডেটের ফলে কতটা ডেটা ফেরত দিতে হবে তা বাস্তবায়নও বেছে নিতে পারে। এটি শুধুমাত্র এনক্রিপশন এবং ডিক্রিপশন ক্রিয়াকলাপের জন্য প্রাসঙ্গিক, কারণ স্বাক্ষর এবং যাচাইকরণ শেষ না হওয়া পর্যন্ত কোনও ডেটা ফেরত দেয় না। যত তাড়াতাড়ি সম্ভব ডেটা ফেরত দিন, বাফার না করে।
ত্রুটি হ্যান্ডলিং
যদি এই পদ্ধতিটি ErrorCode::OK
ব্যতীত একটি ত্রুটি কোড ফেরত দেয়, তাহলে অপারেশনটি বাতিল করা হয় এবং অপারেশন হ্যান্ডেলটি অবৈধ হয়ে যায়। হ্যান্ডেলের যেকোন ভবিষ্যত ব্যবহার, এই পদ্ধতির সাথে, শেষ করুন বা বাতিল করুন , ErrorCode::INVALID_OPERATION_HANDLE
প্রদান করে।
অনুমোদন প্রয়োগ
মূল অনুমোদন প্রয়োগ প্রাথমিকভাবে শুরুতে সঞ্চালিত হয়। একটি ব্যতিক্রম হল সেই ক্ষেত্রে যেখানে কী আছে:
- এক বা একাধিক ট্যাগ::USER_SECURE_ID , এবং৷
- ট্যাগ নেই::AUTH_TIMEOUT৷
এই ক্ষেত্রে, কীটির জন্য অপারেশন প্রতি একটি অনুমোদনের প্রয়োজন, এবং আপডেট পদ্ধতিটি inParams
আর্গুমেন্টে একটি Tag::AUTH_TOKEN পায়। HMAC যাচাই করে যে টোকেনটি বৈধ এবং এতে একটি মিলে যাওয়া সুরক্ষিত ব্যবহারকারী আইডি রয়েছে, কী এর ট্যাগ::USER_AUTH_TYPE এর সাথে মেলে এবং চ্যালেঞ্জ ক্ষেত্রের বর্তমান অপারেশনের অপারেশন হ্যান্ডেল রয়েছে৷ যদি এই শর্তগুলি পূরণ না হয়, তাহলে ErrorCode::KEY_USER_NOT_AUTHENTICATED
ফেরত দিন।
কলকারী প্রতিটি কল আপডেট এবং শেষ করার জন্য প্রমাণীকরণ টোকেন প্রদান করে। বাস্তবায়নের জন্য শুধুমাত্র একবার টোকেন যাচাই করতে হবে যদি এটি পছন্দ করে।
RSA কী
Digest::NONE
এর সাথে সাইনিং এবং যাচাইকরণ ক্রিয়াকলাপগুলির জন্য, এই পদ্ধতিটি একটি একক আপডেটে স্বাক্ষরিত বা যাচাই করা সম্পূর্ণ ব্লককে গ্রহণ করে। এটি ব্লকের শুধুমাত্র একটি অংশ গ্রাস করতে পারে না। যাইহোক, যদি কলকারী একাধিক আপডেটে ডেটা প্রদান করতে পছন্দ করে, এই পদ্ধতিটি তা গ্রহণ করে। যদি কলকারী সাইন করার জন্য ব্যবহার করার চেয়ে বেশি ডেটা প্রদান করে (ডেটার দৈর্ঘ্য RSA কী আকারের চেয়ে বেশি), তবে ErrorCode::INVALID_INPUT_LENGTH
ফেরত দিন।
ECDSA কী
Digest::NONE
এর সাথে সাইনিং এবং যাচাইকরণ ক্রিয়াকলাপগুলির জন্য, এই পদ্ধতিটি একটি একক আপডেটে স্বাক্ষরিত বা যাচাই করা সম্পূর্ণ ব্লককে গ্রহণ করে। এই পদ্ধতিটি ব্লকের শুধুমাত্র একটি অংশ গ্রাস করতে পারে না।
যাইহোক, যদি কলকারী একাধিক আপডেটে ডেটা প্রদান করতে পছন্দ করে, এই পদ্ধতিটি তা গ্রহণ করে। কলকারী যদি সাইন করার জন্য ব্যবহার করা যায় তার চেয়ে বেশি ডেটা প্রদান করে, ডেটা নীরবে কেটে ফেলা হয়। (এটি অনুরূপ RSA ক্রিয়াকলাপগুলিতে প্রদত্ত অতিরিক্ত ডেটা পরিচালনার থেকে পৃথক। এর কারণ হল উত্তরাধিকার ক্লায়েন্টদের সাথে সামঞ্জস্যতা।)
AES কী
AES GCM মোড inParams
আর্গুমেন্টে Tag::ASSOCIATED_DATA ট্যাগের মাধ্যমে প্রদত্ত "সংশ্লিষ্ট প্রমাণীকরণ ডেটা" সমর্থন করে। সংশ্লিষ্ট ডেটা বারবার কলে প্রদান করা যেতে পারে (একটি ব্লকে পাঠানোর জন্য ডেটা খুব বড় হলে গুরুত্বপূর্ণ) কিন্তু সবসময় ডেটা এনক্রিপ্ট বা ডিক্রিপ্ট করার আগে থাকে। একটি আপডেট কল এনক্রিপ্ট/ডিক্রিপ্ট করার জন্য সংশ্লিষ্ট ডেটা এবং ডেটা উভয়ই গ্রহণ করতে পারে, কিন্তু পরবর্তী আপডেটগুলি সংশ্লিষ্ট ডেটা অন্তর্ভুক্ত করতে পারে না। যদি কলকারী একটি কলের পরে একটি আপডেট কলে সম্পর্কিত ডেটা সরবরাহ করে যাতে এনক্রিপ্ট/ডিক্রিপ্ট করার ডেটা অন্তর্ভুক্ত থাকে, তবে ErrorCode::INVALID_TAG
ফেরত দিন।
GCM এনক্রিপশনের জন্য, ট্যাগটি শেষ করে সাইফারটেক্সটে যুক্ত করা হয়। ডিক্রিপশনের সময়, শেষ আপডেট কলে দেওয়া ডেটার শেষ Tag::MAC_LENGTH
বাইট হল ট্যাগ। যেহেতু আপডেটের একটি প্রদত্ত আমন্ত্রণ জানাতে পারে না যে এটি শেষ আহ্বান কিনা, এটি ট্যাগ দৈর্ঘ্য বাদে সমস্ত প্রক্রিয়া করে এবং ফিনিশের সময় সম্ভাব্য ট্যাগ ডেটা বাফার করে।
শেষ
সংস্করণ : 1, 2, 3
আপডেট (গুলি) দ্বারা প্রদত্ত সমস্ত এখনও-প্রক্রিয়াহীন ডেটা প্রক্রিয়াকরণ করে, begin এর সাথে শুরু হওয়া একটি চলমান অপারেশন শেষ করে।
এই পদ্ধতিটি একটি অপারেশনে বলা শেষ পদ্ধতি, তাই সমস্ত প্রক্রিয়াকৃত ডেটা ফেরত দেওয়া হয়।
এটি সফলভাবে সম্পন্ন হোক বা একটি ত্রুটি ফিরিয়ে আনুক না কেন, এই পদ্ধতিটি অপারেশনকে চূড়ান্ত করে এবং তাই প্রদত্ত অপারেশন হ্যান্ডেলটিকে বাতিল করে। হ্যান্ডেলের যেকোন ভবিষ্যত ব্যবহার, এই পদ্ধতির সাথে বা আপডেট বা বাতিল করে , ErrorCode::INVALID_OPERATION_HANDLE
প্রদান করে।
সাইনিং অপারেশন আউটপুট হিসাবে স্বাক্ষর ফিরিয়ে দেয়। যাচাইকরণ কার্যক্রম signature
প্যারামিটারে স্বাক্ষর গ্রহণ করে এবং কোনো আউটপুট প্রদান করে না।
অনুমোদন প্রয়োগ
মূল অনুমোদন প্রয়োগ প্রাথমিকভাবে শুরুতে সঞ্চালিত হয়। একটি ব্যতিক্রম হল সেই ক্ষেত্রে যেখানে কী আছে:
- এক বা একাধিক ট্যাগ::USER_SECURE_ID , এবং৷
- ট্যাগ নেই::AUTH_TIMEOUT৷
এই ক্ষেত্রে, কীটির জন্য অপারেশন প্রতি একটি অনুমোদনের প্রয়োজন, এবং আপডেট পদ্ধতিটি inParams
আর্গুমেন্টে একটি Tag::AUTH_TOKEN পায়। HMAC যাচাই করে যে টোকেনটি বৈধ এবং এতে একটি মিলে যাওয়া সুরক্ষিত ব্যবহারকারী আইডি রয়েছে, কী এর ট্যাগ::USER_AUTH_TYPE এর সাথে মেলে এবং চ্যালেঞ্জ ক্ষেত্রের বর্তমান অপারেশনের অপারেশন হ্যান্ডেল রয়েছে৷ যদি এই শর্তগুলি পূরণ না হয়, তাহলে ErrorCode::KEY_USER_NOT_AUTHENTICATED
ফেরত দিন।
কলকারী প্রতিটি কল আপডেট এবং শেষ করার জন্য প্রমাণীকরণ টোকেন প্রদান করে। বাস্তবায়নের জন্য শুধুমাত্র একবার টোকেন যাচাই করতে হবে যদি এটি পছন্দ করে।
RSA কী
কিছু অতিরিক্ত প্রয়োজনীয়তা, প্যাডিং মোডের উপর নির্ভর করে:
-
PaddingMode::NONE
। আনপ্যাডড সাইনিং এবং এনক্রিপশন ক্রিয়াকলাপের জন্য, যদি প্রদত্ত ডেটা কী থেকে ছোট হয়, তাহলে সাইনিং/এনক্রিপশন করার আগে ডেটাটি বাম দিকে শূন্য-প্যাড করা হয়। যদি ডেটা কীটির দৈর্ঘ্যের সমান, কিন্তু সংখ্যাগতভাবে বড় হয়,ErrorCode::INVALID_ARGUMENT
ফেরত দিন। যাচাইকরণ এবং ডিক্রিপশন ক্রিয়াকলাপের জন্য, ডেটা অবশ্যই কী হিসাবে দীর্ঘ হতে হবে। অন্যথায়,ErrorCode::INVALID_INPUT_LENGTH.
-
PaddingMode::RSA_PSS
। PSS-প্যাডেড স্বাক্ষর ক্রিয়াকলাপের জন্য, PSS সল্ট হল বার্তা ডাইজেস্টের আকার এবং এলোমেলোভাবে উৎপন্ন হয়। Tag::DIGESTinputParams
শুরুতে নির্দেশিত ডাইজেস্ট PSS ডাইজেস্ট অ্যালগরিদম এবং MGF1 ডাইজেস্ট অ্যালগরিদম হিসাবে ব্যবহৃত হয়। -
PaddingMode::RSA_OAEP
। Tag::DIGESTinputParams
শুরুতে নির্দেশিত ডাইজেস্টটি OAEP ডাইজেস্ট অ্যালগরিদম হিসাবে ব্যবহৃত হয় এবং SHA1 MGF1 ডাইজেস্ট অ্যালগরিদম হিসাবে ব্যবহৃত হয়।
ECDSA কী
আনপ্যাডড সাইনিং বা যাচাইকরণের জন্য প্রদত্ত ডেটা যদি খুব দীর্ঘ হয়, তাহলে তা কেটে ফেলুন।
AES কী
ব্লক মোডের উপর নির্ভর করে কিছু অতিরিক্ত শর্ত:
-
BlockMode::ECB
বাBlockMode::CBC
। যদি প্যাডিংPaddingMode::NONE
হয় এবং ডেটার দৈর্ঘ্য AES ব্লক সাইজের একাধিক না হয়, তাহলেErrorCode::INVALID_INPUT_LENGTH
ফেরত দিন। যদি প্যাডিংPaddingMode::PKCS7
হয়, PKCS#7 স্পেসিফিকেশন অনুযায়ী ডেটা প্যাড করুন। মনে রাখবেন যে PKCS#7 একটি অতিরিক্ত প্যাডিং ব্লক যোগ করার পরামর্শ দেয় যদি ডেটা ব্লকের দৈর্ঘ্যের একাধিক হয়। -
BlockMode::GCM
। এনক্রিপশনের সময়, সমস্ত প্লেইনটেক্সট প্রসেস করার পরে, ট্যাগটি গণনা করুন ( ট্যাগ::MAC_LENGTH বাইট) এবং ফেরত দেওয়া সাইফারটেক্সটে যুক্ত করুন। ডিক্রিপশনের সময়, ট্যাগ হিসাবে শেষ ট্যাগ::MAC_LENGTH বাইট প্রক্রিয়া করুন। ট্যাগ যাচাইকরণ ব্যর্থ হলে,ErrorCode::VERIFICATION_FAILED
ফেরত দিন।
গর্ভপাত
সংস্করণ : 1, 2, 3
চলমান অপারেশন বাতিল করে। বাতিল করার জন্য কল করার পরে, আপডেট , ফিনিশ বা বাতিল সহ প্রদত্ত অপারেশন হ্যান্ডেলের পরবর্তী ব্যবহারের জন্য ErrorCode::INVALID_OPERATION_HANDLE
ফেরত দিন।
get_supported_algorithms
সংস্করণ : 1
কীমাস্টার হার্ডওয়্যার বাস্তবায়ন দ্বারা সমর্থিত অ্যালগরিদমের তালিকা প্রদান করে। একটি সফ্টওয়্যার বাস্তবায়ন একটি খালি তালিকা প্রদান করে; একটি হাইব্রিড বাস্তবায়ন হার্ডওয়্যার দ্বারা সমর্থিত শুধুমাত্র অ্যালগরিদম ধারণকারী একটি তালিকা প্রদান করে।
কীমাস্টার 1 বাস্তবায়ন RSA, EC, AES এবং HMAC সমর্থন করে।
get_supported_block_modes
সংস্করণ : 1
একটি নির্দিষ্ট অ্যালগরিদম এবং উদ্দেশ্যের জন্য কীমাস্টার হার্ডওয়্যার বাস্তবায়ন দ্বারা সমর্থিত AES ব্লক মোডগুলির তালিকা প্রদান করে৷
RSA, EC এবং HMAC-এর জন্য, যেগুলি ব্লক সাইফার নয়, পদ্ধতিটি সমস্ত বৈধ উদ্দেশ্যে একটি খালি তালিকা প্রদান করে৷ অবৈধ উদ্দেশ্যের কারণে পদ্ধতিটি ফেরত দিতে হবে ErrorCode::INVALID_PURPOSE
।
Keymaster 1 বাস্তবায়ন AES এনক্রিপশন এবং ডিক্রিপশনের জন্য ECB, CBC, CTR এবং GCM সমর্থন করে।
get_supported_padding_modes
সংস্করণ : 1
একটি নির্দিষ্ট অ্যালগরিদম এবং উদ্দেশ্যের জন্য কীমাস্টার হার্ডওয়্যার বাস্তবায়ন দ্বারা সমর্থিত প্যাডিং মোডগুলির তালিকা প্রদান করে৷
HMAC এবং EC এর প্যাডিং সম্পর্কে কোন ধারণা নেই তাই পদ্ধতিটি সমস্ত বৈধ উদ্দেশ্যে একটি খালি তালিকা প্রদান করে। অবৈধ উদ্দেশ্যের কারণে পদ্ধতিটি ফেরত দিতে হবে ErrorCode::INVALID_PURPOSE
।
RSA এর জন্য, Keymaster 1 বাস্তবায়ন সমর্থন:
- আনপ্যাডেড এনক্রিপশন, ডিক্রিপশন, সাইনিং এবং ভেরিফিকেশন। আনপ্যাড না করা এনক্রিপশন এবং সাইনিংয়ের জন্য, যদি বার্তাটি পাবলিক মডুলাসের চেয়ে ছোট হয়, তাহলে বাস্তবায়নকে অবশ্যই শূন্য দিয়ে বাম-প্যাড করতে হবে। আনপ্যাডেড ডিক্রিপশন এবং যাচাইকরণের জন্য, ইনপুট দৈর্ঘ্য অবশ্যই পাবলিক মডুলাস আকারের সাথে মিলবে।
- PKCS#1 v1.5 এনক্রিপশন এবং সাইনিং প্যাডিং মোড
- ন্যূনতম 20 লবণের দৈর্ঘ্য সহ PSS
- OAEP
ECB এবং CBC মোডে AES-এর জন্য, Keymaster 1 বাস্তবায়ন কোনো প্যাডিং এবং PKCS#7-প্যাডিং সমর্থন করে না। CTR এবং GCM মোড শুধুমাত্র কোন প্যাডিং সমর্থন করে না।
get_supported_digests
সংস্করণ : 1
একটি নির্দিষ্ট অ্যালগরিদম এবং উদ্দেশ্যের জন্য কীমাস্টার হার্ডওয়্যার বাস্তবায়ন দ্বারা সমর্থিত ডাইজেস্ট মোডগুলির তালিকা প্রদান করে৷
কোন AES মোড সমর্থন করে না বা হজম করার প্রয়োজন হয় না, তাই পদ্ধতিটি বৈধ উদ্দেশ্যে একটি খালি তালিকা প্রদান করে।
কীমাস্টার 1 বাস্তবায়ন সংজ্ঞায়িত ডাইজেস্টের একটি উপসেট বাস্তবায়ন করতে পারে। বাস্তবায়ন SHA-256 প্রদান করে এবং MD5, SHA1, SHA-224, SHA-256, SHA384 এবং SHA512 (সংজ্ঞায়িত ডাইজেস্টের সম্পূর্ণ সেট) প্রদান করতে পারে।
get_supported_import_formats
সংস্করণ : 1
একটি নির্দিষ্ট অ্যালগরিদমের কীমাস্টার হার্ডওয়্যার বাস্তবায়ন দ্বারা সমর্থিত আমদানি বিন্যাসের তালিকা প্রদান করে।
কীমাস্টার 1 বাস্তবায়ন RSA এবং EC কী জোড়া আমদানির জন্য PKCS#8 ফর্ম্যাট (পাসওয়ার্ড সুরক্ষা ছাড়া) সমর্থন করে এবং AES এবং HMAC কী উপাদানের RAW আমদানি সমর্থন করে।
get_supported_export_formats
সংস্করণ : 1
একটি নির্দিষ্ট অ্যালগরিদমের কীমাস্টার হার্ডওয়্যার বাস্তবায়ন দ্বারা সমর্থিত রপ্তানি বিন্যাসের তালিকা প্রদান করে।
Keymaster1 বাস্তবায়ন RSA এবং EC পাবলিক কী রপ্তানির জন্য X.509 বিন্যাস সমর্থন করে। ব্যক্তিগত কী বা অ্যাসিমেট্রিক কী রপ্তানি সমর্থিত নয়।
ঐতিহাসিক ফাংশন
কীমাস্টার 0
নিম্নলিখিত ফাংশনগুলি মূল কীমাস্টার 0 সংজ্ঞার অন্তর্গত। তারা Keymaster 1 struct keymaster1_device_t এ উপস্থিত ছিল। যাইহোক, Keymaster 1.0-এ সেগুলি বাস্তবায়িত হয়নি, এবং তাদের ফাংশন পয়েন্টারগুলি NULL এ সেট করা হয়েছিল।
-
generate_keypair
-
import_keypair
-
get_keypair_public
-
delete_keypair
-
delete_all
-
sign_data
-
Verify_data
কীমাস্টার ১
নিম্নলিখিত ফাংশনগুলি কীমাস্টার 1 সংজ্ঞার অন্তর্গত, কিন্তু উপরে তালিকাভুক্ত কীমাস্টার 0 ফাংশন সহ কীমাস্টার 2-এ সরানো হয়েছে।
-
get_supported_algorithms
-
get_supported_block_modes
-
get_supported_padding_modes
-
get_supported_digests
-
get_supported_import_formats
-
get_supported_export_formats
কীমাস্টার 2
নিম্নলিখিত ফাংশনগুলি কীমাস্টার 2 সংজ্ঞার অন্তর্গত, কিন্তু উপরে তালিকাভুক্ত কীমাস্টার 1 ফাংশন সহ কীমাস্টার 3-এ সরানো হয়েছে।
-
configure