সিকিউর স্টোরেজ (Secure Storage) হলো ডিভাইসে গোপনীয় ডেটা সুরক্ষার জন্য পদ্ধতি ও প্রযুক্তির একটি সেট: টোকেন, এনক্রিপশন কী, পেমেন্ট তথ্য এবং ব্যবহারকারীদের ব্যক্তিগত ডেটা। OWASP Mobile Top 10 (2024) অনুসারে, অনিরাপদ ডেটা স্টোরেজ সবচেয়ে গুরুত্বপূর্ণ তিনটি ঝুঁকির মধ্যে একটি। সুরক্ষিত স্টোরেজ এর সঠিক বাস্তবায়ন ডিভাইসে শারীরিক অ্যাক্সেস থাকলেও ডেটা লিক প্রতিরোধ করে।
মুখ্য বিষয়
সিকিউর স্টোরেজ হলো মোবাইল অ্যাপ্লিকেশনের গোপনীয় ডেটা এমনভাবে সংরক্ষণের অনুশীলন যাতে এটি অন্যান্য অ্যাপ্লিকেশন, ম্যালওয়্যার এবং ডিভাইসে শারীরিক অ্যাক্সেস সহ আক্রমণকারীদের জন্য অ্যাক্সেসযোগ্য না হয়। সাধারণ স্টোরেজের বিপরীতে, সিকিউর স্টোরেজ এনক্রিপশন, বিচ্ছিন্নকরণ এবং হার্ডওয়্যার সুরক্ষা ব্যবহার করে।
সমস্ত ডেটার সিকিউর স্টোরেজ প্রয়োজন হয় না: প্রোফাইল ইমেজ বা নিউজ ক্যাশে সাধারণ ফাইল সিস্টেমে সংরক্ষণ করা যেতে পারে। তবে, এনক্রিপশন কী, অথেনটিকেশন টোকেন, পেমেন্ট ডেটা, প্রাইভেট কী এবং বায়োমেট্রিক টেমপ্লেট অবশ্যই সুরক্ষিত হতে হবে। Google Security Blog (2025) অনুসারে, মোবাইল অ্যাপ্লিকেশনের ৬৭% দুর্বলতা প্লেইন টেক্সটে গোপন তথ্য সংরক্ষণের সাথে সম্পর্কিত।
প্রতিটি মোবাইল প্ল্যাটফর্ম তার নিজস্ব সিকিউর স্টোরেজ মেকানিজম প্রদান করে: Android — Keystore এবং EncryptedSharedPreferences, iOS — Keychain এবং Data Protection API। এই মেকানিজমগুলি হার্ডওয়্যার সুরক্ষা মডিউল (TEE, Secure Enclave) এর সাথে সংহত এবং গ্যারান্টি দেয় যে জেলব্রেক বা রুট করার পরেও ডেটা পড়া যাবে না।
সিকিউর স্টোরেজ পদ্ধতির সঠিক পছন্দ ডেটার ধরন, ব্যবহারের পরিস্থিতি এবং কর্মক্ষমতা প্রয়োজনীয়তার উপর নির্ভর করে। প্রতিটি মেকানিজমের আর্কিটেকচার বোঝা ডেভেলপারকে সঠিক আর্কিটেকচারাল সিদ্ধান্ত নিতে দেয়।
Android প্ল্যাটফর্ম হার্ডওয়্যার কী স্টোরেজ থেকে এনক্রিপ্টেড SharedPreferences পর্যন্ত ডেটা সুরক্ষার বিভিন্ন স্তর প্রদান করে। পছন্দ ডেটার সংবেদনশীলতা এবং কর্মক্ষমতা প্রয়োজনীয়তার উপর নির্ভর করে।
Android Keystore একটি ক্রিপ্টোগ্রাফিক প্রোভাইডার যা হার্ডওয়্যার সুরক্ষা সমর্থনকারী ডিভাইসে একটি বিচ্ছিন্ন নির্বাহ পরিবেশে (TEE — Trusted Execution Environment) কী তৈরি এবং সংরক্ষণ করে। কীগুলি কখনই TEE ছেড়ে যায় না: ক্রিপ্টোগ্রাফিক অপারেশনগুলি একটি সুরক্ষিত এলাকার ভিতরে সঞ্চালিত হয় যা অপারেটিং সিস্টেমের জন্যও অ্যাক্সেসযোগ্য নয়।
Android 9 (API 28) থেকে, Keystore StrongBox Keymaster সমর্থন করে — একটি ডেডিকেটেড সিকিউরিটি চিপ নিজস্ব CPU, True Random Number Generator (TRNG) এবং সুরক্ষিত মেমোরি সহ। StrongBox Common Criteria EAL 4+ অনুসারে প্রত্যয়িত এবং Android-এ কী স্টোরেজ সুরক্ষার সর্বোচ্চ স্তর। StrongBox ব্যবহার করতে, কী তৈরি করার সময় আপনাকে অবশ্যই inStrongBox() ফ্ল্যাগ স্পষ্টভাবে উল্লেখ করতে হবে।
Keystore অ্যালগরিদম সমর্থন করে: AES/GCM/NoPadding (256 বিট), EC (secp256r1, secp384r1), RSA (2048–4096 বিট) এবং HMAC-SHA256। সমস্ত কী setUserAuthenticationRequired(true) এর মাধ্যমে বায়োমেট্রিক অথেনটিকেশনের সাথে আবদ্ধ করা যেতে পারে।
EncryptedSharedPreferences AndroidX Security প্যাকেজের একটি লাইব্রেরি যা SharedPreferences API এর মাধ্যমে সংরক্ষিত সমস্ত ডেটা স্বয়ংক্রিয়ভাবে এনক্রিপ্ট করে। মানগুলি AES-256 GCM কী দিয়ে এনক্রিপ্ট করা হয় এবং কীগুলি AES-256 SIV (সিন্থেটিক IV) দিয়ে এনক্রিপ্ট করা হয়, যা কী নামের উপর ডিকশনারি আক্রমণ প্রতিরোধ করে।
প্রধান এনক্রিপশন কী Android Keystore এ সংরক্ষিত থাকে, যা দ্বি-স্তরীয় সুরক্ষা প্রদান করে: Keystore মাস্টার কী রক্ষা করে, EncryptedSharedPreferences ডেটা রক্ষা করে। সাধারণ ডেটার (টোকেন, সেটিংস) জন্য প্রতি রিড/রাইট অপারেশনে এনক্রিপশন কর্মক্ষমতা ৫ ms এর কম, যা লাইব্রেরিটিকে ব্যবহারকারীর পরিস্থিতির জন্য উপযোগী করে তোলে।
EncryptedSharedPreferences বড় ডেটা ভলিউমের (৫ MB এর বেশি) জন্য ডিজাইন করা হয়নি — সেগুলির জন্য, SQLCipher বা এনক্রিপশন সহ Room এর মাধ্যমে একটি এনক্রিপ্টেড ডেটাবেস ব্যবহার করুন।
SQLCipher SQLite-এর একটি এক্সটেনশন যা AES-256-CBC ব্যবহার করে সম্পূর্ণ ডেটাবেস পৃষ্ঠা প্রতি পৃষ্ঠা এনক্রিপ্ট করে। ডেটাবেসের প্রতিটি পৃষ্ঠা PBKDF2 এর মাধ্যমে মাস্টার পাসওয়ার্ড থেকে প্রাপ্ত একটি পৃথক কী দিয়ে এনক্রিপ্ট করা হয়। SQLCipher ডেটার আকারের উপর নির্ভর করে প্রায় ৫–১৫% কর্মক্ষমতা ওভারহেড যোগ করে।
Android-এর সাথে ইন্টিগ্রেশন net.zetetic:android-database-sqlcipher লাইব্রেরির মাধ্যমে করা হয়, যা স্ট্যান্ডার্ড SQLiteOpenHelper-এর সাথে সামঞ্জস্যপূর্ণ API প্রদান করে। SQLCipher-এর পাসওয়ার্ড Keystore-এ সংরক্ষণ করার সুপারিশ করা হয়, কোড বা SharedPreferences-এ নয়।
iOS প্ল্যাটফর্ম প্রধান সুরক্ষিত স্টোরেজ হিসেবে Keychain Services এবং OS স্তরে ফাইল এনক্রিপশনের জন্য Data Protection API প্রদান করে।
Keychain একটি এনক্রিপ্টেড SQLite ডেটাবেস যেখানে iOS পাসওয়ার্ড, এনক্রিপশন কী, সার্টিফিকেট এবং নোট সংরক্ষণ করে। প্রতিটি Keychain আইটেম (SecItem) ডিভাইসের জন্য অনন্য একটি হার্ডওয়্যার কী ব্যবহার করে এনক্রিপ্টেড আকারে সংরক্ষিত হয়। একটি আইটেমের অ্যাক্সেস ACL (অ্যাক্সেস কন্ট্রোল লিস্ট) এর মাধ্যমে নিয়ন্ত্রিত হয়, যা বায়োমেট্রিক অথেনটিকেশন (Face ID, Touch ID) বা পাসকোড প্রয়োজন করতে পারে।
Keychain সুরক্ষা শ্রেণী সমর্থন করে যা নির্ধারণ করে কখন ডেটা অ্যাক্সেসযোগ্য: kSecAttrAccessibleWhenUnlockedThisDeviceOnly — ডেটা কেবল ডিভাইস আনলক থাকলেই অ্যাক্সেসযোগ্য এবং ব্যাকআপের সময় স্থানান্তরিত হয় না। এই শ্রেণীটি বেশিরভাগ অথেনটিকেশন টোকেন স্টোরেজ পরিস্থিতির জন্য সুপারিশ করা হয়।
iOS 15+ এ, Security framework Secure Enclave এর মাধ্যমে হার্ডওয়্যার কী সমর্থন সহ উপলব্ধ — একটি ডেডিকেটেড Apple প্রসেসর যা ক্রিপ্টোগ্রাফিক অপারেশনগুলি পরিচালনা করে এবং প্রাইভেট কীগুলি বিচ্ছিন্ন মেমোরিতে সংরক্ষণ করে। Secure Enclave কী তৈরির জন্য ECDSA (secp256r1) এবং ECDH অ্যালগরিদম সমর্থন করে যা চিপ থেকে নিষ্কাশন করা যায় না।
Data Protection হল একটি iOS মেকানিজম যা ডিভাইস পাসকোডের সাথে আবদ্ধ একটি কী ব্যবহার করে ফাইল সিস্টেম স্তরে (APFS) প্রতিটি ফাইল এনক্রিপ্ট করে। ডেভেলপার ফাইল তৈরি করার সময় NSFileProtectionType অ্যাট্রিবিউটের মাধ্যমে সুরক্ষা স্তর নির্দিষ্ট করে: NSFileProtectionComplete — ফাইলটি কেবল ডিভাইস আনলক থাকলেই অ্যাক্সেসযোগ্য।
Data Protection iOS 5+ সহ সমস্ত ডিভাইসে স্বয়ংক্রিয়ভাবে কাজ করে যদি পাসকোড সেট করা থাকে। এনক্রিপশন Apple-এর Dedicated AES Engine এর মাধ্যমে হার্ডওয়্যার স্তরে সঞ্চালিত হয়, যা উচ্চ কর্মক্ষমতা নিশ্চিত করে — এনক্রিপশন লেটেন্সি ব্যবহারকারীর জন্য কার্যত অলক্ষিত। একটি অ্যাপ্লিকেশনে সুরক্ষা সক্ষম করতে, FileManager এর মাধ্যমে ফাইল তৈরি করার সময় সুরক্ষা অ্যাট্রিবিউট সেট করাই যথেষ্ট।
Data Protection কী সংরক্ষণের জন্য Keychain-কে প্রতিস্থাপন করে না — এটি ফাইল, Core Data ডেটাবেস এবং অন্যান্য বড় ডেটা ভলিউম এনক্রিপ্ট করতে ব্যবহৃত হয়। Keychain (কীগুলির জন্য) এবং Data Protection (ফাইলগুলির জন্য) এর সংমিশ্রণ iOS-এ একটি সম্পূর্ণ সুরক্ষিত স্টোরেজ চক্র প্রদান করে।
আসুন Android এবং iOS-এর বিল্ট-ইন API ব্যবহার করে সিকিউর স্টোরেজ এর ব্যবহারিক উদাহরণ দেখি।
উদাহরণটি Android Keystore থেকে মাস্টার কী সহ EncryptedSharedPreferences-এর প্রাথমিককরণ দেখায়। পরবর্তী সমস্ত রিড এবং রাইট অপারেশন স্বয়ংক্রিয়ভাবে এনক্রিপ্ট এবং ডিক্রিপ্ট হয়।
import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKey
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val prefs = EncryptedSharedPreferences.create(
context,
"secure_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
prefs.edit()
.putString("auth_token", "eyJhbGciOiJIUzI1NiJ9...")
.apply()
উদাহরণটি Security framework ব্যবহার করে iOS Keychain থেকে ডেটা সংরক্ষণ এবং পড়া প্রদর্শন করে। কোডটি সর্বাধিক সুরক্ষার জন্য kSecAttrAccessibleWhenUnlockedThisDeviceOnly ব্যবহার করে।
import Security
func saveToKeychain(key: String, data: Data) {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: key,
kSecValueData as String: data,
kSecAttrAccessible as String:
kSecAttrAccessibleWhenUnlockedThisDeviceOnly
]
SecItemDelete(query as CFDictionary)
SecItemAdd(query as CFDictionary, nil)
}
func readFromKeychain(key: String) -> Data? {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: key,
kSecReturnData as String: true,
kSecMatchLimit as String: kSecMatchLimitOne
]
var result: AnyObject?
let status = SecItemCopyMatching(
query as CFDictionary, &result
)
return status == errSecSuccess ? result as? Data : nil
}
Android Keystore-এ সংরক্ষিত পাসওয়ার্ড সহ SQLCipher এর মাধ্যমে একটি এনক্রিপ্টেড SQLite ডেটাবেসে সংযোগের উদাহরণ।
import net.sqlcipher.database.SQLiteDatabase
import net.sqlcipher.database.SQLiteOpenHelper
class SecureDBHelper(context: Context) :
SQLiteOpenHelper(context, "secure.db", null, 1) {
private val password = getKeyFromKeystore()
override fun onCreate(db: SQLiteDatabase) {
db.execSQL("CREATE TABLE tokens (id INTEGER PRIMARY KEY, value TEXT)")
}
override fun onUpgrade(
db: SQLiteDatabase, oldVersion: Int, newVersion: Int
) {
onCreate(db)
}
}
// ব্যবহার: খোলার সময় পাসওয়ার্ড প্রদান করুন
val helper = SecureDBHelper(context)
val db = helper.getWritableDatabase(password)
সিকিউর স্টোরেজ এর সঠিক ব্যবহার বেশ কয়েকটি মৌলিক নীতি অনুসরণ করা প্রয়োজন যা সাধারণ ডেভেলপার ভুল প্রতিরোধ করে।
ডেটা শ্রেণীবিভাগ নির্ধারণ করুন: কোন ডেটার হার্ডওয়্যার সুরক্ষা প্রয়োজন (Keystore / Secure Enclave), কোনটির OS-স্তরের এনক্রিপশন প্রয়োজন (EncryptedSharedPreferences / Data Protection), এবং কোনটি সাধারণ ফাইল সিস্টেমে সংরক্ষণ করা যেতে পারে। অথেনটিকেশন টোকেন, প্রাইভেট কী এবং পেমেন্ট ডেটা — কেবল হার্ডওয়্যার স্তর। ব্যবহারকারী সেটিংস (থিম, ভাষা) — EncryptedSharedPreferences যথেষ্ট। সেশন ডেটা (অস্থায়ী ক্যাশে) মেমোরি বা অস্থায়ী ডিরেক্টরিতে সংরক্ষণ করা যেতে পারে।
কখনই কোডে গোপন তথ্য সংরক্ষণ করবেন না: সোর্স কোডে API কী, পাসওয়ার্ড বা সীড ফ্রেজ সহ স্ট্রিং একটি গুরুতর নিরাপত্তা ভুল। যেকোনো রিভার্স ইঞ্জিনিয়ারিং তাৎক্ষণিকভাবে এই ডেটা প্রকাশ করবে। কীগুলির জন্য Keystore ব্যবহার করুন এবং কনফিগারেশনের জন্য — অ্যাপ্লিকেশন স্টার্টআপে সার্ভার-সাইড লোডিং (রিমোট কনফিগ)।
গুরুত্বপূর্ণ অপারেশনের জন্য বায়োমেট্রিক বাইন্ডিং ব্যবহার করুন: Android Keystore এবং iOS Keychain বায়োমেট্রিক অথেনটিকেশনে কী বাঁধাই সমর্থন করে।每当 একটি কী অ্যাক্সেস করা হয়, সিস্টেম Face ID, Touch ID বা Android বায়োমেট্রিক্স (BiometricPrompt) অনুরোধ করে। এটি গ্যারান্টি দেয় যে ডিভাইসের সম্পূর্ণ নিয়ন্ত্রণ থাকলেও, একজন আক্রমণকারী মালিক ছাড়া সংরক্ষিত ডেটা ব্যবহার করতে পারে না।
নিরাপত্তা পরীক্ষা করুন: নিরাপত্তা বিশ্লেষণ সরঞ্জাম ব্যবহার করুন — স্ট্যাটিক বিশ্লেষণের জন্য MobSF (Mobile Security Framework), রানটাইম পরীক্ষার জন্য objection এবং সুরক্ষা বাইপাসের জন্য Frida। রুটিং বা জেলব্রেক করার পরে ডেটা অ্যাক্সেসযোগ্য নয় তা যাচাই করুন। Android SafetyNet Attestation বা Play Integrity API এর মাধ্যমে রুট অ্যাক্সেস পরীক্ষা করার অনুমতি দেয়, iOS — Secure Enclave অখণ্ডতা যাচাইয়ের মাধ্যমে।
নিয়মিত ক্রিপ্টোগ্রাফিক লাইব্রেরি আপডেট করুন: এনক্রিপশন লাইব্রেরিতে দুর্বলতা নিয়মিত আবিষ্কৃত হয়। AndroidX Security, SQLCipher এবং Keychain র্যাপারগুলির জন্য CVE মনিটর করুন। Dependabot বা Renovate এর মাধ্যমে নতুন সংস্করণের জন্য একটি স্বয়ংক্রিয় বিজ্ঞপ্তি সিস্টেম বাস্তবায়ন করুন।
Apple Security Research (2025) অনুসারে, সিকিউর স্টোরেজের সঠিক বাস্তবায়ন ডিভাইস থেকে ডেটা চুরির লক্ষ্যে ৯৬% আক্রমণ প্রতিরোধ করে। অবশিষ্ট ৪% হল শারীরিক অ্যাক্সেস এবং জিরো-ডে এক্সপ্লয়েট সহ আক্রমণ, যার বিরুদ্ধে বায়োমেট্রিক বাইন্ডিং কার্যকর।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
iOS Keychain ACL-এর মাধ্যমে অ্যাক্সেস নিয়ন্ত্রণ সহ পাসওয়ার্ড, কী এবং সার্টিফিকেট সংরক্ষণের জন্য একটি এনক্রিপ্টেড ডেটাবেস। Android Keystore একটি ক্রিপ্টোগ্রাফিক প্রোভাইডার যা একটি বিচ্ছিন্ন পরিবেশে (TEE/StrongBox) কী তৈরি এবং সংরক্ষণ করে এবং প্রাইভেট কী নিষ্কাশনের অনুমতি দেয় না।
EncryptedSharedPreferences মান এনক্রিপ্ট করার জন্য AES-256 GCM এবং কী এনক্রিপ্ট করার জন্য AES-256 SIV ব্যবহার করে। মাস্টার কী Android Keystore-এ সংরক্ষিত থাকে, যা দ্বি-স্তরীয় সুরক্ষা প্রদান করে। অতিরিক্তভাবে, অখণ্ডতা যাচাইয়ের জন্য HMAC-SHA256 ব্যবহার করা হয়।
হ্যাঁ, HTTPS কেবল ট্রান্সমিশন চ্যানেলে ডেটা রক্ষা করে। ডিভাইসে, ডিক্রিপশনের পরে ডেটা প্লেইন টেক্সটে সংরক্ষিত হয়। যদি একজন আক্রমণকারী ডিভাইসে শারীরিক অ্যাক্সেস পায় বা ম্যালওয়্যার ইনস্টল করে, HTTPS সংরক্ষিত ডেটা রক্ষা করবে না। সর্বদা স্টোরেজ স্তরে ডেটা এনক্রিপ্ট করুন।
setUnlockedDeviceRequired(true) ফ্ল্যাগ সহ Android Keystore ব্যবহার করুন, যা রুট করা ডিভাইসে কীগুলির অ্যাক্সেস ব্লক করে। অতিরিক্তভাবে, Play Integrity API এর মাধ্যমে অখণ্ডতা যাচাই করুন এবং যদি এটি রেফারেন্স মান থেকে বিচ্যুত হয়, স্টোরেজ থেকে সমস্ত গোপন তথ্য মুছে ফেলুন।
না, UserDefaults স্যান্ডবক্সের ভিতরে একটি plist ফাইলে প্লেইন টেক্সটে ডেটা সংরক্ষণ করে। রিভার্স ইঞ্জিনিয়ারিং সরঞ্জাম সহ যেকোনো অ্যাপ্লিকেশন (ব্যাকআপ বা জেলব্রেকের মাধ্যমে) টোকেন পড়তে পারে। শুধুমাত্র Keychain হল iOS-এ গোপন তথ্য সংরক্ষণের একমাত্র সুরক্ষিত স্থান।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন