Android Keystore সিস্টেম আপনাকে একটি কন্টেনারে ক্রিপ্টোগ্রাফিক কী স্টোর করতে দেয় যাতে ডিভাইস থেকে সেগুলি বের করা আরও কঠিন হয়। কীগুলি কীস্টোরে থাকলে, আপনি সেগুলিকে ক্রিপ্টোগ্রাফিক অপারেশনের জন্য ব্যবহার করতে পারেন, কী মেটেরিয়াল এক্সপোর্ট করা যাবে না। এছাড়াও, কীস্টোর সিস্টেম আপনাকে কখন এবং কীভাবে কী ব্যবহার করা যেতে পারে তা সীমাবদ্ধ করতে দেয়, যেমন কী ব্যবহারের জন্য ব্যবহারকারীর যাচাইকরণ প্রয়োজন বা নির্দিষ্ট ক্রিপ্টোগ্রাফিক মোডে ব্যবহারের জন্য কী সীমাবদ্ধ করা। আরও তথ্যের জন্য নিরাপত্তা ফিচার বিভাগ দেখুন।
Android 4.0 (API লেভেল ১৪)-এ চালু করা
KeyChain
API এবং Android 4.3 (API লেভেল ১৮)-এ চালু করা Android Keystore
প্রদানকারী ফিচার, Keystore সিস্টেম ব্যবহার করে। এই ডকুমেন্ট থেকে
Android Keystore সিস্টেম কখন ও কীভাবে ব্যবহার করতে হয় তা জানা যায়।
সুরক্ষা ফিচার
Android Keystore সিস্টেম, অননুমোদিত ব্যবহার থেকে 'কী' সংক্রান্ত মেটেরিয়ালকে দুটি উপায়ে সুরক্ষিত রাখে। প্রথমত, এটি Android ডিভাইসের বাইরে থেকে কী মেটেরিয়ালের অননুমোদিত ব্যবহারের ঝুঁকি কমায়। অ্যাপ্লিকেশন প্রসেস এবং Android ডিভাইস থেকে কী মেটেরিয়াল এক্সট্র্যাক্ট করা আটকানোর মাধ্যমে এটি করা হয়। দ্বিতীয়ত, অ্যাপকে তার 'কী'-এর অনুমোদিত ব্যবহার নির্দিষ্ট করতে দিয়ে এবং তারপরে অ্যাপের প্রসেসের বাইরে সেইসব বিধিনিষেধ এনফোর্স করার মাধ্যমে, কীস্টোর সিস্টেম Android ডিভাইসের মধ্যে 'কী' মেটেরিয়ালের অননুমোদিত ব্যবহারের ঝুঁকি কমায়।
এক্সট্র্যাকশন প্রতিরোধ
Android Keystore কী-এর গুরুত্বপূর্ণ তথ্য এক্সট্র্যাক্ট করা থেকে সুরক্ষিত রাখতে দুটি নিরাপত্তা ব্যবস্থা ব্যবহার করা হয়:
- 'কী' মেটেরিয়াল কখনও অ্যাপ্লিকেশন প্রসেসে প্রবেশ করে না। কোনও অ্যাপ Android Keystore কী ব্যবহার করে ক্রিপ্টোগ্রাফিক অপারেশন পারফর্ম করলে, ব্যাকগ্রাউন্ডে প্লেনটেক্সট, সাইফারটেক্সট এবং সাইন বা যাচাই করতে হবে এমন মেসেজ সিস্টেম প্রসেসে পাঠানো হয় যা ক্রিপ্টোগ্রাফিক অপারেশন সম্পন্ন করে। অ্যাপের প্রসেস যদি হ্যাক হয়ে যায়, তাহলে হ্যাকার অ্যাপের 'কী' ব্যবহার করতে পারলেও, 'কী' সংক্রান্ত তথ্য বের করতে পারবে না (যেমন, Android ডিভাইসের বাইরে ব্যবহার করার জন্য)।
- কী মেটেরিয়াল Android ডিভাইসের নিরাপদ হার্ডওয়্যারের সাথে বাউন্ড করা যেতে পারে, যেমন
বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট (TEE) অথবা
নিরাপদ উপাদান (SE)। কোনও 'কী'-এর জন্য এই ফিচার চালু করা থাকলে, তার 'কী'
মেটেরিয়াল সুরক্ষিত হার্ডওয়্যারের বাইরে কখনও প্রকাশ করা হয় না। Android OS-এর নিরাপত্তা বিঘ্নিত হলে বা কোনও
আক্রমণকারী ডিভাইসের ইন্টার্নাল স্টোরেজ পড়তে পারলে, আক্রমণকারী Android ডিভাইসে যেকোনও অ্যাপের Android
Keystore কী ব্যবহার করতে পারবে, তবে ডিভাইস থেকে সেগুলি এক্সট্র্যাক্ট করতে পারবে না। এই ফিচারটি শুধুমাত্র তখনই চালু করা হয়
যদি ডিভাইসের সুরক্ষিত হার্ডওয়্যার কী অ্যালগরিদম, ব্লক মোড, প্যাডিং স্কিম এবং ডাইজেস্টের নির্দিষ্ট কম্বিনেশনকে সমর্থন করে যার সাথে কী ব্যবহার করার জন্য অনুমোদিত।
কোনও 'কী'-এর জন্য ফিচারটি চালু করা আছে কিনা তা চেক করতে, 'কী'-এর জন্য একটি
KeyInfoপান। পরবর্তী ধাপ আপনার অ্যাপের টার্গেট SDK ভার্সনের উপর নির্ভর করে:- আপনার অ্যাপ Android 10 (API লেভেল 29) বা তার পরবর্তী যেকোনও ভার্সনকে টার্গেট করলে,
getSecurityLevel()-এর রিটার্ন ভ্যালু পরীক্ষা করুন। রিটার্ন ভ্যালুKeyProperties.SecurityLevelEnum.TRUSTED_ENVIRONMENTবাKeyProperties.SecurityLevelEnum.STRONGBOX-এর সাথে ম্যাচ করলে বুঝতে হবে যে 'কী' নিরাপদ হার্ডওয়্যারের মধ্যে আছে। - আপনার অ্যাপ Android 9 (API লেভেল 28) বা তার আগের যেকোনও ভার্সনকে টার্গেট করলে,
KeyInfo.isInsideSecurityHardware()-এর বুলিয়ান রিটার্ন ভ্যালু পরীক্ষা করুন।
- আপনার অ্যাপ Android 10 (API লেভেল 29) বা তার পরবর্তী যেকোনও ভার্সনকে টার্গেট করলে,
StrongBox KeyMint নিরাপদ উপাদান
Android 9 (API লেভেল ২৮) বা তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসে StrongBox KeyMint থাকতে পারে, যা KeyMint HAL-এর একটি ইমপ্লিমেন্টেশন এবং StrongBox দ্বারা সমর্থিত। হার্ডওয়্যার নিরাপত্তা মডিউল (HSM) বলতে সাধারণত Linux কার্নেল কম্প্রোমাইজ প্রতিরোধ করতে পারে এমন সুরক্ষিত কী স্টোরেজ সমাধানকে বোঝায়, StrongBox বিশেষভাবে এম্বেড করা SE বা ইন্টিগ্রেটেড Secure Enclave (iSE)-এ প্রয়োগ করাকে বোঝায়, যা TEE-এর তুলনায় আরও শক্তিশালী আইসোলেশন এবং টেম্পার প্রতিরোধ প্রদান করে।
StrongBox KeyMint-এর প্রয়োগে নিম্নলিখিত বিষয়গুলি থাকতে হবে:
- এর নিজস্ব CPU
- সুরক্ষিত স্টোরেজ
- একটি আসল র্যান্ডম-নম্বর জেনারেটর
- প্যাকেজ টেম্পারিং এবং অ্যাপের অননুমোদিত সাইডলোডিং প্রতিরোধ করার জন্য অতিরিক্ত মেকানিজম
- একটি নিরাপদ টাইমার
- রিবুট বিজ্ঞপ্তি পিন (বা সমতুল্য), যেমন সাধারণ-উদ্দেশ্য ইনপুট/আউটপুট (GPIO)
কম-পাওয়ার StrongBox ইমপ্লিমেন্টেশন অ্যাকোমোডেট করার জন্য অ্যালগরিদম ও 'কী'-এর সাইজের সাবসেট কাজ করে:
- RSA 2048
- AES 128 এবং 256
- ECDSA, ECDH P-256
- HMAC-SHA256 (৮ বাইট থেকে ৬৪ বাইটের মধ্যে কী-এর সাইজ কাজ করে)
- ট্রিপল DES
- এক্সটেন্ডেড লেংথ APDU
StrongBox-এ Key Attestation-ও কাজ করে।
StrongBox KeyMint ব্যবহার করুন
কোনও ডিভাইসে StrongBox উপলভ্য আছে কিনা তা চেক করতে FEATURE_STRONGBOX_KEYSTORE ব্যবহার করুন। StrongBox উপলভ্য থাকলে, আপনি নিম্নলিখিত পদ্ধতিতে true পাস করে StrongBox KeyMint-এ 'কী' সেভ করার জন্য
পছন্দ উল্লেখ করতে পারেন:
- কী জেনারেশন:
KeyGenParameterSpec.Builder.setIsStrongBoxBacked() - কী ইমপোর্ট:
KeyProtection.Builder.setIsStrongBoxBacked()
StrongBox KeyMint নির্দিষ্ট করা অ্যালগরিদম বা কি-এর সাইজ সাপোর্ট না করলে,
ফ্রেমওয়ার্ক StrongBoxUnavailableException থ্রো করবে। এটি হলে, setIsStrongBoxBacked(true)-কে কল না করে
কী তৈরি বা ইমপোর্ট করুন।
'কী' ব্যবহারের অনুমোদন
Android ডিভাইসে 'কী'-এর অননুমোদিত ব্যবহার এড়াতে, Android Keystore, অ্যাপকে 'কী' তৈরি বা ইমপোর্ট করার সময় তার অনুমোদিত ব্যবহার নির্দিষ্ট করতে দেয়। কোনও 'কী' জেনারেট বা ইমপোর্ট করা হয়ে গেলে, সেটির অথরাইজেশন পরিবর্তন করা যাবে না। তারপর, যখনই 'কী' ব্যবহার করা হয়, তখনই Android Keystore-এর মাধ্যমে অনুমোদন এনফোর্স করা হয়। এটি একটি উন্নত নিরাপত্তা ফিচার যা সাধারণত তখনই উপযোগী হয় যখন আপনার প্রয়োজনীয়তা হল যে কী তৈরি/ইমপোর্ট করার পরে (কিন্তু আগে বা চলাকালীন নয়) আপনার অ্যাপ্লিকেশন প্রসেসের সাথে আপস করলে কী-এর অননুমোদিত ব্যবহার করা যাবে না।
কাজ করে এমন কী ব্যবহারের অনুমতি নিম্নলিখিত বিভাগে পড়ে:
- ক্রিপ্টোগ্রাফি: 'কী' শুধুমাত্র অনুমোদিত 'কী' অ্যালগরিদম, অপারেশন বা উদ্দেশ্যে (এনক্রিপ্ট, ডিক্রিপ্ট, সাইন, যাচাই), প্যাডিং স্কিম, ব্লক মোড বা ডাইজেস্টের সাথে ব্যবহার করা যেতে পারে।
- টেম্পোরাল বৈধতার ইন্টারভাল: 'কী' শুধুমাত্র নির্দিষ্ট সময়ের ইন্টারভালে ব্যবহারের জন্য অনুমোদিত।
- ব্যবহারকারীর পরিচয় যাচাইকরণ: ব্যবহারকারীর পরিচয় সম্প্রতি যাচাই করা হয়ে থাকলে তবেই 'কী' ব্যবহার করা যাবে। কী ব্যবহারের জন্য ব্যবহারকারীর যাচাইকরণ প্রয়োজন দেখুন।
যেসব 'কী'-এর 'কী' মেটেরিয়াল সুরক্ষিত হার্ডওয়্যারের মধ্যে থাকে (দেখুন
KeyInfo.isInsideSecurityHardware()
অথবা, Android 10 (API লেভেল ২৯) বা তার পরবর্তী ভার্সনকে টার্গেট করা অ্যাপের জন্য,
KeyInfo.getSecurityLevel()),
সেগুলির জন্য অতিরিক্ত নিরাপত্তা ব্যবস্থা হিসেবে, Android ডিভাইসের উপর নির্ভর করে,
কিছু 'কী' ব্যবহারের অনুমোদন সুরক্ষিত হার্ডওয়্যার দ্বারা এনফোর্স করা হতে পারে।
সুরক্ষিত হার্ডওয়্যার সাধারণত ক্রিপ্টোগ্রাফিক এবং ব্যবহারকারীর পরিচয় যাচাইকরণ
অনুমোদন এনফোর্স করে। তবে, সুরক্ষিত হার্ডওয়্যার সাধারণত টেম্পোরাল বৈধতার ইন্টারভ্যাল অথরাইজেশন এনফোর্স করে না, কারণ সাধারণত এতে কোনও স্বতন্ত্র, সুরক্ষিত রিয়েল-টাইম ক্লক থাকে না।
আপনি কোয়েরি করতে পারেন যে কোনও 'কী'-এর ব্যবহারকারী যাচাইকরণ অনুমোদন,
KeyInfo.isUserAuthenticationRequirementEnforcedBySecureHardware() ব্যবহার করে
নিরাপদ হার্ডওয়্যার দ্বারা এনফোর্স করা হয়েছে কিনা।
কীচেন ও Android Keystore প্রোভাইডারের মধ্যে থেকে বেছে নিন
সিস্টেম-ব্যাপী ক্রেডেনশিয়াল চাইলে
KeyChain API ব্যবহার করুন। কোনও অ্যাপ KeyChain API-এর মাধ্যমে কোনও ক্রেডেনশিয়াল
ব্যবহারের অনুরোধ করলে, ব্যবহারকারীরা
সিস্টেম-প্রদত্ত UI-এর মাধ্যমে বেছে নিতে পারবেন যে ইনস্টল করা ক্রেডেনশিয়ালের মধ্যে
কোনটি অ্যাপ অ্যাক্সেস করতে পারবে। এটি ব্যবহারকারীর সম্মতি নিয়ে একাধিক অ্যাপকে একই ক্রেডেনশিয়াল সেট ব্যবহার করতে দেয়।
Android Keystore প্রদানকারী ব্যবহার করে কোনও স্বতন্ত্র অ্যাপকে তার নিজস্ব ক্রেডেনশিয়াল স্টোর করতে দিন, যা শুধুমাত্র সেই অ্যাপই অ্যাক্সেস করতে পারবে।
এটি অ্যাপকে এমন ক্রেডেনশিয়াল ম্যানেজ করার সুবিধা দেয় যা শুধু তারাই ব্যবহার করতে পারবে
এবং একই সাথে এটি
KeyChain API-এর মতো সিস্টেম-ব্যাপী ক্রেডেনশিয়ালের জন্য একই ধরনের নিরাপত্তা সংক্রান্ত সুবিধা প্রদান করে।
এই পদ্ধতিতে ব্যবহারকারীকে ক্রেডেনশিয়াল বেছে নিতে হয় না।
Android Keystore প্রোভাইডার ব্যবহার করা
এই ফিচার ব্যবহার করতে, আপনাকে Android 4.3 (API লেভেল ১৮)-এ চালু করা
AndroidKeyStore প্রোভাইডারের সাথে স্ট্যান্ডার্ড KeyStore
এবং KeyPairGenerator অথবা
KeyGenerator ক্লাস ব্যবহার করতে হবে।
AndroidKeyStore-কে KeyStore ধরনের হিসেবে রেজিস্টার করা হয়েছে যাতে KeyStore.getInstance(type)
পদ্ধতির সাথে ব্যবহার করা যায় এবং KeyPairGenerator.getInstance(algorithm, provider) ও KeyGenerator.getInstance(algorithm, provider) পদ্ধতির সাথে ব্যবহার করার জন্য পরিষেবা প্রদানকারী হিসেবে রেজিস্টার করা হয়েছে।
ক্রিপ্টোগ্রাফিক অপারেশন করতে সময় লাগতে পারে, তাই অ্যাপের UI যাতে রেসপন্সিভ থাকে তা নিশ্চিত করতে,
অ্যাপের প্রধান থ্রেডে AndroidKeyStore ব্যবহার করা এড়িয়ে চলা উচিত। (StrictMode আপনাকে এমন জায়গা খুঁজে পেতে সাহায্য করতে পারে যেখানে এই সমস্যা নেই।)
নতুন ব্যক্তিগত বা গোপন 'কী' জেনারেট করুন
PrivateKey সহ
নতুন KeyPair জেনারেট করতে,
আপনাকে সার্টিফিকেটের প্রাথমিক X.509 অ্যাট্রিবিউট উল্লেখ করতে হবে। আপনি
KeyStore.setKeyEntry()
ব্যবহার করে পরে সার্টিফিকেটটি কোনও সার্টিফিকেট অথরিটির (CA)
স্বাক্ষর করা সার্টিফিকেট দিয়ে পরিবর্তন করতে পারবেন।
কী পেয়ার তৈরি করতে, KeyGenParameterSpec-এর সাথে KeyPairGenerator
ব্যবহার করুন:
Kotlin
/* * Generate a new EC key pair entry in the Android Keystore by * using the KeyPairGenerator API. The private key can only be * used for signing or verification and only with SHA-256 or * SHA-512 as the message digest. */ val kpg: KeyPairGenerator = KeyPairGenerator.getInstance( KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore" ) val parameterSpec: KeyGenParameterSpec = KeyGenParameterSpec.Builder( alias, KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY ).run { setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512) build() } kpg.initialize(parameterSpec) val kp = kpg.generateKeyPair()
জাভা
/* * Generate a new EC key pair entry in the Android Keystore by * using the KeyPairGenerator API. The private key can only be * used for signing or verification and only with SHA-256 or * SHA-512 as the message digest. */ KeyPairGenerator kpg = KeyPairGenerator.getInstance( KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore"); kpg.initialize(new KeyGenParameterSpec.Builder( alias, KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY) .setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512) .build()); KeyPair kp = kpg.generateKeyPair();
নিরাপদ হার্ডওয়্যারে এনক্রিপ্ট করা কী ইমপোর্ট করুন
Android 9 (API লেভেল 28) এবং তার পরবর্তী ভার্সন আপনাকে ASN.1‑এনকোড করা কী ফর্ম্যাট ব্যবহার করে নিরাপদে কীস্টোরে এনক্রিপ্ট করা কী ইমপোর্ট করতে দেয়। তারপর, Keymaster, keystore-এ থাকা 'কী' ডিক্রিপ্ট করে, যাতে 'কী'-এর কন্টেন্ট ডিভাইসের হোস্ট মেমরিতে কখনও প্লেইনটেক্সট হিসেবে দেখা না যায়। এই প্রসেস অতিরিক্ত 'কী' ডিক্রিপশন নিরাপত্তা প্রদান করে।
কীস্টোরে এনক্রিপ্ট করা কী নিরাপদে ইমপোর্ট করার জন্য, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:
PURPOSE_WRAP_KEYউদ্দেশ্য ব্যবহার করে এমন একটি কী পেয়ার তৈরি করুন। আমরা সাজেস্ট করি যে আপনি এই কী পেয়ারেও অ্যাটেস্টেশন যোগ করুন।আপনার বিশ্বস্ত কোনও সার্ভার বা মেশিনে,
SecureKeyWrapper-এর জন্য ASN.1 মেসেজ জেনারেট করুন।র্যাপারে নিম্নলিখিত স্কিমা থাকে:
KeyDescription ::= SEQUENCE { keyFormat INTEGER, authorizationList AuthorizationList } SecureKeyWrapper ::= SEQUENCE { wrapperFormatVersion INTEGER, encryptedTransportKey OCTET_STRING, initializationVector OCTET_STRING, keyDescription KeyDescription, secureKey OCTET_STRING, tag OCTET_STRING }একটি
WrappedKeyEntryঅবজেক্ট তৈরি করুন, ASN.1 মেসেজকে বাইট অ্যারে হিসেবে পাস করুন।এই
WrappedKeyEntryঅবজেক্টটিsetEntry()-এর ওভারলোডে পাস করুন যাKeystore.Entryঅবজেক্ট গ্রহণ করে।
কীস্টোর এন্ট্রি নিয়ে কাজ করা
আপনি সব স্ট্যান্ডার্ড KeyStore API-এর মাধ্যমে
AndroidKeyStore প্রোভাইডার অ্যাক্সেস করতে পারবেন।
এন্ট্রির তালিকা
aliases() মেথড কল করে কীস্টোরে এন্ট্রি তালিকাভুক্ত করুন:
Kotlin
/* * Load the Android KeyStore instance using the * AndroidKeyStore provider to list the currently stored entries. */ val ks: KeyStore = KeyStore.getInstance("AndroidKeyStore").apply { load(null) } val aliases: Enumeration<String> = ks.aliases()
জাভা
/* * Load the Android KeyStore instance using the * AndroidKeyStore provider to list the currently stored entries. */ KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); ks.load(null); Enumeration<String> aliases = ks.aliases();
ডেটা সাইন ও যাচাই করা
কীস্টোর থেকে KeyStore.Entry ফেচ করে এবং Signature API ব্যবহার করে ডেটা সাইন করুন, যেমন sign():
Kotlin
/* * Use a PrivateKey in the KeyStore to create a signature over * some data. */ val ks: KeyStore = KeyStore.getInstance("AndroidKeyStore").apply { load(null) } val entry: KeyStore.Entry = ks.getEntry(alias, null) if (entry !is KeyStore.PrivateKeyEntry) { Log.w(TAG, "Not an instance of a PrivateKeyEntry") return null } val signature: ByteArray = Signature.getInstance("SHA256withECDSA").run { initSign(entry.privateKey) update(data) sign() }
জাভা
/* * Use a PrivateKey in the KeyStore to create a signature over * some data. */ KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); ks.load(null); KeyStore.Entry entry = ks.getEntry(alias, null); if (!(entry instanceof PrivateKeyEntry)) { Log.w(TAG, "Not an instance of a PrivateKeyEntry"); return null; } Signature s = Signature.getInstance("SHA256withECDSA"); s.initSign(((PrivateKeyEntry) entry).getPrivateKey()); s.update(data); byte[] signature = s.sign();
একইভাবে, verify(byte[]) পদ্ধতি ব্যবহার করে ডেটা যাচাই করুন:
Kotlin
/* * Verify a signature previously made by a private key in the * KeyStore. This uses the X.509 certificate attached to the * private key in the KeyStore to validate a previously * generated signature. */ val ks = KeyStore.getInstance("AndroidKeyStore").apply { load(null) } val entry = ks.getEntry(alias, null) as? KeyStore.PrivateKeyEntry if (entry == null) { Log.w(TAG, "Not an instance of a PrivateKeyEntry") return false } val valid: Boolean = Signature.getInstance("SHA256withECDSA").run { initVerify(entry.certificate) update(data) verify(signature) }
জাভা
/* * Verify a signature previously made by a private key in the * KeyStore. This uses the X.509 certificate attached to the * private key in the KeyStore to validate a previously * generated signature. */ KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); ks.load(null); KeyStore.Entry entry = ks.getEntry(alias, null); if (!(entry instanceof PrivateKeyEntry)) { Log.w(TAG, "Not an instance of a PrivateKeyEntry"); return false; } Signature s = Signature.getInstance("SHA256withECDSA"); s.initVerify(((PrivateKeyEntry) entry).getCertificate()); s.update(data); boolean valid = s.verify(signature);
'কী' ব্যবহার করার জন্য ব্যবহারকারীর পরিচয় যাচাইকরণ প্রয়োজন
AndroidKeyStore-এ 'কী' জেনারেট বা ইমপোর্ট করার সময়, আপনি নির্দিষ্ট করে দিতে পারেন যে ব্যবহারকারীকে যাচাই করা হলে তবেই
'কী' ব্যবহার করার অনুমতি দেওয়া হবে। ব্যবহারকারীর সুরক্ষিত লক স্ক্রিন ক্রেডেনশিয়ালের (প্যাটার্ন/পিন/পাসওয়ার্ড, বায়োমেট্রিক ক্রেডেনশিয়াল)
সাবসেট ব্যবহার করে তাকে যাচাই করা হয়।
এটি একটি উন্নত নিরাপত্তা ফিচার যা সাধারণত তখনই উপযোগী হয় যখন আপনার প্রয়োজনীয়তা হল কী তৈরি/ইমপোর্ট করার পরে (কিন্তু আগে বা চলাকালীন নয়) আপনার অ্যাপ্লিকেশন প্রসেসের সাথে আপস করা কী ব্যবহার করার জন্য ব্যবহারকারীকে যাচাই করার প্রয়োজনীয়তা এড়াতে পারে না।
ব্যবহারকারী যাচাইকৃত হলে তবেই কোনও 'কী' ব্যবহার করার অনুমতি দেওয়া হয়, আপনি
setUserAuthenticationParameters()
কল করে নিম্নলিখিত মোডের মধ্যে যেকোনও একটিতে কাজ করার জন্য এটি কনফিগার করতে পারেন:
- নির্দিষ্ট সময়ের জন্য অনুমতি দিন
- ব্যবহারকারী নির্দিষ্ট করা ক্রেডেনশিয়ালের মধ্যে কোনও একটি ব্যবহার করে যাচাইকরণ সম্পূর্ণ করলেই, সব 'কী' ব্যবহারের জন্য অনুমোদিত হয়ে যায়।
- নির্দিষ্ট ক্রিপ্টোগ্রাফিক অপারেশনের সময়সীমার জন্য অনুমোদন করা
নির্দিষ্ট 'কী' ব্যবহার করে করা প্রতিটি অপারেশন ব্যবহারকারীকে আলাদাভাবে অনুমোদন করতে হবে।
আপনার অ্যাপ
BiometricPrompt-এর ইনস্ট্যান্সেauthenticate()কল করে এই প্রসেস শুরু করে।
আপনার তৈরি করা প্রতিটি 'কী'-এর জন্য, আপনি
শক্তিশালী
বায়োমেট্রিক ক্রেডেনশিয়াল,
লক স্ক্রিন
ক্রেডেনশিয়াল অথবা দুই ধরনের ক্রেডেনশিয়ালই বেছে নিতে পারবেন। আপনার অ্যাপের 'কী' যে ক্রেডেনশিয়ালের উপর নির্ভর করে, ব্যবহারকারী সেটি সেট-আপ করেছেন কিনা তা নির্ধারণ করতে,
canAuthenticate()-এ কল করুন।
কোনও 'কী' শুধুমাত্র বায়োমেট্রিক ক্রেডেনশিয়াল সাপোর্ট করলে, নতুন বায়োমেট্রিক এনরোলমেন্ট যোগ করা হলে, ডিফল্ট হিসেবে 'কী' বাতিল হয়ে যায়। নতুন বায়োমেট্রিক এনরোলমেন্ট যোগ করা হলেও, 'কী' যাতে বৈধ থাকে, সেই জন্য আপনি কনফিগার করতে পারবেন। এটি করতে, false-কে
setInvalidatedByBiometricEnrollment()-এ পাস করুন।
আপনার অ্যাপে কীভাবে বায়োমেট্রিক যাচাইকরণ ক্ষমতা যোগ করবেন সেই সম্পর্কে আরও জানুন, যার মধ্যে কীভাবে বায়োমেট্রিক যাচাইকরণ ডায়ালগ দেখাবেন সেই তথ্যও অন্তর্ভুক্ত।
কাজ করে এমন অ্যালগরিদম
CipherKeyGeneratorKeyFactoryKeyStore(KeyGeneratorওKeyPairGenerator-এর মতো একই ধরনের 'কী' কাজ করে)KeyPairGeneratorMacSignatureSecretKeyFactory
এর পরে কী করতে হবে
- Android Developers ব্লগে ICS-এ কী স্টোর অ্যাক্সেস ইউনিফাই করা দেখুন।