কীমাস্টার ফাংশন

এই পৃষ্ঠাটি কীমাস্টার হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (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) সহ উপবৃত্তাকার কার্ভ ক্রিপ্টোগ্রাফি সমর্থন করে।
  • supportsSymmetricCryptography true হার্ডওয়্যার 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 বক্ররেখা নির্দেশ করে৷

ট্যাগ::ডাইজেস্ট একটি দরকারী 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 মান সহ যোগ করে এবং যদি কী রোলব্যাক প্রতিরোধী হয়,

ট্যাগ::ROLLBACK_RESISTANT

রোলব্যাক প্রতিরোধ

রোলব্যাক রেজিস্ট্যান্স মানে হল একবার ডিলিটকি বা ডিলিট অ্যালকি দিয়ে একটি কী মুছে ফেলা হলে, এটি সুরক্ষিত হার্ডওয়্যার দ্বারা নিশ্চিত করা হয় যে এটি আর কখনও ব্যবহারযোগ্য হবে না। রোলব্যাক রেজিস্ট্যান্স ব্যতীত ইমপ্লিমেন্টেশনগুলি সাধারণত একটি কী ব্লব, একটি এনক্রিপ্ট করা এবং প্রমাণীকৃত ফর্ম হিসাবে কলারের কাছে জেনারেট করা বা আমদানি করা কী উপাদান ফেরত দেয়। যখন কীস্টোর কী ব্লবটি মুছে দেয়, তখন কীটি চলে যায়, কিন্তু একজন আক্রমণকারী যিনি পূর্বে মূল উপাদানটি পুনরুদ্ধার করতে পেরেছিলেন তিনি সম্ভাব্যভাবে এটিকে ডিভাইসে পুনরুদ্ধার করতে পারেন।

