এই পৃষ্ঠায় Android 6.0 এবং তার উপরে কীস্টোরের ক্রিপ্টোগ্রাফিক বৈশিষ্ট্যগুলি সম্পর্কে তথ্য রয়েছে৷
ক্রিপ্টোগ্রাফিক আদিম
কীস্টোর নিম্নলিখিত বিভাগগুলির অপারেশন সরবরাহ করে:
- মূল প্রজন্ম
- অ্যাসিমেট্রিক কী আমদানি এবং রপ্তানি (কোন কী মোড়ানো নেই)
- কাঁচা সিমেট্রিক কী আমদানি (কোন কী মোড়ানো নেই)
- উপযুক্ত প্যাডিং মোড সহ অসমমিতিক এনক্রিপশন এবং ডিক্রিপশন
- হজম এবং উপযুক্ত প্যাডিং মোড সহ অসমমিত স্বাক্ষর এবং যাচাইকরণ
- একটি AEAD মোড সহ উপযুক্ত মোডে সিমেট্রিক এনক্রিপশন এবং ডিক্রিপশন
- সিমেট্রিক বার্তা প্রমাণীকরণ কোড তৈরি এবং যাচাইকরণ
প্রোটোকল উপাদান, যেমন উদ্দেশ্য, মোড এবং প্যাডিং, সেইসাথে অ্যাক্সেস কন্ট্রোল সীমাবদ্ধতাগুলি নির্দিষ্ট করা হয় যখন কীগুলি তৈরি বা আমদানি করা হয় এবং স্থায়ীভাবে কীটির সাথে আবদ্ধ থাকে, নিশ্চিত করে যে কীটি অন্য কোনও উপায়ে ব্যবহার করা যাবে না৷
উপরের তালিকা ছাড়াও, আরও একটি পরিষেবা রয়েছে যা কীমাস্টার বাস্তবায়নগুলি প্রদান করে, কিন্তু যা একটি API হিসাবে প্রকাশ করা হয় না: র্যান্ডম নম্বর জেনারেশন। এটি অভ্যন্তরীণভাবে কী, ইনিশিয়ালাইজেশন ভেক্টর (IV), এলোমেলো প্যাডিং এবং সুরক্ষিত প্রোটোকলের অন্যান্য উপাদানের জন্য ব্যবহৃত হয় যার জন্য এলোমেলোতা প্রয়োজন।
প্রয়োজনীয় আদিম
সমস্ত কীমাস্টার বাস্তবায়ন প্রদান করে:
- আরএসএ
- 2048, 3072, এবং 4096-বিট কী সমর্থন
- পাবলিক এক্সপোনেন্ট F4 (2^16+1) এর জন্য সমর্থন
- RSA স্বাক্ষর করার জন্য প্যাডিং মোড:
- RSASSA-PSS (
PaddingMode::RSA_PSS
) - RSASSA-PKCS1-v1_5 (
PaddingMode::RSA_PKCS1_1_5_SIGN
)
- RSASSA-PSS (
- RSA স্বাক্ষর করার জন্য ডাইজেস্ট মোড:
- SHA-256
- RSA এনক্রিপশন/ডিক্রিপশনের জন্য প্যাডিং মোড:
- আনপ্যাড
- RSAES-OAEP (
PaddingMode::RSA_OAEP
) - RSAES-PKCS1-v1_5 (
PaddingMode::RSA_PKCS1_1_5_ENCRYPT
)
- ইসিডিএসএ
- যথাক্রমে NIST P-224, P-256, P-384 এবং P-521 বক্ররেখা ব্যবহার করে 224, 256, 384 এবং 521-বিট কী সমর্থন সমর্থিত।
- ECDSA-এর জন্য ডাইজেস্ট মোড:
- কোন ডাইজেস্ট নেই (অপ্রচলিত, ভবিষ্যতে সরানো হবে)
- SHA-256
- AES
- 128 এবং 256-বিট কী সমর্থিত
- CBC , CTR, ECB, এবং GCM। GCM ইমপ্লিমেন্টেশন 96 বিট বা 96 বিট ছাড়া অন্য কোন দৈর্ঘ্যের ছোট ট্যাগ ব্যবহারের অনুমতি দেয় না।
- প্যাডিং মোড
PaddingMode::NONE
এবংPaddingMode::PKCS7
CBC এবং ECB মোডের জন্য সমর্থিত। কোন প্যাডিং ছাড়া, ইনপুট ব্লক আকারের একাধিক না হলে CBC বা ECB মোড এনক্রিপশন ব্যর্থ হয়।
- HMAC SHA-256 , অন্তত 32 বাইট পর্যন্ত যেকোনো কী সাইজ সহ।
SHA1 এবং SHA2 পরিবারের অন্যান্য সদস্যদের (SHA-224, SHA384 এবং SHA512) কীমাস্টার বাস্তবায়নের জন্য দৃঢ়ভাবে সুপারিশ করা হয়। হার্ডওয়্যার কীমাস্টার বাস্তবায়ন তাদের প্রদান না করলে কীস্টোর তাদের সফ্টওয়্যারে সরবরাহ করে।
অন্যান্য সিস্টেমের সাথে আন্তঃক্রিয়াশীলতার জন্য কিছু আদিমও সুপারিশ করা হয়:
- RSA-এর জন্য ছোট কী মাপ
- RSA-এর জন্য নির্বিচারে পাবলিক এক্সপোনেন্ট
কী অ্যাক্সেস নিয়ন্ত্রণ
হার্ডওয়্যার-ভিত্তিক কীগুলি যেগুলি ডিভাইস থেকে কখনও বের করা যায় না সেগুলি খুব বেশি নিরাপত্তা প্রদান করে না যদি আক্রমণকারী সেগুলিকে ইচ্ছামতো ব্যবহার করতে পারে (যদিও তারা বহিষ্কৃত করা যেতে পারে এমন কীগুলির চেয়ে বেশি নিরাপদ)। সুতরাং, এটি অত্যন্ত গুরুত্বপূর্ণ যে কীস্টোর অ্যাক্সেস নিয়ন্ত্রণগুলি প্রয়োগ করে৷
অ্যাক্সেস নিয়ন্ত্রণগুলিকে ট্যাগ/মান জোড়াগুলির একটি "অনুমোদন তালিকা" হিসাবে সংজ্ঞায়িত করা হয়৷ অনুমোদন ট্যাগগুলি হল 32-বিট পূর্ণসংখ্যা এবং মানগুলি বিভিন্ন ধরণের। কিছু ট্যাগ একাধিক মান নির্দিষ্ট করতে পুনরাবৃত্তি করা যেতে পারে. একটি ট্যাগ পুনরাবৃত্তি করা যাবে কিনা তা KeyMint (পূর্বে কীমাস্টার) HAL ইন্টারফেসে নির্দিষ্ট করা আছে। একটি কী তৈরি করা হলে, কলার একটি অনুমোদনের তালিকা নির্দিষ্ট করে। কীস্টোরের অন্তর্নিহিত কীমাস্টার বাস্তবায়ন কিছু অতিরিক্ত তথ্য নির্দিষ্ট করতে তালিকাটিকে পরিবর্তন করে, যেমন কীটির রোলব্যাক সুরক্ষা আছে কিনা এবং একটি "চূড়ান্ত" অনুমোদনের তালিকা ফেরত দেয়, যা প্রত্যাবর্তিত কী ব্লবে এনকোড করা হয়। চূড়ান্ত অনুমোদন তালিকা পরিবর্তন করা হলে কোনো ক্রিপ্টোগ্রাফিক অপারেশনের জন্য কী ব্যবহার করার কোনো প্রচেষ্টা ব্যর্থ হয়।
Keymaster 2 এবং তার আগের জন্য, সম্ভাব্য ট্যাগের সেটটি গণনা keymaster_authorization_tag_t
এ সংজ্ঞায়িত করা হয়েছে এবং স্থায়ীভাবে স্থির করা হয়েছে (যদিও এটি বাড়ানো যেতে পারে)। নামগুলিকে KM_TAG
দিয়ে উপসর্গ করা হয়েছে। ট্যাগ আইডির শীর্ষ চারটি বিট টাইপ নির্দেশ করতে ব্যবহৃত হয়।
Keymaster 3 KM_TAG
উপসর্গটিকে Tag::
এ পরিবর্তন করেছে।
সম্ভাব্য ধরনের অন্তর্ভুক্ত:
ENUM
: অনেক ট্যাগের মান গণনায় সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, TAG::PURPOSE
এর সম্ভাব্য মান enum keymaster_purpose_t
এ সংজ্ঞায়িত করা হয়েছে।
ENUM_REP
: ENUM
এর মতোই, ব্যতীত যে ট্যাগটি একটি অনুমোদন তালিকায় পুনরাবৃত্তি করা যেতে পারে৷ পুনরাবৃত্তি একাধিক অনুমোদিত মান নির্দেশ করে। উদাহরণ স্বরূপ, একটি এনক্রিপশন কী-তে সম্ভবত KeyPurpose::ENCRYPT
এবং KeyPurpose::DECRYPT
রয়েছে।
UINT
: 32-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা। উদাহরণ: TAG::KEY_SIZE
UINT_REP
: UINT
এর মতোই, ট্যাগটি অনুমোদনের তালিকায় পুনরাবৃত্তি করা যেতে পারে। পুনরাবৃত্তি একাধিক অনুমোদিত মান নির্দেশ করে।
ULONG
: 64-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা। উদাহরণ: TAG::RSA_PUBLIC_EXPONENT
ULONG_REP
: ULONG
এর মতোই, ট্যাগটি অনুমোদনের তালিকায় পুনরাবৃত্তি করা যেতে পারে। পুনরাবৃত্তি একাধিক অনুমোদিত মান নির্দেশ করে।
DATE
: তারিখ/সময়ের মান, 1 জানুয়ারী, 1970 থেকে মিলিসেকেন্ড হিসাবে প্রকাশ করা হয়েছে। উদাহরণ: TAG::PRIVKEY_EXPIRE_DATETIME
BOOL
: সত্য বা মিথ্যা। BOOL
টাইপের একটি ট্যাগ যদি ট্যাগটি উপস্থিত না থাকে তবে "মিথ্যা" এবং উপস্থিত থাকলে "সত্য" বলে ধরে নেওয়া হয়। উদাহরণ: TAG::ROLLBACK_RESISTANT
BIGNUM
: ইচ্ছামত-দৈর্ঘ্যের পূর্ণসংখ্যা, বিগ-এন্ডিয়ান ক্রমে বাইট অ্যারে হিসাবে প্রকাশ করা হয়। উদাহরণ: TAG::RSA_PUBLIC_EXPONENT
BYTES
: বাইটের একটি ক্রম। উদাহরণ: TAG::ROOT_OF_TRUST
হার্ডওয়্যার বনাম সফ্টওয়্যার প্রয়োগ
সমস্ত সুরক্ষিত হার্ডওয়্যার বাস্তবায়নে একই বৈশিষ্ট্য থাকে না। বিভিন্ন পদ্ধতির সমর্থন করার জন্য, কীমাস্টার যথাক্রমে সুরক্ষিত এবং অ-নিরাপদ বিশ্ব অ্যাক্সেস কন্ট্রোল এনফোর্সমেন্ট বা হার্ডওয়্যার এবং সফ্টওয়্যার প্রয়োগের মধ্যে পার্থক্য করে।
সমস্ত বাস্তবায়ন:
- সমস্ত অনুমোদনের সঠিক মিল (বাস্তবায়ন নয়) প্রয়োগ করুন। কী ব্লব-এ অনুমোদনের তালিকাগুলি হুবহু মেলে কী জেনারেশনের সময় প্রত্যাবর্তিত অনুমোদনের সাথে, অর্ডার করা সহ। কোনো অমিল একটি ত্রুটি ডায়গনিস্টিক কারণ.
- অনুমোদন ঘোষণা করুন যার শব্দার্থিক মান প্রয়োগ করা হয়।
হার্ডওয়্যার-প্রবর্তিত অনুমোদন ঘোষণা করার জন্য API প্রক্রিয়াটি keymaster_key_characteristics_t
কাঠামোতে রয়েছে। এটি অনুমোদন তালিকাকে দুটি উপ-তালিকায় ভাগ করে, hw_enforced
এবং sw_enforced
। সুরক্ষিত হার্ডওয়্যার প্রতিটিতে যথাযথ মান স্থাপনের জন্য দায়ী, এটি কী প্রয়োগ করতে পারে তার উপর ভিত্তি করে।
এছাড়াও, কীস্টোর সমস্ত অনুমোদনের সফ্টওয়্যার-ভিত্তিক প্রয়োগ করে, সেগুলি সুরক্ষিত হার্ডওয়্যার দ্বারা প্রয়োগ করা হোক বা না হোক।
উদাহরণস্বরূপ, একটি TrustZone-ভিত্তিক বাস্তবায়ন বিবেচনা করুন যা কী মেয়াদ শেষ হওয়া সমর্থন করে না। মেয়াদ শেষ হওয়ার তারিখ সহ একটি কী এখনও তৈরি করা হতে পারে। এই কীটির অনুমোদনের তালিকায় মেয়াদ শেষ হওয়ার তারিখ সহ TAG::ORIGINATION_EXPIRE_DATETIME
ট্যাগ অন্তর্ভুক্ত রয়েছে। মূল বৈশিষ্ট্যগুলির জন্য কীস্টোরের কাছে একটি অনুরোধ sw_enforced
তালিকায় এই ট্যাগটি খুঁজে পায় এবং নিরাপদ হার্ডওয়্যার মেয়াদ শেষ হওয়ার প্রয়োজনীয়তা প্রয়োগ করে না। যাইহোক, মেয়াদ শেষ হওয়ার পরে কী ব্যবহার করার প্রচেষ্টা কীস্টোর দ্বারা প্রত্যাখ্যান করা হয়।
যদি ডিভাইসটিকে নিরাপদ হার্ডওয়্যার দিয়ে আপগ্রেড করা হয় যা মেয়াদ শেষ হওয়াকে সমর্থন করে, তাহলে মূল বৈশিষ্ট্যগুলির জন্য একটি অনুরোধ hw_enforced
তালিকায় TAG::ORIGINATION_EXPIRE_DATETIME
খুঁজে পায় এবং মেয়াদ শেষ হওয়ার পরে কী ব্যবহার করার চেষ্টা ব্যর্থ হয় এমনকি যদি কীস্টোরটি বিকৃত বা বাইপাস করা হয়।
কীগুলি হার্ডওয়্যার-সমর্থিত কিনা তা নির্ধারণ সম্পর্কে আরও তথ্যের জন্য, কী প্রত্যয়ন দেখুন।
ক্রিপ্টোগ্রাফিক বার্তা নির্মাণ অনুমোদন
নিম্নলিখিত ট্যাগগুলি সংশ্লিষ্ট কী ব্যবহার করে অপারেশনগুলির ক্রিপ্টোগ্রাফিক বৈশিষ্ট্যগুলি সংজ্ঞায়িত করতে ব্যবহৃত হয়: TAG::ALGORITHM
, TAG::KEY_SIZE
, TAG::BLOCK_MODE
, TAG::PADDING
, TAG::CALLER_NONCE
, এবং TAG::DIGEST
TAG::PADDING
, TAG::DIGEST
, এবং PaddingMode::BLOCK_MODE
পুনরাবৃত্তিযোগ্য, যার অর্থ একাধিক মান একটি একক কী এর সাথে যুক্ত করা যেতে পারে এবং যে মানটি ব্যবহার করা হবে তা অপারেশনের সময় নির্দিষ্ট করা হয়।
উদ্দেশ্য
কীগুলির উদ্দেশ্যগুলির একটি সংযুক্ত সেট রয়েছে, ট্যাগ TAG::PURPOSE
সাথে এক বা একাধিক অনুমোদন এন্ট্রি হিসাবে প্রকাশ করা হয়, যা সেগুলি কীভাবে ব্যবহার করা যেতে পারে তা সংজ্ঞায়িত করে। উদ্দেশ্যগুলি হল:
-
KeyPurpose::ENCRYPT
-
KeyPurpose::DECRYPT
-
KeyPurpose::SIGN
-
KeyPurpose::VERIFY
যেকোন কীর এই উদ্দেশ্যগুলির যেকোনো উপসেট থাকতে পারে। মনে রাখবেন কিছু সংমিশ্রণ নিরাপত্তা সমস্যা তৈরি করে। উদাহরণস্বরূপ, একটি RSA কী যা এনক্রিপ্ট এবং সাইন উভয়ের জন্য ব্যবহার করা যেতে পারে এমন আক্রমণকারীকে অনুমতি দেয় যে সিস্টেমটিকে স্বাক্ষর তৈরি করতে নির্বিচারে ডেটা ডিক্রিপ্ট করতে রাজি করতে পারে।
আমদানি ও রপ্তানি
কীমাস্টার শুধুমাত্র X.509 ফর্ম্যাটে, পাবলিক কী রপ্তানি সমর্থন করে এবং এর আমদানি সমর্থন করে:
- পাসওয়ার্ড-ভিত্তিক এনক্রিপশন ছাড়াই DER-এনকোডেড PKCS#8 ফর্ম্যাটে পাবলিক এবং প্রাইভেট কী জোড়া
- কাঁচা বাইট হিসাবে সিমেট্রিক কী
নিরাপদে তৈরি করা কী থেকে আমদানি করা কীগুলিকে আলাদা করা যায় তা নিশ্চিত করতে, TAG::ORIGIN
উপযুক্ত কী অনুমোদনের তালিকায় অন্তর্ভুক্ত করা হয়েছে। উদাহরণস্বরূপ, যদি সুরক্ষিত হার্ডওয়্যারে একটি কী তৈরি করা হয়, TAG::ORIGIN
মানের সাথে KeyOrigin::GENERATED
কী বৈশিষ্ট্যগুলির hw_enforced
তালিকায় পাওয়া যায়, যখন নিরাপদ হার্ডওয়্যারে আমদানি করা একটি কীটির মান KeyOrigin::IMPORTED
আছে।
ব্যবহারকারীর প্রমাণীকরণ
সুরক্ষিত কীমাস্টার বাস্তবায়ন ব্যবহারকারীর প্রমাণীকরণ বাস্তবায়ন করে না, তবে অন্যান্য বিশ্বস্ত অ্যাপগুলির উপর নির্ভর করে যা করে। এই অ্যাপগুলি যে ইন্টারফেসটি প্রয়োগ করে তার জন্য, গেটকিপার পৃষ্ঠাটি দেখুন।
ব্যবহারকারীর প্রমাণীকরণের প্রয়োজনীয়তা দুটি সেট ট্যাগের মাধ্যমে নির্দিষ্ট করা হয়। প্রথম সেটটি নির্দেশ করে কোন ব্যবহারকারী কী ব্যবহার করতে পারে:
-
TAG::ALL_USERS
নির্দেশ করে কীটি সকল ব্যবহারকারীর দ্বারা ব্যবহারযোগ্য। উপস্থিত থাকলে,TAG::USER_ID
এবংTAG::USER_SECURE_ID
উপস্থিত নেই৷ -
TAG::USER_ID
একটি সাংখ্যিক মান রয়েছে যা অনুমোদিত ব্যবহারকারীর ID উল্লেখ করে। মনে রাখবেন যে এটি অ্যান্ড্রয়েড ব্যবহারকারী আইডি (মাল্টি-ইউজারের জন্য), অ্যাপ ইউআইডি নয় এবং এটি শুধুমাত্র অ-সুরক্ষিত সফ্টওয়্যার দ্বারা প্রয়োগ করা হয়। উপস্থিত থাকলে,TAG::ALL_USERS
উপস্থিত নেই৷ -
TAG::USER_SECURE_ID
একটি 64-বিট সাংখ্যিক মান রয়েছে যা সুরক্ষিত ব্যবহারকারী আইডি নির্দিষ্ট করে যা কীটির ব্যবহার আনলক করার জন্য একটি সুরক্ষিত প্রমাণীকরণ টোকেনে দেওয়া হয়। যদি পুনরাবৃত্তি করা হয়, তাহলে কীটি ব্যবহার করা যেতে পারে যদি একটি সুরক্ষিত প্রমাণীকরণ টোকেনে যে কোনো মান প্রদান করা হয়।
দ্বিতীয় সেটটি নির্দেশ করে যে ব্যবহারকারীকে কখন প্রমাণীকরণ করতে হবে। যদি এই ট্যাগগুলির একটিও উপস্থিত না থাকে তবে TAG::USER_SECURE_ID
হয়, কীটির প্রতিটি ব্যবহারের জন্য প্রমাণীকরণ প্রয়োজন৷
-
NO_AUTHENTICATION_REQUIRED
নির্দেশ করে যে কোনও ব্যবহারকারীর প্রমাণীকরণের প্রয়োজন নেই, যদিও কী এখনওTAG::USER_ID
দ্বারা নির্দিষ্ট করা ব্যবহারকারীদের মতো চলমান অ্যাপগুলির দ্বারা ব্যবহার করা যেতে পারে। -
TAG::AUTH_TIMEOUT
হল একটি সাংখ্যিক মান যা সেকেন্ডে নির্দিষ্ট করে, কী ব্যবহার অনুমোদন করার জন্য ব্যবহারকারীর প্রমাণীকরণ কতটা তাজা হতে হবে। এটি শুধুমাত্র ব্যক্তিগত/গোপন কী অপারেশনের ক্ষেত্রে প্রযোজ্য। পাবলিক কী অপারেশনের জন্য প্রমাণীকরণের প্রয়োজন হয় না। টাইমআউট রিবুট অতিক্রম করে না; রিবুট করার পরে, সমস্ত কী কখনই প্রমাণিত হয় না। বুট প্রতি একবার প্রমাণীকরণের প্রয়োজন হয় তা নির্দেশ করার জন্য টাইমআউট একটি বড় মান সেট করা যেতে পারে (2^32 সেকেন্ড হল ~136 বছর; সম্ভবত Android ডিভাইসগুলি তার থেকে বেশিবার রিবুট করা হয়)।
একটি আনলক ডিভাইস প্রয়োজন
TAG::UNLOCKED_DEVICE_REQUIRED
সহ কীগুলি শুধুমাত্র ডিভাইসটি আনলক থাকা অবস্থায় ব্যবহারযোগ্য৷ বিশদ শব্দার্থবিদ্যার জন্য, KeyProtection.Builder#setUnlockedDeviceRequired(boolean)
দেখুন।
UNLOCKED_DEVICE_REQUIRED
কীস্টোর দ্বারা প্রয়োগ করা হয়েছে, কীমাস্টার দ্বারা নয়৷ যাইহোক, Android 12 এবং উচ্চতর সংস্করণে, ডিভাইসটি লক থাকা অবস্থায় কীস্টোর ক্রিপ্টোগ্রাফিকভাবে UNLOCKED_DEVICE_REQUIRED
কীগুলিকে সুরক্ষিত করে তা নিশ্চিত করার জন্য, বেশিরভাগ ক্ষেত্রে, ডিভাইসটি লক থাকা অবস্থায় কীস্টোরের সাথে আপস করা হলেও সেগুলি ব্যবহার করা যাবে না।
এটি অর্জন করার জন্য, কীস্টোর সমস্ত UNLOCKED_DEVICE_REQUIRED
কীগুলিকে তার ডাটাবেসে সংরক্ষণ করার আগে "সুপারএনক্রিপ্ট" করে এবং যখন সম্ভব এটি সুপারএনক্রিপশন কীগুলি (সুপার কীগুলি) সুরক্ষিত করে যখন ডিভাইসটি এমনভাবে লক থাকে যাতে সেগুলি শুধুমাত্র একটি সফল ডিভাইস আনলকের মাধ্যমে পুনরুদ্ধার করা যায়৷ ("সুপারএনক্রিপশন" শব্দটি ব্যবহার করা হয়েছে কারণ এনক্রিপশনের এই স্তরটি এনক্রিপশনের স্তর ছাড়াও প্রয়োগ করা হয়েছে যা কীমাস্টার ইতিমধ্যেই সমস্ত কীগুলিতে প্রযোজ্য।)
প্রতিটি ব্যবহারকারীর (প্রোফাইল সহ) UNLOCKED_DEVICE_REQUIRED
এর সাথে যুক্ত দুটি সুপার কী রয়েছে:
- UnlockedDevice প্রয়োজনীয় সিমেট্রিক সুপার কী। এটি একটি AES-256-GCM কী। এটি
UNLOCKED_DEVICE_REQUIRED
কীগুলিকে এনক্রিপ্ট করে যা ব্যবহারকারীর জন্য ডিভাইসটি আনলক করার সময় আমদানি বা তৈরি করা হয়৷ - UnlockedDevice-এর প্রয়োজনীয় অপ্রতিসম সুপার কী। এটি একটি ECDH P-521 কী জোড়া৷ এটি
UNLOCKED_DEVICE_REQUIRED
কীগুলিকে এনক্রিপ্ট করে যা ব্যবহারকারীর জন্য ডিভাইসটি লক থাকা অবস্থায় আমদানি বা তৈরি করা হয়৷ এই অ্যাসিমেট্রিক কী দিয়ে এনক্রিপ্ট করা কীগুলিকে প্রথম ব্যবহারে সিমেট্রিক কী দিয়ে পুনরায় এনক্রিপ্ট করা হয় (যা শুধুমাত্র ডিভাইসটি আনলক থাকা অবস্থায় ঘটতে পারে)।
কীস্টোর ব্যবহারকারী তৈরির সময় এই সুপার কীগুলি তৈরি করে এবং ব্যবহারকারীর সিন্থেটিক পাসওয়ার্ড দ্বারা এনক্রিপ্ট করা তার ডাটাবেসে সংরক্ষণ করে। এটি তাদের পিন, প্যাটার্ন বা পাসওয়ার্ড সমতুল্য ব্যবহার করে পুনরুদ্ধার করার অনুমতি দেয়।
কীস্টোর মেমরিতে এই সুপার কীগুলিও ক্যাশ করে, এটিকে UNLOCKED_DEVICE_REQUIRED
কীগুলিতে কাজ করার অনুমতি দেয়৷ যাইহোক, এটি ব্যবহারকারীর জন্য ডিভাইসটি আনলক করার সময় শুধুমাত্র এই কীগুলির গোপন অংশগুলি ক্যাশে করার চেষ্টা করে৷ যখন ডিভাইসটি ব্যবহারকারীর জন্য লক করা থাকে, সম্ভব হলে কীস্টোর এই সুপার কীগুলির গোপন অংশগুলির ক্যাশে করা অনুলিপি শূন্য করে দেয়। বিশেষভাবে, যখন ব্যবহারকারীর জন্য ডিভাইসটি লক করা থাকে, তখন কীস্টোর ব্যবহারকারীর UnlockedDevice প্রয়োজনীয় সুপার কীগুলির জন্য তিনটি সুরক্ষা স্তরের একটি নির্বাচন করে এবং প্রয়োগ করে:
- যদি ব্যবহারকারীর শুধুমাত্র পিন, প্যাটার্ন বা পাসওয়ার্ড সক্রিয় থাকে, তাহলে কীস্টোর তার ক্যাশে করা সুপার কীগুলির গোপন অংশগুলিকে শূন্য করে দেয়। এটি ডাটাবেসের এনক্রিপ্ট করা অনুলিপির মাধ্যমে সুপার কীগুলিকে পুনরুদ্ধারযোগ্য করে তোলে যা শুধুমাত্র পিন, প্যাটার্ন বা পাসওয়ার্ডের সমতুল্য দ্বারা ডিক্রিপ্ট করা যায়।
- যদি ব্যবহারকারীর শুধুমাত্র ক্লাস 3 ("স্ট্রং") বায়োমেট্রিক্স এবং পিন, প্যাটার্ন বা পাসওয়ার্ড সক্রিয় থাকে, তাহলে কিস্টোর পিন, প্যাটার্ন বা পাসওয়ার্ডের সমতুল্য বিকল্প হিসাবে ব্যবহারকারীর নথিভুক্ত ক্লাস 3 বায়োমেট্রিক্স (সাধারণত ফিঙ্গারপ্রিন্ট) যেকোনও দ্বারা সুপার কীগুলি পুনরুদ্ধারযোগ্য করার ব্যবস্থা করে। এটি করার জন্য, এটি একটি নতুন AES-256-GCM কী তৈরি করে, এটির সাহায্যে সুপার কীগুলির গোপন অংশগুলিকে এনক্রিপ্ট করে, AES-256-GCM কীটিকে একটি বায়োমেট্রিক-বাউন্ড কী হিসাবে কীমাস্টারে আমদানি করে যার জন্য বায়োমেট্রিক প্রমাণীকরণের প্রয়োজন হয় সফল হওয়ার জন্য, শেষ 15-এর মধ্যে এই সমস্ত সহ-পাঠ্যের দ্বিতীয় অংশে চাবি
- ব্যবহারকারীর যদি ক্লাস 1 ("সুবিধা") বায়োমেট্রিক, ক্লাস 2 ("দুর্বল") বায়োমেট্রিক, বা সক্রিয় আনলক ট্রাস্ট এজেন্ট সক্রিয় থাকে, তাহলে কীস্টোর সুপার কীগুলি প্লেইনটেক্সট ক্যাশে রাখে৷ এই ক্ষেত্রে,
UNLOCKED_DEVICE_REQUIRED
কীগুলির জন্য ক্রিপ্টোগ্রাফিক নিরাপত্তা প্রদান করা হয় না৷ ব্যবহারকারীরা এই আনলক পদ্ধতিগুলি সক্রিয় না করে এই কম নিরাপদ ফলব্যাক এড়াতে পারে৷ এই বিভাগগুলির মধ্যে সবচেয়ে সাধারণ আনলক পদ্ধতিগুলি হল অনেকগুলি ডিভাইসে ফেস আনলক এবং একটি জোড়া স্মার্টওয়াচ দিয়ে আনলক করা৷
ডিভাইসটি ব্যবহারকারীর জন্য আনলক করা হলে, কীস্টোর সম্ভব হলে ব্যবহারকারীর UnlockedDeviceRequired সুপার কীগুলি পুনরুদ্ধার করে। পিন, প্যাটার্ন বা পাসওয়ার্ডের সমতুল্য আনলকের জন্য, এটি ডাটাবেসে সংরক্ষিত এই কীগুলির অনুলিপি ডিক্রিপ্ট করে। অন্যথায়, এটি একটি বায়োমেট্রিক-বাউন্ড কী দিয়ে এনক্রিপ্ট করা এই কীগুলির একটি অনুলিপি সংরক্ষণ করেছে কিনা তা পরীক্ষা করে এবং যদি তা ডিক্রিপ্ট করার চেষ্টা করে। এটি শুধুমাত্র তখনই সফল হয় যখন ব্যবহারকারী সফলভাবে শেষ 15 সেকেন্ডের মধ্যে একটি ক্লাস 3 বায়োমেট্রিক দিয়ে প্রমাণীকরণ করেন, যা Keymaster (কীস্টোর নয়) দ্বারা প্রয়োগ করা হয়।
ক্লায়েন্ট বাঁধাই
ক্লায়েন্ট বাইন্ডিং, একটি নির্দিষ্ট ক্লায়েন্ট অ্যাপের সাথে একটি কী এর অ্যাসোসিয়েশন, একটি ঐচ্ছিক ক্লায়েন্ট আইডি এবং কিছু ঐচ্ছিক ক্লায়েন্ট ডেটা (যথাক্রমে TAG::APPLICATION_ID
এবং TAG::APPLICATION_DATA
) এর মাধ্যমে সম্পন্ন হয়। কীস্টোর এই মানগুলিকে অস্বচ্ছ ব্লব হিসাবে বিবেচনা করে, শুধুমাত্র নিশ্চিত করে যে কী জেনারেশন/ইমপোর্টের সময় উপস্থাপিত একই ব্লবগুলি প্রতিটি ব্যবহারের জন্য উপস্থাপিত হয় এবং বাইট-ফর-বাইট অভিন্ন। ক্লায়েন্ট বাইন্ডিং ডেটা কীমাস্টার দ্বারা ফেরত দেওয়া হয় না। চাবিটি ব্যবহার করার জন্য কলকারীকে এটি জানতে হবে।
এই বৈশিষ্ট্যটি অ্যাপের সংস্পর্শে আসে না।
মেয়াদ শেষ
কীস্টোর তারিখ অনুসারে কী ব্যবহার সীমাবদ্ধ করা সমর্থন করে। বৈধতার মূল সূচনা এবং কী মেয়াদ শেষ হওয়াগুলি একটি কী-এর সাথে যুক্ত হতে পারে এবং বর্তমান তারিখ/সময় বৈধ সীমার বাইরে থাকলে কী-মাস্টার মূল ক্রিয়াকলাপগুলি সম্পাদন করতে অস্বীকার করে। মূল বৈধতার পরিসর TAG::ACTIVE_DATETIME
, TAG::ORIGINATION_EXPIRE_DATETIME
, এবং TAG::USAGE_EXPIRE_DATETIME
ট্যাগগুলির সাথে নির্দিষ্ট করা হয়েছে। "উৎপত্তি" এবং "ব্যবহার" এর মধ্যে পার্থক্য একটি নতুন সাইফারটেক্সট/স্বাক্ষর/ইত্যাদি "উৎপত্তি" করতে বা বিদ্যমান সাইফারটেক্সট/স্বাক্ষর/ইত্যাদি "ব্যবহার" করতে ব্যবহার করা হচ্ছে কিনা তার উপর ভিত্তি করে। মনে রাখবেন যে এই পার্থক্যটি অ্যাপগুলিতে প্রকাশ করা হয় না।
TAG::ACTIVE_DATETIME
, TAG::ORIGINATION_EXPIRE_DATETIME
, এবং TAG::USAGE_EXPIRE_DATETIME
ট্যাগগুলি ঐচ্ছিক৷ যদি ট্যাগগুলি অনুপস্থিত থাকে তবে ধারণা করা হয় যে প্রশ্নে থাকা কীটি সর্বদা বার্তাগুলিকে ডিক্রিপ্ট/যাচাই করতে ব্যবহার করা যেতে পারে।
যেহেতু প্রাচীর-ঘড়ির সময় অ-সুরক্ষিত বিশ্ব দ্বারা সরবরাহ করা হয়, এটি অসম্ভাব্য যে মেয়াদ-সম্পর্কিত ট্যাগগুলি হার্ডওয়্যার-প্রবর্তিত তালিকায় রয়েছে৷ মেয়াদোত্তীর্ণের হার্ডওয়্যার প্রয়োগের জন্য প্রয়োজন হবে নিরাপদ বিশ্ব যেকোনভাবে বিশ্বস্ত সময় এবং ডেটা পাবে, উদাহরণস্বরূপ, একটি বিশ্বস্ত দূরবর্তী টাইমসার্ভারের সাথে চ্যালেঞ্জ প্রতিক্রিয়া প্রোটোকলের মাধ্যমে।
বিশ্বাস বাঁধাই মূল
কীস্টোরের জন্য বিশ্বাসের মূলে আবদ্ধ থাকা কীগুলির প্রয়োজন, যা একটি বিটস্ট্রিং যা কি-মাস্টার সুরক্ষিত হার্ডওয়্যারকে স্টার্টআপের সময় প্রদান করা হয়, বিশেষত বুটলোডার দ্বারা। এই বিটস্ট্রিংটি কীমাস্টার দ্বারা পরিচালিত প্রতিটি কী-এর সাথে ক্রিপ্টোগ্রাফিকভাবে আবদ্ধ।
ট্রাস্টের রুটটি বুট ইমেজে স্বাক্ষর এবং ডিভাইসের লক অবস্থা যাচাই করতে ব্যবহৃত পাবলিক কী নিয়ে গঠিত। যদি পাবলিক কী পরিবর্তন করা হয় একটি ভিন্ন সিস্টেম ইমেজ ব্যবহার করার অনুমতি দিতে বা যদি লক অবস্থা পরিবর্তন করা হয়, তাহলে পূর্ববর্তী সিস্টেমের দ্বারা তৈরি কীমাস্টার-সুরক্ষিত কীগুলির কোনোটিই ব্যবহারযোগ্য নয়, যদি না পূর্ববর্তী বিশ্বাসের মূলটি পুনরুদ্ধার করা হয় এবং সেই কী দ্বারা স্বাক্ষরিত একটি সিস্টেম বুট করা হয়। লক্ষ্য হল একটি আক্রমণকারী-ইনস্টল করা অপারেটিং সিস্টেমের জন্য কীমাস্টার কীগুলি ব্যবহার করা অসম্ভব করে সফ্টওয়্যার-প্রবর্তিত কী অ্যাক্সেস নিয়ন্ত্রণের মান বৃদ্ধি করা।
স্বতন্ত্র কী
কিছু কীমাস্টার সুরক্ষিত হার্ডওয়্যার অভ্যন্তরীণভাবে মূল উপাদান সংরক্ষণ করতে এবং এনক্রিপ্ট করা কী উপাদানের পরিবর্তে হ্যান্ডেলগুলি ফেরত দেওয়া বেছে নিতে পারে। অথবা এমন আরও কিছু ক্ষেত্রে হতে পারে যেখানে কীগুলি ব্যবহার করা যাবে না যতক্ষণ না অন্য কিছু অ-সুরক্ষিত বা নিরাপদ বিশ্ব সিস্টেম উপাদান উপলব্ধ না হয়। কীমাস্টার এইচএএল কলারকে TAG::STANDALONE
ট্যাগের মাধ্যমে একটি কী "স্বতন্ত্র" হওয়ার অনুরোধ করার অনুমতি দেয়, যার অর্থ ব্লব এবং চলমান কীমাস্টার সিস্টেম ছাড়া অন্য কোনো সংস্থানের প্রয়োজন নেই। একটি কী স্বতন্ত্র কিনা তা দেখার জন্য একটি কী-এর সাথে যুক্ত ট্যাগগুলি পরিদর্শন করা যেতে পারে৷ বর্তমানে, শুধুমাত্র দুটি মান সংজ্ঞায়িত করা হয়:
-
KeyBlobUsageRequirements::STANDALONE
-
KeyBlobUsageRequirements::REQUIRES_FILE_SYSTEM
এই বৈশিষ্ট্যটি অ্যাপের সংস্পর্শে আসে না।
বেগ
যখন এটি তৈরি করা হয়, সর্বাধিক ব্যবহারের বেগ TAG::MIN_SECONDS_BETWEEN_OPS
দিয়ে নির্দিষ্ট করা যেতে পারে। TAG::MIN_SECONDS_BETWEEN_OPS
সেকেন্ড আগে একটি অপারেশন সম্পাদিত হলে TrustZone বাস্তবায়ন সেই কী দিয়ে ক্রিপ্টোগ্রাফিক অপারেশন করতে অস্বীকার করে।
বেগ সীমা বাস্তবায়নের সহজ পদ্ধতি হল মূল আইডি এবং শেষ-ব্যবহারের টাইমস্ট্যাম্পের একটি সারণী। এই টেবিলটি একটি সীমিত আকারের, তবে কমপক্ষে 16টি এন্ট্রি মিটমাট করে। যদি টেবিলটি পূর্ণ থাকে এবং কোনো এন্ট্রি আপডেট করা বা বাতিল করা যায় না, তবে নিরাপদ হার্ডওয়্যার বাস্তবায়ন "নিরাপদ ব্যর্থ হয়", যে কোনো একটি এন্ট্রির মেয়াদ শেষ না হওয়া পর্যন্ত সমস্ত বেগ-সীমিত কী অপারেশন প্রত্যাখ্যান করতে পছন্দ করে। রিবুট করার পরে সব এন্ট্রির মেয়াদ শেষ হওয়ার জন্য এটি গ্রহণযোগ্য।
কীগুলি TAG::MAX_USES_PER_BOOT
এর সাথে বুট প্রতি n ব্যবহারে সীমাবদ্ধ থাকতে পারে। এর জন্য একটি ট্র্যাকিং টেবিলেরও প্রয়োজন, যা কমপক্ষে চারটি কী মিটমাট করে এবং নিরাপদও ব্যর্থ হয়। মনে রাখবেন যে অ্যাপগুলি প্রতি-বুট সীমিত কী তৈরি করতে পারে না। এই বৈশিষ্ট্যটি কীস্টোরের মাধ্যমে প্রকাশ করা হয় না এবং সিস্টেম অপারেশনের জন্য সংরক্ষিত।
এই বৈশিষ্ট্যটি অ্যাপের সংস্পর্শে আসে না।
এলোমেলো সংখ্যা জেনারেটর পুনরায় বীজ বপন
যেহেতু সুরক্ষিত হার্ডওয়্যার মূল উপাদান এবং ইনিশিয়ালাইজেশন ভেক্টর (IVs) এর জন্য এলোমেলো সংখ্যা তৈরি করে এবং যেহেতু হার্ডওয়্যার র্যান্ডম নম্বর জেনারেটরগুলি সর্বদা সম্পূর্ণ বিশ্বস্ত নাও হতে পারে, তাই কীমাস্টার HAL একটি ইন্টারফেস প্রদান করে যাতে ক্লায়েন্টকে অতিরিক্ত এনট্রপি প্রদান করার অনুমতি দেওয়া হয়, যা উৎপন্ন র্যান্ডম সংখ্যার সাথে মিশ্রিত হয়।
প্রাথমিক বীজ উত্স হিসাবে একটি হার্ডওয়্যার র্যান্ডম-নম্বর জেনারেটর ব্যবহার করুন। বাহ্যিক API এর মাধ্যমে প্রদত্ত বীজ ডেটা সংখ্যা তৈরির জন্য ব্যবহৃত এলোমেলোতার একমাত্র উত্স হতে পারে না। আরও, মিক্সিং অপারেশনটি নিশ্চিত করতে হবে যে র্যান্ডম আউটপুট অপ্রত্যাশিত হয় যদি বীজ উত্সগুলির মধ্যে যে কোনও একটি অপ্রত্যাশিত হয়।
এই বৈশিষ্ট্যটি অ্যাপের সংস্পর্শে আসে না তবে ফ্রেমওয়ার্ক দ্বারা ব্যবহৃত হয়, যা নিয়মিতভাবে অতিরিক্ত এনট্রপি প্রদান করে, যা জাভা সিকিউর র্যান্ডম উদাহরণ থেকে সুরক্ষিত হার্ডওয়্যারে পুনরুদ্ধার করা হয়।