Authentication

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

  • ক্রিপ্টোগ্রাফিক কী স্টোরেজ এবং পরিষেবা প্রদানকারী। অ্যান্ড্রয়েড কীস্টোর অ্যাপগুলির জন্য হার্ডওয়্যার-সমর্থিত ক্রিপ্টোগ্রাফিক পরিষেবা সরবরাহ করে। ফ্রেমওয়ার্ক স্তরে অ্যান্ড্রয়েড কীস্টোর সিস্টেম keystore2 সিস্টেম পরিষেবা দ্বারা সমর্থিত। এটি একটি অন্তর্নিহিত বিক্রেতা-নির্দিষ্ট কীমিন্ট (পূর্বে কীমাস্টার) বাস্তবায়নের উপর ভিত্তি করে যা নিশ্চিত করে যে মূল উপাদানগুলি শুধুমাত্র একটি হার্ডওয়্যার-সমর্থিত নিরাপদ পরিবেশে অ্যাক্সেসযোগ্য, যেমন একটি বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট (TEE) বা একটি নিরাপদ উপাদান (SE)।
  • ব্যবহারকারী প্রমাণীকরণকারী। ব্যবহারকারীর সফল প্রমাণীকরণের জন্য প্রমাণ করুন। Android নিম্নলিখিত প্রমাণীকরণ উপাদান সমর্থন করে:
    • TEE-তে PIN, প্যাটার্ন বা পাসওয়ার্ড প্রমাণীকরণের জন্য দারোয়ান
    • (ঐচ্ছিকভাবে) একটি সুরক্ষিত উপাদানে পিন, প্যাটার্ন বা পাসওয়ার্ড প্রমাণীকরণের জন্য ওয়েভার।
    • আঙ্গুলের ছাপ প্রমাণীকরণের জন্য আঙুলের ছাপ
    • অন্যান্য বায়োমেট্রিক প্রমাণীকরণ পদ্ধতি। যে ডিভাইসগুলি Android 9 বা উচ্চতর সংস্করণের সাথে পাঠানো হয় সেগুলি আঙ্গুলের ছাপ এবং অতিরিক্ত বায়োমেট্রিক্সের জন্য একক ইন্টিগ্রেশন পয়েন্ট হিসাবে BiometricPrompt ব্যবহার করতে পারে।
    এই উপাদানগুলি হার্ডওয়্যার-ব্যাকড প্রমাণীকরণ টোকেন (AuthTokens) ব্যবহারের মাধ্যমে keystore2 পরিষেবার সাথে তাদের প্রমাণীকরণের অবস্থার সাথে যোগাযোগ করে।

এই উপাদানগুলির প্রত্যেকটি বিক্রেতা-নির্দিষ্ট, তবে একটি হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) ইন্টারফেস স্পেসিফিকেশন পূরণ করতে এবং সংশ্লিষ্ট ভেন্ডর টেস্ট স্যুট (VTS) পরীক্ষায় উত্তীর্ণ হওয়ার জন্য বিক্রেতা বাস্তবায়ন প্রয়োজন।

বিক্রেতা বাস্তবায়নকেও সাধারণত দুটি অংশে বিভক্ত করা হয়, একটি বিক্রেতা-নির্দিষ্ট যোগাযোগ ব্যবস্থা দ্বারা সংযুক্ত:

  • একটি HAL পরিষেবা অ্যান্ড্রয়েড সিস্টেম প্রক্রিয়া হিসাবে চলে, অ্যান্ড্রয়েড সিস্টেম থেকে বাইন্ডার অনুরোধ গ্রহণ করে।
  • একটি বিশ্বস্ত অ্যাপ্লিকেশন (TA) নিরাপদ পরিবেশে চলে, প্রকৃত নিরাপদ ক্রিয়াকলাপ সম্পাদন করে।

তালিকাভুক্তি

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

যে ব্যবহারকারী একটি বিদ্যমান শংসাপত্র পরিবর্তন করতে চান তাকে অবশ্যই সেই শংসাপত্রটি উপস্থাপন করতে হবে। যদি একটি বিদ্যমান শংসাপত্র সফলভাবে যাচাই করা হয়, বিদ্যমান শংসাপত্রের সাথে যুক্ত ব্যবহারকারী SID নতুন শংসাপত্রে স্থানান্তরিত হয়, ব্যবহারকারীকে একটি শংসাপত্র পরিবর্তন করার পরে কীগুলি অ্যাক্সেস করতে সক্ষম করে।

কিছু পরিস্থিতিতে, একটি ডিভাইস অ্যাডমিনিস্ট্রেটর একটি অবিশ্বস্ত নথিভুক্ত করতে পারে একটি বিদ্যমান শংসাপত্র উপস্থাপন না করে একটি নতুন শংসাপত্র নথিভুক্ত করার জন্য৷ এটি ব্যবহারকারীকে ডিভাইসটি অ্যাক্সেস করতে দেয়, তবে পুরানো ব্যবহারকারী SID-এর অধীনে তৈরি কীগুলি স্থায়ীভাবে হারিয়ে যায়৷