একটি কী রোলব্যাক প্রতিরোধী হয় যদি সুরক্ষিত হার্ডওয়্যার গ্যারান্টি দেয় যে মুছে ফেলা কীগুলি পরে পুনরুদ্ধার করা যাবে না। এটি সাধারণত একটি বিশ্বস্ত অবস্থানে অতিরিক্ত কী মেটাডেটা সংরক্ষণ করে করা হয় যা আক্রমণকারী দ্বারা ম্যানিপুলেট করা যায় না। মোবাইল ডিভাইসে, এর জন্য ব্যবহৃত প্রক্রিয়াটি সাধারণত রিপ্লে প্রোটেক্টেড মেমরি ব্লক (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() কলে উল্লিখিত উদ্দেশ্যটিকে মূল অনুমোদনের উদ্দেশ্যগুলির একটির সাথে মিলতে হবে, যদি না অনুরোধকৃত অপারেশনটি একটি সর্বজনীন কী অপারেশন হয়। যদি নির্দিষ্ট উদ্দেশ্য মেলে না এবং অপারেশনটি একটি সর্বজনীন কী অপারেশন না হয়, begin ফেরত দেবে ErrorCode::UNSUPPORTED_PURPOSE । পাবলিক কী ক্রিয়াকলাপগুলি অসমমিত এনক্রিপশন বা যাচাইকরণ ক্রিয়াকলাপ।
  • ট্যাগ::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/nonce প্রদান করতে পারে 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 প্রদান করে।

অনুমোদন প্রয়োগ

মূল অনুমোদন প্রয়োগ প্রাথমিকভাবে শুরুতে সঞ্চালিত হয়। একটি ব্যতিক্রম হল সেই ক্ষেত্রে যেখানে কী আছে:

এই ক্ষেত্রে, কীটির জন্য অপারেশন প্রতি একটি অনুমোদনের প্রয়োজন, এবং আপডেট পদ্ধতিটি 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 আর্গুমেন্টে ট্যাগ::ASSOCIATED_DATA ট্যাগের মাধ্যমে প্রদত্ত "সম্পর্কিত প্রমাণীকরণ ডেটা" সমর্থন করে। সংশ্লিষ্ট ডেটা বারবার কলে প্রদান করা যেতে পারে (একটি ব্লকে পাঠানোর জন্য ডেটা খুব বড় হলে গুরুত্বপূর্ণ) কিন্তু সর্বদা ডেটা এনক্রিপ্ট বা ডিক্রিপ্ট করার আগে থাকে। একটি আপডেট কল এনক্রিপ্ট/ডিক্রিপ্ট করার জন্য সংশ্লিষ্ট ডেটা এবং ডেটা উভয়ই গ্রহণ করতে পারে, কিন্তু পরবর্তী আপডেটগুলিতে সংশ্লিষ্ট ডেটা অন্তর্ভুক্ত নাও হতে পারে। যদি কলকারী একটি কলের পরে একটি আপডেট কলে সম্পর্কিত ডেটা সরবরাহ করে যাতে এনক্রিপ্ট/ডিক্রিপ্ট করার ডেটা অন্তর্ভুক্ত থাকে, ErrorCode::INVALID_TAG ফেরত দিন।

GCM এনক্রিপশনের জন্য, ট্যাগটি শেষ করে সাইফারটেক্সটে যুক্ত করা হয়। ডিক্রিপশনের সময়, শেষ আপডেট কলে দেওয়া ডেটার শেষ Tag::MAC_LENGTH বাইট হল ট্যাগ। যেহেতু আপডেটের একটি প্রদত্ত আহ্বান জানাতে পারে না যে এটি শেষ আহ্বান কিনা, তাই এটি ট্যাগ দৈর্ঘ্য ছাড়া সব প্রক্রিয়া করে এবং ফিনিশের সময় সম্ভাব্য ট্যাগ ডেটা বাফার করে।

শেষ

সংস্করণ : 1, 2, 3

আপডেট (গুলি) দ্বারা প্রদত্ত সমস্ত এখনও-প্রক্রিয়াহীন ডেটা প্রক্রিয়াকরণ করে, begin এর সাথে শুরু হওয়া একটি চলমান অপারেশন শেষ করে।

এই পদ্ধতিটি একটি অপারেশনে বলা শেষ পদ্ধতি, তাই সমস্ত প্রক্রিয়াকৃত ডেটা ফেরত দেওয়া হয়।

এটি সফলভাবে সম্পূর্ণ হয় বা কোনও ত্রুটি ফিরিয়ে দেয়, এই পদ্ধতিটি অপারেশনটিকে চূড়ান্ত করে এবং তাই সরবরাহিত অপারেশন হ্যান্ডেলটিকে অবৈধ করে। এই পদ্ধতি বা আপডেট বা বাতিল সহ হ্যান্ডেলটির কোনও ভবিষ্যতের ব্যবহার ErrorCode::INVALID_OPERATION_HANDLE

সাইনিং অপারেশনগুলি আউটপুট হিসাবে স্বাক্ষরটি ফিরিয়ে দেয়। যাচাইকরণ অপারেশনগুলি signature প্যারামিটারে স্বাক্ষর গ্রহণ করে এবং কোনও আউটপুট ফেরত দেয় না।

অনুমোদন প্রয়োগ

মূল অনুমোদনের প্রয়োগটি প্রাথমিকভাবে শুরুতে সম্পাদিত হয়। একটি ব্যতিক্রম হ'ল কেস যেখানে কী রয়েছে:

এই ক্ষেত্রে, কীটির জন্য অপারেশন প্রতি একটি অনুমোদনের প্রয়োজন, এবং আপডেট পদ্ধতিটি inParams যুক্তিতে একটি ট্যাগ :: auth_token গ্রহণ করে। এইচএমএসি যাচাই করে যে টোকেনটি বৈধ এবং এতে একটি মিলে যাওয়া সুরক্ষিত ব্যবহারকারী আইডি রয়েছে, কী এর ট্যাগ :: ব্যবহারকারী_আউথ_ টাইপের সাথে মেলে এবং চ্যালেঞ্জ ক্ষেত্রে বর্তমান অপারেশনের অপারেশন হ্যান্ডেল রয়েছে। যদি এই শর্তগুলি পূরণ না করা হয় তবে ErrorCode::KEY_USER_NOT_AUTHENTICATED

কলার আপডেট এবং শেষ করতে প্রতিটি কলকে প্রমাণীকরণ টোকেন সরবরাহ করে। বাস্তবায়নের প্রয়োজন যদি এটি পছন্দ হয় তবে একবার টোকেনকে বৈধতা দেওয়া দরকার।

আরএসএ কী

প্যাডিং মোডের উপর নির্ভর করে কিছু অতিরিক্ত প্রয়োজনীয়তা:

  • PaddingMode::NONE । আনপ্যাডেড স্বাক্ষর এবং এনক্রিপশন অপারেশনগুলির জন্য, যদি সরবরাহিত ডেটা কীগুলির চেয়ে কম হয় তবে সাইনিং/এনক্রিপশন আগে ডেটা বাম দিকে শূন্য-প্যাড করা হয়। যদি ডেটা কী হিসাবে একই দৈর্ঘ্য হয় তবে সংখ্যাগতভাবে বৃহত্তর হয় তবে ErrorCode::INVALID_ARGUMENT রিটার্ন করুন। যাচাইকরণ এবং ডিক্রিপশন অপারেশনগুলির জন্য, ডেটা অবশ্যই কী হিসাবে ঠিক ততক্ষণ হতে হবে। অন্যথায়, ErrorCode::INVALID_INPUT_LENGTH.
  • PaddingMode::RSA_PSS । পিএসএস-প্যাডেড স্বাক্ষর ক্রিয়াকলাপের জন্য, পিএসএস লবণ বার্তা ডাইজেস্টের আকার এবং এলোমেলোভাবে উত্পন্ন। ট্যাগ :: ডাইজেস্টের সাথে নির্দিষ্ট ডাইজেস্ট inputParams ডাইজেস্টের সাথে পিএসএস ডাইজেস্ট অ্যালগরিদম এবং এমজিএফ 1 ডাইজেস্ট অ্যালগরিদম হিসাবে ব্যবহৃত হয়।
  • PaddingMode::RSA_OAEPট্যাগ :: ডাইজেস্টের সাথে নির্দিষ্ট ডাইজেস্ট inputParams ডাইজেস্টের সাথে ওএইপি ডাইজেস্ট অ্যালগরিদম হিসাবে ব্যবহৃত হয় এবং SHA1 এমজিএফ 1 ডাইজেস্ট অ্যালগরিদম হিসাবে ব্যবহৃত হয়।

ইসিডিএসএ কী

যদি আনপ্যাডেড স্বাক্ষর বা যাচাইয়ের জন্য সরবরাহ করা ডেটা খুব দীর্ঘ হয় তবে এটি ছাঁটাই করুন।

এইএস কীগুলি

ব্লক মোডের উপর নির্ভর করে কিছু অতিরিক্ত শর্তাদি:

  • BlockMode::ECB বা BlockMode::CBC । যদি প্যাডিং PaddingMode::NONE এবং ডেটা দৈর্ঘ্য এইএস ব্লকের আকারের একাধিক নয়, রিটার্ন ErrorCode::INVALID_INPUT_LENGTH । যদি প্যাডিং PaddingMode::PKCS7 হয় তবে পিকেসিএস#7 স্পেসিফিকেশন অনুযায়ী ডেটা প্যাড করুন। নোট করুন যে পিকেসিএস#7 যদি ডেটা ব্লকের দৈর্ঘ্যের একাধিক হয় তবে একটি অতিরিক্ত প্যাডিং ব্লক যুক্ত করার পরামর্শ দেয়।
  • BlockMode::GCM । এনক্রিপশন চলাকালীন, সমস্ত প্লেইনটেক্সট প্রক্রিয়াজাতকরণের পরে, ট্যাগটি গণনা করুন ( ট্যাগ :: ম্যাক_ল্যাথ বাইট) এবং এটি প্রত্যাবর্তিত সাইফারেক্সটে যুক্ত করুন। ডিক্রিপশন চলাকালীন, শেষ ট্যাগটি প্রক্রিয়া করুন :: ম্যাক_ল্যাথ বাইটগুলি ট্যাগ হিসাবে। যদি ট্যাগ যাচাইকরণ ব্যর্থ হয়, ErrorCode::VERIFICATION_FAILED

গর্ভপাত

সংস্করণ : 1, 2, 3

অগ্রগতি অপারেশন বাতিল করে। বাতিল হওয়ার পরে, ত্রুটি কোডটি ফিরিয়ে দিন :: আপডেট , ফিনিস বা গর্ভপাত সহ সরবরাহিত অপারেশন হ্যান্ডেলটির পরবর্তী কোনও ব্যবহারের জন্য ErrorCode::INVALID_OPERATION_HANDLE

get_supported_algoorithms

সংস্করণ : 1

কিমাস্টার হার্ডওয়্যার বাস্তবায়ন দ্বারা সমর্থিত অ্যালগরিদমের তালিকা প্রদান করে। একটি সফ্টওয়্যার বাস্তবায়ন একটি খালি তালিকা ফেরত দেয়; একটি হাইব্রিড বাস্তবায়ন হার্ডওয়্যার দ্বারা সমর্থিত কেবলমাত্র অ্যালগরিদমযুক্ত একটি তালিকা ফেরত দেয়।

কিমাস্টার 1 বাস্তবায়ন আরএসএ, ইসি, এইএস এবং এইচএমএসি সমর্থন করে।

get_supported_block_modes

সংস্করণ : 1

একটি নির্দিষ্ট অ্যালগরিদম এবং উদ্দেশ্যটির জন্য কীমাস্টার হার্ডওয়্যার বাস্তবায়নের দ্বারা সমর্থিত এইএস ব্লক মোডগুলির তালিকাটি ফেরত দেয়।

আরএসএ, ইসি এবং এইচএমএসি, যা ব্লক সিফার নয়, পদ্ধতিটি সমস্ত বৈধ উদ্দেশ্যে খালি তালিকা ফেরত দেয়। অবৈধ উদ্দেশ্যগুলির ফলে পদ্ধতিটি ErrorCode::INVALID_PURPOSE

কিমাস্টার 1 বাস্তবায়নগুলি এইএস এনক্রিপশন এবং ডিক্রিপশনের জন্য ইসিবি, সিবিসি, সিটিআর এবং জিসিএম সমর্থন করে।

get_supported_padding_modes

সংস্করণ : 1

একটি নির্দিষ্ট অ্যালগরিদম এবং উদ্দেশ্যটির জন্য কীমাস্টার হার্ডওয়্যার বাস্তবায়নের দ্বারা সমর্থিত প্যাডিং মোডগুলির তালিকাটি ফেরত দেয়।

এইচএমএসি এবং ইসির প্যাডিংয়ের কোনও ধারণা নেই তাই পদ্ধতিটি সমস্ত বৈধ উদ্দেশ্যে খালি তালিকা দেয়। অবৈধ উদ্দেশ্যগুলির ফলে পদ্ধতিটি ErrorCode::INVALID_PURPOSE

আরএসএর জন্য, কিমাস্টার 1 বাস্তবায়ন সমর্থন:

  • আনপ্যাডেড এনক্রিপশন, ডিক্রিপশন, স্বাক্ষর এবং যাচাইকরণ। আনপ্যাডেড এনক্রিপশন এবং স্বাক্ষর করার জন্য, যদি বার্তাটি সর্বজনীন মডুলাসের চেয়ে কম হয় তবে বাস্তবায়নগুলি অবশ্যই এটি জিরো দিয়ে বাম-প্যাড করতে হবে। আনপ্যাডেড ডিক্রিপশন এবং যাচাইয়ের জন্য, ইনপুট দৈর্ঘ্য অবশ্যই পাবলিক মডুলাস আকারের সাথে মেলে।
  • পিকেসিএস#1 ভি 1.5 এনক্রিপশন এবং স্বাক্ষর প্যাডিং মোড
  • ন্যূনতম 20 এর দৈর্ঘ্য সহ পিএসএস
  • OAEP

ইসিবি এবং সিবিসি মোডে এইএসের জন্য, কেমাস্টার 1 বাস্তবায়ন কোনও প্যাডিং এবং পিকেসিএস#7-প্যাডিং সমর্থন করে না। সিটিআর এবং জিসিএম মোডগুলি কেবল কোনও প্যাডিং সমর্থন করে না।

get_supported_digests

সংস্করণ : 1

একটি নির্দিষ্ট অ্যালগরিদম এবং উদ্দেশ্যটির জন্য কীমাস্টার হার্ডওয়্যার বাস্তবায়নের দ্বারা সমর্থিত ডাইজেস্ট মোডগুলির তালিকা প্রদান করে।

কোনও এইএস মোডগুলি সমর্থন করে বা হজমের প্রয়োজন নেই, তাই পদ্ধতিটি বৈধ উদ্দেশ্যে একটি খালি তালিকা ফেরত দেয়।

কিমাস্টার 1 বাস্তবায়ন সংজ্ঞায়িত হজমের একটি উপসেট প্রয়োগ করতে পারে। বাস্তবায়নগুলি SHA-256 সরবরাহ করে এবং MD5, SHA1, SHA-224, SHA-256, SHA384 এবং SHA512 (সংজ্ঞায়িত ডাইজেস্টের সম্পূর্ণ সেট) সরবরাহ করতে পারে।

get_supported_import_formats

সংস্করণ : 1

একটি নির্দিষ্ট অ্যালগরিদমের কিমাস্টার হার্ডওয়্যার বাস্তবায়ন দ্বারা সমর্থিত আমদানি ফর্ম্যাটগুলির তালিকা প্রদান করে।

কিমাস্টার 1 বাস্তবায়নগুলি আরএসএ এবং ইসি কী জোড়া আমদানির জন্য পিকেসিএস#8 ফর্ম্যাট (পাসওয়ার্ড সুরক্ষা ছাড়াই) সমর্থন করে এবং এইএস এবং এইচএমএসি কী উপাদানগুলির কাঁচা আমদানি সমর্থন করে।

get_supported_export_formats

সংস্করণ : 1

একটি নির্দিষ্ট অ্যালগরিদমের কিমাস্টার হার্ডওয়্যার বাস্তবায়ন দ্বারা সমর্থিত রফতানি ফর্ম্যাটগুলির তালিকা প্রদান করে।

কিমাস্টার 1 বাস্তবায়নগুলি আরএসএ এবং ইসি পাবলিক কীগুলি রফতানির জন্য x.509 ফর্ম্যাটকে সমর্থন করে। প্রাইভেট কী বা অসমমিত কীগুলির রফতানি সমর্থিত নয়।

Functions তিহাসিক ফাংশন

কিমাস্টার 0

নিম্নলিখিত ফাংশনগুলি মূল কীমাস্টার 0 সংজ্ঞা সম্পর্কিত। তারা কিমাস্টার 1 স্ট্রাক্ট কিমাস্টার 1_ডিভাইস_টি -তে উপস্থিত ছিল। যাইহোক, কিমাস্টার 1.0 এ এগুলি প্রয়োগ করা হয়নি, এবং তাদের ফাংশন পয়েন্টারগুলি বাতিল হয়ে গেছে।

  • generate_keypair
  • import_keypair
  • get_keypair_public
  • delete_keypair
  • delete_all
  • sign_data
  • Verify_data

কিমাস্টার 1

নিম্নলিখিত ফাংশনগুলি কিমাস্টার 1 সংজ্ঞার অন্তর্গত, তবে কিমাস্টার 2 এ উপরে তালিকাভুক্ত কেমাস্টার 0 ফাংশন সহ সরানো হয়েছে।

  • get_supported_algorithms
  • get_supported_block_modes
  • get_supported_padding_modes
  • get_supported_digests
  • get_supported_import_formats
  • get_supported_export_formats

কিমাস্টার 2

নিম্নলিখিত ফাংশনগুলি কিমাস্টার 2 সংজ্ঞার অন্তর্গত, তবে কিমাস্টার 3 এ উপরে তালিকাভুক্ত কিমাস্টার 1 ফাংশন সহ সরানো হয়েছে।

  • configure
,

এই পৃষ্ঠাটি কীমাস্টার হার্ডওয়্যার অ্যাবস্ট্রাকশন স্তরগুলি (এইচএলএস) প্রয়োগকারীদের সহায়তা করার জন্য বিশদ সরবরাহ করে। এটি এপিআইতে প্রতিটি ফাংশনকে কভার করে এবং কোন কিমাস্টার সংস্করণে যেটি ফাংশনটি উপলভ্য এবং ডিফল্ট বাস্তবায়নের বর্ণনা দেয়। ট্যাগগুলির জন্য, কীমাস্টার ট্যাগ পৃষ্ঠাটি দেখুন।

সাধারণ বাস্তবায়ন নির্দেশিকা

নিম্নলিখিত নির্দেশিকাগুলি এপিআইয়ের সমস্ত ফাংশনগুলিতে প্রযোজ্য।

ইনপুট পয়েন্টার পরামিতি

সংস্করণ : 1, 2

প্রদত্ত কলের জন্য ব্যবহৃত হয় না এমন ইনপুট পয়েন্টার পরামিতিগুলি NULL হতে পারে। কলারকে স্থানধারীদের সরবরাহ করার প্রয়োজন নেই। উদাহরণস্বরূপ, কিছু মূল প্রকার এবং মোডগুলি শুরু করার জন্য inParams আর্গুমেন্ট থেকে কোনও মান ব্যবহার করতে পারে না, তাই কলার inParams NULL করতে বা একটি খালি প্যারামিটার সেট সরবরাহ করতে পারে। কলাররা অব্যবহৃত প্যারামিটারগুলিও সরবরাহ করতে পারে এবং কীমাস্টার পদ্ধতিগুলি ত্রুটিগুলি জারি করা উচিত নয়।

যদি কোনও প্রয়োজনীয় ইনপুট প্যারামিটারটি নাল হয় তবে কীমাস্টার পদ্ধতিগুলি ErrorCode::UNEXPECTED_NULL_POINTER ফেরত দেওয়া উচিত।

কিমাস্টার 3 থেকে শুরু করে, কোনও পয়েন্টার পরামিতি নেই। সমস্ত পরামিতি মান বা কনস্ট্রেস রেফারেন্স দ্বারা পাস করা হয়।

আউটপুট পয়েন্টার পরামিতি

সংস্করণ : 1, 2

ইনপুট পয়েন্টার পরামিতিগুলির অনুরূপ, অব্যবহৃত আউটপুট পয়েন্টার পরামিতিগুলি NULL হতে পারে। যদি কোনও পদ্ধতিতে NULL হিসাবে পাওয়া কোনও আউটপুট প্যারামিটারে ডেটা ফেরত দেওয়ার প্রয়োজন হয় তবে এটি ErrorCode::OUTPUT_PARAMETER_NULL

কিমাস্টার 3 থেকে শুরু করে, কোনও পয়েন্টার পরামিতি নেই। সমস্ত পরামিতি মান বা কনস্ট্রেস রেফারেন্স দ্বারা পাস করা হয়।

এপিআই অপব্যবহার

সংস্করণ : 1, 2, 3

এমন অনেকগুলি উপায় রয়েছে যা কলাররা অনুরোধগুলি করতে পারে যা বোধগম্য হয় না বা বোকামি করে তবে প্রযুক্তিগতভাবে ভুল নয়। কিমাস্টার বাস্তবায়নের এই জাতীয় ক্ষেত্রে ব্যর্থ হওয়া বা ডায়াগনস্টিক জারি করার প্রয়োজন নেই। খুব ছোট কীগুলির ব্যবহার, অপ্রাসঙ্গিক ইনপুট প্যারামিটারগুলির স্পেসিফিকেশন, আইভি বা ননসেসের পুনরায় ব্যবহার, কোনও উদ্দেশ্য ছাড়াই কীগুলির প্রজন্ম (তাই অকেজো) এবং এর মতো বাস্তবায়ন দ্বারা নির্ণয় করা উচিত নয়। প্রয়োজনীয় পরামিতিগুলি বাদ দেওয়া, অবৈধ প্রয়োজনীয় পরামিতিগুলির স্পেসিফিকেশন এবং অনুরূপ ত্রুটিগুলি অবশ্যই নির্ণয় করতে হবে।

কিমাস্টার মডিউলগুলিতে কলগুলি বুদ্ধিমান এবং দরকারী কিনা তা নিশ্চিত করার জন্য এটি অ্যাপ্লিকেশন, ফ্রেমওয়ার্ক এবং অ্যান্ড্রয়েড কীস্টোরের দায়িত্ব।

ফাংশন

gethardwarefeatures

সংস্করণ : 3

নতুন getHardwareFeatures পদ্ধতিগুলি ক্লায়েন্টদের অন্তর্নিহিত সুরক্ষিত হার্ডওয়্যারগুলির কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য প্রকাশ করে। পদ্ধতিটি কোনও যুক্তি নেয় না এবং চারটি মান দেয় না, সমস্ত বুলিয়ান:

  • কীগুলি সিকিউর হার্ডওয়্যার (টি, ইত্যাদি) এ সংরক্ষণ করা হয় এবং কখনই এটি ছেড়ে যায় না isSecure true
  • supportsEllipticCurve true যদি হার্ডওয়্যার এনআইএসটি বক্ররেখা (পি -224, পি -256, পি -384, এবং পি -521) সহ উপবৃত্তাকার কার্ভ ক্রিপ্টোগ্রাফি সমর্থন করে।
  • এইগুলি এবং এইচএমএসি সহ হার্ডওয়্যার প্রতিসম ক্রিপ্টোগ্রাফি সমর্থন করে যদি supportsSymmetricCryptography true
  • সুরক্ষিত পরিবেশে ইনজেকশনের কী দিয়ে স্বাক্ষরিত হার্ডওয়্যার কিমাস্টার পাবলিক কী প্রমাণীকরণ শংসাপত্রগুলির প্রজন্মকে সমর্থন করে তবে 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

এই ফাংশনটি কীমাস্টার 2 এ চালু হয়েছিল এবং কীমাস্টার 3 -এ অবমূল্যায়ন করা হয়েছিল, কারণ এই তথ্য সিস্টেমের বৈশিষ্ট্য ফাইলগুলিতে পাওয়া যায় এবং প্রস্তুতকারকের বাস্তবায়নগুলি স্টার্টআপের সময় সেই ফাইলগুলি পড়েন।

কিমাস্টার কনফিগার করে। ডিভাইসটি খোলার পরে এবং এটি ব্যবহারের আগে এই পদ্ধতিটি একবার কল করা হয়। এটি কিমাস্টারে km_tag_os_version এবং km_tag_os_patchlevel সরবরাহ করতে ব্যবহৃত হয়। যতক্ষণ না এই পদ্ধতিটি বলা হয়, অন্য সমস্ত পদ্ধতি KM_ERROR_KEYMASTER_NOT_CONFIGURED কনফিগার করা হয়। এই পদ্ধতি দ্বারা সরবরাহিত মানগুলি কেবল বুট প্রতি একবার কিউমার দ্বারা গৃহীত হয়। পরবর্তী কলগুলি KM_ERROR_OK রিটার্ন করে, তবে কিছুই করে না।

যদি কিমাস্টার বাস্তবায়ন সিকিউর হার্ডওয়্যারে থাকে এবং প্রদত্ত ওএস সংস্করণ এবং প্যাচ স্তরের মানগুলি বুটলোডার দ্বারা সুরক্ষিত হার্ডওয়্যারকে সরবরাহিত মানগুলির সাথে মেলে না (বা যদি বুটলোডার মানগুলি সরবরাহ না করে), তবে এই পদ্ধতিটি 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);

