ফিঙ্গারপ্রিন্ট সেন্সরযুক্ত ডিভাইসগুলিতে, ব্যবহারকারীরা এক বা একাধিক ফিঙ্গারপ্রিন্ট নথিভুক্ত করতে পারেন এবং সেই ফিঙ্গারপ্রিন্টগুলি ব্যবহার করে ডিভাইসটি আনলক করতে এবং অন্যান্য কাজ সম্পাদন করতে পারেন। অ্যান্ড্রয়েড ফিঙ্গারপ্রিন্ট হার্ডওয়্যার ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (HIDL) ব্যবহার করে একটি বিক্রেতা-নির্দিষ্ট লাইব্রেরি এবং ফিঙ্গারপ্রিন্ট হার্ডওয়্যারের (উদাহরণস্বরূপ, একটি ফিঙ্গারপ্রিন্ট সেন্সর) সাথে সংযোগ স্থাপন করে।
ফিঙ্গারপ্রিন্ট HIDL বাস্তবায়নের জন্য, আপনাকে একটি বিক্রেতা-নির্দিষ্ট লাইব্রেরিতে IBiometricsFingerprint.hal বাস্তবায়ন করতে হবে।
আঙুলের ছাপ মেলানো
একটি ডিভাইসের ফিঙ্গারপ্রিন্ট সেন্সর সাধারণত নিষ্ক্রিয় থাকে। তবে, authenticate বা enroll জন্য একটি কলের প্রতিক্রিয়ায়, ফিঙ্গারপ্রিন্ট সেন্সর একটি স্পর্শের জন্য শোনে (যখন কোনও ব্যবহারকারী ফিঙ্গারপ্রিন্ট সেন্সর স্পর্শ করেন তখন স্ক্রিনটি জেগে উঠতে পারে)। ফিঙ্গারপ্রিন্ট ম্যাচিংয়ের উচ্চ-স্তরের প্রবাহে নিম্নলিখিত পদক্ষেপগুলি অন্তর্ভুক্ত থাকে:
- ব্যবহারকারী ফিঙ্গারপ্রিন্ট সেন্সরে আঙুল রাখেন।
- বিক্রেতা-নির্দিষ্ট লাইব্রেরি নির্ধারণ করে যে বর্তমান নথিভুক্ত ফিঙ্গারপ্রিন্ট টেমপ্লেটের সেটে ফিঙ্গারপ্রিন্ট মিল আছে কিনা।
- মিলিত ফলাফলগুলি
FingerprintServiceএ পাঠানো হয়।
এই প্রবাহ ধরে নেয় যে ডিভাইসে ইতিমধ্যেই একটি আঙুলের ছাপ নথিভুক্ত করা হয়েছে, অর্থাৎ, বিক্রেতা-নির্দিষ্ট লাইব্রেরি আঙুলের ছাপের জন্য একটি টেমপ্লেট নথিভুক্ত করেছে। আরও বিস্তারিত জানার জন্য, প্রমাণীকরণ দেখুন।
স্থাপত্য
ফিঙ্গারপ্রিন্ট HAL নিম্নলিখিত উপাদানগুলির সাথে মিথস্ক্রিয়া করে।
-
BiometricManagerএকটি অ্যাপ প্রক্রিয়ায় সরাসরি একটি অ্যাপের সাথে ইন্টারঅ্যাক্ট করে। প্রতিটি অ্যাপেIBiometricsFingerprint.halএর একটি উদাহরণ থাকে। -
FingerprintServiceসিস্টেম প্রক্রিয়ায় কাজ করে, যা ফিঙ্গারপ্রিন্ট HAL এর সাথে যোগাযোগ পরিচালনা করে। - ফিঙ্গারপ্রিন্ট HAL হল IBiometricsFingerprint HIDL ইন্টারফেসের একটি C/C++ বাস্তবায়ন। এতে বিক্রেতা-নির্দিষ্ট লাইব্রেরি রয়েছে যা ডিভাইস-নির্দিষ্ট হার্ডওয়্যারের সাথে যোগাযোগ করে।
- কীস্টোর এপিআই এবং কীমিন্ট (পূর্বে কীমাস্টার) উপাদানগুলি বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট (TEE) এর মতো নিরাপদ পরিবেশে নিরাপদ কী স্টোরেজের জন্য হার্ডওয়্যার-সমর্থিত ক্রিপ্টোগ্রাফি প্রদান করে।

