এই পৃষ্ঠাটিতে Android কীস্টোরের ক্রিপ্টোগ্রাফিক বৈশিষ্ট্যগুলি সম্পর্কে তথ্য রয়েছে, যা অন্তর্নিহিত কীমিন্ট (বা কীমাস্টার) বাস্তবায়ন দ্বারা সরবরাহ করা হয়েছে৷
ক্রিপ্টোগ্রাফিক আদিম
কীস্টোর নিম্নলিখিত বিভাগগুলির অপারেশন সরবরাহ করে:
- কী তৈরি করা, যার ফলে ব্যক্তিগত বা গোপন কী উপাদান যা শুধুমাত্র নিরাপদ পরিবেশে অ্যাক্সেসযোগ্য। ক্লায়েন্টরা নিম্নলিখিত উপায়ে কী তৈরি করতে পারে:
- তাজা কী প্রজন্ম
- এনক্রিপ্ট করা কী উপাদান আমদানি
- এনক্রিপ্ট করা কী উপাদান আমদানি
- কী প্রত্যয়ন: অসমমিত কী তৈরি একটি শংসাপত্র তৈরি করে যা কী-পেয়ারের সর্বজনীন কী অংশ ধারণ করে। এই শংসাপত্রটি ঐচ্ছিকভাবে কীটির জন্য মেটাডেটা এবং ডিভাইসের অবস্থা সম্পর্কেও তথ্য ধারণ করে, যা একটি বিশ্বস্ত রুটে ফিরে একটি কী চেইন দ্বারা স্বাক্ষরিত।
- ক্রিপ্টোগ্রাফিক অপারেশন:
- সিমেট্রিক এনক্রিপশন এবং ডিক্রিপশন (AES, 3DES)
- অ্যাসিমেট্রিক ডিক্রিপশন (RSA)
- অ্যাসিমেট্রিক সাইনিং (ECDSA, RSA)
- সিমেট্রিক সাইনিং এবং ভেরিফিকেশন (HMAC)
- অ্যাসিমেট্রিক কী চুক্তি (ECDH)
মনে রাখবেন কীস্টোর এবং কীমিন্ট অপ্রতিসম কীগুলির জন্য সর্বজনীন কী অপারেশন পরিচালনা করে না।
প্রোটোকল উপাদান, যেমন উদ্দেশ্য, মোড, এবং প্যাডিং, সেইসাথে অ্যাক্সেস কন্ট্রোল সীমাবদ্ধতাগুলি নির্দিষ্ট করা হয় যখন কীগুলি তৈরি বা আমদানি করা হয় এবং স্থায়ীভাবে কীটির সাথে আবদ্ধ থাকে, নিশ্চিত করে যে কীটি অন্য কোনও উপায়ে ব্যবহার করা যাবে না৷
উপরের তালিকা ছাড়াও, আরও একটি পরিষেবা রয়েছে যা KeyMint (পূর্বে কীমাস্টার) বাস্তবায়নগুলি প্রদান করে, কিন্তু যা একটি 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) KeyMint বাস্তবায়নের জন্য দৃঢ়ভাবে সুপারিশ করা হয়। হার্ডওয়্যার KeyMint বাস্তবায়ন তাদের প্রদান না করলে কিস্টোর তাদের সফ্টওয়্যারে প্রদান করে।
অন্যান্য সিস্টেমের সাথে আন্তঃক্রিয়াশীলতার জন্য কিছু আদিমও সুপারিশ করা হয়:
- RSA-এর জন্য ছোট কী মাপ
- RSA-এর জন্য নির্বিচারে পাবলিক এক্সপোনেন্ট
কী অ্যাক্সেস নিয়ন্ত্রণ
হার্ডওয়্যার-ভিত্তিক কীগুলি যেগুলি ডিভাইস থেকে কখনও বের করা যায় না সেগুলি খুব বেশি নিরাপত্তা প্রদান করে না যদি আক্রমণকারী সেগুলিকে ইচ্ছামতো ব্যবহার করতে পারে (যদিও তারা বহিষ্কৃত করা যেতে পারে এমন কীগুলির চেয়ে বেশি নিরাপদ)। সুতরাং, এটি অত্যন্ত গুরুত্বপূর্ণ যে কীস্টোর অ্যাক্সেস নিয়ন্ত্রণগুলি প্রয়োগ করে৷
অ্যাক্সেস নিয়ন্ত্রণগুলিকে ট্যাগ/মান জোড়াগুলির একটি "অনুমোদন তালিকা" হিসাবে সংজ্ঞায়িত করা হয়৷ অনুমোদন ট্যাগগুলি হল 32-বিট পূর্ণসংখ্যা এবং মানগুলি বিভিন্ন ধরণের। কিছু ট্যাগ একাধিক মান নির্দিষ্ট করতে পুনরাবৃত্তি করা যেতে পারে. একটি ট্যাগ পুনরাবৃত্তি করা যাবে কিনা তা KeyMint HAL ইন্টারফেসে নির্দিষ্ট করা আছে। একটি কী তৈরি করা হলে, কলার একটি অনুমোদনের তালিকা নির্দিষ্ট করে। কীস্টোরের অন্তর্নিহিত KeyMint বাস্তবায়ন কিছু অতিরিক্ত তথ্য নির্দিষ্ট করার জন্য তালিকাটিকে পরিবর্তন করে, যেমন কীটির রোলব্যাক সুরক্ষা আছে কিনা এবং একটি "চূড়ান্ত" অনুমোদনের তালিকা ফেরত দেয়, যা প্রত্যাবর্তিত কী ব্লবে এনকোড করা হয়। চূড়ান্ত অনুমোদন তালিকা পরিবর্তন করা হলে কোনো ক্রিপ্টোগ্রাফিক অপারেশনের জন্য কী ব্যবহার করার কোনো প্রচেষ্টা ব্যর্থ হয়।
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
রয়েছে।
যখন KeyMint একটি কী তৈরি করে, কলকারী কীটির জন্য একটি অনুমোদন তালিকা নির্দিষ্ট করে। এই তালিকাটি কীস্টোর এবং কীমিন্ট দ্বারা অতিরিক্ত সীমাবদ্ধতা যুক্ত করার জন্য সংশোধন করা হয়েছে এবং অন্তর্নিহিত কীমিন্ট বাস্তবায়ন চূড়ান্ত অনুমোদনের তালিকাকে প্রত্যাবর্তিত কীব্লবে এনকোড করে। এনকোড করা অনুমোদনের তালিকাটি ক্রিপ্টোগ্রাফিকভাবে কীব্লবের সাথে আবদ্ধ থাকে, যাতে অনুমোদনের তালিকা (অর্ডারিং সহ) পরিবর্তন করার যে কোনো প্রচেষ্টার ফলে একটি অবৈধ কীব্লব হয় যা ক্রিপ্টোগ্রাফিক ক্রিয়াকলাপের জন্য ব্যবহার করা যাবে না।
হার্ডওয়্যার বনাম সফ্টওয়্যার প্রয়োগ
সমস্ত সুরক্ষিত হার্ডওয়্যার বাস্তবায়নে একই বৈশিষ্ট্য থাকে না। বিভিন্ন পদ্ধতির সমর্থন করার জন্য, কীমাস্টার যথাক্রমে সুরক্ষিত এবং অ-নিরাপদ বিশ্ব অ্যাক্সেস কন্ট্রোল এনফোর্সমেন্ট বা হার্ডওয়্যার এবং সফ্টওয়্যার প্রয়োগের মধ্যে পার্থক্য করে।
এটি KeyMint API-এ KeyCharacteristics
প্রকারের securityLevel
ক্ষেত্রের সাথে প্রকাশ করা হয়েছে। সুরক্ষিত হার্ডওয়্যারটি কী প্রয়োগ করতে পারে তার উপর ভিত্তি করে যথাযথ নিরাপত্তা স্তরের সাথে KeyCharacteristics
অনুমোদন স্থাপনের জন্য দায়ী। এই তথ্যটি অপ্রতিসম কীগুলির জন্য প্রত্যয়ন রেকর্ডগুলিতেও প্রকাশ করা হয়েছে: SecurityLevel::TRUSTED_ENVIRONMENT
বা SecurityLevel::STRONGBOX
জন্য প্রধান বৈশিষ্ট্যগুলি hardwareEnforced
তালিকায় উপস্থিত হয় এবং SecurityLevel::SOFTWARE
বা SecurityLevel::KEYSTORE
এর বৈশিষ্ট্যগুলি softwareEnforced
তালিকায় উপস্থিত হয়৷
উদাহরণস্বরূপ, তারিখ এবং সময়ের ব্যবধানে সীমাবদ্ধতাগুলি যখন একটি কী ব্যবহার করা যেতে পারে তা সাধারণত সুরক্ষিত পরিবেশ দ্বারা প্রয়োগ করা হয় না, কারণ এটির তারিখ এবং সময় তথ্যে বিশ্বাসযোগ্য অ্যাক্সেস নেই৷ ফলস্বরূপ, Tag::ORIGINATION_EXPIRE_DATETIME
এর মতো অনুমোদনগুলি Android-এ কীস্টোর দ্বারা প্রয়োগ করা হয় এবং SecurityLevel::KEYSTORE
থাকবে।
কী এবং তাদের অনুমোদন হার্ডওয়্যার সমর্থিত কিনা তা নির্ধারণ সম্পর্কে আরও তথ্যের জন্য, কী প্রত্যয়ন দেখুন।
ক্রিপ্টোগ্রাফিক বার্তা নির্মাণ অনুমোদন
নিম্নলিখিত ট্যাগগুলি সংশ্লিষ্ট কী ব্যবহার করে অপারেশনগুলির ক্রিপ্টোগ্রাফিক বৈশিষ্ট্যগুলি সংজ্ঞায়িত করতে ব্যবহৃত হয়:
-
Tag::ALGORITHM
-
Tag::KEY_SIZE
-
Tag::BLOCK_MODE
-
Tag::PADDING
-
Tag::CALLER_NONCE
-
Tag::DIGEST
-
Tag::MGF_DIGEST
নিম্নলিখিত ট্যাগগুলি পুনরাবৃত্তিযোগ্য, যার অর্থ একাধিক মান একটি একক কী এর সাথে যুক্ত হতে পারে:
-
Tag::BLOCK_MODE
-
Tag::PADDING
-
Tag::DIGEST
-
Tag::MGF_DIGEST
ব্যবহার করা মান অপারেশন সময় নির্দিষ্ট করা হয়.
উদ্দেশ্য
কীগুলির উদ্দেশ্যগুলির একটি সংযুক্ত সেট রয়েছে, Tag::PURPOSE
ট্যাগের সাথে এক বা একাধিক অনুমোদন এন্ট্রি হিসাবে প্রকাশ করা হয়, যা সেগুলি কীভাবে ব্যবহার করা যেতে পারে তা সংজ্ঞায়িত করে। উদ্দেশ্যগুলি KeyPurpose.aidl
এ সংজ্ঞায়িত করা হয়েছে।
লক্ষ্য করুন যে উদ্দেশ্য মানগুলির কিছু সংমিশ্রণ নিরাপত্তা সমস্যা তৈরি করে। উদাহরণস্বরূপ, একটি RSA কী যা এনক্রিপ্ট এবং সাইন উভয়ের জন্য ব্যবহার করা যেতে পারে এমন আক্রমণকারীকে অনুমতি দেয় যে সিস্টেমটিকে স্বাক্ষর তৈরি করতে নির্বিচারে ডেটা ডিক্রিপ্ট করতে রাজি করতে পারে।
কী আমদানি
কীমাস্টার শুধুমাত্র X.509 ফর্ম্যাটে, পাবলিক কী রপ্তানি সমর্থন করে এবং এর আমদানি সমর্থন করে:
- DER-এনকোডেড PKCS#8 ফর্ম্যাটে অসমম্যাট্রিক কী জোড়া (পাসওয়ার্ড-ভিত্তিক এনক্রিপশন ছাড়া)
- কাঁচা বাইট হিসাবে সিমেট্রিক কী
নিরাপদে তৈরি করা কী থেকে আমদানি করা কীগুলিকে আলাদা করা যায় তা নিশ্চিত করতে, Tag::ORIGIN
উপযুক্ত কী অনুমোদনের তালিকায় অন্তর্ভুক্ত করা হয়েছে। উদাহরণস্বরূপ, যদি সুরক্ষিত হার্ডওয়্যারে একটি কী তৈরি করা হয়, Tag::ORIGIN
মান সহ KeyOrigin::GENERATED
কী বৈশিষ্ট্যগুলির hw_enforced
তালিকায় পাওয়া যায়, যখন নিরাপদ হার্ডওয়্যারে আমদানি করা একটি কীটির মান KeyOrigin::IMPORTED
আছে।
ব্যবহারকারীর প্রমাণীকরণ
নিরাপদ কীমিন্ট বাস্তবায়ন ব্যবহারকারীর প্রমাণীকরণ বাস্তবায়ন করে না, তবে অন্যান্য বিশ্বস্ত অ্যাপগুলির উপর নির্ভর করে যা করে। এই অ্যাপগুলি যে ইন্টারফেসটি প্রয়োগ করে তার জন্য, গেটকিপার পৃষ্ঠাটি দেখুন।
ব্যবহারকারীর প্রমাণীকরণের প্রয়োজনীয়তা দুটি সেট ট্যাগের মাধ্যমে নির্দিষ্ট করা হয়। প্রথম সেটটি নির্দেশ করে কোন প্রমাণীকরণ পদ্ধতিগুলি কী ব্যবহারের অনুমতি দেয়:
-
Tag::USER_SECURE_ID
একটি 64-বিট সাংখ্যিক মান রয়েছে যা সুরক্ষিত ব্যবহারকারী আইডি নির্দিষ্ট করে যা কীটির ব্যবহার আনলক করতে একটি সুরক্ষিত প্রমাণীকরণ টোকেনে দেওয়া হয়। যদি পুনরাবৃত্তি করা হয়, তাহলে কীটি ব্যবহার করা যেতে পারে যদি একটি সুরক্ষিত প্রমাণীকরণ টোকেনে যে কোনো মান প্রদান করা হয়।
দ্বিতীয় সেটটি নির্দেশ করে যে ব্যবহারকারীকে কখন প্রমাণীকরণ করতে হবে। যদি এই ট্যাগগুলির একটিও উপস্থিত না থাকে, কিন্তু Tag::USER_SECURE_ID
হয়, কীটির প্রতিটি ব্যবহারের জন্য প্রমাণীকরণ প্রয়োজন৷
-
Tag::NO_AUTHENTICATION_REQUIRED
নির্দেশ করে যে কোনও ব্যবহারকারীর প্রমাণীকরণের প্রয়োজন নেই, যদিও কীটির অ্যাক্সেস এখনও মালিকানাধীন অ্যাপে সীমাবদ্ধ (এবং এটি যে কোনও অ্যাপকে অ্যাক্সেস দেয়)। -
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
কীগুলিকে তার ডাটাবেসে সংরক্ষণ করার আগে "সুপারএনক্রিপ্ট" করে এবং যখন সম্ভব এটি সুপারএনক্রিপশন কীগুলি (সুপার কীগুলি) সুরক্ষিত করে যখন ডিভাইসটি এমনভাবে লক থাকে যাতে সেগুলি শুধুমাত্র একটি সফল ডিভাইস আনলকের মাধ্যমে পুনরুদ্ধার করা যায়৷ ("সুপারএনক্রিপশন" শব্দটি ব্যবহার করা হয় কারণ এনক্রিপশনের এই স্তরটি এনক্রিপশনের স্তর ছাড়াও প্রয়োগ করা হয় যা KeyMint ইতিমধ্যেই সমস্ত কীগুলিতে প্রযোজ্য।)
প্রতিটি ব্যবহারকারীর (প্রোফাইল সহ) 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 কীটিকে একটি বায়োমেট্রিক-বাউন্ড কী হিসাবে KeyMint-এ আমদানি করে যেটির জন্য বায়োমেট্রিক প্রমাণীকরণের প্রয়োজন হয় এবং শেষ 15-এর মধ্যে এই সমস্ত কো-টেক্সট-এর মধ্যে সফল হতে পারে। চাবি
- ব্যবহারকারীর যদি ক্লাস 1 ("সুবিধা") বায়োমেট্রিক, ক্লাস 2 ("দুর্বল") বায়োমেট্রিক, বা সক্রিয় আনলক ট্রাস্ট এজেন্ট সক্রিয় থাকে, তাহলে কীস্টোর সুপার কীগুলি প্লেইনটেক্সট ক্যাশে রাখে৷ এই ক্ষেত্রে,
UNLOCKED_DEVICE_REQUIRED
কীগুলির জন্য ক্রিপ্টোগ্রাফিক নিরাপত্তা প্রদান করা হয় না৷ ব্যবহারকারীরা এই আনলক পদ্ধতিগুলি সক্রিয় না করে এই কম নিরাপদ ফলব্যাক এড়াতে পারে৷ এই বিভাগগুলির মধ্যে সবচেয়ে সাধারণ আনলক পদ্ধতিগুলি হল অনেকগুলি ডিভাইসে ফেস আনলক এবং একটি জোড়া স্মার্টওয়াচ দিয়ে আনলক করা৷
ডিভাইসটি ব্যবহারকারীর জন্য আনলক করা হলে, কীস্টোর সম্ভব হলে ব্যবহারকারীর UnlockedDeviceRequired সুপার কীগুলি পুনরুদ্ধার করে। পিন, প্যাটার্ন বা পাসওয়ার্ডের সমতুল্য আনলকের জন্য, এটি ডাটাবেসে সংরক্ষিত এই কীগুলির অনুলিপি ডিক্রিপ্ট করে। অন্যথায়, এটি একটি বায়োমেট্রিক-বাউন্ড কী দিয়ে এনক্রিপ্ট করা এই কীগুলির একটি অনুলিপি সংরক্ষণ করেছে কিনা তা পরীক্ষা করে এবং যদি তা ডিক্রিপ্ট করার চেষ্টা করে। এটি শুধুমাত্র তখনই সফল হয় যখন ব্যবহারকারী শেষ 15 সেকেন্ডের মধ্যে একটি ক্লাস 3 বায়োমেট্রিক দিয়ে সফলভাবে প্রমাণীকরণ করেন, যা KeyMint (কীস্টোর নয়) দ্বারা প্রয়োগ করা হয়।
ক্লায়েন্ট বাঁধাই
ক্লায়েন্ট বাইন্ডিং, একটি নির্দিষ্ট ক্লায়েন্ট অ্যাপের সাথে একটি কী-এর অ্যাসোসিয়েশন একটি ঐচ্ছিক ক্লায়েন্ট আইডি এবং কিছু ঐচ্ছিক ক্লায়েন্ট ডেটা (যথাক্রমে Tag::APPLICATION_ID
এবং Tag::APPLICATION_DATA
) এর মাধ্যমে করা হয়। কীস্টোর এই মানগুলিকে অস্বচ্ছ ব্লব হিসাবে বিবেচনা করে, শুধুমাত্র নিশ্চিত করে যে কী জেনারেশন/ইমপোর্টের সময় উপস্থাপিত একই ব্লবগুলি প্রতিটি ব্যবহারের জন্য উপস্থাপিত হয় এবং বাইট-ফর-বাইট অভিন্ন। ক্লায়েন্ট বাইন্ডিং ডেটা KeyMint দ্বারা ফেরত দেওয়া হয় না। চাবিটি ব্যবহার করার জন্য কলকারীকে এটি জানতে হবে।
এই বৈশিষ্ট্যটি অ্যাপের সংস্পর্শে আসে না।
মেয়াদ শেষ
কীস্টোর তারিখ অনুসারে কী ব্যবহার সীমাবদ্ধ করা সমর্থন করে। বৈধতার মূল সূচনা এবং কী মেয়াদ শেষ হওয়াগুলি একটি কী-এর সাথে যুক্ত হতে পারে এবং বর্তমান তারিখ/সময় বৈধ সীমার বাইরে থাকলে কী-মাস্টার মূল ক্রিয়াকলাপগুলি সম্পাদন করতে অস্বীকার করে। মূল বৈধতা পরিসর Tag::ACTIVE_DATETIME
, Tag::ORIGINATION_EXPIRE_DATETIME
, এবং Tag::USAGE_EXPIRE_DATETIME
ট্যাগগুলির সাথে নির্দিষ্ট করা হয়েছে। "উৎপত্তি" এবং "ব্যবহার" এর মধ্যে পার্থক্য একটি নতুন সাইফারটেক্সট/স্বাক্ষর/ইত্যাদি "উৎপত্তি" করতে বা বিদ্যমান সাইফারটেক্সট/স্বাক্ষর/ইত্যাদি "ব্যবহার" করতে ব্যবহার করা হচ্ছে কিনা তার উপর ভিত্তি করে। মনে রাখবেন যে এই পার্থক্যটি অ্যাপগুলিতে প্রকাশ করা হয় না।
Tag::ACTIVE_DATETIME
, Tag::ORIGINATION_EXPIRE_DATETIME
, এবং Tag::USAGE_EXPIRE_DATETIME
ট্যাগগুলি ঐচ্ছিক৷ যদি ট্যাগগুলি অনুপস্থিত থাকে তবে ধারণা করা হয় যে প্রশ্নে থাকা কীটি সর্বদা বার্তাগুলিকে ডিক্রিপ্ট/যাচাই করতে ব্যবহার করা যেতে পারে।
যেহেতু প্রাচীর-ঘড়ির সময় অ-সুরক্ষিত বিশ্ব দ্বারা সরবরাহ করা হয়, মেয়াদোত্তীর্ণ-সম্পর্কিত ট্যাগগুলি সফ্টওয়্যার-প্রবর্তিত তালিকায় রয়েছে৷
বিশ্বাস বাঁধাই মূল
কীস্টোরের জন্য বিশ্বাসের মূলে আবদ্ধ থাকা কীগুলির প্রয়োজন, যা স্টার্টআপের সময় KeyMint সুরক্ষিত হার্ডওয়্যারে প্রদান করা একটি বিটস্ট্রিং, বিশেষত বুটলোডার দ্বারা। এই বিটস্ট্রিংটি KeyMint দ্বারা পরিচালিত প্রতিটি কীর সাথে ক্রিপ্টোগ্রাফিকভাবে আবদ্ধ।
ট্রাস্টের রুটটি বুট ইমেজে স্বাক্ষর এবং ডিভাইসের লক অবস্থা যাচাই করতে ব্যবহৃত পাবলিক কী নিয়ে গঠিত। যদি পাবলিক কী পরিবর্তন করা হয় একটি ভিন্ন সিস্টেম ইমেজ ব্যবহার করার জন্য বা লক অবস্থা পরিবর্তন করা হয়, তাহলে পূর্ববর্তী সিস্টেমের দ্বারা তৈরি KeyMint-সুরক্ষিত কীগুলির একটিও ব্যবহারযোগ্য নয়, যদি না পূর্ববর্তী বিশ্বাসের মূলটি পুনরুদ্ধার করা হয় এবং সেই কী দ্বারা স্বাক্ষরিত একটি সিস্টেম বুট করা হয়। লক্ষ্য হল সফ্টওয়্যার-প্রবর্তিত কী অ্যাক্সেস কন্ট্রোলের মান বৃদ্ধি করা যা আক্রমণকারী-ইনস্টল করা অপারেটিং সিস্টেমের জন্য KeyMint কীগুলি ব্যবহার করা অসম্ভব করে তোলে৷
স্বতন্ত্র কী
কিছু KeyMint সুরক্ষিত হার্ডওয়্যার অভ্যন্তরীণভাবে মূল উপাদান সংরক্ষণ করতে এবং এনক্রিপ্ট করা কী উপাদানের পরিবর্তে হ্যান্ডেলগুলি ফেরত দিতে বেছে নিতে পারে। অথবা এমন আরও কিছু ক্ষেত্রে হতে পারে যেখানে কীগুলি ব্যবহার করা যাবে না যতক্ষণ না অন্য কিছু অ-সুরক্ষিত বা নিরাপদ বিশ্ব সিস্টেম উপাদান উপলব্ধ না হয়। KeyMint HAL কলারকে TAG::STANDALONE
ট্যাগের মাধ্যমে একটি কী "স্বতন্ত্র" হওয়ার অনুরোধ করতে দেয়, যার অর্থ ব্লব এবং চলমান KeyMint সিস্টেম ছাড়া অন্য কোনো সংস্থানের প্রয়োজন নেই। একটি কী স্বতন্ত্র কিনা তা দেখার জন্য একটি কী-এর সাথে যুক্ত ট্যাগগুলি পরিদর্শন করা যেতে পারে৷ বর্তমানে, শুধুমাত্র দুটি মান সংজ্ঞায়িত করা হয়:
-
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) এর জন্য এলোমেলো সংখ্যা তৈরি করে এবং হার্ডওয়্যার র্যান্ডম নম্বর জেনারেটরগুলি সর্বদা সম্পূর্ণ বিশ্বস্ত নাও হতে পারে, তাই KeyMint HAL ক্লায়েন্টকে অতিরিক্ত এনট্রপি প্রদান করার জন্য একটি ইন্টারফেস প্রদান করে, যা উৎপন্ন র্যান্ডম সংখ্যার সাথে মিশ্রিত হয়।
প্রাথমিক বীজ উত্স হিসাবে একটি হার্ডওয়্যার র্যান্ডম-নম্বর জেনারেটর ব্যবহার করুন। বাহ্যিক API এর মাধ্যমে প্রদত্ত বীজ ডেটা সংখ্যা তৈরির জন্য ব্যবহৃত এলোমেলোতার একমাত্র উত্স হতে পারে না। অধিকন্তু, ব্যবহৃত মিশ্রণ অপারেশনের জন্য নিশ্চিত করতে হবে যে র্যান্ডম আউটপুট অপ্রত্যাশিত হয় যদি বীজের কোনো একটি উৎস অপ্রত্যাশিত হয়।