সংক্ষিপ্ত বিবরণ
ফেস অথেন্টিকেশন ব্যবহারকারীদের কেবল তাদের ডিভাইসের সামনের দিকে তাকিয়েই ডিভাইসটি আনলক করার সুযোগ দেয়। অ্যান্ড্রয়েড ১০ একটি নতুন ফেস অথেন্টিকেশন স্ট্যাকের জন্য সমর্থন যোগ করেছে যা নিরাপদে ক্যামেরা ফ্রেম প্রসেস করতে পারে, এবং সমর্থিত হার্ডওয়্যারে ফেস অথেন্টিকেশনের সময় নিরাপত্তা ও গোপনীয়তা বজায় রাখে। অ্যান্ড্রয়েড ১০ নিরাপত্তা-সম্মত ইমপ্লিমেন্টেশনগুলোকে অনলাইন ব্যাংকিং বা অন্যান্য পরিষেবার মতো লেনদেনের জন্য অ্যাপ্লিকেশন ইন্টিগ্রেশন সক্ষম করার একটি সহজ উপায়ও প্রদান করে।
অ্যান্ড্রয়েড ফেস অথেন্টিকেশন স্ট্যাক হলো অ্যান্ড্রয়েড ১০-এর একটি নতুন বাস্তবায়ন। এই নতুন বাস্তবায়নে IBiometricsFace.hal , IBiometricsFaceClientCallback.hal এবং types.hal ইন্টারফেসগুলো যুক্ত করা হয়েছে।
স্থাপত্য
BiometricPrompt API-তে মুখ, আঙুল এবং আইরিস সহ সমস্ত বায়োমেট্রিক প্রমাণীকরণ অন্তর্ভুক্ত রয়েছে। Face HAL নিম্নলিখিত উপাদানগুলির সাথে যোগাযোগ করে।

চিত্র ১. বায়োমেট্রিক স্ট্যাক।
ফেস ম্যানেজার
FaceManager হলো একটি প্রাইভেট ইন্টারফেস যা FaceService সাথে সংযোগ বজায় রাখে। Keyguard একটি কাস্টম UI-এর মাধ্যমে ফেস অথেন্টিকেশন অ্যাক্সেস করতে এটি ব্যবহার করে। অ্যাপগুলোর FaceManager-এ অ্যাক্সেস নেই এবং তাদের পরিবর্তে অবশ্যই BiometricPrompt ব্যবহার করতে হবে।
ফেসসার্ভিস
এটি হলো সেই ফ্রেমওয়ার্ক ইমপ্লিমেন্টেশন যা ফেস অথেন্টিকেশন হার্ডওয়্যারে অ্যাক্সেস পরিচালনা করে। এতে বেসিক এনরোলমেন্ট ও অথেন্টিকেশন স্টেট মেশিনের পাশাপাশি আরও বিভিন্ন হেল্পার (যেমন, এনুমারেশন) রয়েছে। স্থিতিশীলতা এবং নিরাপত্তাজনিত উদ্বেগের কারণে, এই প্রসেসে কোনো ভেন্ডর কোড চালানোর অনুমতি নেই। সমস্ত ভেন্ডর কোড Face 1.0 HIDL ইন্টারফেসের মাধ্যমে অ্যাক্সেস করা হয়।
মুখোমুখি
এটি একটি লিনাক্স এক্সিকিউটেবল যা FaceService দ্বারা ব্যবহৃত Face 1.0 HIDL ইন্টারফেসটি বাস্তবায়ন করে। এটি নিজেকে IBiometricsFace@1.0 হিসেবে রেজিস্টার করে, যাতে FaceService এটিকে খুঁজে পেতে পারে।
বাস্তবায়ন
এইচআইডিএল-এর মুখোমুখি
Face HIDL বাস্তবায়ন করতে হলে, আপনাকে অবশ্যই IBiometricsFace.hal এর সমস্ত মেথড একটি ভেন্ডর-নির্দিষ্ট লাইব্রেরিতে প্রয়োগ করতে হবে।
ত্রুটির বার্তা
এরর মেসেজগুলো একটি কলব্যাকের মাধ্যমে পাঠানো হয় এবং পাঠানোর পর স্টেট মেশিনকে আইডল স্টেটে ফিরিয়ে দেয়। বেশিরভাগ মেসেজের সাথে ব্যবহারকারীকে এরর সম্পর্কে জানানোর জন্য একটি ইউজার-ফেসিং স্ট্রিং থাকে, কিন্তু সব এররের এই ইউজার-ফেসিং স্ট্রিং থাকে না। এরর মেসেজ সম্পর্কে আরও তথ্যের জন্য types.hal দেখুন। সমস্ত এরর মেসেজ একটি টার্মিনাল স্টেটকে নির্দেশ করে, যার অর্থ হলো ফ্রেমওয়ার্ক ধরে নেয় যে একটি এরর মেসেজ পাঠানোর পর HAL একটি আইডল স্টেটে ফিরে আসে।
অধিগ্রহণ বার্তা
এনরোলমেন্ট বা অথেনটিকেশনের সময় অ্যাকুইজিশন মেসেজ পাঠানো হয় এবং এর উদ্দেশ্য হলো ব্যবহারকারীকে একটি সফল এনরোলমেন্ট বা অথেনটিকেশনের দিকে পরিচালিত করা। প্রতিটি অর্ডিনালের সাথে FaceAuthenticationManager.java ফাইল থেকে একটি সংশ্লিষ্ট মেসেজ থাকে। ভেন্ডর-নির্দিষ্ট মেসেজ যোগ করা যেতে পারে, তবে শর্ত হলো সংশ্লিষ্ট হেল্প স্ট্রিংগুলো প্রদান করতে হবে। অ্যাকুইজিশন মেসেজগুলো নিজে থেকে কোনো টার্মিনাল স্টেট নয়; বর্তমান এনরোলমেন্ট বা অথেনটিকেশন সম্পন্ন করার জন্য HAL যতগুলো প্রয়োজন ততগুলো মেসেজ পাঠাবে বলে আশা করা হয়। যদি কোনো অ্যাকুইজিশন মেসেজের ফলে এমন একটি টার্মিনাল স্টেট তৈরি হয় যেখানে আর কোনো অগ্রগতি করা সম্ভব নয়, তাহলে HAL-এর উচিত অ্যাকুইজিশন মেসেজগুলোর পরে একটি এরর মেসেজ পাঠানো, যেমন, ছবিটি এতটাই অন্ধকার যে আর কোনো অগ্রগতি করা সম্ভব নয়। এই ক্ষেত্রে, বেশ কয়েকবার চেষ্টা করার পরেও যদি আর কোনো অগ্রগতি না হয়, তবে UNABLE_TO_PROCESS পাঠানো যুক্তিসঙ্গত।
হার্ডওয়্যার
অ্যান্ড্রয়েড ১০-এর কঠোর বায়োমেট্রিক প্রয়োজনীয়তা পূরণের জন্য ডিভাইসগুলিতে অবশ্যই সুরক্ষিত হার্ডওয়্যার থাকতে হবে, যা মুখের ডেটার অখণ্ডতা এবং চূড়ান্ত প্রমাণীকরণ তুলনা নিশ্চিত করবে। অ্যান্ড্রয়েড কম্প্যাটিবিলিটি ডেফিনিশন ডকুমেন্ট (CDD)-এ প্রয়োজনীয় নিরাপত্তার স্তর এবং গ্রহণযোগ্য স্পুফ অ্যাকসেপ্টেন্স রেট (SAR) উল্লেখ করা আছে। সুরক্ষিত প্রক্রিয়াকরণ এবং শনাক্তকরণের জন্য একটি ট্রাস্টেড এক্সিকিউশন এনভায়রনমেন্ট (TEE) প্রয়োজন। এছাড়াও, মুখের প্রমাণীকরণে ইনজেকশন অ্যাটাক প্রতিরোধ করার জন্য সুরক্ষিত ক্যামেরা হার্ডওয়্যার প্রয়োজন। উদাহরণস্বরূপ, ছবির ডেটার জন্য সংশ্লিষ্ট মেমরি পেজগুলিকে প্রিভিলেজড এবং রিড-অনলি হিসেবে চিহ্নিত করা যেতে পারে, যাতে শুধুমাত্র ক্যামেরা হার্ডওয়্যারই সেগুলি আপডেট করতে পারে। আদর্শগতভাবে, TEE এবং হার্ডওয়্যার ছাড়া অন্য কোনো প্রসেসের এতে অ্যাক্সেস থাকা উচিত নয়।
যেহেতু ফেস অথেন্টিকেশন হার্ডওয়্যার ব্যাপকভাবে ভিন্ন হয়, তাই নির্দিষ্ট ডিভাইসের আর্কিটেকচারের উপর নির্ভর করে ফেস অথেন্টিকেশন সক্ষম করার জন্য হার্ডওয়্যার-নির্দিষ্ট ড্রাইভার তৈরি করা প্রয়োজন। সেই কারণে, faced -এর জন্য কোনো রেফারেন্স ইমপ্লিমেন্টেশন নেই।
পদ্ধতি
নিম্নলিখিত মেথডগুলো সবই অ্যাসিঙ্ক্রোনাস এবং এগুলোকে অবশ্যই অবিলম্বে ফ্রেমওয়ার্কে ফিরে আসতে হবে। তা করতে ব্যর্থ হলে সিস্টেম ধীর হয়ে যায় এবং ওয়াচডগ রিসেট হওয়ার সম্ভাবনা থাকে। কলারকে ব্লক হওয়া থেকে বাঁচাতে একাধিক থ্রেডসহ একটি মেসেজ কিউ রাখার পরামর্শ দেওয়া হয়। যেখানে সম্ভব, সমস্ত GET রিকোয়েস্টে তথ্য ক্যাশ করা উচিত, যাতে কলার ন্যূনতম সময়ের জন্য ব্লক থাকে।
| পদ্ধতি | বর্ণনা |
|---|---|
setCallback() | সমস্ত বার্তা নিজের কাছেই ফিরিয়ে আনার জন্য FaceService দ্বারা আহূত। |
setActiveUser() | সক্রিয় ব্যবহারকারীকে সেট করে, যার উপর পরবর্তী সমস্ত HAL অপারেশন প্রয়োগ করা হয়। এই মেথডটি আবার কল না করা পর্যন্ত প্রমাণীকরণ সর্বদা এই ব্যবহারকারীর জন্যই প্রযোজ্য থাকে। |
revokeChallenge() | generateChallenge() দ্বারা তৈরি চ্যালেঞ্জটিকে অবৈধ করে সুরক্ষিত লেনদেনটি সমাপ্ত করে। |
enroll() | ব্যবহারকারীর মুখ নথিভুক্ত করে। |
cancel() | বর্তমান অপারেশনটি (যেমন, এনরোল, অথেন্টিকেট, রিমুভ বা এনিউমারেট) বাতিল করে এবং faced আইডল অবস্থায় ফিরিয়ে দেয়। |
enumerate() | সক্রিয় ব্যবহারকারীর সাথে যুক্ত সমস্ত ফেস টেমপ্লেট তালিকাভুক্ত করে। |
remove() | সক্রিয় ব্যবহারকারীর সাথে যুক্ত একটি বা সমস্ত ফেস টেমপ্লেট মুছে ফেলে। |
authenticate() | সক্রিয় ব্যবহারকারীকে প্রমাণীকরণ করে। |
userActivity() | এই পদ্ধতিটি শুধুমাত্র তখনই ব্যবহার করা উচিত যখন HAL প্রমাণীকরণ (authenticating) বা স্ট্যান্ডবাই (standby) অবস্থায় থাকে। HAL এই অবস্থাগুলোর কোনোটিতে না থাকা অবস্থায় এই পদ্ধতিটি ব্যবহার করলে OPERATION_NOT_SUPPORTED রিটার্ন করে। HAL যখন ইতিমধ্যে প্রমাণীকরণ প্রক্রিয়ার মধ্যে থাকে, তখন এই পদ্ধতিটি কল করলে সিস্টেমের মুখমণ্ডল খোঁজার সময় বেড়ে যেতে পারে। |
resetLockout() | যখন অনেক বেশি ফেস বাতিল করা হয়, তখন faced একটি লকআউট অবস্থায় ( LOCKOUT বা LOCKOUT_PERMANENT ) প্রবেশ করতে হয়। যখন এটি ঘটে, তখন অবশিষ্ট সময়টি ফ্রেমওয়ার্কে পাঠাতে হয় যাতে এটি ব্যবহারকারীকে তা প্রদর্শন করতে পারে। setFeature() এর মতোই, এই পদ্ধতিটির অভ্যন্তরীণ অবস্থা নিরাপদে রিসেট করার জন্য একটি সক্রিয় হার্ডওয়্যার অথেনটিকেশন টোকেন (HAT) প্রয়োজন। এটি শুধুমাত্র বর্তমান ব্যবহারকারীর জন্য লকআউট রিসেট করে। |
বাকি তিনটি মেথডই সিনক্রোনাস এবং ফ্রেমওয়ার্কের গতি যাতে থেমে না যায়, সেজন্য এগুলোর ন্যূনতম সময়ের জন্য ব্লক থাকা উচিত।
| পদ্ধতি | বর্ণনা |
|---|---|
generateChallenge() | একটি অনন্য এবং ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত র্যান্ডম টোকেন তৈরি করে, যা একটি সুরক্ষিত লেনদেনের শুরু নির্দেশ করতে ব্যবহৃত হয়। |
setFeature() | বর্তমান ব্যবহারকারীর জন্য একটি বৈশিষ্ট্য চালু বা বন্ধ করে। নিরাপত্তাজনিত কারণে, ব্যবহারকারীর পিন/প্যাটার্ন/পাসওয়ার্ডকে উপরোক্ত চ্যালেঞ্জের সাথে মিলিয়ে দেখার জন্য একটি HAT-এর প্রয়োজন হয়। |
getFeature() | ডিফল্ট অথবা উপরে উল্লিখিত setFeature() কল দ্বারা নির্ধারিত ফিচারটির বর্তমান সক্রিয় অবস্থা পুনরুদ্ধার করে। যদি ফেস আইডিটি অবৈধ হয়, তবে ইমপ্লিমেন্টেশনকে অবশ্যই ILLEGAL_ARGUMENT রিটার্ন করতে হবে। |
getAuthenticatorId() | বর্তমান ফেস সেটের সাথে যুক্ত একটি আইডেন্টিফায়ার ফেরত দেয়। যখনই কোনো ফেস যোগ করা হয়, এই আইডেন্টিফায়ারটি অবশ্যই পরিবর্তন করতে হবে । |
অবস্থা চিত্র
ফ্রেমওয়ার্কটি আশা করে যে faced নিচের স্টেট ডায়াগ্রামটি অনুসরণ করবে।

চিত্র ২. মুখমণ্ডল শনাক্তকরণের পর্যায় প্রবাহ।