অ্যাডরনজেন্ট্রপি

সংস্করণ : 1, 2, 3

এই ফাংশনটি কিমাস্টার 1 এ add_rng_entropy হিসাবে চালু হয়েছিল এবং কীমাস্টার 3 -এ নামকরণ করা হয়েছিল।

কী, আইভিএস ইত্যাদির জন্য এলোমেলো সংখ্যা তৈরির জন্য কিমাস্টার 1 বাস্তবায়ন দ্বারা ব্যবহৃত পুলটিতে কলার-সরবরাহিত এনট্রপি যুক্ত করে

কিমাস্টার বাস্তবায়নগুলি তাদের পুলে প্রদত্ত এনট্রপিটি নিরাপদে মিশ্রিত করতে হবে, এতে অবশ্যই একটি হার্ডওয়্যার এলোমেলো নম্বর জেনারেটর থেকে অভ্যন্তরীণ উত্পাদিত এনট্রপি থাকতে হবে। মিশ্রণটি এমনভাবে পরিচালনা করা উচিত যাতে আক্রমণকারী যার মধ্যে addRngEntropy -সরবরাহিত বিট বা হার্ডওয়্যার-উত্পাদিত বিটগুলির সম্পূর্ণ নিয়ন্ত্রণ রয়েছে, তবে উভয়ই নয়, এনট্রপি পুল থেকে উত্পন্ন বিটগুলির পূর্বাভাস দেওয়ার ক্ষেত্রে কোনও অবহেলিত সুবিধা নেই।

