অ্যান্ড্রয়েড কীস্টোর সিস্টেম

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

কীস্টোর সিস্টেমটি অ্যান্ড্রয়েড 4.0 (এপিআই লেভেল 14) এ প্রবর্তিত KeyChain API দ্বারা ব্যবহৃত হয়, সেইসাথে Android 4.3 (API লেভেল 18) এ চালু করা Android Keystore প্রদানকারী বৈশিষ্ট্য। কখন এবং কিভাবে অ্যান্ড্রয়েড কীস্টোর সিস্টেম ব্যবহার করতে হয় এই ডকুমেন্টটি চলে যায়।

নিরাপত্তা বৈশিষ্ট্য

অ্যান্ড্রয়েড কীস্টোর সিস্টেম দুটি উপায়ে অননুমোদিত ব্যবহার থেকে মূল উপাদানকে রক্ষা করে। প্রথমত, এটি অ্যাপ্লিকেশান প্রক্রিয়াগুলি এবং সামগ্রিকভাবে অ্যান্ড্রয়েড ডিভাইস থেকে মূল উপাদান নিষ্কাশন প্রতিরোধ করে Android ডিভাইসের বাইরে থেকে মূল উপাদানের অননুমোদিত ব্যবহারের ঝুঁকি হ্রাস করে৷ দ্বিতীয়ত, কীস্টোর সিস্টেম অ্যাপ্লিকেশানগুলিকে তাদের কীগুলির অনুমোদিত ব্যবহারগুলিকে নির্দিষ্ট করে এবং তারপরে অ্যাপগুলির প্রক্রিয়াগুলির বাইরে সেই বিধিনিষেধগুলি কার্যকর করার মাধ্যমে অ্যান্ড্রয়েড ডিভাইসের মধ্যে মূল উপাদানগুলির অননুমোদিত ব্যবহারের ঝুঁকি হ্রাস করে৷

নিষ্কাশন প্রতিরোধ

অ্যান্ড্রয়েড কীস্টোর কীগুলির মূল উপাদান দুটি নিরাপত্তা ব্যবস্থা ব্যবহার করে নিষ্কাশন থেকে সুরক্ষিত:

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

    বৈশিষ্ট্যটি একটি কী-এর জন্য সক্ষম কিনা তা পরীক্ষা করতে, কীটির জন্য একটি KeyInfo পান৷ পরবর্তী ধাপটি আপনার অ্যাপের টার্গেট SDK সংস্করণের উপর নির্ভর করে:

    • আপনার অ্যাপ যদি Android 10 (API লেভেল 29) বা উচ্চতরকে লক্ষ্য করে, getSecurityLevel() এর রিটার্ন মান পরীক্ষা করুন। KeyProperties.SecurityLevelEnum.TRUSTED_ENVIRONMENT বা KeyProperties.SecurityLevelEnum.STRONGBOX সাথে মিলে যাওয়া মানগুলি নির্দেশ করে যে কীটি সুরক্ষিত হার্ডওয়্যারের মধ্যে রয়েছে৷
    • যদি আপনার অ্যাপটি Android 9 (API লেভেল 28) বা তার নিচের দিকে লক্ষ্য করে, KeyInfo.isInsideSecurityHardware() এর বুলিয়ান রিটার্ন মান পরীক্ষা করুন।

হার্ডওয়্যার নিরাপত্তা মডিউল

Android 9 (API লেভেল 28) বা উচ্চতর চলমান সমর্থিত ডিভাইসগুলিতে একটি StrongBox Keymaster থাকতে পারে, একটি Keymaster বা Keymint HAL এর বাস্তবায়ন যা একটি হার্ডওয়্যার নিরাপত্তা মডিউল-এর মতো সুরক্ষিত উপাদানে থাকে। যদিও হার্ডওয়্যার সিকিউরিটি মডিউলগুলি কী-স্টোরেজের বিভিন্ন প্রয়োগের উল্লেখ করতে পারে যেখানে একটি লিনাক্স কার্নেল আপস তাদের প্রকাশ করতে পারে না, যেমন TEE, স্ট্রংবক্স স্পষ্টভাবে এমবেডেড সিকিউর এলিমেন্টস (ইএসই) বা অন-এসওসি নিরাপদ প্রসেসিং ইউনিটের মতো ডিভাইসগুলিকে বোঝায়। iSE)।

মডিউল নিম্নলিখিত রয়েছে:

  • এর নিজস্ব সিপিইউ
  • নিরাপদ স্টোরেজ
  • একটি সত্য র্যান্ডম-সংখ্যা জেনারেটর
  • প্যাকেজ টেম্পারিং এবং অ্যাপের অননুমোদিত সাইডলোডিং প্রতিরোধ করার জন্য অতিরিক্ত প্রক্রিয়া
  • একটি নিরাপদ টাইমার
  • একটি রিবুট বিজ্ঞপ্তি পিন (বা সমতুল্য), যেমন সাধারণ-উদ্দেশ্য ইনপুট/আউটপুট (GPIO)

কম-পাওয়ার স্ট্রংবক্স বাস্তবায়নকে সমর্থন করতে, অ্যালগরিদম এবং কী মাপের একটি উপসেট সমর্থিত:

  • আরএসএ 2048
  • AES 128 এবং 256
  • ECDSA, ECDH P-256
  • HMAC-SHA256 (8 বাইট এবং 64 বাইটের মধ্যে কী মাপ সমর্থন করে, অন্তর্ভুক্ত)
  • ট্রিপল ডিইএস
  • বর্ধিত দৈর্ঘ্য APDUs
  • মূল প্রত্যয়ন
  • আপগ্রেডের জন্য সংশোধনী H সমর্থন

KeyStore ক্লাস ব্যবহার করে কী তৈরি বা আমদানি করার সময়, আপনি setIsStrongBoxBacked() পদ্ধতিতে true পাস করে StrongBox Keymaster-এ কী সংরক্ষণ করার জন্য একটি অগ্রাধিকার নির্দেশ করেন।

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

মূল ব্যবহারের অনুমোদন

অ্যান্ড্রয়েড ডিভাইসে কীগুলির অননুমোদিত ব্যবহার এড়াতে, অ্যান্ড্রয়েড কীস্টোর অ্যাপগুলিকে কীগুলি তৈরি বা আমদানি করার সময় তাদের কীগুলির অনুমোদিত ব্যবহার নির্দিষ্ট করতে দেয়৷ একবার একটি কী তৈরি বা আমদানি করা হলে, এর অনুমোদন পরিবর্তন করা যাবে না। যখনই কী ব্যবহার করা হয় তখন অনুমোদনগুলি Android কীস্টোর দ্বারা প্রয়োগ করা হয়৷ এটি একটি উন্নত নিরাপত্তা বৈশিষ্ট্য যা সাধারণত তখনই উপযোগী হয় যখন আপনার প্রয়োজনীয়তাগুলি হল যে কী তৈরি/আমদানি করার পরে আপনার আবেদন প্রক্রিয়ার একটি আপস (কিন্তু আগে বা সময় নয়) কীটির অননুমোদিত ব্যবহারের দিকে পরিচালিত করতে পারে না।

সমর্থিত কী ব্যবহারের অনুমোদন নিম্নলিখিত বিভাগে পড়ে:

  • ক্রিপ্টোগ্রাফি: কী শুধুমাত্র অনুমোদিত কী অ্যালগরিদম, অপারেশন বা উদ্দেশ্য (এনক্রিপ্ট, ডিক্রিপ্ট, সাইন, যাচাই), প্যাডিং স্কিম, ব্লক মোড বা ডাইজেস্টের সাথে ব্যবহার করা যেতে পারে।
  • অস্থায়ী বৈধতার ব্যবধান: কী শুধুমাত্র নির্দিষ্ট সময়ের ব্যবধানে ব্যবহারের জন্য অনুমোদিত।
  • ব্যবহারকারীর প্রমাণীকরণ: কীটি শুধুমাত্র তখনই ব্যবহার করা যেতে পারে যদি ব্যবহারকারীকে সম্প্রতি যথেষ্ট প্রমাণীকরণ করা হয়। কী ব্যবহারের জন্য ব্যবহারকারীর প্রমাণীকরণ প্রয়োজন দেখুন।