একটি বিক্রেতা-নির্দিষ্ট HAL বাস্তবায়নে অবশ্যই TEE-এর জন্য প্রয়োজনীয় যোগাযোগ প্রোটোকল ব্যবহার করতে হবে। কাঁচা ছবি এবং প্রক্রিয়াজাত ফিঙ্গারপ্রিন্ট বৈশিষ্ট্যগুলি অবিশ্বস্ত মেমোরিতে প্রেরণ করা উচিত নয়। এই জাতীয় সমস্ত বায়োমেট্রিক ডেটা TEE-এর মতো সুরক্ষিত হার্ডওয়্যারে সংরক্ষণ করা প্রয়োজন। রুটিং বায়োমেট্রিক ডেটার সাথে আপস করতে সক্ষম হবে না ।
FingerprintService এবং fingerprintd ফিঙ্গারপ্রিন্ট HAL এর মাধ্যমে বিক্রেতা-নির্দিষ্ট লাইব্রেরিতে কল করে আঙুলের ছাপ নথিভুক্ত করতে এবং অন্যান্য ক্রিয়াকলাপ সম্পাদন করতে।

বাস্তবায়ন নির্দেশিকা
নিম্নলিখিত ফিঙ্গারপ্রিন্ট HAL নির্দেশিকাগুলি নিশ্চিত করার জন্য ডিজাইন করা হয়েছে যে ফিঙ্গারপ্রিন্ট ডেটা ফাঁস না হয় এবং যখন কোনও ব্যবহারকারীকে ডিভাইস থেকে সরিয়ে দেওয়া হয় তখন তা সরিয়ে ফেলা হয়:
- সেন্সর ড্রাইভার বা TEE-এর বাইরে থেকে কাঁচা ফিঙ্গারপ্রিন্ট ডেটা বা ডেরিভেটিভস (উদাহরণস্বরূপ, টেমপ্লেট) কখনই অ্যাক্সেসযোগ্য হবে না। যদি হার্ডওয়্যারটি TEE সমর্থন করে, তাহলে হার্ডওয়্যার অ্যাক্সেস TEE-এর মধ্যে সীমাবদ্ধ থাকতে হবে এবং SELinux নীতি দ্বারা সুরক্ষিত থাকতে হবে। সিরিয়াল পেরিফেরাল ইন্টারফেস (SPI) চ্যানেলটি শুধুমাত্র TEE-এর জন্য অ্যাক্সেসযোগ্য হতে হবে এবং সমস্ত ডিভাইস ফাইলে একটি স্পষ্ট SELinux নীতি থাকতে হবে।
- আঙুলের ছাপ অর্জন, তালিকাভুক্তি এবং স্বীকৃতি অবশ্যই TEE-এর মধ্যেই ঘটতে হবে।
- ফাইল সিস্টেমটি এনক্রিপ্ট করা থাকলেও, শুধুমাত্র আঙুলের ছাপের তথ্যের এনক্রিপ্ট করা ফর্মটি ফাইল সিস্টেমে সংরক্ষণ করা যেতে পারে।
- ফিঙ্গারপ্রিন্ট টেমপ্লেটগুলি অবশ্যই একটি ব্যক্তিগত, ডিভাইস-নির্দিষ্ট কী দিয়ে স্বাক্ষরিত হতে হবে। অ্যাডভান্সড এনক্রিপশন স্ট্যান্ডার্ড (AES) এর জন্য, কমপক্ষে একটি টেমপ্লেটকে অবশ্যই পরম ফাইল-সিস্টেম পাথ, গ্রুপ এবং ফিঙ্গার আইডি দিয়ে স্বাক্ষরিত হতে হবে যাতে টেমপ্লেট ফাইলগুলি অন্য ডিভাইসে বা একই ডিভাইসে নথিভুক্ত ব্যবহারকারী ছাড়া অন্য কারও জন্য অকার্যকর হয়। উদাহরণস্বরূপ, একই ডিভাইসে বা অন্য ডিভাইস থেকে ভিন্ন ব্যবহারকারীর ফিঙ্গারপ্রিন্ট ডেটা অনুলিপি করা কাজ করবে না।
- বাস্তবায়নের জন্য
setActiveGroup()ফাংশন দ্বারা প্রদত্ত ফাইল-সিস্টেম পাথ ব্যবহার করতে হবে অথবা ব্যবহারকারীকে অপসারণের সময় সমস্ত ব্যবহারকারীর টেমপ্লেট ডেটা মুছে ফেলার উপায় প্রদান করতে হবে। ফিঙ্গারপ্রিন্ট টেমপ্লেট ফাইলগুলিকে এনক্রিপ্ট করা হিসাবে সংরক্ষণ করা এবং প্রদত্ত পাথে সংরক্ষণ করা দৃঢ়ভাবে সুপারিশ করা হচ্ছে। TEE স্টোরেজ প্রয়োজনীয়তার কারণে যদি এটি অসম্ভব হয়, তাহলে ব্যবহারকারীকে অপসারণের সময় ডেটা অপসারণ নিশ্চিত করার জন্য বাস্তবায়নকারীকে হুক যুক্ত করতে হবে।
আঙুলের ছাপ পদ্ধতি
IBiometricsFingerprint.hal এ ফিঙ্গারপ্রিন্ট HIDL ইন্টারফেসে নিম্নলিখিত প্রধান পদ্ধতিগুলি রয়েছে।
| পদ্ধতি | বিবরণ |
|---|---|
enroll() | একটি ফিঙ্গারপ্রিন্ট টেমপ্লেট সংগ্রহ এবং সংরক্ষণ শুরু করতে HAL স্টেট মেশিনটি পরিবর্তন করে। তালিকাভুক্তি সম্পূর্ণ হলে, অথবা সময়সীমা শেষ হওয়ার পরে, HAL স্টেট মেশিনটি নিষ্ক্রিয় অবস্থায় ফিরে আসে। |
preEnroll() | ফিঙ্গারপ্রিন্ট তালিকাভুক্তির শুরু নির্দেশ করার জন্য একটি অনন্য টোকেন তৈরি করে। পূর্বে প্রমাণীকরণ নিশ্চিত করার জন্য, উদাহরণস্বরূপ, একটি পাসওয়ার্ড ব্যবহার করা হয়েছে, enroll ফাংশনে একটি টোকেন প্রদান করে। টেম্পারিং প্রতিরোধ করার জন্য, ডিভাইসের শংসাপত্র নিশ্চিত হওয়ার পরে টোকেনটি মোড়ানো হয়। টোকেনটি এখনও বৈধ কিনা তা যাচাই করার জন্য তালিকাভুক্তির সময় পরীক্ষা করতে হবে। |
getAuthenticatorId() | বর্তমান ফিঙ্গারপ্রিন্ট সেটের সাথে সম্পর্কিত একটি টোকেন প্রদান করে। |
cancel() | মুলতুবি থাকা নথিভুক্তি বা প্রমাণীকরণ কার্যক্রম বাতিল করে। HAL স্টেট মেশিনটি নিষ্ক্রিয় অবস্থায় ফিরিয়ে আনা হয়। |
enumerate() | সকল পরিচিত ফিঙ্গারপ্রিন্ট টেমপ্লেট গণনার জন্য সিঙ্ক্রোনাস কল। |
remove() | একটি ফিঙ্গারপ্রিন্ট টেমপ্লেট মুছে ফেলে। |
setActiveGroup() | একটি HAL অপারেশনকে একটি নির্দিষ্ট গোষ্ঠীর আঙুলের ছাপের সেটের মধ্যে সীমাবদ্ধ করে, যা একটি গোষ্ঠী শনাক্তকারী (GID) দ্বারা চিহ্নিত। |
authenticate() | একটি আঙুলের ছাপ-সম্পর্কিত অপারেশন (একটি অপারেশন আইডি দ্বারা চিহ্নিত) প্রমাণীকরণ করে। |
setNotify() | HAL থেকে বিজ্ঞপ্তি গ্রহণকারী একটি ব্যবহারকারী ফাংশন নিবন্ধন করে। যদি HAL স্টেট মেশিনটি ব্যস্ত অবস্থায় থাকে, তাহলে HAL ব্যস্ত অবস্থা থেকে বেরিয়ে না আসা পর্যন্ত ফাংশনটি ব্লক থাকে। |
postEnroll() | এনরোল অপারেশন সম্পন্ন করে এবং preEnroll() জেনারেটেড চ্যালেঞ্জ বাতিল করে। মাল্টি-ফিঙ্গার এনরোলমেন্ট সেশনের শেষে এটি করতে হবে যাতে বোঝা যায় যে আর কোনও আঙুল যোগ করা যাবে না। |
এ সম্পর্কে আরও বিস্তারিত জানার জন্য, IBiometricsFingerprint.hal এর মন্তব্যগুলি দেখুন।