অ্যান্ড্রয়েড ব্যবহারকারী-প্রমাণিকরণ-গেটেড ক্রিপ্টোগ্রাফিক কীগুলির ধারণা ব্যবহার করে যার জন্য নিম্নলিখিত উপাদানগুলির প্রয়োজন:
- ক্রিপ্টোগ্রাফিক কী স্টোরেজ এবং পরিষেবা প্রদানকারী। ক্রিপ্টোগ্রাফিক কী সঞ্চয় করে এবং সেই কীগুলির উপরে স্ট্যান্ডার্ড ক্রিপ্টো রুটিন প্রদান করে। অ্যান্ড্রয়েড ক্রিপ্টোগ্রাফিক পরিষেবাগুলির জন্য একটি হার্ডওয়্যার-সমর্থিত কীস্টোর এবং কীমাস্টার সমর্থন করে, যার মধ্যে কী স্টোরেজের জন্য হার্ডওয়্যার-সমর্থিত ক্রিপ্টোগ্রাফি রয়েছে যাতে স্ট্রংবক্সের মতো একটি বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট (TEE) বা সিকিউর এলিমেন্ট (SE) অন্তর্ভুক্ত থাকতে পারে।
- ব্যবহারকারী প্রমাণীকরণকারী। ব্যবহারকারীর উপস্থিতি এবং/অথবা সফল প্রমাণীকরণ প্রমাণ করুন। অ্যান্ড্রয়েড পিন/প্যাটার্ন/পাসওয়ার্ড প্রমাণীকরণের জন্য গেটকিপার এবং ফিঙ্গারপ্রিন্ট প্রমাণীকরণের জন্য ফিঙ্গারপ্রিন্ট সমর্থন করে। অ্যান্ড্রয়েড 9 এবং উচ্চতর ডিভাইসগুলি আঙ্গুলের ছাপ এবং অতিরিক্ত বায়োমেট্রিক্সের জন্য একক ইন্টিগ্রেশন পয়েন্ট হিসাবে
BiometricPrompt
ব্যবহার করতে পারে। এই উপাদানগুলি একটি প্রমাণীকৃত চ্যানেলের মাধ্যমে কীস্টোর পরিষেবার সাথে তাদের প্রমাণীকরণ অবস্থার সাথে যোগাযোগ করে। (ফ্রেমওয়ার্ক স্তরে অ্যান্ড্রয়েড কীস্টোর সিস্টেমটিও কীস্টোর পরিষেবা দ্বারা সমর্থিত।)
গেটকিপার, ফিঙ্গারপ্রিন্ট এবং বায়োমেট্রিক উপাদানগুলি হার্ডওয়্যার-সমর্থিত প্রমাণীকরণ টোকেন (AuthTokens) ব্যবহার সমর্থন করার জন্য কীস্টোর এবং অন্যান্য উপাদানগুলির সাথে কাজ করে।
তালিকাভুক্তি
ফ্যাক্টরি রিসেট করার পরে ডিভাইসের প্রথম বুটে, সমস্ত প্রমাণীকরণকারী ব্যবহারকারীর কাছ থেকে শংসাপত্র তালিকাভুক্তি পাওয়ার জন্য প্রস্তুত থাকে। একজন ব্যবহারকারীকে প্রথমে দারোয়ানের সাথে একটি পিন/প্যাটার্ন/পাসওয়ার্ড নথিভুক্ত করতে হবে। এই প্রাথমিক তালিকাভুক্তিটি একটি এলোমেলোভাবে তৈরি করা, 64-বিট ব্যবহারকারী সুরক্ষিত শনাক্তকারী (SID) তৈরি করে যা ব্যবহারকারীর জন্য একটি শনাক্তকারী এবং ব্যবহারকারীর ক্রিপ্টোগ্রাফিক উপাদানের জন্য একটি বাঁধাই টোকেন হিসাবে কাজ করে। এই ব্যবহারকারী SID ক্রিপ্টোগ্রাফিকভাবে ব্যবহারকারীর পাসওয়ার্ডের সাথে আবদ্ধ; গেটকিপারের সফল প্রমাণীকরণের ফলে AuthTokens যে পাসওয়ার্ডের জন্য ব্যবহারকারী SID ধারণ করে।
যে ব্যবহারকারী একটি শংসাপত্র পরিবর্তন করতে চান তাকে অবশ্যই একটি বিদ্যমান শংসাপত্র উপস্থাপন করতে হবে। যদি একটি বিদ্যমান শংসাপত্র সফলভাবে যাচাই করা হয়, বিদ্যমান শংসাপত্রের সাথে যুক্ত ব্যবহারকারী SID নতুন শংসাপত্রে স্থানান্তরিত হয়, ব্যবহারকারীকে একটি শংসাপত্র পরিবর্তন করার পরে কীগুলি অ্যাক্সেস করতে সক্ষম করে। যদি একজন ব্যবহারকারী একটি বিদ্যমান শংসাপত্র উপস্থাপন না করে, নতুন শংসাপত্রটি সম্পূর্ণরূপে র্যান্ডম ব্যবহারকারী SID দিয়ে নথিভুক্ত করা হয়। ব্যবহারকারী ডিভাইসটি অ্যাক্সেস করতে পারে, তবে পুরানো ব্যবহারকারী SID-এর অধীনে তৈরি করা কীগুলি স্থায়ীভাবে হারিয়ে গেছে। এটি একটি অবিশ্বস্ত নথিভুক্ত হিসাবে পরিচিত।
সাধারণ পরিস্থিতিতে, অ্যান্ড্রয়েড ফ্রেমওয়ার্ক অবিশ্বস্ত নথিভুক্তির অনুমতি দেয় না, তাই বেশিরভাগ ব্যবহারকারী এই কার্যকারিতা দেখতে পাবেন না। যাইহোক, ডিভাইস অ্যাডমিনিস্ট্রেটর বা আক্রমণকারীর দ্বারা জোরপূর্বক পাসওয়ার্ড রিসেট, এটি ঘটতে পারে।
প্রমাণীকরণ
একজন ব্যবহারকারী একটি শংসাপত্র সেট আপ করার পরে এবং একটি ব্যবহারকারী SID প্রাপ্ত করার পরে, তারা প্রমাণীকরণ শুরু করতে পারে, যা শুরু হয় যখন একজন ব্যবহারকারী একটি পিন, প্যাটার্ন, পাসওয়ার্ড বা আঙ্গুলের ছাপ প্রদান করে। সমস্ত TEE উপাদান একটি গোপন কী ভাগ করে যা তারা একে অপরের বার্তা প্রমাণীকরণ করতে ব্যবহার করে।
- একজন ব্যবহারকারী একটি প্রমাণীকরণ পদ্ধতি প্রদান করে এবং সংশ্লিষ্ট পরিষেবা সংশ্লিষ্ট ডেমনকে অনুরোধ করে।
- PIN, প্যাটার্ন বা পাসওয়ার্ডের জন্য,
LockSettingsService
gatekeeperd
অনুরোধ করে। - বায়োমেট্রিক্স-ভিত্তিক প্রমাণীকরণ প্রবাহ Android সংস্করণের উপর নির্ভর করে। Android 8.x এবং তার নিচের সংস্করণে চলমান ডিভাইসগুলিতে,
FingerprintService
fingerprintd
করার অনুরোধ করে)। অ্যান্ড্রয়েড 9 এবং উচ্চতর সংস্করণে চলমান ডিভাইসগুলিতে,BiometricPrompt
উপযুক্তBiometric Manager
ক্লাস, যেমনFingerprintManager
বাFaceManager
ব্যবহার করে উপযুক্ত বায়োমেট্রিক ডেমন (উদাহরণস্বরূপ, আঙ্গুলের ছাপের জন্যfingerprintd
বা মুখের জন্যfaced
জন্য) অনুরোধ করে। সংস্করণ নির্বিশেষে, অনুরোধ পাঠানোর পরে বায়োমেট্রিক প্রমাণীকরণ অ্যাসিঙ্ক্রোনাসভাবে ঘটে।
- PIN, প্যাটার্ন বা পাসওয়ার্ডের জন্য,
- ডেমন তার প্রতিপক্ষের কাছে ডেটা পাঠায়, যা একটি AuthToken তৈরি করে:
- পিন/প্যাটার্ন/পাসওয়ার্ড প্রমাণীকরণের জন্য,
gatekeeperd
টিইই-তে গেটকিপারকে পিন, প্যাটার্ন বা পাসওয়ার্ড হ্যাশ পাঠায়। TEE-তে প্রমাণীকরণ সফল হলে, TEE-এর গেটকিপার Android OS-এ তার প্রতিপক্ষের কাছে সংশ্লিষ্ট ব্যবহারকারী SID (AutToken HMAC কী দিয়ে স্বাক্ষরিত) একটি AuthToken পাঠায়। - ফিঙ্গারপ্রিন্ট প্রমাণীকরণের জন্য,
fingerprintd
ফিঙ্গারপ্রিন্ট ইভেন্ট শোনে এবং TEE-তে ফিঙ্গারপ্রিন্টে ডেটা পাঠায়। TEE-তে প্রমাণীকরণ সফল হলে, TEE-তে আঙুলের ছাপ একটি AuthToken (AuthToken HMAC কী দিয়ে স্বাক্ষরিত) Android OS-এ তার প্রতিপক্ষকে পাঠায়। - অন্যান্য বায়োমেট্রিক প্রমাণীকরণের জন্য, উপযুক্ত বায়োমেট্রিক ডেমন বায়োমেট্রিক ইভেন্টের জন্য শোনে এবং উপযুক্ত বায়োমেট্রিক TEE কম্পোনেন্টে পাঠায়।
- পিন/প্যাটার্ন/পাসওয়ার্ড প্রমাণীকরণের জন্য,
- ডেমন একটি স্বাক্ষরিত AuthToken পায় এবং কীস্টোর পরিষেবার বাইন্ডার ইন্টারফেসে একটি এক্সটেনশনের মাধ্যমে এটিকে কীস্টোর পরিষেবাতে প্রেরণ করে। ( যখন ডিভাইসটি পুনরায় লক করা হয় এবং যখন ডিভাইসের পাসওয়ার্ড পরিবর্তন হয় তখন
gatekeeperd
কীস্টোর পরিষেবাকেও অবহিত করে৷) - কীস্টোর পরিষেবাটি কীমাস্টারের কাছে AuthTokens পাস করে এবং গেটকিপার এবং সমর্থিত বায়োমেট্রিক TEE কম্পোনেন্টের সাথে ভাগ করা কী ব্যবহার করে তাদের যাচাই করে। কীমাস্টার শেষ প্রমাণীকরণের সময় হিসাবে টোকেনে থাকা টাইমস্ট্যাম্পকে বিশ্বাস করে এবং টাইমস্ট্যাম্পে একটি মূল প্রকাশের সিদ্ধান্ত (একটি অ্যাপকে কী ব্যবহার করার অনুমতি দেওয়ার জন্য) ভিত্তি করে।
AuthToken বিন্যাস
ভাষা এবং উপাদান জুড়ে টোকেন ভাগাভাগি এবং সামঞ্জস্য নিশ্চিত করতে, AuthToken বিন্যাসটি hw_auth_token.h
এ বর্ণনা করা হয়েছে। বিন্যাসটি নির্দিষ্ট আকারের ক্ষেত্র সহ একটি সাধারণ সিরিয়ালাইজেশন প্রোটোকল।
মাঠ | টাইপ | প্রয়োজন | বর্ণনা |
---|---|---|---|
অথটোকেন সংস্করণ | 1 বাইট | হ্যাঁ | নীচের সমস্ত ক্ষেত্রের জন্য গ্রুপ ট্যাগ. |
চ্যালেঞ্জ | 64-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা | না | রিপ্লে আক্রমণ প্রতিরোধ করার জন্য একটি র্যান্ডম পূর্ণসংখ্যা। সাধারণত অনুরোধকৃত ক্রিপ্টো অপারেশনের আইডি। বর্তমানে লেনদেনমূলক ফিঙ্গারপ্রিন্ট অনুমোদন দ্বারা ব্যবহৃত. উপস্থিত থাকলে, AuthToken শুধুমাত্র একই চ্যালেঞ্জ ধারণকারী ক্রিপ্টো অপারেশনের জন্য বৈধ। |
ব্যবহারকারী SID | 64-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা | হ্যাঁ | অপুনরাবৃত্ত ব্যবহারকারী শনাক্তকারী ডিভাইস প্রমাণীকরণের সাথে যুক্ত সমস্ত কীগুলির সাথে ক্রিপ্টোগ্রাফিকভাবে আবদ্ধ। বিস্তারিত জানার জন্য, দারোয়ান দেখুন। |
প্রমাণীকরণকারী আইডি (ASID) | নেটওয়ার্ক ক্রমে 64-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা | না | শনাক্তকারী একটি নির্দিষ্ট প্রমাণীকরণকারী নীতিতে আবদ্ধ হতে ব্যবহৃত হয়। সমস্ত প্রমাণীকরণকারীদের ASID এর নিজস্ব মান রয়েছে যা তারা তাদের নিজস্ব প্রয়োজনীয়তা অনুসারে পরিবর্তন করতে পারে। |
প্রমাণীকরণকারীর ধরন | নেটওয়ার্ক ক্রমে 32-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা | হ্যাঁ |
|
টাইমস্ট্যাম্প | নেটওয়ার্ক ক্রমে 64-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা | হ্যাঁ | সাম্প্রতিক সিস্টেম বুট হওয়ার পর থেকে সময় (মিলিসেকেন্ডে)। |
AuthToken HMAC (SHA-256) | 256-বিট ব্লব | হ্যাঁ | HMAC ক্ষেত্র ব্যতীত সমস্ত ক্ষেত্রের কীড SHA-256 MAC৷ |
ডিভাইস বুট প্রবাহ
একটি ডিভাইসের প্রতিটি বুটে, AuthToken HMAC কী অবশ্যই তৈরি করতে হবে এবং সমস্ত TEE উপাদানের সাথে শেয়ার করতে হবে (গেটকিপার, কীমাস্টার, এবং সমর্থিত বায়োমেট্রিক্স ট্রাস্টলেট)। সুতরাং, রিপ্লে আক্রমণের বিরুদ্ধে অতিরিক্ত সুরক্ষার জন্য, প্রতিবার ডিভাইসটি পুনরায় বুট করার সময় এইচএমএসি কী এলোমেলোভাবে তৈরি করা উচিত।
সমস্ত উপাদানের সাথে এই HMAC কী ভাগ করার প্রোটোকল হল একটি প্ল্যাটফর্ম-নির্ভর বাস্তবায়ন বৈশিষ্ট্য। চাবিটি কখনই TEE এর বাইরে উপলব্ধ করা উচিত নয়। যদি একটি TEE OS-এর অভ্যন্তরীণ আন্তঃপ্রক্রিয়া যোগাযোগ (IPC) প্রক্রিয়ার অভাব থাকে এবং অবিশ্বস্ত OS-এর মাধ্যমে ডেটা স্থানান্তর করার প্রয়োজন হয়, তবে স্থানান্তরটি একটি সুরক্ষিত কী বিনিময় প্রোটোকলের মাধ্যমে করা আবশ্যক৷
ট্রাস্টি অপারেটিং সিস্টেম, যা অ্যান্ড্রয়েডের পাশে চলে, এটি একটি TEE-এর উদাহরণ, তবে এর পরিবর্তে অন্যান্য TEE ব্যবহার করা যেতে পারে। ট্রাস্টি কীমাস্টার এবং গেটকিপার বা উপযুক্ত বায়োমেট্রিক ট্রাস্টলেটের মধ্যে সরাসরি যোগাযোগ করতে একটি অভ্যন্তরীণ IPC সিস্টেম ব্যবহার করে। HMAC কী শুধুমাত্র কীমাস্টারে রাখা হয়; ফিঙ্গারপ্রিন্ট এবং গেটকিপার প্রতিটি ব্যবহারের জন্য কীমাস্টারের কাছ থেকে কী অনুরোধ করে এবং মানটি ধরে রাখবে না বা ক্যাশে করবে না।
যেহেতু কিছু TEE-এর IPC পরিকাঠামো নেই, তাই TEE-তে অ্যাপলেটগুলির মধ্যে কোনও যোগাযোগ ঘটে না। এটি কীস্টোর পরিষেবাটিকে দ্রুত অনুরোধগুলি অস্বীকার করার অনুমতি দেয় যা ব্যর্থ হতে বাধ্য কারণ এটি সিস্টেমে প্রমাণীকরণ সারণী সম্পর্কে জ্ঞান রাখে, TEE তে একটি সম্ভাব্য ব্যয়বহুল IPC সংরক্ষণ করে৷