প্রমাণীকরণ

এই বিভাগটি একটি সাধারণ প্রমাণীকরণ প্রবাহ বর্ণনা করে, যেটিতে Android এবং নিরাপদ পরিবেশ উভয়ের একাধিক উপাদানের মধ্যে মিথস্ক্রিয়া জড়িত। মনে রাখবেন যে সমস্ত সুরক্ষিত উপাদান একটি (প্রতি-বুট) গোপন HMAC কী ভাগ করে যা তারা একে অপরের বার্তা প্রমাণীকরণ করতে ব্যবহার করে।

একজন ব্যবহারকারী একটি শংসাপত্র সেট আপ করার পরে এবং একটি ব্যবহারকারী SID বরাদ্দ করার পরে, তারা প্রমাণীকরণ শুরু করতে পারে, যা শুরু হয় যখন একজন ব্যবহারকারী একটি PIN, প্যাটার্ন, পাসওয়ার্ড, আঙ্গুলের ছাপ, বা অন্যান্য শক্তিশালী বায়োমেট্রিক প্রদান করে। প্রমাণীকরণ প্রবাহ

চিত্র 1. প্রমাণীকরণ প্রবাহ

  1. একজন ব্যবহারকারী একটি প্রমাণীকরণ পদ্ধতি প্রদান করে এবং সংশ্লিষ্ট পরিষেবা HAL পরিষেবার কাছে একটি অনুরোধ করে৷
    • PIN, প্যাটার্ন বা পাসওয়ার্ডের জন্য, LockSettingsService gatekeeperd অনুরোধ করে।
    • বায়োমেট্রিক্স-ভিত্তিক প্রমাণীকরণ প্রবাহ Android সংস্করণের উপর নির্ভর করে। Android 8.x এবং তার নিচের সংস্করণে চলমান ডিভাইসগুলিতে, FingerprintService fingerprintd করার অনুরোধ করে)। অ্যান্ড্রয়েড 9 এবং উচ্চতর সংস্করণে চলমান ডিভাইসগুলিতে, BiometricPrompt উপযুক্ত Biometric Manager ক্লাস, যেমন FingerprintManager বা FaceManager ব্যবহার করে উপযুক্ত বায়োমেট্রিক ডেমন (উদাহরণস্বরূপ, আঙ্গুলের ছাপের জন্য fingerprintd বা মুখের জন্য faced জন্য) অনুরোধ করে। সংস্করণ নির্বিশেষে, অনুরোধ পাঠানোর পরে বায়োমেট্রিক প্রমাণীকরণ অ্যাসিঙ্ক্রোনাসভাবে ঘটে।
  2. HAL পরিষেবা তার প্রতিপক্ষ TA-তে ডেটা পাঠায়, যা একটি AuthToken তৈরি করে:
    • পিন/প্যাটার্ন/পাসওয়ার্ড প্রমাণীকরণের জন্য, gatekeeperd HAL পরিষেবার মাধ্যমে TEE-তে গেটকিপার TA-কে PIN, প্যাটার্ন বা পাসওয়ার্ড হ্যাশ পাঠায়। TEE-তে প্রমাণীকরণ সফল হলে, গেটকিপার TA সংশ্লিষ্ট ব্যবহারকারী SID (শেয়ার করা HMAC কী দিয়ে স্বাক্ষরিত) ধারণকারী একটি AuthToken নির্গত করে।
    • ফিঙ্গারপ্রিন্ট প্রমাণীকরণের জন্য, fingerprintd ফিঙ্গারপ্রিন্ট ইভেন্ট শোনে এবং ফিঙ্গারপ্রিন্ট HAL-এর মাধ্যমে TEE-তে ফিঙ্গারপ্রিন্ট TA-তে ডেটা পাঠায়। TEE-তে প্রমাণীকরণ সফল হলে, আঙুলের ছাপ TA একটি AuthToken নির্গত করে (AutToken HMAC কী দিয়ে স্বাক্ষরিত)।
    • অন্যান্য বায়োমেট্রিক প্রমাণীকরণের জন্য, উপযুক্ত বায়োমেট্রিক ডেমন বায়োমেট্রিক ইভেন্টের জন্য শোনে এবং উপযুক্ত বায়োমেট্রিক HAL পরিষেবা এবং TA-তে পাঠায়।
  3. ফলস্বরূপ স্বাক্ষরিত AuthToken একটি বাইন্ডার ইন্টারফেসের মাধ্যমে keystore2 সিস্টেম পরিষেবাতে প্রেরণ করা হয়।
  4. ক্রিপ্টোগ্রাফিক ক্রিয়াকলাপগুলি সম্পাদন করার জন্য KeyMint (পূর্বে Keymaster) অনুরোধ করার জন্য keystore2 পরিষেবা AuthTokens-কে সংযুক্ত করে। KeyMint HAL পরিষেবা তাদের কীমিন্ট TA-তে পাঠায়, যা গেটকিপার এবং সমর্থিত বায়োমেট্রিক TEE উপাদানগুলির সাথে ভাগ করা HMAC কী ব্যবহার করে তাদের যাচাই করে। কীমিন্ট টোকেনে থাকা টাইমস্ট্যাম্পটিকে শেষ প্রমাণীকরণের সময় হিসাবে বিশ্বাস করে, টাইমস্ট্যাম্পের উপর ভিত্তি করে কী ব্যবহারের অনুমতি দেওয়া হবে কিনা তা সিদ্ধান্ত নেয়।

প্রমাণীকরণ প্রবাহের জন্য নিরাপদ পরিবেশে TA-এর মধ্যে সরাসরি যোগাযোগের প্রয়োজন হয় না: AuthTokens প্রমাণীকরণকারী TA থেকে Android-এর keystore2 পরিষেবাতে প্রবাহিত হয়, যা তাদের কীমিন্ট TA-তে প্রেরণ করে। এটি keystore2 পরিষেবাটিকে দ্রুত অনুরোধগুলি অস্বীকার করার অনুমতি দেয় যা ব্যর্থ হতে বাধ্য, কারণ এটি সিস্টেমে উপলব্ধ AuthTokens সম্পর্কে জ্ঞান রাখে, TEE তে একটি সম্ভাব্য ব্যয়বহুল IPC সংরক্ষণ করে৷

AuthToken বিন্যাস

AuthToken-এর বিন্যাস HardwareAuthToken.aidl এ AIDL স্পেসিফিকেশন দ্বারা দেওয়া হয়েছে।

ডিভাইস বুট প্রবাহ

একটি ডিভাইসের প্রতিটি বুটে, AuthToken HMAC কী অবশ্যই তৈরি করতে হবে এবং সমস্ত TEE উপাদানের সাথে শেয়ার করতে হবে (গেটকিপার, কীমিন্ট/কীমাস্টার, এবং সমর্থিত বায়োমেট্রিক্স TAs)। রিপ্লে আক্রমণ প্রতিরোধ করতে, প্রতিবার ডিভাইস রিবুট করার সময় এইচএমএসি কী এলোমেলোভাবে তৈরি করা উচিত।

এই ভাগ করা HMAC কী-তে TA-এর অ্যাক্সেস পাওয়ার দুটি সাধারণ উপায় রয়েছে:

  • ভাগ করা গোপন চুক্তি: keystore2 পরিষেবাটি ডিভাইস স্টার্টআপের সময় একটি মাল্টি-ওয়ে কী চুক্তি প্রোটোকল সঞ্চালন করে, যা অংশগ্রহণকারী TA-এর মধ্যে HMAC কী-এর নিরাপদ ডেরিভেশনের অনুমতি দেয়। যাইহোক, অংশগ্রহণকারী TA-এর অবশ্যই একটি সাধারণ প্রিশেয়ারড গোপনে অ্যাক্সেস থাকতে হবে।
  • সরাসরি অ্যাক্সেস: একই সুরক্ষিত পরিবেশের মধ্যে থাকা TAগুলি HMAC কী ভাগ করার জন্য একটি অভ্যন্তরীণ আন্তঃপ্রক্রিয়া যোগাযোগ ব্যবস্থা (যা প্ল্যাটফর্ম-নির্ভর) ব্যবহার করতে পারে।

উভয় ক্ষেত্রেই, HMAC কী কখনই TEE এর বাইরে উপলব্ধ করা উচিত নয়।

ট্রাস্টি অপারেটিং সিস্টেম, যা অ্যান্ড্রয়েডের পাশে চলে, এটি একটি TEE-এর উদাহরণ, তবে এর পরিবর্তে অন্যান্য TEE ব্যবহার করা যেতে পারে। ট্রাস্টি কীমিন্ট এবং গেটকিপার বা উপযুক্ত বায়োমেট্রিক TA-এর মধ্যে সরাসরি যোগাযোগ করতে একটি অভ্যন্তরীণ IPC সিস্টেম ব্যবহার করে। HMAC কী শুধুমাত্র KeyMint এ রাখা হয়; ফিঙ্গারপ্রিন্ট এবং গেটকিপার প্রতিটি ব্যবহারের জন্য কীমিন্ট থেকে কী অনুরোধ করে এবং মানটি ধরে রাখবে না বা ক্যাশে করবেন না।