কিমাস্টার বাস্তবায়নে যেগুলি তাদের অভ্যন্তরীণ পুলে এনট্রপিটি অনুমান করার চেষ্টা করে তা ধরে নিয়েছে যে addRngEntropy দ্বারা সরবরাহিত ডেটাতে কোনও এনট্রপি নেই। কিমাস্টার বাস্তবায়নগুলি ErrorCode::INVALID_INPUT_LENGTH যদি তাদের একক কলটিতে 2 টিরও বেশি ডেটা দেওয়া হয়।

কী তৈরি করুন

সংস্করণ : 1, 2, 3

এই ফাংশনটি কিমাস্টার 1 এ generate_key হিসাবে চালু হয়েছিল এবং কীমাস্টার 3 এ নামকরণ করা হয়েছিল।

সম্পর্কিত অনুমোদনগুলি নির্দিষ্ট করে একটি নতুন ক্রিপ্টোগ্রাফিক কী তৈরি করে, যা স্থায়ীভাবে কীতে আবদ্ধ। কিমাস্টার বাস্তবায়নগুলি প্রজন্মের সময়ে নির্দিষ্ট অনুমোদনের সাথে অসঙ্গতিপূর্ণ কোনওভাবে কী ব্যবহার করা অসম্ভব করে তোলে। সুরক্ষিত হার্ডওয়্যার প্রয়োগ করতে পারে না এমন অনুমোদনের ক্ষেত্রে, সুরক্ষিত হার্ডওয়্যারটির বাধ্যবাধকতা কীটির সাথে সম্পর্কিত অযোগ্য প্রয়োগযোগ্য অনুমোদনগুলি সংশোধন করা যায় না তা নিশ্চিত করার মধ্যে সীমাবদ্ধ, যাতে গেটকিচারাক্টেরিস্টিকসকে প্রতিটি কল মূল মানটি ফেরত দেয়। এছাড়াও, generateKey দ্বারা ফিরে আসা বৈশিষ্ট্যগুলি হার্ডওয়্যার-প্রয়োগকৃত এবং সফ্টওয়্যার-প্রয়োগকৃত তালিকার মধ্যে সঠিকভাবে অনুমোদন বরাদ্দ করে। আরও তথ্যের জন্য getkeycharactericstics দেখুন।

generateKey সরবরাহ করা প্যারামিটারগুলি কী উত্পন্ন কী ধরণের উপর নির্ভর করে। এই বিভাগটি প্রতিটি ধরণের কী জন্য প্রয়োজনীয় এবং al চ্ছিক ট্যাগগুলির সংক্ষিপ্তসার করে। ট্যাগ :: অ্যালগরিদম সর্বদা প্রয়োজনীয়, প্রকারটি নির্দিষ্ট করার জন্য।

আরএসএ কী

একটি আরএসএ কী তৈরি করতে নিম্নলিখিত পরামিতিগুলি প্রয়োজনীয়।

  • ট্যাগ :: কী_সাইজ বিটগুলিতে সর্বজনীন মডুলাসের আকার নির্দিষ্ট করে। যদি বাদ দেওয়া হয় তবে পদ্ধতিটি ErrorCode::UNSUPPORTED_KEY_SIZE । সমর্থিত মানগুলি হ'ল 1024, 2048, 3072 এবং 4096. প্রস্তাবিত মানগুলি সমস্ত মূল আকার যা 8 এর একাধিক।
  • ট্যাগ :: আরএসএ_পাবলিক_এক্সপোনেন্ট আরএসএ পাবলিক এক্সপোনেন্টের মান নির্দিষ্ট করে। যদি বাদ দেওয়া হয় তবে পদ্ধতিটি ErrorCode::INVALID_ARGUMENT ফেরত দেয়। সমর্থিত মানগুলি 3 এবং 65537. প্রস্তাবিত মানগুলি সমস্ত প্রাইম মান 2^64 পর্যন্ত।

নিম্নলিখিত প্যারামিটারগুলি আরএসএ কী তৈরি করার জন্য প্রয়োজনীয় নয়, তবে সেগুলি ছাড়া একটি আরএসএ কী তৈরি করা একটি কী তৈরি করে যা ব্যবহারযোগ্য নয়। তবে, এই পরামিতিগুলি বাদ দেওয়া হলে generateKey ফাংশন কোনও ত্রুটি ফেরত না।

  • ট্যাগ :: উদ্দেশ্য অনুমোদিত উদ্দেশ্য নির্দিষ্ট করে। সমস্ত উদ্দেশ্যগুলি কোনও সংমিশ্রণে আরএসএ কীগুলির জন্য সমর্থন করা দরকার।
  • ট্যাগ :: ডাইজেস্ট ডাইজেস্ট অ্যালগরিদমগুলি নির্দিষ্ট করে যা নতুন কী দিয়ে ব্যবহৃত হতে পারে। সমস্ত ডাইজেস্ট অ্যালগরিদমকে সমর্থন করে না এমন বাস্তবায়নগুলি অসমর্থিত ডাইজেস্ট অন্তর্ভুক্ত করে এমন মূল প্রজন্মের অনুরোধগুলি গ্রহণ করতে হবে। অসমর্থিত ডাইজেস্টগুলি ফেরত মূল বৈশিষ্ট্যগুলিতে "সফ্টওয়্যার-প্রয়োগকৃত" তালিকায় স্থাপন করা উচিত। এটি কারণ এই অন্যান্য ডাইজেস্টগুলির সাথে কীটি ব্যবহারযোগ্য, তবে হজম সফ্টওয়্যারটিতে সঞ্চালিত হয়। তারপরে হার্ডওয়্যারকে Digest::NONE দিয়ে অপারেশন সম্পাদন করার জন্য ডাকা হয়।
  • ট্যাগ :: প্যাডিং প্যাডিং মোডগুলি নির্দিষ্ট করে যা নতুন কী দিয়ে ব্যবহৃত হতে পারে। সমস্ত ডাইজেস্ট অ্যালগরিদমকে সমর্থন করে না এমন বাস্তবায়নগুলি PaddingMode::RSA_PSS এবং PaddingMode::RSA_OAEP সফ্টওয়্যার-প্রয়োগকৃত তালিকায় মূল বৈশিষ্ট্যগুলির তালিকায় রাখা উচিত যদি কোনও অসমর্থিত ডাইজেস্ট অ্যালগরিদম নির্দিষ্ট করা থাকে।

ইসিডিএসএ কী

কেবলমাত্র ট্যাগ :: কী_সাইজ একটি ইসিডিএসএ কী তৈরি করতে প্রয়োজনীয়। এটি ইসি গ্রুপ নির্বাচন করতে ব্যবহৃত হয়। সমর্থিত মানগুলি হ'ল 224, 256, 384 এবং 521, যা এনআইএসটি পি -224, পি -256, পি -384 এবং পি 521 কার্ভগুলি যথাক্রমে নির্দেশ করে।

ট্যাগ :: ডাইজেস্টও একটি দরকারী ইসিডিএসএ কী জন্য প্রয়োজনীয়, তবে প্রজন্মের জন্য এটি প্রয়োজন নয়।

এইএস কীগুলি

কেবলমাত্র ট্যাগ :: কী_সাইজ একটি এইএস কী তৈরি করতে প্রয়োজনীয়। যদি বাদ দেওয়া হয় তবে পদ্ধতিটি ErrorCode::UNSUPPORTED_KEY_SIZE । সমর্থিত মানগুলি 128 এবং 256, 192-বিট এইএস কীগুলির জন্য al চ্ছিক সমর্থন সহ।

নিম্নলিখিত প্যারামিটারগুলি এইএস কীগুলির জন্য বিশেষভাবে প্রাসঙ্গিক, তবে একটি উত্পন্ন করার জন্য প্রয়োজনীয় নয়:

  • Tag::BLOCK_MODE ব্লক মোডগুলি নির্দিষ্ট করে যার সাথে নতুন কী ব্যবহার করা যেতে পারে।
  • Tag::PADDING ব্যবহার করা যেতে পারে এমন প্যাডিং মোডগুলি নির্দিষ্ট করে। এটি কেবল ইসিবি এবং সিবিসি মোডের জন্য প্রাসঙ্গিক।

যদি জিসিএম ব্লক মোডটি নির্দিষ্ট করা থাকে তবে ট্যাগ :: MIN_MAC_LENGTH সরবরাহ করুন। যদি বাদ দেওয়া হয়, পদ্ধতিটি ErrorCode::MISSING_MIN_MAC_LENGTH । ট্যাগটির মান 8 এর একাধিক এবং 96 এবং 128 এর মধ্যে।

HMAC কী

এইচএমএসি কী প্রজন্মের জন্য নিম্নলিখিত পরামিতিগুলি প্রয়োজনীয়:

  • ট্যাগ :: কী_সাইজ বিটগুলিতে মূল আকার নির্দিষ্ট করে। 64 এর চেয়ে ছোট মান এবং 8 টির গুণ নয় এমন মানগুলি সমর্থিত নয়। 64 থেকে 512 পর্যন্ত 8 টির সমস্ত গুণগুলি সমর্থিত। বৃহত্তর মানগুলি সমর্থিত হতে পারে।
  • ট্যাগ :: MIN_MAC_LENGTH ম্যাকের ন্যূনতম দৈর্ঘ্য নির্দিষ্ট করে যা এই কী দিয়ে উত্পন্ন বা যাচাই করা যায়। মানটি 8 এর একাধিক এবং কমপক্ষে 64।
  • ট্যাগ :: ডাইজেস্ট কীটির জন্য ডাইজেস্ট অ্যালগরিদম নির্দিষ্ট করে। হুবহু একটি ডাইজেস্ট নির্দিষ্ট করা হয়েছে, অন্যথায় ErrorCode::UNSUPPORTED_DIGEST । যদি ডাইজেস্ট ট্রাস্টলেট দ্বারা সমর্থিত না হয় তবে ErrorCode::UNSUPPORTED_DIGEST

