احراز هویت با اثر انگشت در زامارین

ایجاد CryptoObject

یکپارچگی نتایج احراز هویت اثر انگشت در اپلیکیشن مهم است و روش شناخت کاربر توسط اپلیکیشن است. به صورت تئوری ممکن است نرم افزارهای مخرب شخص ثالث، از نتایج بازگردانده شده توسط اسکنر اثر انگشت جلوگیری کرده و در آن مداخله کنند. در این بخش در مورد تکنیکی برای حفظ و اعتبار نتایج اثر انگشت بحث می شود.
FingerprintManager.CryptoObject یک wrapper روی Api ها cryptography جاواست و از FingerprintManager برای حفظ درستی درخواست احراز هویت استفاده می کند. به طور معمول، یک شی Javax.Crypto.Cipher مکانیسمی برای رمزنگاری نتایج اسکنر اثر انگشت است. آبجکت Cipher به خودی خود از یک کلید استفاده می کند که توسط اپلیکیشن و با استفاده از Apiهای keystore اندروید ایجاد شده است.
برای فهمیدن این که چگونه این کلاس ها با هم کار می کنند به کدهای زیر که نشان می دهد CryptoObject در زامارین چگونه ایجاد می شود نگاهی بیاندازیم و پس از آن جزئیات آن را بررسی کنیم:

نمونه کد زامارین بالا Cipher جدیدی برای CryptoObject ایجاد می کند و از کلیدی که اپلیکیشن تولید می کند استفاده می کند. این کلید با متغیر KEY_NAME شناخته می شود و در ابتدای کلاس CryptoObjectHelper ست شده است. متد GetKey سعی می کند کلیدهایی که در Api های Keystore اندروید استفاده شده است را دریافت کند. اگر کلیدی موجود نباشد متد CreateKey کلید جدیدی برای اپلیکیشن ایجاد می کند. cipher یک نمونه صدا زده شده از Cipher.GetInstance است و با transformation (یک مقدار رشته ای است که به cipher می گوید که چطور اطلاعات را encrypt و decrypt کند) صحبت می کند. با صدا زدن Cipher.Init مقدار دهی اولیه به cipher با ارائه یک کلید از اپلیکیشن به اتمام می رسد.

فهمیدن این که در چه شرایط اندروید کلید را باطل می کند مهم است:
1- اثر انگشت جدیدی در دستگاه ثبت شود
2- هیچ اثر انگشتی در دستگاه ثبت نشده باشد
3- کاربر قفل صفحه را غیرفعال کرده باشد
4- کاربر قفل صفحه را تغییر داده باشد (نوع قفل، پین کد یا الگوی قفل تغییر داده شده باشد)

هنگامی که این اتفاق می افتد، Cipher.Init یک KeyGenParameterSpec.Builder ایجاد می کند. KeyGenParameterSpec.Builder شامل اطلاعات زیر در مورد کلید ایجاد شده است:
1- نام کلید
2- کلید باید در هر دو حالت encrypt و decrypt معتبر باشد
3- در نمونه کد بالا BLOCK_MODE در Cipher Block Chaining (KeyProperties.BlockModeCbc) ست شده است که به منی XOR شدن بلاک قبل و بعد با هم است.(بین بلاک ها وابستگی ایجاد می کند)
4- CryptoObjectHelper از Public Key Cryptography Standard #7 (PKCS7) برای ایجاد بایت ها استفاده می کند تا از یک اندازه بودن همه آن ها اطمینان حاصل شود.
5- SetUserAuthenticationRequired(true) به معنای این است که احراز هویت کاربر قبل از استفاده از کلید مورد نیاز است
زمانی که KeyGenParameterSpec ایجاد شود، KeyGenerator مقدار دهی اولیه می شود تا کلید و محیطی امن برای دستگاه ایجاد کند.

استفاده از CryptoObjectHelper
اکنون که نمونه کد بیشتر منطق ها را برای ایجاد CryptoWrapper در کلاس CryptoObjectHelper کپسوله سازی کرد، اکنون مروری مجدد بر روی کد از ابتدای این راهنما داشته باشیم و از CryptoObjectHelper برای ایجاد Cipher و شروع اسکن اثر انگشت استفاده کنیم.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

6 + 2 =