অ্যান্ড্রয়েডে ইউজার অথেন্টিকেটরের একটি ধারণা রয়েছে, যা ডিভাইস আনলক করতে এবং ক্রিপ্টোগ্রাফিক কী-গুলিতে অ্যাক্সেস নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এর মধ্যে নিম্নলিখিত উপাদানগুলি অন্তর্ভুক্ত রয়েছে:
- ক্রিপ্টোগ্রাফিক কী সংরক্ষণ এবং পরিষেবা প্রদানকারী। এটি ক্রিপ্টোগ্রাফিক কী সংরক্ষণ করে এবং সেই কীগুলোর উপর ভিত্তি করে স্ট্যান্ডার্ড ক্রিপ্টো রুটিন সরবরাহ করে। অ্যান্ড্রয়েড ক্রিপ্টোগ্রাফিক পরিষেবাগুলোর জন্য একটি হার্ডওয়্যার-সমর্থিত কীস্টোর এবং কীমিন্ট (পূর্বে কীমাস্টার) সমর্থন করে। এর মধ্যে কী সংরক্ষণের জন্য হার্ডওয়্যার-সমর্থিত ক্রিপ্টোগ্রাফিও অন্তর্ভুক্ত, যেখানে একটি ট্রাস্টেড এক্সিকিউশন এনভায়রনমেন্ট (TEE) বা সিকিওর এলিমেন্ট (SE), যেমন স্ট্রংবক্স, থাকতে পারে।
- ব্যবহারকারী প্রমাণীকরণকারী। ব্যবহারকারীর উপস্থিতি এবং/অথবা সফল প্রমাণীকরণের সত্যতা প্রমাণ করে। অ্যান্ড্রয়েড পিন/প্যাটার্ন/পাসওয়ার্ড প্রমাণীকরণের জন্য গেটকিপার (Gatekeeper) এবং ফিঙ্গারপ্রিন্ট প্রমাণীকরণের জন্য ফিঙ্গারপ্রিন্ট (Fingerprint) সমর্থন করে। অ্যান্ড্রয়েড ৯ এবং তার উচ্চতর সংস্করণযুক্ত ডিভাইসগুলো ফিঙ্গারপ্রিন্ট এবং অতিরিক্ত বায়োমেট্রিক্সের জন্য একটি একক ইন্টিগ্রেশন পয়েন্ট হিসেবে
BiometricPromptব্যবহার করতে পারে। এই উপাদানগুলো একটি প্রমাণীকৃত চ্যানেলের মাধ্যমে কীস্টোর সার্ভিসের সাথে তাদের প্রমাণীকরণ অবস্থা যোগাযোগ করে। (ফ্রেমওয়ার্ক স্তরের অ্যান্ড্রয়েড কীস্টোর সিস্টেমটিও কীস্টোর সার্ভিস দ্বারা সমর্থিত।)
এই উপাদানগুলোর প্রতিটিই বিক্রেতা-নির্দিষ্ট, কিন্তু বিক্রেতার বাস্তবায়নকে অবশ্যই একটি হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) ইন্টারফেস স্পেসিফিকেশন পূরণ করতে হবে এবং সংশ্লিষ্ট বিক্রেতা টেস্ট স্যুট (VTS) পরীক্ষাগুলোতে উত্তীর্ণ হতে হবে।
ভেন্ডর বাস্তবায়নগুলোও সাধারণত দুটি ভাগে বিভক্ত থাকে, যা একটি ভেন্ডর-নির্দিষ্ট যোগাযোগ ব্যবস্থার মাধ্যমে সংযুক্ত থাকে:
- একটি HAL সার্ভিস অ্যান্ড্রয়েড সিস্টেম প্রসেস হিসেবে চলে এবং অ্যান্ড্রয়েড সিস্টেম থেকে বাইন্ডার রিকোয়েস্ট গ্রহণ করে।
- একটি বিশ্বস্ত অ্যাপ্লিকেশন (TA) সুরক্ষিত পরিবেশে চলে এবং প্রকৃত সুরক্ষিত কার্যক্রমগুলো সম্পাদন করে।
তালিকাভুক্তি
ফ্যাক্টরি রিসেটের পর ডিভাইসটি প্রথমবার চালু হলে, সমস্ত অথেন্টিকেটর ব্যবহারকারীর কাছ থেকে ক্রেডেনশিয়াল এনরোলমেন্ট গ্রহণ করার জন্য প্রস্তুত থাকে। একজন ব্যবহারকারীকে প্রথমে গেটকিপার (অথবা উইভার , যদি উপলব্ধ থাকে) এর সাথে একটি পিন, প্যাটার্ন বা পাসওয়ার্ড এনরোল করতে হয়। এই প্রাথমিক এনরোলমেন্ট একটি র্যান্ডমলি জেনারেটেড, ৬৪-বিট ইউজার সিকিওর আইডেন্টিফায়ার (SID) তৈরি করে, যা ব্যবহারকারীর আইডেন্টিফায়ার এবং ব্যবহারকারীর ক্রিপ্টোগ্রাফিক উপাদানের জন্য একটি বাইন্ডিং টোকেন হিসেবে কাজ করে। এই ইউজার SID ব্যবহারকারীর পাসওয়ার্ডের সাথে ক্রিপ্টোগ্রাফিকভাবে আবদ্ধ থাকে; গেটকিপারে সফল অথেন্টিকেশনের ফলে এমন AuthToken তৈরি হয়, যেগুলোতে সেই পাসওয়ার্ডের জন্য ইউজার SID অন্তর্ভুক্ত থাকে।
যে ব্যবহারকারী বিদ্যমান ক্রেডেনশিয়াল পরিবর্তন করতে চান, তাকে অবশ্যই সেই ক্রেডেনশিয়ালটি উপস্থাপন করতে হবে। যদি বিদ্যমান ক্রেডেনশিয়ালটি সফলভাবে যাচাই করা হয়, তবে সেই ক্রেডেনশিয়ালের সাথে যুক্ত ব্যবহারকারীর SID নতুন ক্রেডেনশিয়ালে স্থানান্তরিত হয়, যার ফলে ব্যবহারকারী ক্রেডেনশিয়াল পরিবর্তনের পরেও কীগুলো অ্যাক্সেস করতে পারেন।
কিছু ক্ষেত্রে, একজন ডিভাইস প্রশাসক বিদ্যমান ক্রেডেনশিয়াল উপস্থাপন না করেই একটি নতুন ক্রেডেনশিয়াল নথিভুক্ত করার জন্য একটি অবিশ্বস্ত এনরোলমেন্ট সম্পাদন করতে পারেন। এর ফলে ব্যবহারকারী ডিভাইসটি অ্যাক্সেস করতে পারেন, কিন্তু পুরোনো ব্যবহারকারীর SID-এর অধীনে তৈরি করা কীগুলো স্থায়ীভাবে হারিয়ে যায়।
প্রমাণীকরণ
এই বিভাগে একটি সাধারণ প্রমাণীকরণ প্রবাহ বর্ণনা করা হয়েছে, যেখানে অ্যান্ড্রয়েড এবং সুরক্ষিত পরিবেশ উভয়ের একাধিক উপাদানের মধ্যে মিথস্ক্রিয়া জড়িত থাকে। উল্লেখ্য যে, সমস্ত সুরক্ষিত উপাদান একটি (প্রতি-বুট) গোপন HMAC কী শেয়ার করে, যা তারা একে অপরের বার্তা প্রমাণীকরণের জন্য ব্যবহার করে।
একজন ব্যবহারকারী তার পরিচয়পত্র সেট আপ করার পর এবং একটি ইউজার এসআইডি (SID) বরাদ্দ পাওয়ার পর, তিনি প্রমাণীকরণ শুরু করতে পারেন, যা ব্যবহারকারীর পিন, প্যাটার্ন, পাসওয়ার্ড, আঙুলের ছাপ বা অন্য কোনো শক্তিশালী বায়োমেট্রিক প্রদানের মাধ্যমে শুরু হয়। 
চিত্র ১. প্রমাণীকরণ প্রবাহ
- একজন ব্যবহারকারী একটি প্রমাণীকরণ পদ্ধতি প্রদান করেন এবং সংশ্লিষ্ট পরিষেবাটি HAL পরিষেবার কাছে একটি অনুরোধ পাঠায়।
- পিন, প্যাটার্ন বা পাসওয়ার্ডের জন্য,
LockSettingsService,gatekeeperdকাছে একটি অনুরোধ পাঠায়। - বায়োমেট্রিক-ভিত্তিক প্রমাণীকরণ প্রক্রিয়া অ্যান্ড্রয়েড সংস্করণের উপর নির্ভর করে। অ্যান্ড্রয়েড ৮.x এবং তার নিচের সংস্করণে চালিত ডিভাইসগুলিতে,
FingerprintService,fingerprintdকাছে একটি অনুরোধ পাঠায়। অ্যান্ড্রয়েড ৯ এবং তার উপরের সংস্করণে চালিত ডিভাইসগুলিতে,BiometricPrompt,FingerprintManagerবাFaceManagerমতো উপযুক্তBiometric Managerক্লাস ব্যবহার করে যথাযথ বায়োমেট্রিক ডেমন-এর (উদাহরণস্বরূপ, আঙুলের ছাপের জন্যfingerprintdবা মুখের জন্যfaced) কাছে একটি অনুরোধ পাঠায়। সংস্করণ নির্বিশেষে, অনুরোধ পাঠানোর পর বায়োমেট্রিক প্রমাণীকরণ অ্যাসিঙ্ক্রোনাসভাবে সম্পন্ন হয়।
- পিন, প্যাটার্ন বা পাসওয়ার্ডের জন্য,
- HAL পরিষেবাটি তার প্রতিপক্ষ TA-এর কাছে ডেটা পাঠায়, যা একটি AuthToken তৈরি করে:
- পিন/প্যাটার্ন/পাসওয়ার্ড প্রমাণীকরণের জন্য,
gatekeeperd, Gatekeeper HAL পরিষেবার মাধ্যমে TEE-তে থাকা Gatekeeper TA-এর কাছে পিন, প্যাটার্ন বা পাসওয়ার্ড হ্যাশ পাঠায়। যদি TEE-তে প্রমাণীকরণ সফল হয়, তাহলে Gatekeeper TA একটি AuthToken প্রদান করে, যাতে সংশ্লিষ্ট ব্যবহারকারীর SID (শেয়ার্ড HMAC কী দ্বারা স্বাক্ষরিত) থাকে। - ফিঙ্গারপ্রিন্ট অথেনটিকেশনের জন্য,
fingerprintdফিঙ্গারপ্রিন্ট ইভেন্টগুলো শোনে এবং ফিঙ্গারপ্রিন্ট HAL-এর মাধ্যমে TEE-তে থাকা ফিঙ্গারপ্রিন্ট TA-তে ডেটা পাঠায়। TEE-তে অথেনটিকেশন সফল হলে, ফিঙ্গারপ্রিন্ট TA একটি AuthToken (AuthToken HMAC কী দ্বারা স্বাক্ষরিত) প্রদান করে। - অন্যান্য বায়োমেট্রিক প্রমাণীকরণের ক্ষেত্রে, উপযুক্ত বায়োমেট্রিক ডেমনটি বায়োমেট্রিক ইভেন্টটি শোনে এবং সেটিকে উপযুক্ত বায়োমেট্রিক HAL পরিষেবা ও TA-এর কাছে পাঠিয়ে দেয়।
- পিন/প্যাটার্ন/পাসওয়ার্ড প্রমাণীকরণের জন্য,
- ডেমনটি একটি স্বাক্ষরিত AuthToken গ্রহণ করে এবং কীস্টোর সার্ভিসের বাইন্ডার ইন্টারফেসের একটি এক্সটেনশনের মাধ্যমে সেটি কীস্টোর সার্ভিসে প্রেরণ করে। (ডিভাইসটি পুনরায় লক করা হলে এবং ডিভাইসের পাসওয়ার্ড পরিবর্তন হলে
gatekeeperdকীস্টোর সার্ভিসকে অবহিত করে।) - Keystore পরিষেবাটি AuthToken-গুলো KeyMint-এর কাছে পাঠায় এবং Gatekeeper ও সমর্থিত বায়োমেট্রিক TEE কম্পোনেন্টের সাথে শেয়ার করা কী ব্যবহার করে সেগুলোকে যাচাই করে। KeyMint টোকেনের মধ্যে থাকা টাইমস্ট্যাম্পকে সর্বশেষ প্রমাণীকরণের সময় হিসেবে বিশ্বাস করে এবং সেই টাইমস্ট্যাম্পের উপর ভিত্তি করেই কী রিলিজের সিদ্ধান্ত নেয় (কোনো অ্যাপকে কী-টি ব্যবহারের অনুমতি দেওয়ার জন্য)।
সুরক্ষিত পরিবেশে প্রমাণীকরণ প্রক্রিয়ার জন্য TA-গুলোর মধ্যে সরাসরি যোগাযোগের প্রয়োজন হয় না: AuthToken-গুলো অথেন্টিকেটর TA থেকে অ্যান্ড্রয়েডের keystore2 সার্ভিসে প্রবাহিত হয়, যা সেগুলোকে KeyMint TA-এর কাছে পাঠিয়ে দেয়। এটি keystore2 সার্ভিসকে সেইসব অনুরোধ দ্রুত প্রত্যাখ্যান করার সুযোগ দেয় যেগুলো ব্যর্থ হতে বাধ্য, কারণ সিস্টেমে উপলব্ধ AuthToken-গুলো সম্পর্কে তার ধারণা থাকে, যা TEE-তে একটি সম্ভাব্য ব্যয়বহুল IPC খরচ বাঁচায়।
অথটোকেন ফরম্যাট
AIDL স্পেসিফিকেশনের HardwareAuthToken.aidl ফাইলে AuthToken-এর ফরম্যাটটি দেওয়া আছে।
ডিভাইস বুট প্রবাহ
ডিভাইসটি প্রতিবার চালু হওয়ার সময়, AuthToken HMAC কী-টি তৈরি করতে হবে এবং TEE-এর সমস্ত উপাদানের (Gatekeeper, KeyMint, এবং সমর্থিত বায়োমেট্রিক্স ট্রাস্টলেট) সাথে শেয়ার করতে হবে। সুতরাং, রিপ্লে অ্যাটাকের বিরুদ্ধে অতিরিক্ত সুরক্ষার জন্য, ডিভাইসটি প্রতিবার রিবুট করার সময় HMAC কী-টি এলোমেলোভাবে তৈরি করতে হবে।
টিএ-রা দুটি সাধারণ উপায়ে এই শেয়ার করা HMAC কী-তে অ্যাক্সেস পেয়ে থাকেন:
- যৌথ গোপনীয় চুক্তি:
keystore2পরিষেবাটি ডিভাইস চালুর সময় একটি বহু-মুখী কী চুক্তি প্রোটোকল সম্পাদন করে, যা অংশগ্রহণকারী TA-দের মধ্যে HMAC কী-এর নিরাপদ আহরণের সুযোগ দেয়। তবে, অংশগ্রহণকারী TA-দের অবশ্যই একটি সাধারণ পূর্ব-যৌথ গোপনীয় তথ্যে প্রবেশাধিকার থাকতে হবে। - সরাসরি অ্যাক্সেস: একই সুরক্ষিত পরিবেশে অবস্থিত টিএ-রা (TAs) HMAC কী শেয়ার করার জন্য একটি অভ্যন্তরীণ আন্তঃপ্রক্রিয়া যোগাযোগ ব্যবস্থা (যা প্ল্যাটফর্ম-নির্ভর) ব্যবহার করতে পারে।
উভয় ক্ষেত্রেই, HMAC কী-টি TEE-এর বাইরে কখনোই সরবরাহ করা যাবে না।
ট্রাস্টি অপারেটিং সিস্টেম, যা অ্যান্ড্রয়েডের পাশাপাশি চলে, একটি TEE-এর উদাহরণ, তবে এর পরিবর্তে অন্যান্য TEE-ও ব্যবহার করা যেতে পারে। ট্রাস্টি, KeyMint এবং Gatekeeper বা উপযুক্ত বায়োমেট্রিক ট্রাস্টলেটের মধ্যে সরাসরি যোগাযোগের জন্য একটি অভ্যন্তরীণ IPC সিস্টেম ব্যবহার করে। HMAC কী শুধুমাত্র KeyMint-এ রাখা হয়; Fingerprint এবং Gatekeeper প্রতিটি ব্যবহারের জন্য KeyMint থেকে কী-টির অনুরোধ করে এবং এর মান সংরক্ষণ বা ক্যাশ করে না।
যেহেতু কিছু TEE-তে IPC পরিকাঠামো থাকে না, তাই TEE-এর অ্যাপলেটগুলোর মধ্যে কোনো যোগাযোগ ঘটে না। এটি কীস্টোর পরিষেবাটিকে ব্যর্থ হতে বাধ্য এমন অনুরোধগুলি দ্রুত প্রত্যাখ্যান করার সুযোগ দেয়, কারণ সিস্টেমের প্রমাণীকরণ সারণী সম্পর্কে তার জ্ঞান থাকে, যা TEE-তে একটি সম্ভাব্য ব্যয়বহুল IPC প্রক্রিয়া থেকে বাঁচায়।