আঙুলের ছাপ HIDL

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

ফিঙ্গারপ্রিন্ট HIDL বাস্তবায়ন করতে, আপনাকে অবশ্যই IBiometricsFingerprint.hal একটি বিক্রেতা-নির্দিষ্ট লাইব্রেরিতে প্রয়োগ করতে হবে।

ফিঙ্গারপ্রিন্ট ম্যাচিং

একটি ডিভাইসের ফিঙ্গারপ্রিন্ট সেন্সর সাধারণত নিষ্ক্রিয় থাকে। যাইহোক, authenticate বা enroll জন্য একটি কলের প্রতিক্রিয়া হিসাবে, ফিঙ্গারপ্রিন্ট সেন্সর একটি স্পর্শের জন্য শোনে (যখন কোনো ব্যবহারকারী ফিঙ্গারপ্রিন্ট সেন্সর স্পর্শ করে তখন স্ক্রীনটিও জেগে উঠতে পারে)। ফিঙ্গারপ্রিন্ট মিলের উচ্চ-স্তরের প্রবাহে নিম্নলিখিত ধাপগুলি অন্তর্ভুক্ত রয়েছে:

  1. ব্যবহারকারী ফিঙ্গারপ্রিন্ট সেন্সরে একটি আঙুল রাখে।
  2. নথিভুক্ত ফিঙ্গারপ্রিন্ট টেমপ্লেটের বর্তমান সেটে আঙ্গুলের ছাপ মিল আছে কিনা তা বিক্রেতা-নির্দিষ্ট লাইব্রেরি নির্ধারণ করে।
  3. ম্যাচিং ফলাফল FingerprintService পাঠানো হয়।

এই প্রবাহটি অনুমান করে যে একটি আঙ্গুলের ছাপ ইতিমধ্যেই ডিভাইসে নথিভুক্ত করা হয়েছে, অর্থাৎ, বিক্রেতা-নির্দিষ্ট লাইব্রেরি আঙ্গুলের ছাপের জন্য একটি টেমপ্লেট নথিভুক্ত করেছে৷ আরো বিস্তারিত জানার জন্য, প্রমাণীকরণ দেখুন।

স্থাপত্য

ফিঙ্গারপ্রিন্ট HAL নিম্নলিখিত উপাদানগুলির সাথে যোগাযোগ করে।

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

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

FingerprintService এবং fingerprintd ফিঙ্গারপ্রিন্ট এইচএএল-এর মাধ্যমে বিক্রেতা-নির্দিষ্ট লাইব্রেরিতে কল করে আঙ্গুলের ছাপ তালিকাভুক্ত করতে এবং অন্যান্য ক্রিয়াকলাপ সম্পাদন করতে।

ফিঙ্গারপ্রিন্টের সাথে মিথস্ক্রিয়া
চিত্র 2. আঙ্গুলের ছাপ বিক্রেতা-নির্দিষ্ট লাইব্রেরির সাথে ফিঙ্গারপ্রিন্ট ডেমনের মিথস্ক্রিয়া

বাস্তবায়ন নির্দেশিকা

নিম্নলিখিত ফিঙ্গারপ্রিন্ট এইচএএল নির্দেশিকাগুলি যাতে আঙ্গুলের ছাপ ডেটা ফাঁস না হয় তা নিশ্চিত করার জন্য ডিজাইন করা হয়েছে এবং যখন কোনও ব্যবহারকারীকে কোনও ডিভাইস থেকে সরানো হয় তখন তা সরানো হয়:

  • কাঁচা আঙ্গুলের ছাপ ডেটা বা ডেরিভেটিভস (উদাহরণস্বরূপ, টেমপ্লেট) সেন্সর ড্রাইভার বা TEE এর বাইরে থেকে কখনই অ্যাক্সেসযোগ্য হবে না। যদি হার্ডওয়্যারটি একটি TEE সমর্থন করে, তাহলে হার্ডওয়্যার অ্যাক্সেস অবশ্যই TEE এর মধ্যে সীমাবদ্ধ এবং একটি SELinux নীতি দ্বারা সুরক্ষিত থাকতে হবে। সিরিয়াল পেরিফেরাল ইন্টারফেস (SPI) চ্যানেলটি শুধুমাত্র TEE-এর কাছে অ্যাক্সেসযোগ্য হতে হবে এবং সমস্ত ডিভাইস ফাইলে একটি স্পষ্ট SELinux নীতি থাকতে হবে।
  • আঙুলের ছাপ অধিগ্রহণ, তালিকাভুক্তি, এবং স্বীকৃতি অবশ্যই TEE-এর মধ্যে ঘটতে হবে।
  • ফিঙ্গারপ্রিন্ট ডেটার শুধুমাত্র এনক্রিপ্ট করা ফর্ম ফাইল সিস্টেমে সংরক্ষণ করা যেতে পারে, এমনকি যদি ফাইল সিস্টেম নিজেই এনক্রিপ্ট করা হয়।
  • ফিঙ্গারপ্রিন্ট টেমপ্লেটগুলি অবশ্যই একটি ব্যক্তিগত, ডিভাইস-নির্দিষ্ট কী দিয়ে স্বাক্ষর করতে হবে৷ অ্যাডভান্সড এনক্রিপশন স্ট্যান্ডার্ড (AES) এর জন্য, ন্যূনতম একটি টেমপ্লেট অবশ্যই পরম ফাইল-সিস্টেম পাথ, গোষ্ঠী এবং আঙ্গুলের আইডি সহ স্বাক্ষরিত হতে হবে যাতে টেমপ্লেট ফাইলগুলি অন্য ডিভাইসে অকার্যকর হয় বা ব্যবহারকারী ব্যতীত অন্য কারও জন্য যারা তাদের নথিভুক্ত করেছে একই ডিভাইস। উদাহরণস্বরূপ, একই ডিভাইসে বা অন্য ডিভাইস থেকে অন্য ব্যবহারকারীর ফিঙ্গারপ্রিন্ট ডেটা অনুলিপি করা উচিত নয়।
  • ইমপ্লিমেন্টেশনগুলিকে অবশ্যই setActiveGroup() ফাংশন দ্বারা প্রদত্ত ফাইল-সিস্টেম পাথ ব্যবহার করতে হবে অথবা ব্যবহারকারীকে সরানো হলে সমস্ত ব্যবহারকারীর টেমপ্লেট ডেটা মুছে ফেলার উপায় প্রদান করতে হবে। এটি দৃঢ়ভাবে সুপারিশ করা হয় যে ফিঙ্গারপ্রিন্ট টেমপ্লেট ফাইলগুলিকে এনক্রিপ্ট করা এবং প্রদত্ত পাথে সংরক্ষণ করা হয়। যদি TEE স্টোরেজ প্রয়োজনীয়তার কারণে এটি অসম্ভাব্য হয়, তাহলে ব্যবহারকারীকে অপসারণ করার সময় প্রয়োগকারীকে ডেটা অপসারণ নিশ্চিত করতে হুক যোগ করতে হবে।