মূল বৈশিষ্ট্য

যদি বৈশিষ্ট্য যুক্তি অ-নুল হয় তবে generateKey সদ্য উত্পন্ন কী এর বৈশিষ্ট্যগুলি যথাযথভাবে হার্ডওয়্যার-প্রয়োগকৃত এবং সফ্টওয়্যার-প্রয়োগকৃত তালিকায় বিভক্ত করে। কোন বৈশিষ্ট্যগুলি কোন তালিকায় যায় তার বিবরণের জন্য getKeycharactericstics দেখুন। ফিরে আসা বৈশিষ্ট্যগুলিতে ট্যাগ :: অ্যাপ্লিকেশন_আইডি এবং ট্যাগ :: অ্যাপ্লিকেশন_ডাটা ব্যতীত মূল প্রজন্মের জন্য নির্দিষ্ট সমস্ত পরামিতি অন্তর্ভুক্ত রয়েছে। যদি এই ট্যাগগুলি কী প্যারামিটারগুলিতে অন্তর্ভুক্ত করা হয় তবে সেগুলি প্রত্যাবর্তিত বৈশিষ্ট্যগুলি থেকে সরানো হয় যাতে ফিরে আসা কী ব্লবটি পরীক্ষা করে তাদের মানগুলি সন্ধান করা সম্ভব না হয়। যাইহোক, এগুলি ক্রিপ্টোগ্রাফিকভাবে কী ব্লবের সাথে আবদ্ধ, যাতে কীটি ব্যবহার করা হলে সঠিক মানগুলি সরবরাহ না করা হয় তবে ব্যবহার ব্যর্থ হয়। একইভাবে, ট্যাগ :: রুট_অফ_ট্রাস্ট ক্রিপ্টোগ্রাফিকভাবে কীতে আবদ্ধ, তবে এটি কী তৈরি বা আমদানির সময় নির্দিষ্ট করা যায় না এবং কখনও ফিরে আসে না।

প্রদত্ত ট্যাগগুলি ছাড়াও, ট্রাস্টলেটটি কীওরিগিন :: KeyOrigin::GENERATED মান সহ ট্যাগ :: উত্স যুক্ত করে এবং কীটি যদি রোলব্যাক প্রতিরোধী হয় তবে

ট্যাগ :: রোলব্যাক_রেসিস্ট্যান্ট

রোলব্যাক প্রতিরোধ

রোলব্যাক প্রতিরোধের অর্থ হ'ল একবার কোনও কীটি মুছে ফেলুন বা মুছে ফেলার সাথে মুছে ফেলা হলে, এটি সুরক্ষিত হার্ডওয়্যার দ্বারা আর কখনও ব্যবহারযোগ্য হওয়ার জন্য গ্যারান্টিযুক্ত। রোলব্যাক প্রতিরোধ ছাড়াই বাস্তবায়নগুলি সাধারণত কলারের কাছে উত্পন্ন বা আমদানি করা কী উপাদানকে কী ব্লব, একটি এনক্রিপ্ট করা এবং প্রমাণীকরণযুক্ত ফর্ম হিসাবে ফিরিয়ে দেয়। কীস্টোর যখন কী ব্লবটি মুছে দেয়, তখন কীটি চলে যায়, তবে আক্রমণকারী যিনি পূর্বে কী উপাদান পুনরুদ্ধার করতে সক্ষম হয়েছেন তিনি সম্ভবত এটি ডিভাইসে পুনরুদ্ধার করতে পারেন।

একটি কী রোলব্যাক প্রতিরোধী যদি সুরক্ষিত হার্ডওয়্যার গ্যারান্টি দেয় যে মুছে ফেলা কীগুলি পরে পুনরুদ্ধার করা যায় না। এটি সাধারণত একটি বিশ্বস্ত স্থানে অতিরিক্ত কী মেটাডেটা সংরক্ষণ করে করা হয় যা আক্রমণকারী দ্বারা চালিত হতে পারে না। মোবাইল ডিভাইসে, এর জন্য ব্যবহৃত প্রক্রিয়াটি সাধারণত পুনরায় খেলানো সুরক্ষিত মেমরি ব্লক (আরপিএমবি) হয়। যেহেতু তৈরি হতে পারে এমন কীগুলির সংখ্যা মূলত সীমাহীন এবং রোলব্যাক প্রতিরোধের জন্য ব্যবহৃত বিশ্বস্ত স্টোরেজ আকারে সীমাবদ্ধ হতে পারে, নতুন কীটির জন্য রোলব্যাক প্রতিরোধের সরবরাহ করা না গেলেও এই পদ্ধতিটি সফল হওয়া দরকার। সেক্ষেত্রে, ট্যাগ :: রোলব্যাক_রেসিস্ট্যান্ট মূল বৈশিষ্ট্যগুলিতে যুক্ত করা উচিত নয়।

getkeycharactericstics

সংস্করণ : 1, 2, 3

এই ফাংশনটি কিমাস্টার 1 এ get_key_characteristics হিসাবে প্রবর্তিত হয়েছিল এবং কিমাস্টার 3 এ নামকরণ করা হয়েছিল।

প্রদত্ত কী এর সাথে সম্পর্কিত প্যারামিটার এবং অনুমোদনগুলি রিটার্ন করে, দুটি সেটে বিভক্ত: হার্ডওয়্যার-প্রয়োগকৃত এবং সফ্টওয়্যার-প্রয়োগ করা। এখানে বিবরণটি জেনারেটকি এবং আমদানিকি দ্বারা ফিরে আসা মূল বৈশিষ্ট্যগুলির তালিকায় সমানভাবে প্রযোজ্য।

যদি Tag::APPLICATION_ID কী প্রজন্ম বা আমদানির সময় সরবরাহ করা হয়, তবে clientId যুক্তিতে এই পদ্ধতিতে একই মান সরবরাহ করা হয়। অন্যথায়, পদ্ধতিটি ErrorCode::INVALID_KEY_BLOB । একইভাবে, যদি Tag::APPLICATION_DATA প্রজন্ম বা আমদানির সময় সরবরাহ করা হত তবে appData আর্গুমেন্টে এই পদ্ধতিতে একই মান সরবরাহ করা হয়।

এই পদ্ধতি দ্বারা ফিরে আসা বৈশিষ্ট্যগুলি নির্দিষ্ট কীটির ধরণ এবং ব্যবহার সম্পূর্ণরূপে বর্ণনা করে।

প্রদত্ত ট্যাগটি হার্ডওয়্যার-কার্যকর বা সফ্টওয়্যার-প্রয়োগকৃত তালিকার অন্তর্ভুক্ত কিনা তা সিদ্ধান্ত নেওয়ার সাধারণ নিয়মটি হ'ল যদি ট্যাগের অর্থটি সুরক্ষিত হার্ডওয়্যার দ্বারা পুরোপুরি আশ্বাস দেওয়া হয় তবে এটি হার্ডওয়্যার প্রয়োগ করা হয়। অন্যথায়, এটি সফ্টওয়্যার প্রয়োগ করা হয়েছে। নীচে নির্দিষ্ট ট্যাগগুলির একটি তালিকা রয়েছে যার সঠিক বরাদ্দটি অস্পষ্ট হতে পারে:

  • ট্যাগ :: অ্যালগরিদম , ট্যাগ :: কী_সাইজ , এবং ট্যাগ :: আরএসএ_পাবলিক_এক্সপোনেন্টটি কীটির অভ্যন্তরীণ বৈশিষ্ট্য। হার্ডওয়্যার দ্বারা সুরক্ষিত যে কোনও কী জন্য, এই ট্যাগগুলি হার্ডওয়্যার-প্রয়োগকৃত তালিকায় থাকবে।
  • ট্যাগ :: ডাইজেস্ট মানগুলি যা সুরক্ষিত হার্ডওয়্যার দ্বারা সমর্থিত হয় তা হার্ডওয়্যার-সমর্থিত তালিকায় স্থাপন করা হয়। অসমর্থিত ডাইজেস্টগুলি সফ্টওয়্যার-সমর্থিত তালিকায় যায়।
  • ট্যাগ :: প্যাডিং মানগুলি সাধারণত হার্ডওয়্যার-সমর্থিত তালিকায় যায়, যদি না কোনও সম্ভাবনা থাকে যে কোনও নির্দিষ্ট প্যাডিং মোড সফ্টওয়্যার দ্বারা সম্পাদন করতে হতে পারে। সেক্ষেত্রে তারা সফ্টওয়্যার-প্রয়োগকৃত তালিকায় যায়। আরএসএ কীগুলির জন্য এই জাতীয় সম্ভাবনা দেখা দেয় যা পিএসএস বা ওএইপি প্যাডিংয়ের অনুমতি দেয় যা ডাইজেস্ট অ্যালগরিদমগুলির সাথে যা সুরক্ষিত হার্ডওয়্যার দ্বারা সমর্থিত নয়।
  • ট্যাগ :: USER_SECURE_ID এবং ট্যাগ :: ব্যবহারকারী_আউথ_ টাইপ কেবলমাত্র হার্ডওয়্যার-প্রয়োগ করা হয় যদি ব্যবহারকারীর প্রমাণীকরণ হার্ডওয়্যার প্রয়োগ করা হয়। এটি সম্পাদন করার জন্য, কিমাস্টার ট্রাস্টলেট এবং প্রাসঙ্গিক প্রমাণীকরণ ট্রাস্টলেট উভয়ই সুরক্ষিত থাকতে হবে এবং প্রমাণীকরণ টোকেনগুলিতে স্বাক্ষর করতে এবং বৈধতা দেওয়ার জন্য ব্যবহৃত একটি গোপন এইচএমএসি কী ভাগ করতে হবে। বিশদ জন্য প্রমাণীকরণ পৃষ্ঠা দেখুন।
  • ট্যাগ :: অ্যাক্টিভ_ডেটটাইম , ট্যাগ :: অরিজিনেশন_এক্সপায়ার_ডেটটাইম , এবং ট্যাগ :: ব্যবহার_এক্সপায়ার_ডেটটাইম ট্যাগগুলির একটি যাচাইযোগ্য সঠিক প্রাচীর ঘড়িতে অ্যাক্সেস প্রয়োজন। সর্বাধিক সুরক্ষিত হার্ডওয়্যারটিতে কেবল অ-সুরক্ষিত ওএস দ্বারা সরবরাহিত সময়ের তথ্যে অ্যাক্সেস রয়েছে, যার অর্থ ট্যাগগুলি সফ্টওয়্যার প্রয়োগ করা হয়।
  • ট্যাগ :: উত্স সর্বদা হার্ডওয়্যার-বদ্ধ কীগুলির জন্য হার্ডওয়্যার তালিকায় থাকে। সেই তালিকায় এর উপস্থিতি হ'ল উচ্চতর স্তরগুলি নির্ধারণ করে যে কোনও কী হার্ডওয়্যার-সমর্থিত।

importKey

সংস্করণ : 1, 2, 3

এই ফাংশনটি কিমাস্টার 1 এ import_key হিসাবে প্রবর্তিত হয়েছিল এবং কীমাস্টার 3 এ নামকরণ করা হয়েছিল।

কীমাস্টার হার্ডওয়্যারে কী উপাদান আমদানি করে। মূল সংজ্ঞা পরামিতি এবং আউটপুট বৈশিষ্ট্যগুলি নিম্নলিখিত ব্যতিক্রম সহ generateKey হিসাবে একইভাবে পরিচালনা করা হয়:

  • ট্যাগ :: কী_সাইজ এবং ট্যাগ :: আরএসএ_পাবলিক_এক্সপোনেন্ট (কেবলমাত্র আরএসএ কীগুলির জন্য) ইনপুট পরামিতিগুলিতে প্রয়োজনীয় নয়। যদি সরবরাহ না করা হয় তবে ট্রান্সলেট সরবরাহ করা কী উপাদান থেকে মানগুলি ছাড় দেয় এবং মূল বৈশিষ্ট্যগুলিতে উপযুক্ত ট্যাগ এবং মান যুক্ত করে। যদি প্যারামিটারগুলি সরবরাহ করা হয় তবে ট্রাস্টলেট তাদের মূল উপাদানগুলির বিরুদ্ধে বৈধ করে। কোনও অমিল হওয়ার ঘটনায়, পদ্ধতিটি ErrorCode::IMPORT_PARAMETER_MISMATCH
  • ফিরে আসা ট্যাগ :: উত্সের KeyOrigin::IMPORTED একই মান রয়েছে।

রপ্তানি কী

সংস্করণ : 1, 2, 3

এই ফাংশনটি কিমাস্টার 1 -এ export_key হিসাবে চালু হয়েছিল এবং কীমাস্টার 3 এ নামকরণ করা হয়েছিল।

কিমাস্টার আরএসএ বা ইসি কী জুটি থেকে একটি পাবলিক কী রফতানি করে।

যদি Tag::APPLICATION_ID কী প্রজন্ম বা আমদানির সময় সরবরাহ করা হয়, তবে clientId যুক্তিতে এই পদ্ধতিতে একই মান সরবরাহ করা হয়। অন্যথায়, পদ্ধতিটি ErrorCode::INVALID_KEY_BLOB । একইভাবে, যদি Tag::APPLICATION_DATA প্রজন্ম বা আমদানির সময় সরবরাহ করা হত তবে appData আর্গুমেন্টে এই পদ্ধতিতে একই মান সরবরাহ করা হয়।

ডিলিট কী

সংস্করণ : 1, 2, 3

এই ফাংশনটি কেমাস্টার 1 এ delete_key হিসাবে চালু হয়েছিল এবং কীমাস্টার 3 -এ নামকরণ করা হয়েছিল।

প্রদত্ত কী মুছে ফেলেছে। এই পদ্ধতিটি al চ্ছিক, এবং কেবল কেমাস্টার মডিউলগুলি দ্বারা প্রয়োগ করা হয় যা রোলব্যাক প্রতিরোধের সরবরাহ করে।

মুছে ফেলা

সংস্করণ : 1, 2, 3

এই ফাংশনটি কিমাস্টার 1 এ delete_all_keys হিসাবে চালু হয়েছিল এবং কীমাস্টার 3 এ নামকরণ করা হয়েছিল।

সমস্ত কী মুছে দেয়। এই পদ্ধতিটি al চ্ছিক, এবং কেবল কেমাস্টার মডিউলগুলি দ্বারা প্রয়োগ করা হয় যা রোলব্যাক প্রতিরোধের সরবরাহ করে।

ডিস্ট্র্যাটেস্টেশনডস

সংস্করণ : 3

destroyAttestationIds() পদ্ধতিটি নতুন (al চ্ছিক, তবে উচ্চ প্রস্তাবিত) আইডি সত্যতা বৈশিষ্ট্যটি স্থায়ীভাবে অক্ষম করতে ব্যবহৃত হয়। যদি এই পদ্ধতিটি ডাকার পরে আইডি সত্যতা স্থায়ীভাবে অক্ষম করা হয়েছে তা নিশ্চিত করার কোনও উপায় না থাকলে, তবে আইডি প্রমাণীকরণ অবশ্যই মোটেও প্রয়োগ করা উচিত নয়, সেক্ষেত্রে এই পদ্ধতিটি কিছুই করে না এবং 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

যদি ট্যাগ :: অ্যাপ্লিকেশন_আইডি বা ট্যাগ :: অ্যাপ্লিকেশন_ডাটা কী জেনারেশন বা আমদানির সময় নির্দিষ্ট করা হয়েছিল, কলগুলি begin জন্য কলগুলি এই পদ্ধতিতে inParams যুক্তিতে মূলত নির্দিষ্ট মানগুলির সাথে সেই ট্যাগগুলিকে অন্তর্ভুক্ত করে।

অনুমোদন প্রয়োগ

এই পদ্ধতির সময়, যদি বাস্তবায়ন তাদের "হার্ডওয়্যার-প্রয়োগকৃত" বৈশিষ্ট্যগুলিতে রাখে এবং যদি অপারেশনটি কোনও পাবলিক কী অপারেশন না হয় তবে নিম্নলিখিত কী অনুমোদনগুলি ট্রাস্টলেট দ্বারা প্রয়োগ করা হয়। পাবলিক কী অপারেশনগুলি, যার অর্থ KeyPurpose::ENCRYPT এবং KeyPurpose::VERIFY , অনুমোদনের প্রয়োজনীয়তা পূরণ না হলেও সফল হতে দেওয়া হয়।

  • ট্যাগ :: উদ্দেশ্য : begin() কলটিতে উল্লিখিত উদ্দেশ্যটি মূল অনুমোদনের একটি উদ্দেশ্যগুলির সাথে মেলে, যদি না অনুরোধ করা অপারেশনটি পাবলিক কী অপারেশন না হয়। যদি নির্দিষ্ট উদ্দেশ্যটি মেলে না এবং অপারেশনটি কোনও পাবলিক কী অপারেশন না হয় তবে begin ErrorCode::UNSUPPORTED_PURPOSE । পাবলিক কী অপারেশনগুলি হ'ল অসম্পূর্ণ এনক্রিপশন বা যাচাইকরণ ক্রিয়াকলাপ।
  • ট্যাগ :: অ্যাক্টিভ_ডেটটাইম কেবল তখনই কার্যকর করা যেতে পারে যদি কোনও বিশ্বস্ত ইউটিসি সময় উত্স উপলব্ধ থাকে। যদি বর্তমান তারিখ এবং সময়টি ট্যাগ মানের পূর্বে হয় তবে পদ্ধতিটি ErrorCode::KEY_NOT_YET_VALID
  • ট্যাগ :: অরিজিনেশন_এক্সপায়ার_ডেটটাইম কেবল তখনই প্রয়োগ করা যেতে পারে যদি কোনও বিশ্বস্ত ইউটিসি সময় উত্স উপলব্ধ থাকে। যদি বর্তমান তারিখ এবং সময়টি ট্যাগ মানের চেয়ে পরে হয় এবং উদ্দেশ্যটি KeyPurpose::ENCRYPT বা KeyPurpose::SIGN , পদ্ধতিটি ErrorCode::KEY_EXPIRED ফেরত দেয়।
  • ট্যাগ :: ব্যবহার_এক্সপায়ার_ডেটটাইম কেবল তখনই প্রয়োগ করা যেতে পারে যদি কোনও বিশ্বস্ত ইউটিসি সময় উত্স উপলব্ধ থাকে। যদি বর্তমান তারিখ এবং সময়টি ট্যাগ মানের চেয়ে পরে থাকে এবং উদ্দেশ্যটি KeyPurpose::DECRYPT বা KeyPurpose::VERIFY , পদ্ধতিটি ErrorCode::KEY_EXPIRED ফেরত দেয়।
  • ট্যাগ :: Min_seconds_betine_ops একটি বিশ্বস্ত আপেক্ষিক টাইমার সাথে তুলনা করা হয় যা কীটির শেষ ব্যবহার নির্দেশ করে। যদি শেষ ব্যবহারের সময় প্লাস ট্যাগ মানটি বর্তমান সময়ের চেয়ে কম হয় তবে পদ্ধতিটি ErrorCode::KEY_RATE_LIMIT_EXCEEDED । গুরুত্বপূর্ণ বাস্তবায়নের বিশদগুলির জন্য ট্যাগ বিবরণ দেখুন।
  • ট্যাগ :: MAX_USES_PER_BOOT একটি সুরক্ষিত কাউন্টারটির সাথে তুলনা করা হয় যা বুট সময় থেকে কীটির ব্যবহারগুলি ট্র্যাক করে। যদি পূর্ববর্তী ব্যবহারগুলির গণনা ট্যাগ মানকে ছাড়িয়ে যায় তবে পদ্ধতিটি ErrorCode::KEY_MAX_OPS_EXCEEDED
  • ট্যাগ :: USER_SECURE_ID কেবলমাত্র এই পদ্ধতি দ্বারা প্রয়োগ করা হয় যদি কীটিতে ট্যাগ :: AUTH_TIMEOUT থাকে। যদি কীটির উভয়ই থাকে, তবে এই পদ্ধতিটি অবশ্যই inParams একটি বৈধ ট্যাগ :: auth_token গ্রহণ করতে হবে। লেখক টোকেন বৈধ হওয়ার জন্য, নিম্নলিখিত সমস্তগুলি সত্য হতে হবে:

    যদি এই শর্তগুলির মধ্যে কোনওটি পূরণ না হয় তবে পদ্ধতিটি ErrorCode::KEY_USER_NOT_AUTHENTICATED

  • ট্যাগ :: কলার_নোনস কলারকে একটি ননস বা ইনিশিয়ালাইজেশন ভেক্টর (iv) নির্দিষ্ট করার অনুমতি দেয়। যদি কীটিতে এই ট্যাগ না থাকে তবে কলার ট্যাগ সরবরাহ করেছেন :: এই পদ্ধতিতে ননস , ErrorCode::CALLER_NONCE_PROHIBITED ফিরে আসে।
  • ট্যাগ :: বুটলোডার_ কেবল নির্দিষ্ট করে যে কেবল বুটলোডার কীটি ব্যবহার করতে পারে। যদি এই পদ্ধতিটি বুটলোডারটি কার্যকর করার পরে কেবল বুটলোডার-কী দিয়ে ডাকা হয়, তবে এটি ErrorCode::INVALID_KEY_BLOB ফেরত দেয়।

