মুখের প্রমাণীকরণ HIDL

ওভারভিউ

ফেস অথেন্টিকেশন ব্যবহারকারীরা তাদের ডিভাইসের সামনের দিকে তাকিয়ে তাদের ডিভাইস আনলক করতে দেয়। অ্যান্ড্রয়েড 10 একটি নতুন মুখ প্রমাণীকরণ স্ট্যাকের জন্য সমর্থন যোগ করে যা সমর্থিত হার্ডওয়্যারে মুখের প্রমাণীকরণের সময় সুরক্ষা এবং গোপনীয়তা রক্ষা করে ক্যামেরা ফ্রেমগুলিকে নিরাপদে প্রক্রিয়া করতে পারে। Android 10 অনলাইন ব্যাঙ্কিং বা অন্যান্য পরিষেবার মতো লেনদেনের জন্য অ্যাপ্লিকেশন ইন্টিগ্রেশন সক্ষম করার জন্য নিরাপত্তা সম্মত বাস্তবায়নের একটি সহজ উপায়ও প্রদান করে।

অ্যান্ড্রয়েড ফেস অথেন্টিকেশন স্ট্যাক হল অ্যান্ড্রয়েড 10-এ একটি নতুন বাস্তবায়ন। নতুন বাস্তবায়ন IBiometricsFace.hal , IBiometricsFaceClientCallback.hal , এবং types.hal ইন্টারফেসগুলিকে প্রবর্তন করে৷

স্থাপত্য

বায়োমেট্রিক প্রম্পট এপিআই মুখ, আঙুল এবং আইরিস সহ সমস্ত বায়োমেট্রিক প্রমাণীকরণ অন্তর্ভুক্ত করে। Face HAL নিম্নলিখিত উপাদানগুলির সাথে যোগাযোগ করে।

বায়োমেট্রিক স্ট্যাক
চিত্র 1. বায়োমেট্রিক স্ট্যাক

ফেস ম্যানেজার

FaceManager হল একটি ব্যক্তিগত ইন্টারফেস যা FaceService এর সাথে সংযোগ বজায় রাখে। এটি একটি কাস্টম UI এর মাধ্যমে মুখের প্রমাণীকরণ অ্যাক্সেস করতে কীগার্ড ব্যবহার করে। অ্যাপগুলির ফেসম্যানেজারে অ্যাক্সেস নেই এবং এর পরিবর্তে অবশ্যই BiometricPrompt ব্যবহার করতে হবে।

ফেসসার্ভিস

এটি হল ফ্রেমওয়ার্ক বাস্তবায়ন যা মুখের প্রমাণীকরণ হার্ডওয়্যারে অ্যাক্সেস পরিচালনা করে। এটিতে মৌলিক তালিকাভুক্তি এবং প্রমাণীকরণ স্টেট মেশিনের পাশাপাশি অন্যান্য বিভিন্ন সাহায্যকারী (উদাহরণস্বরূপ, গণনা) রয়েছে। স্থিতিশীলতা এবং নিরাপত্তা উদ্বেগের কারণে, এই প্রক্রিয়ায় কোন ভেন্ডর কোড চালানোর অনুমতি নেই। সমস্ত বিক্রেতা কোড ফেস 1.0 HIDL ইন্টারফেসের মাধ্যমে অ্যাক্সেস করা হয়।

সম্মুখীন

এটি একটি লিনাক্স এক্সিকিউটেবল যা FaceService দ্বারা ব্যবহৃত Face 1.0 HIDL ইন্টারফেস প্রয়োগ করে। এটি নিজেকে IBiometricsFace@1.0 হিসাবে নিবন্ধিত করে যাতে FaceService এটি খুঁজে পেতে পারে।

বাস্তবায়ন

মুখ HIDL

ফেস এইচআইডিএল বাস্তবায়ন করতে, আপনাকে অবশ্যই বিক্রেতা-নির্দিষ্ট লাইব্রেরিতে IBiometricsFace.hal এর সমস্ত পদ্ধতি প্রয়োগ করতে হবে।

ভুল বার্তা

ত্রুটি বার্তাগুলি একটি কলব্যাক দ্বারা পাঠানো হয় এবং সেগুলি পাঠানোর পরে স্টেট মেশিনটিকে নিষ্ক্রিয় অবস্থায় ফিরিয়ে দেয়। বেশিরভাগ বার্তাগুলিতে ব্যবহারকারীকে ত্রুটি সম্পর্কে অবহিত করার জন্য একটি সংশ্লিষ্ট ব্যবহারকারী-মুখী স্ট্রিং থাকে, তবে সমস্ত ত্রুটিতে এই ব্যবহারকারী-মুখী স্ট্রিং থাকে না। ত্রুটি বার্তা সম্পর্কে আরও তথ্যের জন্য, types.hal দেখুন। সমস্ত ত্রুটি বার্তা একটি টার্মিনাল অবস্থার প্রতিনিধিত্ব করে, যার অর্থ কাঠামোটি অনুমান করে যে HAL একটি ত্রুটি বার্তা পাঠানোর পরে একটি নিষ্ক্রিয় অবস্থায় ফিরে আসে।