কীগুলির জন্য একটি অতিরিক্ত সুরক্ষা ব্যবস্থা হিসাবে যার মূল উপাদানগুলি সুরক্ষিত হার্ডওয়্যারের ভিতরে রয়েছে (দেখুন KeyInfo.isInsideSecurityHardware() বা, Android 10 (API স্তর 29) বা উচ্চতর, KeyInfo.getSecurityLevel() টার্গেট করা অ্যাপগুলির জন্য ), কিছু কী ব্যবহারের অনুমোদন বলবৎ হতে পারে নিরাপদ হার্ডওয়্যার দ্বারা, অ্যান্ড্রয়েড ডিভাইসের উপর নির্ভর করে। সুরক্ষিত হার্ডওয়্যার সাধারণত ক্রিপ্টোগ্রাফিক এবং ব্যবহারকারীর প্রমাণীকরণ অনুমোদন প্রয়োগ করে। যাইহোক, সুরক্ষিত হার্ডওয়্যার সাধারণত অস্থায়ী বৈধতা ব্যবধান অনুমোদন প্রয়োগ করে না, কারণ এটির সাধারণত একটি স্বাধীন, সুরক্ষিত রিয়েল-টাইম ঘড়ি থাকে না।

আপনি KeyInfo.isUserAuthenticationRequirementEnforcedBySecureHardware() ব্যবহার করে সুরক্ষিত হার্ডওয়্যার দ্বারা একটি কী-এর ব্যবহারকারী প্রমাণীকরণ অনুমোদন প্রয়োগ করা হয়েছে কিনা তা জিজ্ঞাসা করতে পারেন।

একটি কীচেন এবং Android কীস্টোর প্রদানকারীর মধ্যে বেছে নিন

আপনি যখন সিস্টেম-ব্যাপী শংসাপত্র চান তখন KeyChain API ব্যবহার করুন। যখন একটি অ্যাপ KeyChain API-এর মাধ্যমে কোনও শংসাপত্র ব্যবহারের অনুরোধ করে, ব্যবহারকারীরা একটি সিস্টেম-প্রদত্ত UI এর মাধ্যমে চয়ন করতে পারেন, কোন অ্যাপটি ইনস্টল করা শংসাপত্রগুলি অ্যাক্সেস করতে পারে। এটি বেশ কয়েকটি অ্যাপকে ব্যবহারকারীর সম্মতিতে শংসাপত্রের একই সেট ব্যবহার করতে দেয়।

একটি পৃথক অ্যাপকে তার নিজস্ব শংসাপত্র সঞ্চয় করতে দিতে Android কীস্টোর প্রদানকারী ব্যবহার করুন, যা শুধুমাত্র সেই অ্যাপটি অ্যাক্সেস করতে পারে। এটি অ্যাপগুলির জন্য শংসাপত্রগুলি পরিচালনা করার একটি উপায় প্রদান করে যা কেবলমাত্র তারা একই নিরাপত্তা সুবিধা প্রদান করার সময় ব্যবহার করতে পারে যা KeyChain API সিস্টেম-ব্যাপী শংসাপত্রগুলির জন্য প্রদান করে। এই পদ্ধতিতে ব্যবহারকারীকে শংসাপত্র নির্বাচন করতে হবে না।

অ্যান্ড্রয়েড কীস্টোর প্রদানকারী ব্যবহার করুন

এই বৈশিষ্ট্যটি ব্যবহার করতে, আপনি Android 4.3 (API স্তর 18) এ প্রবর্তিত AndroidKeyStore প্রদানকারীর সাথে স্ট্যান্ডার্ড KeyStore এবং KeyPairGenerator বা KeyGenerator ক্লাস ব্যবহার করেন।

AndroidKeyStore KeyStore.getInstance(type) পদ্ধতির সাথে ব্যবহারের জন্য এবং KeyPairGenerator.getInstance(algorithm, provider) এবং KeyGenerator.getInstance(algorithm, provider) পদ্ধতির সাথে ব্যবহারের জন্য একটি KeyStore টাইপ হিসাবে নিবন্ধিত হয়েছে।

যেহেতু ক্রিপ্টোগ্রাফিক ক্রিয়াকলাপগুলি সময়সাপেক্ষ হতে পারে, অ্যাপগুলির UI প্রতিক্রিয়াশীল থাকে তা নিশ্চিত করতে অ্যাপগুলিকে তাদের মূল থ্রেডে AndroidKeyStore ব্যবহার করা এড়িয়ে চলতে হবে। ( StrictMode আপনাকে এমন জায়গাগুলি খুঁজে পেতে সহায়তা করতে পারে যেখানে এটি হয় না।)