আরএসএ কী

সমস্ত আরএসএ কী অপারেশনগুলি inParams ঠিক একটি প্যাডিং মোড নির্দিষ্ট করে। যদি একাধিকবার অনির্ধারিত বা নির্দিষ্ট করা হয় তবে পদ্ধতিটি ErrorCode::UNSUPPORTED_PADDING_MODE

আরএসএ স্বাক্ষর এবং যাচাইকরণ অপারেশনগুলির একটি ডাইজেস্টের প্রয়োজন, যেমন ওএইপি প্যাডিং মোডের সাথে আরএসএ এনক্রিপশন এবং ডিক্রিপশন অপারেশনগুলি করা হয়। এই কেসগুলির জন্য, কলার inParams ঠিক একটি ডাইজেস্ট নির্দিষ্ট করে। যদি একাধিকবার অনির্ধারিত বা নির্দিষ্ট করা হয় তবে পদ্ধতিটি ErrorCode::UNSUPPORTED_DIGEST

প্রাইভেট কী অপারেশনস ( KeyPurpose::DECYPT এবং KeyPurpose::SIGN ) ডাইজেস্ট এবং প্যাডিংয়ের অনুমোদনের প্রয়োজন, যার অর্থ মূল অনুমোদনের নির্দিষ্ট মানগুলি থাকা দরকার। যদি তা না হয় তবে পদ্ধতিটি ErrorCode::INCOMPATIBLE_DIGEST বা ErrorCode::INCOMPATIBLE_PADDING , যথাযথ হিসাবে। পাবলিক কী অপারেশনস ( KeyPurpose::ENCRYPT এবং KeyPurpose::VERIFY ) অননুমোদিত ডাইজেস্ট বা প্যাডিং সহ অনুমোদিত।

PaddingMode::NONE , সমস্ত আরএসএ প্যাডিং মোডগুলি কেবল নির্দিষ্ট উদ্দেশ্যে প্রযোজ্য। বিশেষত, 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 ইঙ্গিত দেয় না যে একটি "কাঁচা" আরএসএ অপারেশন করা হয়। যদি স্বাক্ষর বা যাচাই করা হয় তবে Digest::NONE নির্দিষ্ট করা হয়নি। আনপ্যাডেড এনক্রিপশন বা ডিক্রিপশনের জন্য কোনও ডাইজেস্টের প্রয়োজন নেই।
  • PaddingMode::RSA_PKCS1_1_5_SIGN প্যাডিংয়ের জন্য একটি ডাইজেস্ট প্রয়োজন। ডাইজেস্ট Digest::NONE , সেক্ষেত্রে কীমাস্টার বাস্তবায়ন একটি সঠিক পিকেসিএস#1 ভি 1.5 স্বাক্ষর কাঠামো তৈরি করতে পারে না, কারণ এটি ডাইজেস্টআইএনএফও কাঠামো যুক্ত করতে পারে না। পরিবর্তে, বাস্তবায়ন 0x00 || 0x01 || PS || 0x00 || M , যেখানে এম সরবরাহ করা বার্তা এবং পিএস হ'ল প্যাডিং স্ট্রিং। আরএসএ কীটির আকারটি বার্তার চেয়ে কমপক্ষে 11 বাইট বড় হতে হবে, অন্যথায় পদ্ধতিটি ErrorCode::INVALID_INPUT_LENGTH
  • PaddingMode::RSA_PKCS1_1_1_5_ENCRYPT প্যাডিংয়ের জন্য ডাইজেস্টের প্রয়োজন হয় না।
  • PaddingMode::RSA_PSS প্যাডিংয়ের জন্য একটি ডাইজেস্ট প্রয়োজন, যা Digest::NONE । যদি Digest::NONE থাকে তবে পদ্ধতিটি ErrorCode::INCOMPATIBLE_DIGEST দেয়। এছাড়াও, আরএসএ কীটির আকারটি ডাইজেস্টের আউটপুট আকারের চেয়ে কমপক্ষে 2 + ডি বাইট হতে হবে, যেখানে ডি ডাইজেস্টের আকার, বাইটে। অন্যথায় পদ্ধতিটি ErrorCode::INCOMPATIBLE_DIGEST । লবণের আকার D.
  • PaddingMode::RSA_OAEP প্যাডিংয়ের জন্য একটি ডাইজেস্ট প্রয়োজন, যা Digest::NONE । যদি Digest::NONE থাকে তবে পদ্ধতিটি ErrorCode::INCOMPATIBLE_DIGEST দেয়।

ইসি কী

ইসি কী অপারেশনগুলি inParams ঠিক একটি প্যাডিং মোড নির্দিষ্ট করে। যদি একাধিকবার অনির্ধারিত বা নির্দিষ্ট করা হয় তবে পদ্ধতিটি ErrorCode::UNSUPPORTED_PADDING_MODE

প্রাইভেট কী অপারেশনস ( KeyPurpose::SIGN ) ডাইজেস্ট এবং প্যাডিংয়ের অনুমোদনের প্রয়োজন, যার অর্থ মূল অনুমোদনের নির্দিষ্ট মানগুলি থাকা দরকার। যদি তা না হয় তবে ErrorCode::INCOMPATIBLE_DIGEST । Public key operations ( KeyPurpose::VERIFY ) are permitted with unauthorized digest or padding.

AES keys

AES key operations specify exactly one block mode and one padding mode in inParams . If either value is unspecified or specified more than once, return ErrorCode::UNSUPPORTED_BLOCK_MODE or ErrorCode::UNSUPPORTED_PADDING_MODE . The specified modes have to be authorized by the key, otherwise the method returns ErrorCode::INCOMPATIBLE_BLOCK_MODE or ErrorCode::INCOMPATIBLE_PADDING_MODE .

If the block mode is BlockMode::GCM , inParams specifies Tag::MAC_LENGTH , and the specified value is a multiple of 8 that is not greater than 128 or less than the value of Tag::MIN_MAC_LENGTH in the key authorizations. For MAC lengths greater than 128 or non-multiples of 8, return ErrorCode::UNSUPPORTED_MAC_LENGTH . For values less than the key's minimum length, return ErrorCode::INVALID_MAC_LENGTH .

If the block mode is BlockMode::GCM or BlockMode::CTR , the specified padding mode has to be PaddingMode::NONE . For BlockMode::ECB or BlockMode::CBC , the mode may be PaddingMode::NONE or PaddingMode::PKCS7 . If the padding mode doesn't meet these conditions, return ErrorCode::INCOMPATIBLE_PADDING_MODE .

If the block mode is BlockMode::CBC , BlockMode::CTR , or BlockMode::GCM , an initialization vector or nonce is needed. In most cases, callers shouldn't provide an IV or nonce. In that case, the Keymaster implementation generates a random IV or nonce and returns it via Tag::NONCE in outParams . CBC and CTR IVs are 16 bytes. GCM nonces are 12 bytes. If the key authorizations contain Tag::CALLER_NONCE , then the caller may provide an IV/nonce with Tag::NONCE in inParams . If a nonce is provided when Tag::CALLER_NONCE is not authorized, return ErrorCode::CALLER_NONCE_PROHIBITED . If a nonce is not provided when Tag::CALLER_NONCE is authorized, generate a random IV/nonce.

HMAC কী

HMAC key operations specify Tag::MAC_LENGTH in inParams . The specified value must be a multiple of 8 that is not greater than the digest length or less than the value of Tag::MIN_MAC_LENGTH in the key authorizations. For MAC lengths greater than the digest length or non-multiples of 8, return ErrorCode::UNSUPPORTED_MAC_LENGTH . For values less than the key's minimum length, return ErrorCode::INVALID_MAC_LENGTH .

আপডেট

Version : 1, 2, 3

Provides data to process in an ongoing operation started with begin . The operation is specified by the operationHandle parameter.

To provide more flexibility for buffer handling, implementations of this method have the option of consuming less data than was provided. The caller is responsible for looping to feed the rest of the data in subsequent calls. The amount of input consumed is returned in the inputConsumed parameter. Implementations always consume at least one byte, unless the operation cannot accept any more; if more than zero bytes are provided and zero bytes are consumed, callers consider this an error and abort the operation.

Implementations may also choose how much data to return, as a result of the update. This is only relevant for encryption and decryption operations, because signing and verification return no data until finish . Return data as early as possible, rather than buffer it.

ত্রুটি হ্যান্ডলিং

If this method returns an error code other than ErrorCode::OK , the operation is aborted and the operation handle is invalidated. Any future use of the handle, with this method, finish , or abort , returns ErrorCode::INVALID_OPERATION_HANDLE .

অনুমোদন প্রয়োগ

Key authorization enforcement is performed primarily in begin . The one exception is the case where the key has:

In this case, the key requires an authorization per operation, and the update method receives a Tag::AUTH_TOKEN in the inParams argument. HMAC verifies that the token is valid and contains a matching secure user ID, matches the key's Tag::USER_AUTH_TYPE , and contains the operation handle of the current operation in the challenge field. If these conditions aren't met, return ErrorCode::KEY_USER_NOT_AUTHENTICATED .

The caller provides the authentication token to every call to update and finish . The implementation need only validate the token once if it prefers.

RSA keys

For signing and verification operations with Digest::NONE , this method accepts the entire block to be signed or verified in a single update. It may not consume only a portion of the block. However, if the caller chooses to provide the data in multiple updates, this method accepts it. If the caller provides more data to sign than can be used (length of data exceeds RSA key size), return ErrorCode::INVALID_INPUT_LENGTH .

ECDSA keys

For signing and verification operations with Digest::NONE , this method accepts the entire block to be signed or verified in a single update. This method may not consume only a portion of the block.

However, if the caller chooses to provide the data in multiple updates, this method accepts it. If the caller provides more data to sign than can be used, the data is silently truncated. (This differs from the handling of excess data provided in similar RSA operations. The reason for this is compatibility with legacy clients.)

AES keys

AES GCM mode supports "associated authentication data," provided via the Tag::ASSOCIATED_DATA tag in the inParams argument. The associated data may be provided in repeated calls (important if the data is too large to send in a single block) but always precedes data to be encrypted or decrypted. An update call may receive both associated data and data to encrypt/decrypt, but subsequent updates may not include associated data. If the caller provides associated data to an update call after a call that includes data to encrypt/decrypt, return ErrorCode::INVALID_TAG .

For GCM encryption, the tag is appended to the ciphertext by finish . During decryption, the last Tag::MAC_LENGTH bytes of the data provided to the last update call is the tag. Since a given invocation of update cannot know if it's the last invocation, it processes all but the tag length and buffer the possible tag data during finish .

শেষ

Version : 1, 2, 3

Finishes an ongoing operation started with begin , processing all of the as-yet-unprocessed data provided by update (s).

This method is the last one called in an operation, so all processed data is returned.

Whether it completes successfully or returns an error, this method finalizes the operation and therefore invalidates the provided operation handle. Any future use of the handle, with this method or update or abort , returns ErrorCode::INVALID_OPERATION_HANDLE .

Signing operations return the signature as the output. Verification operations accept the signature in the signature parameter, and return no output.

অনুমোদন প্রয়োগ

Key authorization enforcement is performed primarily in begin . The one exception is the case where the key has:

In this case, the key requires an authorization per operation, and the update method receives a Tag::AUTH_TOKEN in the inParams argument. HMAC verifies that the token is valid and contains a matching secure user ID, matches the key's Tag::USER_AUTH_TYPE , and contains the operation handle of the current operation in the challenge field. If these conditions aren't met, return ErrorCode::KEY_USER_NOT_AUTHENTICATED .

The caller provides the authentication token to every call to update and finish . The implementation need only validate the token once if it prefers.

RSA keys

Some additional requirements, depending on the padding mode:

  • PaddingMode::NONE . For unpadded signing and encryption operations, if the provided data is shorter than the key, the data is be zero-padded on the left before signing/encryption. If the data is the same length as the key, but numerically larger, return ErrorCode::INVALID_ARGUMENT . For verification and decryption operations, the data must be exactly as long as the key. Otherwise, return ErrorCode::INVALID_INPUT_LENGTH.
  • PaddingMode::RSA_PSS . For PSS-padded signature operations, the PSS salt is the size of the message digest and randomly generated. The digest specified with Tag::DIGEST in inputParams on begin is used as the PSS digest algorithm, and as the MGF1 digest algorithm.
  • PaddingMode::RSA_OAEP . The digest specified with Tag::DIGEST in inputParams on begin is used as the OAEP digest algorithm, and SHA1 is used as the MGF1 digest algorithm.

ECDSA keys

If the data provided for unpadded signing or verification is too long, truncate it.

AES keys

Some additional conditions, depending on block mode:

  • BlockMode::ECB or BlockMode::CBC . If padding is PaddingMode::NONE and the data length is not a multiple of the AES block size, return ErrorCode::INVALID_INPUT_LENGTH . If padding is PaddingMode::PKCS7 , pad the data per the PKCS#7 specification. Note that PKCS#7 recommends adding an additional padding block if the data is a multiple of the block length.
  • BlockMode::GCM . During encryption, after processing all plaintext, compute the tag ( Tag::MAC_LENGTH bytes) and append it to the returned ciphertext. During decryption, process the last Tag::MAC_LENGTH bytes as the tag. If tag verification fails, return ErrorCode::VERIFICATION_FAILED .

গর্ভপাত

Version : 1, 2, 3

Aborts the in-progress operation. After the call to abort, return ErrorCode::INVALID_OPERATION_HANDLE for any subsequent use of the provided operation handle with update , finish , or abort .

get_supported_algorithms

সংস্করণ : 1

Returns the list of algorithms supported by the Keymaster hardware implementation. A software implementation returns an empty list; a hybrid implementation returns a list containing only the algorithms that are supported by hardware.

Keymaster 1 implementations support RSA, EC, AES and HMAC.

get_supported_block_modes

সংস্করণ : 1

Returns the list of AES block modes supported by the Keymaster hardware implementation for a specified algorithm and purpose.

For RSA, EC and HMAC, which are not block ciphers, the method returns an empty list for all valid purposes. Invalid purposes should cause the method to return ErrorCode::INVALID_PURPOSE .

Keymaster 1 implementations support ECB, CBC, CTR and GCM for AES encryption and decryption.

get_supported_padding_modes

সংস্করণ : 1

Returns the list of padding modes supported by the Keymaster hardware implementation for a specified algorithm and purpose.

HMAC and EC have no notion of padding so the method returns an empty list for all valid purposes. Invalid purposes should cause the method to return ErrorCode::INVALID_PURPOSE .

For RSA, Keymaster 1 implementations support:

  • Unpadded encryption, decryption, signing and verification. For unpadded encryption and signing, if the message is shorter than the public modulus, implementations must left-pad it with zeros. For unpadded decryption and verification, the input length must match the public modulus size.
  • PKCS#1 v1.5 encryption and signing padding modes
  • PSS with a minimum salt length of 20
  • OAEP

For AES in ECB and CBC modes, Keymaster 1 implementations support no padding and PKCS#7-padding. CTR and GCM modes support only no padding.

get_supported_digests

সংস্করণ : 1

Returns the list of digest modes supported by the Keymaster hardware implementation for a specified algorithm and purpose.

No AES modes support or require digesting, so the method returns an empty list for valid purposes.

Keymaster 1 implementations can implement a subset of the defined digests. Implementations provide SHA-256 and can provide MD5, SHA1, SHA-224, SHA-256, SHA384 and SHA512 (the full set of defined digests).

get_supported_import_formats

সংস্করণ : 1

Returns the list of import formats supported by the Keymaster hardware implementation of a specified algorithm.

Keymaster 1 implementations support the PKCS#8 format (without password protection) for importing RSA and EC key pairs, and support RAW import of AES and HMAC key material.

get_supported_export_formats

সংস্করণ : 1

Returns the list of export formats supported by the Keymaster hardware implementation of a specified algorithm.

Keymaster1 implementations support the X.509 format for exporting RSA and EC public keys. Export of private keys or asymmetric keys is not supported.

Historical functions

Keymaster 0

The following functions belong to the original Keymaster 0 definition. They were present in Keymaster 1 struct keymaster1_device_t. However, in Keymaster 1.0 they were not implemented, and their function pointers were set to NULL.

  • generate_keypair
  • import_keypair
  • get_keypair_public
  • delete_keypair
  • delete_all
  • sign_data
  • Verify_data

Keymaster 1

The following functions belong to the Keymaster 1 definition, but were removed in Keymaster 2, along with the Keymaster 0 functions listed above.

  • get_supported_algorithms
  • get_supported_block_modes
  • get_supported_padding_modes
  • get_supported_digests
  • get_supported_import_formats
  • get_supported_export_formats

Keymaster 2

The following functions belong to the Keymaster 2 definition, but were removed in Keymaster 3, along with the Keymaster 1 functions listed above.

  • configure