অধিগ্রহণ বার্তা

অধিগ্রহণ বার্তাগুলি তালিকাভুক্তি বা প্রমাণীকরণের সময় বিতরণ করা হয় এবং এটি ব্যবহারকারীকে একটি সফল তালিকাভুক্তি বা প্রমাণীকরণের দিকে গাইড করার জন্য। প্রতিটি অর্ডিন্যালে FaceAuthenticationManager.java ফাইল থেকে একটি সংশ্লিষ্ট বার্তা রয়েছে। বিক্রেতা-নির্দিষ্ট বার্তা যোগ করা যেতে পারে যতক্ষণ পর্যন্ত সংশ্লিষ্ট সাহায্য স্ট্রিং প্রদান করা হয়। অধিগ্রহণের বার্তাগুলি নিজেদের মধ্যে এবং নিজেদের মধ্যে টার্মিনাল অবস্থা নয়; এইচএএল বর্তমান তালিকাভুক্তি বা প্রমাণীকরণ সম্পূর্ণ করার জন্য এইগুলির মধ্যে যতগুলি প্রয়োজন ততগুলি পাঠাবে বলে আশা করা হচ্ছে। যদি একটি অধিগ্রহণ বার্তা একটি টার্মিনাল অবস্থায় পরিণত হয় যেখানে কোন অগ্রগতি করা যায় না, তাহলে HAL-এর উচিত একটি ত্রুটি বার্তা সহ অধিগ্রহণ বার্তাগুলি অনুসরণ করা, উদাহরণস্বরূপ, যেখানে চিত্রটি খুব অন্ধকার এবং অগ্রগতির জন্য খুব অন্ধকার থাকে৷ এই ক্ষেত্রে, বেশ কিছু চেষ্টা করার পরে UNABLE_TO_PROCESS পাঠানো যুক্তিসঙ্গত কিন্তু আর কোনো অগ্রগতি করা যাবে না৷

হার্ডওয়্যার

ডিভাইসগুলিকে Android 10 এর জন্য শক্তিশালী বায়োমেট্রিক প্রয়োজনীয়তাগুলি মেনে চলার জন্য, ফেস ডেটার অখণ্ডতা এবং চূড়ান্ত প্রমাণীকরণ তুলনা নিশ্চিত করতে তাদের অবশ্যই সুরক্ষিত হার্ডওয়্যার থাকতে হবে। অ্যান্ড্রয়েড কম্প্যাটিবিলিটি ডেফিনিশন ডকুমেন্ট (CDD) প্রয়োজনীয় নিরাপত্তার স্তর এবং গ্রহণযোগ্য স্পুফ অ্যাকসেপ্টেন্স রেট (SAR) প্রয়োজন। নিরাপদ প্রক্রিয়াকরণ এবং স্বীকৃতির জন্য একটি বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট (TEE) প্রয়োজন। উপরন্তু, মুখের প্রমাণীকরণে ইনজেকশন আক্রমণ প্রতিরোধ করার জন্য সুরক্ষিত ক্যামেরা হার্ডওয়্যার প্রয়োজন। উদাহরণস্বরূপ, ইমেজ ডেটার জন্য সংশ্লিষ্ট মেমরি পৃষ্ঠাগুলিকে বিশেষাধিকার দেওয়া যেতে পারে এবং শুধুমাত্র পঠনযোগ্য হিসাবে চিহ্নিত করা যেতে পারে যাতে শুধুমাত্র ক্যামেরা হার্ডওয়্যার তাদের আপডেট করতে পারে। আদর্শভাবে, TEE এবং হার্ডওয়্যার ছাড়া কোনো প্রক্রিয়ার অ্যাক্সেস থাকা উচিত নয়।

যেহেতু মুখের প্রমাণীকরণ হার্ডওয়্যার উল্লেখযোগ্যভাবে পরিবর্তিত হয়, তাই নির্দিষ্ট ডিভাইস আর্কিটেকচারের উপর নির্ভর করে মুখের প্রমাণীকরণ সক্ষম করতে হার্ডওয়্যার-নির্দিষ্ট ড্রাইভারগুলি বিকাশ করা প্রয়োজন। যেমন, faced জন্য কোন রেফারেন্স বাস্তবায়ন নেই.

পদ্ধতি

নিম্নলিখিত পদ্ধতিগুলি সমস্ত অ্যাসিঙ্ক্রোনাস এবং অবিলম্বে ফ্রেমওয়ার্কে ফিরে যেতে হবে৷ এটি করতে ব্যর্থ হলে একটি ধীর সিস্টেম এবং সম্ভাব্য ওয়াচডগ রিসেট হয়। কলারকে ব্লক করা এড়াতে একাধিক থ্রেড সহ একটি বার্তা সারি থাকার পরামর্শ দেওয়া হয়৷ সমস্ত GET অনুরোধের যেখানে সম্ভব তথ্য ক্যাশে করা উচিত যাতে কলকারীকে ন্যূনতম সময়ের জন্য ব্লক করা হয়।