একটি নতুন ব্যক্তিগত বা গোপন কী তৈরি করুন

একটি PrivateKey সমন্বিত একটি নতুন KeyPair তৈরি করতে, আপনাকে অবশ্যই শংসাপত্রের প্রাথমিক X.509 বৈশিষ্ট্যগুলি নির্দিষ্ট করতে হবে৷ আপনি একটি শংসাপত্র কর্তৃপক্ষ (CA) দ্বারা স্বাক্ষরিত একটি শংসাপত্রের সাথে পরবর্তী সময়ে শংসাপত্রটি প্রতিস্থাপন করতে KeyStore.setKeyEntry() ব্যবহার করতে পারেন৷

কী জোড়া তৈরি করতে, KeyGenParameterSpec সহ একটি KeyPairGenerator ব্যবহার করুন:

কোটলিন

/*
 * 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-এনকোডেড কী বিন্যাস ব্যবহার করে কীস্টোরে নিরাপদে এনক্রিপ্ট করা কীগুলি আমদানি করতে দেয়৷ কী-মাস্টার তারপর কী-স্টোরে কীগুলি ডিক্রিপ্ট করে, তাই কীগুলির বিষয়বস্তু ডিভাইসের হোস্ট মেমরিতে প্লেইনটেক্সট হিসাবে উপস্থিত হয় না। এই প্রক্রিয়া অতিরিক্ত কী ডিক্রিপশন নিরাপত্তা প্রদান করে।

কীস্টোরে এনক্রিপ্ট করা কীগুলির নিরাপদ আমদানি সমর্থন করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. একটি কী জোড়া তৈরি করুন যা PURPOSE_WRAP_KEY উদ্দেশ্য ব্যবহার করে। আমরা সুপারিশ করি যে আপনি এই কী জোড়াতেও প্রত্যয়ন যোগ করুন৷

  2. আপনি বিশ্বাস করেন এমন একটি সার্ভার বা মেশিনে, 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
       }
    
  3. একটি WrappedKeyEntry অবজেক্ট তৈরি করুন, বাইট অ্যারে হিসাবে ASN.1 বার্তাটি পাস করুন।

  4. এই WrappedKeyEntry অবজেক্টটিকে setEntry() এর ওভারলোডে পাস করুন যা একটি Keystore.Entry অবজেক্ট গ্রহণ করে।

কীস্টোর এন্ট্রি নিয়ে কাজ করুন

আপনি সমস্ত স্ট্যান্ডার্ড KeyStore API-এর মাধ্যমে AndroidKeyStore প্রদানকারী অ্যাক্সেস করতে পারেন।

তালিকা এন্ট্রি

aliases() পদ্ধতিতে কল করে কীস্টোরে এন্ট্রি তালিকাভুক্ত করুন:

কোটলিন

/*
 * 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 APIs ব্যবহার করে সাইন ইন ডাটা, যেমন sign() :

কোটলিন

/*
 * 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[]) পদ্ধতির মাধ্যমে ডেটা যাচাই করুন:

কোটলিন

/*
 * 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() কল করুন।

যদি একটি কী শুধুমাত্র বায়োমেট্রিক শংসাপত্রগুলিকে সমর্থন করে, যখনই নতুন বায়োমেট্রিক তালিকাভুক্তি যোগ করা হয় তখন কীটি ডিফল্টরূপে অবৈধ হয়ে যায়। নতুন বায়োমেট্রিক নথিভুক্তি যোগ করা হলে বৈধ থাকার জন্য আপনি কীটি কনফিগার করতে পারেন। এটি করতে, setInvalidatedByBiometricEnrollment()false পাস করুন।

কীভাবে একটি বায়োমেট্রিক প্রমাণীকরণ ডায়ালগ দেখাতে হয় তা সহ আপনার অ্যাপে কীভাবে বায়োমেট্রিক প্রমাণীকরণ ক্ষমতা যুক্ত করবেন সে সম্পর্কে আরও জানুন।

সমর্থিত অ্যালগরিদম

ব্লগ নিবন্ধ

আইসিএস-এ ইউনিফাইং কী স্টোর অ্যাক্সেস ব্লগ এন্ট্রি দেখুন।