বৈশিষ্ট্য

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

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

প্রাথমিক বীজ উত্স হিসাবে একটি হার্ডওয়্যার র্যান্ডম-নম্বর জেনারেটর ব্যবহার করুন। বাহ্যিক API এর মাধ্যমে প্রদত্ত বীজ ডেটা সংখ্যা তৈরির জন্য ব্যবহৃত এলোমেলোতার একমাত্র উত্স হতে পারে না। অধিকন্তু, ব্যবহৃত মিশ্রণ অপারেশনের জন্য নিশ্চিত করতে হবে যে র‍্যান্ডম আউটপুট অপ্রত্যাশিত হয় যদি বীজের কোনো একটি উৎস অপ্রত্যাশিত হয়।

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

,

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

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

প্রাথমিক বীজ উত্স হিসাবে একটি হার্ডওয়্যার র্যান্ডম-নম্বর জেনারেটর ব্যবহার করুন। বাহ্যিক API এর মাধ্যমে প্রদত্ত বীজ ডেটা সংখ্যা তৈরির জন্য ব্যবহৃত এলোমেলোতার একমাত্র উত্স হতে পারে না। অধিকন্তু, ব্যবহৃত মিশ্রণ অপারেশনের জন্য নিশ্চিত করতে হবে যে র‍্যান্ডম আউটপুট অপ্রত্যাশিত হয় যদি বীজের কোনো একটি উৎস অপ্রত্যাশিত হয়।

This feature is not exposed to applications but is used by the framework, which regularly provides additional entropy, retrieved from a Java SecureRandom instance, to the secure hardware.