পদ্ধতি বর্ণনা
setCallback() FaceService দ্বারা সমস্ত বার্তাগুলিকে নিজের কাছে ফিরিয়ে আনার জন্য কল করা হয়েছে৷
setActiveUser() সক্রিয় ব্যবহারকারী সেট করে, যা পরবর্তী সমস্ত HAL অপারেশন প্রয়োগ করা হয়। এই পদ্ধতিটি আবার কল না করা পর্যন্ত প্রমাণীকরণ সর্বদা এই ব্যবহারকারীর জন্য থাকে।
revokeChallenge() generateChallenge() দ্বারা উত্পন্ন চ্যালেঞ্জটিকে অবৈধ করে নিরাপদ লেনদেন শেষ করে।
enroll() একজন ব্যবহারকারীর মুখ নথিভুক্ত করে।
cancel() বর্তমান অপারেশন বাতিল করে (উদাহরণস্বরূপ, নথিভুক্ত করা, প্রমাণীকরণ করা, অপসারণ করা বা গণনা করা) এবং নিষ্ক্রিয় faced ফিরে আসে।
enumerate() সক্রিয় ব্যবহারকারীর সাথে যুক্ত সমস্ত মুখের টেমপ্লেট গণনা করে৷
remove() সক্রিয় ব্যবহারকারীর সাথে যুক্ত একটি মুখের টেমপ্লেট বা সমস্ত মুখের টেমপ্লেট সরিয়ে দেয়।
authenticate() সক্রিয় ব্যবহারকারীকে প্রমাণীকরণ করে।
userActivity() এই পদ্ধতিটি শুধুমাত্র তখনই ব্যবহার করা উচিত যখন HAL প্রমাণীকরণ বা স্ট্যান্ডবাই অবস্থায় থাকে। এই পদ্ধতি ব্যবহার করে যখন HAL এই রাজ্যগুলির একটিতে না থাকে তখন OPERATION_NOT_SUPPORTED ফেরত দেয়। HAL ইতিমধ্যেই প্রমাণীকরণ করার সময় এই পদ্ধতিতে কল করলে সিস্টেম মুখের জন্য যতটা সময় দেখায় তা বাড়িয়ে দিতে পারে।
resetLockout() যখন অনেকগুলি মুখ প্রত্যাখ্যান করা হয়, তখন একটি লকআউট অবস্থায় প্রবেশ করতে faced প্রয়োজন হয় ( LOCKOUT বা LOCKOUT_PERMANENT )৷ যখন এটি হয়ে যায়, তখন এটিকে ফ্রেমওয়ার্কে অবশিষ্ট সময় পাঠাতে হবে যাতে এটি ব্যবহারকারীর জন্য এটি প্রদর্শন করতে পারে। setFeature() এর মতো, এই পদ্ধতিতে অভ্যন্তরীণ অবস্থা নিরাপদে রিসেট করার জন্য একটি সক্রিয় হার্ডওয়্যার প্রমাণীকরণ টোকেন (HAT) প্রয়োজন। শুধুমাত্র বর্তমান ব্যবহারকারীর জন্য লকআউট রিসেট করে।

বাকি তিনটি পদ্ধতি সবই সিঙ্ক্রোনাস এবং ফ্রেমওয়ার্ক আটকানো এড়াতে ন্যূনতম সময়ের জন্য ব্লক করা উচিত।

পদ্ধতি বর্ণনা
generateChallenge() একটি নিরাপদ লেনদেনের শুরু নির্দেশ করতে ব্যবহৃত একটি অনন্য এবং ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত র্যান্ডম টোকেন তৈরি করে।
setFeature() বর্তমান ব্যবহারকারীর জন্য একটি বৈশিষ্ট্য সক্রিয় বা নিষ্ক্রিয় করে। নিরাপত্তার কারণে, উপরের চ্যালেঞ্জের বিরুদ্ধে ব্যবহারকারীর পিন/প্যাটার্ন/পাসওয়ার্ড চেক করার জন্য এর জন্য একটি HAT প্রয়োজন
getFeature() বৈশিষ্ট্যটির বর্তমান সক্ষমতার অবস্থা পুনরুদ্ধার করে, যেমনটি ডিফল্ট দ্বারা নির্দেশিত বা উপরে setFeature() এ কল করা হয়েছে। ফেস আইডি অবৈধ হলে, বাস্তবায়ন অবশ্যই ILLEGAL_ARGUMENT ফেরত দেবে৷
getAuthenticatorId() বর্তমান মুখ সেটের সাথে যুক্ত একটি শনাক্তকারী প্রদান করে। যখনই একটি মুখ যোগ করা হয় তখন এই শনাক্তকারীকে অবশ্যই পরিবর্তন করতে হবে৷

রাষ্ট্র চিত্রটি

ফ্রেমওয়ার্ক নীচের রাষ্ট্র চিত্র অনুসরণ করার faced আশা করে।

রাষ্ট্র চিত্রটি
চিত্র 2. মুখের প্রমাণীকরণ অবস্থার প্রবাহ