Keystore (Android): এটি কী, আর্কিটেকচার এবং কার্যকারিতার নীতি

লেখক: IT Sectr প্রকাশিত: 2026-03-14 পড়ার সময়: 10 মিনিট

Android Keystore হল Android-এ একটি সিস্টেম মেকানিজম যা ক্রিপ্টোগ্রাফিক কীগুলিকে হার্ডওয়্যার আইসোলেশনে নিরাপদে সংরক্ষণ করার জন্য। সিস্টেমটি ARM TrustZone সহ ডিভাইসগুলিতে Trusted Execution Environment (TEE) বা চিপ স্তরে কীগুলি সুরক্ষিত করার জন্য ডেডিকেটেড Secure Element ব্যবহার করে। Android Open Source Project-এর মতে, Keystore সুরক্ষিত পরিবেশে সরাসরি কী জেনারেশন সহ RSA, EC, AES এবং HMAC অ্যালগরিদম সমর্থন করে।

মূল পয়েন্ট

  • Android Keystore একটি KeyStore প্রদানকারী যা ক্রিপ্টোগ্রাফিক কীগুলিকে Android ব্যবহারকারী স্পেস থেকে বিচ্ছিন্ন করে
  • কীগুলি TEE বা Secure Element-এর ভিতরে জেনারেট হয় এবং কখনও প্লেইনটেক্সটে সুরক্ষিত পরিবেশ ছেড়ে যায় না
  • Android 9+ প্যারামিটার সহ KeyGenParameterSpec.Builder যোগ করে: purpose, digest, padding, userAuthenticationRequired
  • বায়োমেট্রিক কী সুরক্ষার জন্য প্রতিটি অপারেশনের আগে BiometricPrompt-এর মাধ্যমে ব্যবহারকারীর নিশ্চিতকরণ প্রয়োজন
  • Keymaster HAL একটি হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার যা TEE বা Secure Element-এ ক্রিপ্টোগ্রাফিক অপারেশন বাস্তবায়ন করে

Android Keystore কী?

Android Keystore হল Android-এ API 1 (Android 1.0) থেকে বাস্তবায়িত একটি ক্রিপ্টোগ্রাফিক প্রদানকারী, কিন্তু সম্পূর্ণ হার্ডওয়্যার সমর্থন Android 4.3 (API 18) থেকে উপস্থিত হয়েছে। Keystore প্রাইভেট কীগুলির নিরাপদ স্টোরেজের সমস্যা সমাধান করে যাতে অপারেটিং সিস্টেমের সাথে আপস করা হলেও আক্রমণকারী প্লেইনটেক্সটে কীগুলি বের করতে না পারে।

Android-এ KeyStore আর্কিটেকচার

Android Keystore আর্কিটেকচার তিনটি স্তর নিয়ে গঠিত: অ্যাপ্লিকেশন API (java.security.KeyStore), সিস্টেম সার্ভিস (keystore daemon), এবং হার্ডওয়্যার স্তর (Keymaster HAL)। অ্যাপ্লিকেশনটি স্ট্যান্ডার্ড Java Cryptography Architecture (JCA) API-এর মাধ্যমে অ্যাক্সেস করে এবং সিস্টেম সার্ভিস TEE-তে চলমান Keymaster-এ অনুরোধ রুট করে।

কীগুলির সাথে সমস্ত ক্রিপ্টোগ্রাফিক অপারেশন (স্বাক্ষর, ডিক্রিপশন) TEE বা Secure Element-এর ভিতরে সঞ্চালিত হয়। কীগুলি কখনও সুরক্ষিত পরিবেশ ছেড়ে যায় না — অ্যাপ্লিকেশনটি কী উল্লেখ করার জন্য শুধুমাত্র একটি হ্যান্ডেল (উপনাম) পায়। এটি সফ্টওয়্যার KeyStores থেকে একটি মৌলিক পার্থক্য, যেখানে কীগুলি প্রক্রিয়া মেমরিতে সম্ভাব্যভাবে অ্যাক্সেসযোগ্য।

Java KeyStore থেকে পার্থক্য