আঙুলের ছাপ পদ্ধতি

ফিঙ্গারপ্রিন্ট HIDL ইন্টারফেসে IBiometricsFingerprint.hal এ নিম্নলিখিত প্রধান পদ্ধতিগুলি রয়েছে।

পদ্ধতি বর্ণনা
enroll() একটি ফিঙ্গারপ্রিন্ট টেমপ্লেট সংগ্রহ এবং স্টোরেজ শুরু করতে HAL স্টেট মেশিনে স্যুইচ করে। তালিকাভুক্তি সম্পূর্ণ হলে, বা সময় শেষ হওয়ার পরে, HAL স্টেট মেশিন নিষ্ক্রিয় অবস্থায় ফিরে আসে।
preEnroll() একটি আঙ্গুলের ছাপ তালিকাভুক্তির শুরু নির্দেশ করতে একটি অনন্য টোকেন তৈরি করে। পূর্বে প্রমাণীকরণ ছিল তা নিশ্চিত করতে enroll ফাংশনে একটি টোকেন প্রদান করে, উদাহরণস্বরূপ, একটি পাসওয়ার্ড ব্যবহার করে। ট্যাম্পারিং প্রতিরোধ করতে, ডিভাইসের শংসাপত্র নিশ্চিত হওয়ার পরে টোকেনটি মোড়ানো হয়। টোকেনটি এখনও বৈধ কিনা তা যাচাই করার জন্য তালিকাভুক্তির সময় অবশ্যই চেক করতে হবে।
getAuthenticatorId() বর্তমান ফিঙ্গারপ্রিন্ট সেটের সাথে যুক্ত একটি টোকেন প্রদান করে।
cancel() মুলতুবি নথিভুক্তকরণ বা প্রমাণীকরণ কার্যক্রম বাতিল করে। HAL স্টেট মেশিন নিষ্ক্রিয় অবস্থায় ফিরে আসে।
enumerate() সমস্ত পরিচিত ফিঙ্গারপ্রিন্ট টেমপ্লেট গণনা করার জন্য সিঙ্ক্রোনাস কল।
remove() একটি ফিঙ্গারপ্রিন্ট টেমপ্লেট মুছে দেয়।
setActiveGroup() একটি নির্দিষ্ট গোষ্ঠীর অন্তর্গত আঙ্গুলের ছাপের একটি সেটে একটি HAL অপারেশনকে সীমাবদ্ধ করে, একটি গ্রুপ শনাক্তকারী (GID) দ্বারা চিহ্নিত৷
authenticate() একটি আঙ্গুলের ছাপ-সম্পর্কিত অপারেশন (একটি অপারেশন আইডি দ্বারা চিহ্নিত) প্রমাণীকরণ করে।
setNotify() একটি ব্যবহারকারী ফাংশন নিবন্ধন করে যা HAL থেকে বিজ্ঞপ্তি পায়। যদি HAL স্টেট মেশিনটি ব্যস্ত অবস্থায় থাকে, HAL ব্যস্ত অবস্থা ছেড়ে না যাওয়া পর্যন্ত ফাংশনটি অবরুদ্ধ থাকে।
postEnroll() এনরোল অপারেশন শেষ করে এবং preEnroll() জেনারেট করা চ্যালেঞ্জ বাতিল করে। এটিকে একটি মাল্টিফিঙ্গার এনরোলমেন্ট সেশনের শেষে কল করতে হবে যাতে ইঙ্গিত করা যায় যে আর কোন আঙ্গুল যোগ করা যাবে না।

এই বিষয়ে আরও বিস্তারিত জানার জন্য, IBiometricsFingerprint.hal এ মন্তব্যগুলি পড়ুন।