স্ট্যান্ডার্ড JKS (Java KeyStore) বা BKS (Bouncy Castle) পাসওয়ার্ড-সুরক্ষিত ফাইলগুলিতে কীগুলি সংরক্ষণ করে। Android Keystore কীগুলিকে হার্ডওয়্যার আইসোলেশনে সংরক্ষণ করে, যেখানে তারা রুট ব্যবহারকারী থেকেও সুরক্ষিত। JKS সরাসরি ফাইল সিস্টেম অ্যাক্সেসের জন্য ঝুঁকিপূর্ণ; Android Keystore নয়।

আরেকটি পার্থক্য: Android Keystore-এ, কীগুলির কঠোর ব্যবহারের প্যারামিটার (purpose — শুধু sign/verify/encrypt/decrypt) জেনারেশনের সময় নির্দিষ্ট করা হয়। সেগুলি পরে পরিবর্তন করা যায় না, যা কী-এর অপব্যবহার রোধ করে।

Android Keystore কীভাবে কাজ করে?

নতুন কী তৈরি করার সময়, অ্যাপ্লিকেশন KeyGenParameterSpec সহ KeyPairGenerator বা KeyGenerator কল করে, যাতে ভবিষ্যতের কী-এর সমস্ত প্যারামিটার থাকে। সিস্টেম Keymaster HAL-এ অনুরোধ পাঠায়, যা TEE-এর ভিতরে কী জেনারেট করে এবং একটি হ্যান্ডেল ফেরত দেয়।

কী জেনারেশন প্রক্রিয়া

KeyGenParameterSpec.Builder পদ্ধতি বাধ্যতামূলক প্যারামিটার গ্রহণ করে: Keystore-এ কী-এর নাম, উদ্দেশ্য (PURPOSE_SIGN, PURPOSE_ENCRYPT), অ্যালগরিদম (RSA, EC, AES)। অতিরিক্ত: digest (SHA-256), padding (PKCS7), userAuthenticationRequired (বায়োমেট্রিক্স), keyValidityStart/End (সময় সীমাবদ্ধতা)।

প্যারামিটার সেট করার পর, KeyPairGenerator.generateKeyPair() একটি KeyPair ফেরত দেয়, যেখানে PrivateKey হল একটি অবজেক্ট যা Keymaster-এর কাছে অপারেশন ডেলিগেট করে। পাবলিক কী বের করা যায়, প্রাইভেট কী নয়। এটি শুধুমাত্র TEE-এর ভিতরে বিদ্যমান।

kotlin
import java.security.KeyPairGenerator
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties

fun generateKey(alias: String) {
    val spec = KeyGenParameterSpec.Builder(alias,
        KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY
    ).setDigests(KeyProperties.DIGEST_SHA256)
     .setSignaturePaddings(KeyProperties.SIGN_PADDING_RSA_PKCS1)
     .setUserAuthenticationRequired(true)
     .build()

    val kpGen = KeyPairGenerator.getInstance(
        KeyProperties.KEY_ALGORITHM_RSA,
        "AndroidKeyStore"
    )
    kpGen.initialize(spec)
    kpGen.generateKeyPair()
}

স্বাক্ষর এবং যাচাইকরণ

ECDSA বা RSA-PSS-এর জন্য Signature স্ট্যান্ডার্ড API-এর মাধ্যমে তৈরি হয়: Signature.getInstance(algorithm).initSign(privateKey)। স্বাক্ষর অপারেশন TEE-তে সঞ্চালিত হয়: অ্যাপ্লিকেশন ডেটা পাঠায়, Keymaster হার্ডওয়্যারে স্বাক্ষর করে এবং স্বাক্ষর ফেরত দেয়। কী এবং ডেটা শেয়ার্ড মেমরিতে মিশ্রিত হয় না।

বায়োমেট্রিক সুরক্ষার জন্য, স্বাক্ষর করার আগে ব্যবহারকারীকে BiometricPrompt-এর মাধ্যমে প্রমাণীকরণ করতে হবে। সফল প্রমাণীকরণ ছাড়া, Keymaster অপারেশন সম্পাদন করে না এবং CryptoAuthenticationException ফেরত দেয়।

kotlin
import java.security.KeyStore
import java.security.Signature
import androidx.biometric.BiometricPrompt

fun signWithBiometric(alias: String) {
    val ks = KeyStore.getInstance("AndroidKeyStore")
    ks.load(null)
    val entry = ks.getEntry(alias, null) as KeyStore.PrivateKeyEntry
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initSign(entry.privateKey)
    // BiometricPrompt CryptoObject(signature) সহ FaceID/PIN অনুরোধ করে
}

KeyStore স্টোরেজের ধরন

Android দুটি কী স্টোরেজ মোড সমর্থন করে: সফ্টওয়্যার (TEE ছাড়া ডিভাইসে) এবং হার্ডওয়্যার (TEE বা Secure Element সহ ডিভাইসে)। মোড SoC ক্ষমতা এবং Android সংস্করণের উপর নির্ভর করে।

সফ্টওয়্যার KeyStore (শুধুমাত্র সফ্টওয়্যার)

Trusted Execution Environment ছাড়া ডিভাইসগুলিতে (Android 4.3-এর আগে বা বাজেট SoCs), কীগুলি লক স্ক্রিন পাসওয়ার্ড থেকে প্রাপ্ত মাস্টার কী ব্যবহার করে এনক্রিপ্টেড সংরক্ষণ করা হয়। এই মোডটি কম নিরাপদ — ক্রিপ্টোগ্রাফিক অপারেশনের সময় কীগুলি প্রক্রিয়া মেমরিতে অ্যাক্সেসযোগ্য।

সুরক্ষা স্তর AES-256-GCM ব্যবহার করে KeyStore ফাইল এনক্রিপশনের উপর ভিত্তি করে। এনক্রিপশন কী ব্যবহারকারীর পাসওয়ার্ড বা PIN থেকে Scrypt (উচ্চ সংখ্যক পুনরাবৃত্তি সহ PBKDF2) এর মাধ্যমে জেনারেট হয়।

হার্ডওয়্যার KeyMaster (TEE/Secure Element)

আধুনিক ডিভাইসগুলিতে, TEE (ARM TrustZone)-তে Keymaster 4.x ব্যবহার করা হয়। কীগুলি একচেটিয়াভাবে TrustZone-এর ভিতরে জেনারেট, সংরক্ষণ এবং ব্যবহার করা হয়। এমনকি Linux কার্নেলেরও প্রাইভেট কীগুলিতে অ্যাক্সেস নেই — শুধুমাত্র Keymaster HAL অপারেশন করতে পারে।

Secure Element (যেমন Samsung Knox-এ eSE বা Google Pixel 3+-এ StrongBox) নিজস্ব প্রসেসর এবং মেমরি সহ একটি পৃথক চিপ। এটি Common Criteria EAL 4+ প্রত্যয়িত এবং শারীরিক ছেদ-ছাড় থেকে সুরক্ষা সহ সর্বোচ্চ স্তরের সুরক্ষা প্রদান করে।

ধরনস্টোরেজ অবস্থানসুরক্ষা স্তরAPI থেকে উপলব্ধ
সফ্টওয়্যারফাইল /data/misc/keystoreমধ্যম (AES-256)API 1+
Keymaster 3TEE (TrustZone)উচ্চAPI 23+
Keymaster 4TEE + Secure I/Oখুব উচ্চAPI 28+
StrongBoxহার্ডওয়্যার Secure Elementসর্বোচ্চAPI 28+, ঐচ্ছিক

KeyStore API নিয়ে কাজ করা

Android Keystore Java Cryptography Architecture (JCA)-তে একীভূত। প্রদানকারী অ্যাক্সেস করতে স্ট্যান্ডার্ড KeyStore.getInstance("AndroidKeyStore") ব্যবহার করা হয়। API API 18 থেকে উপলব্ধ।

KeyStore তৈরি এবং লোড করা

KeyStore.load(null) পদ্ধতি অ্যাপ্লিকেশনের KeyStore কন্টেইনার লোড করে। পাসওয়ার্ডের প্রয়োজন নেই — Android অ্যাক্সেস নিয়ন্ত্রণের জন্য অ্যাপ্লিকেশন প্রসঙ্গ এবং এর UID ব্যবহার করে। প্রতিটি অ্যাপ্লিকেশন শুধুমাত্র নিজস্ব এন্ট্রি দেখে যদি না শেয়ার্ড UID ব্যবহার করা হয়।

setEntry এবং getEntry পদ্ধতিগুলি KeyStore.PrivateKeyEntry, SecretKeyEntry বা TrustedCertificateEntry-এর সাথে কাজ করে। ProtectionParameter প্যারামিটার Android Keystore-এর জন্য সর্বদা null (সুরক্ষা সিস্টেম স্তরে বাস্তবায়িত)।

kotlin
import java.security.KeyStore
import java.security.cert.Certificate
import android.security.keystore.KeyProtection

fun storeSecretKey(alias: String, key: SecretKey) {
    val ks = KeyStore.getInstance("AndroidKeyStore")
    ks.load(null)
    val prot = KeyProtection.Builder(
        KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
    ).setBlockModes(KeyProperties.BLOCK_MODE_GCM)
     .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
     .setUserAuthenticationRequired(true)
     .build()
    ks.setEntry(alias, KeyStore.SecretKeyEntry(key), prot)
}

স্টোরেজের ধরন পরীক্ষা করা

KeyCharacteristics ব্যবহার করে, আপনি নির্ধারণ করতে পারেন কী কোন পরিবেশে সংরক্ষিত: সফ্টওয়্যার KeyStore, TEE, বা StrongBox। getKeyCharacteristics() পদ্ধতি ফ্ল্যাগের একটি সেট ফেরত দেয়: FLAG_HARDWARE (keymaster), FLAG_SECURE_ELEMENT (StrongBox), FLAG_TRUSTED_USER_PRESENCE_REQUIRED (বায়োমেট্রিক্স)।

অ্যালগরিদম এবং নিরাপত্তা

Android Keystore তিনটি বিভাগে বিভক্ত ক্রিপ্টোগ্রাফিক অ্যালগরিদমের একটি বিস্তৃত পরিসর সমর্থন করে: অ্যাসিমেট্রিক, সিমেট্রিক এবং MAC। নির্দিষ্ট অ্যালগরিদমের জন্য সমর্থন Keymaster HAL সংস্করণের উপর নির্ভর করে।

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

RSA (1024–4096 বিট) — স্বাক্ষর (PKCS1, PSS) এবং এনক্রিপশন (OAEP, PKCS1) এর জন্য। EC (P-224, P-256, P-384, P-521) — ECDSA স্বাক্ষর এবং ECDH কী চুক্তির জন্য। AES (128, 256 বিট) — CBC, CTR, GCM মোডে সিমেট্রিক এনক্রিপশনের জন্য। HMAC (SHA1, SHA256, SHA512) — বার্তা প্রমাণীকরণের জন্য।

প্রতিটি কী-র জন্য, সম্ভাব্য অপারেশন সীমাবদ্ধ করতে setPurposes নির্দিষ্ট করা হয়। PURPOSE_SIGN সহ RSA কী এনক্রিপশনের জন্য ব্যবহার করা যায় না, এমনকি আক্রমণকারীর API অ্যাক্সেস থাকলেও। এটি হার্ডওয়্যার স্তরে কী ব্যবহার প্রয়োগ।

আপস থেকে সুরক্ষা

Keymaster-এ ব্যর্থ বায়োমেট্রিক প্রমাণীকরণ প্রচেষ্টার একটি কাউন্টার অন্তর্ভুক্ত রয়েছে। নির্দিষ্ট সংখ্যক ব্যর্থতার পর (setInvalidatedByBiometricEnrollment এর মাধ্যমে কনফিগারযোগ্য), কী অনুপলব্ধ হয়ে যায় এবং মুছে ফেলা/পুনর্জেনারেশন প্রয়োজন। যখন সমস্ত বায়োমেট্রিক টেমপ্লেট সরানো হয়, userAuthenticationRequired=true সহ সমস্ত কী স্বয়ংক্রিয়ভাবে অবৈধ হয়ে যায়।

Key Attestation (Android 8.1+)ও সমর্থিত: অ্যাপ্লিকেশনের অনুরোধে, Keymaster কী-এর বৈশিষ্ট্য (হার্ডওয়্যার/সফ্টওয়্যার, অ্যালগরিদম, উদ্দেশ্য) সম্পর্কে তথ্য সহ একটি সার্টিফিকেট স্বাক্ষর করে। সার্ভার এই সার্টিফিকেট যাচাই করতে পারে যে কী একটি বিশ্বস্ত পরিবেশে তৈরি করা হয়েছে তা নিশ্চিত করতে।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

Android Keystore এবং Java KeyStore-এর মধ্যে পার্থক্য কী?

Java KeyStore পাসওয়ার্ড-সুরক্ষিত ফাইলে (JKS, BKS) কীগুলি সংরক্ষণ করে। Android Keystore TEE বা Secure Element-এর মাধ্যমে হার্ডওয়্যার আইসোলেশন ব্যবহার করে। Java KeyStore রুট অ্যাক্সেসের জন্য ঝুঁকিপূর্ণ; Android Keystore নয়, কারণ প্রাইভেট কীগুলি কখনও সুরক্ষিত পরিবেশ ছেড়ে যায় না।

আমি কি Android Keystore-তে একটি বিদ্যমান কী আমদানি করতে পারি?

হ্যাঁ, KeyProtection সহ KeyStore.setEntry-এর মাধ্যমে। তবে, আমদানি করা কী-তে হার্ডওয়্যার সুরক্ষা থাকবে না — এটি মাস্টার কী দিয়ে এনক্রিপ্টেড সফ্টওয়্যার Keystore-এ সংরক্ষণ করা হবে। সর্বোচ্চ সুরক্ষার জন্য, সর্বদা Keystore-এর ভিতরে কীগুলি জেনারেট করুন।

কীভাবে পরীক্ষা করবেন ডিভাইসটি হার্ডওয়্যার KeyStore সমর্থন করে কিনা?

KeyChain.isBoundKeyAlgorithm ব্যবহার করুন বা কী জেনারেশনের পর KeyCharacteristics পরীক্ষা করুন। বৈশিষ্ট্যগুলিতে FLAG_HARDWARE-এর উপস্থিতি মানে কী TEE-তে তৈরি হয়েছে। আপনি android.security.keystore.isHardwareBacked()-ও পরীক্ষা করতে পারেন।

অ্যাপ্লিকেশন আনইনস্টল করলে কীগুলির কী হয়?

যখন অ্যাপ্লিকেশন আনইনস্টল করা হয়, Android Keystore থেকে তার সমস্ত কী সরিয়ে ফেলে। ডেটা অপরিবর্তনীয়ভাবে হারিয়ে যায়। পুনরায় ইনস্টল করলে, অ্যাপ্লিকেশনটিকে নতুন কী জেনারেট করতে হবে। TEE-এর মাধ্যমে কী ব্যাকআপ আর্কিটেকচারাল কারণে অসম্ভব।

KeyStore কীভাবে ডিবাগিং আক্রমণ থেকে রক্ষা করে?

লক করা ডিভাইসে, Keymaster কোনো অপারেশন করে না। userAuthenticationRequired=true সহ কীগুলির প্রতিবার বায়োমেট্রিক নিশ্চিতকরণ প্রয়োজন। রুট অ্যাক্সেস থাকলেও, আক্রমণকারী সরাসরি Keymaster কল করতে পারে না — শুধুমাত্র Android Keystore সার্ভিসের মাধ্যমে।

সারসংক্ষেপ

  • Android Keystore TEE বা Secure Element-এর মাধ্যমে হার্ডওয়্যার কী আইসোলেশন সহ একটি JCA ক্রিপ্টোগ্রাফিক প্রদানকারী
  • কীগুলি TrustZone-এর ভিতরে জেনারেট হয় এবং প্লেইনটেক্সটে সুরক্ষিত পরিবেশ কখনও ছেড়ে যায় না
  • KeyGenParameterSpec কী প্যারামিটার সংজ্ঞায়িত করে: purpose, digest, padding, userAuthenticationRequired, keyValidity
  • Keymaster HAL তিনটি স্তর বাস্তবায়ন করে: সফ্টওয়্যার, TEE (Keymaster 3/4), এবং StrongBox (হার্ডওয়্যার Secure Element)
  • বায়োমেট্রিক কী সুরক্ষা setUserAuthenticationRequired এবং CryptoObject সহ BiometricPrompt-এর মাধ্যমে প্রদান করা হয়
  • Key Attestation (API 28+) সার্ভার-সাইড যাচাইকরণের অনুমতি দেয় যে কী হার্ডওয়্যার পরিবেশে তৈরি হয়েছে
  • Android অ্যাপ্লিকেশনগুলিতে স্বাক্ষর, এনক্রিপশন এবং প্রমাণীকরণের জন্য প্রাইভেট কী সংরক্ষণ করতে Android Keystore ব্যবহার করুন

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন