Keystore হল একটি সুরক্ষিত ক্রিপ্টোগ্রাফিক স্টোরেজ যা Android ডেভেলপমেন্টে প্রাইভেট কী এবং অ্যাপ সাইনিং সার্টিফিকেট সংরক্ষণের জন্য ব্যবহৃত হয়। Android Developers Documentation, 2026 অনুসারে, Google Play-তে প্রকাশের আগে প্রতিটি APK বা App Bundle-কে Keystore থেকে ডিজিটাল স্বাক্ষর দিয়ে সাইন করতে হবে। আসুন Keystore ফরম্যাট, তৈরি এবং প্রকল্পে ব্যবহার দেখি।
মুখ্য বিষয়
Keystore (KeyStore) হল ক্রিপ্টোগ্রাফিক কী, সার্টিফিকেট এবং বিশ্বস্ত এন্ট্রি সংরক্ষণের জন্য Java Cryptography Architecture (JCA)-এর একটি মানক প্রক্রিয়া। Android ডেভেলপমেন্টে, Keystore প্রাইভেট কী সংরক্ষণের জন্য ব্যবহৃত হয় যা প্রকাশের আগে অ্যাপে সাইন করে। স্বাক্ষর নিশ্চিত করে যে অ্যাপটি নির্দিষ্ট ডেভেলপার দ্বারা প্রকাশিত হয়েছে এবং প্রকাশের পরে এর কোড পরিবর্তন করা হয়নি। প্রতিটি অ্যাপ আপডেট একই কী দিয়ে সাইন করতে হবে, অন্যথায় Google Play APK বা App Bundle প্রত্যাখ্যান করবে।
একটি Keystore-এ একাধিক এন্ট্রি (aliases) থাকতে পারে, প্রতিটি একটি সার্টিফিকেট সহ একটি কী জোড়া (প্রাইভেট এবং পাবলিক) উপস্থাপন করে। Alias হল একটি অনন্য এন্ট্রি নাম যার মাধ্যমে অ্যাপ সাইনিংয়ের সময় কী অ্যাক্সেস করে। একটি সাধারণ Android প্রকল্পে, Keystore-এ রিলিজ সংস্করণ সাইন করার জন্য একটি এন্ট্রি থাকে এবং ডিবাগ বিল্ড সাইন করার জন্য অতিরিক্ত এন্ট্রি থাকতে পারে। Google Play Console প্রতিটি আপলোড করা অ্যাপের জন্য SHA-1 এবং SHA-256 সার্টিফিকেট ফিঙ্গারপ্রিন্ট প্রদর্শন করে।
Android Studio-তে Build → Generate Signed Bundle / APK মেনুর মাধ্যমে অন্তর্নির্মিত Keystore সমর্থন অন্তর্ভুক্ত রয়েছে। Android Studio-র সাইনিং উইজার্ড আপনাকে একটি নতুন Keystore তৈরি করতে বা বিদ্যমান একটি নির্বাচন করতে, alias, Keystore এবং কী পাসওয়ার্ড, সেইসাথে সার্টিফিকেশন ডেটা (প্রতিষ্ঠানের নাম, শহর, দেশ) নির্দিষ্ট করতে দেয়। এই ডেটা সার্টিফিকেটে এম্বেড করা হয় এবং APK স্বাক্ষর যাচাই করার সময় ব্যবহারকারীদের কাছে দৃশ্যমান হয়। Google Play প্রয়োজন যে সার্টিফিকেটটি কমপক্ষে 25 বছরের জন্য বৈধ হবে — Android অ্যাপ ইনস্টল করার সময় মেয়াদ শেষ হওয়ার তারিখ পরীক্ষা করে।
Google Play-তে অ্যাপ আপডেট শুধুমাত্র একই কী দিয়ে সম্ভব যা প্রথম সংস্করণে সাইন করেছিল। যদি Keystore হারিয়ে যায়, আপডেট প্রকাশ করা অসম্ভব — একটি নতুন প্যাকেজ নামের অধীনে অ্যাপটি পুনরায় প্রকাশ করতে হবে। Google Play Console Help (2026) অনুসারে, অ্যাপ সাইনিং কী শুধুমাত্র Google Play App Signing-এর মাধ্যমে পুনরুদ্ধার করা যেতে পারে — একটি পরিষেবা যা Google-এর পক্ষে কী সংরক্ষণ করে। যদি ডেভেলপার এই বিকল্পটি ব্যবহার করে থাকেন, তাহলে স্থানীয় Keystore হারানো গুরুতর নয়।
Android অ্যাপ সাইন করার প্রক্রিয়ায় APK বিষয়বস্তুর একটি ডাইজেস্ট (হ্যাশ) তৈরি করা এবং Keystore থেকে প্রাইভেট কী দিয়ে এটি এনক্রিপ্ট করা জড়িত। Android SDK Build Tools-এ apksigner ইউটিলিটি অন্তর্ভুক্ত রয়েছে, যা APK Signature Scheme v2 (বা Android 9+-এর জন্য v3) ব্যবহার করে সাইনিং সম্পাদন করে। অ্যাপ ইনস্টল করার সময়, Android স্বাক্ষর যাচাই করে: সার্টিফিকেটের পাবলিক কী দিয়ে স্বাক্ষর ডিক্রিপ্ট করে, APK হ্যাশের মূলের সাথে তুলনা করে — যদি হ্যাশ মেলে না, ইনস্টলেশন প্রত্যাখ্যান করা হয়।
Android একাধিক সাইনিং স্কিম সমর্থন করে: v1 (JAR signing), v2 (APK Signature Scheme), v3 (APK Signature Scheme কী রোটেশন সমর্থন সহ) এবং v4 (Android 11+-এর জন্য বৃদ্ধিমূলক ইনস্টলেশন)। Google Play নতুন অ্যাপের জন্য v2 বা v3 প্রয়োজন। apksigner স্বয়ংক্রিয়ভাবে সাইনিংয়ের সময় সমস্ত প্রয়োজনীয় স্কিম যোগ করে যদি কী সংশ্লিষ্ট অ্যালগরিদম সমর্থন করে। Android 11+ v4 সাইনিং সহ ADB ইনস্টলেশন সমর্থন করে, যা ডিভাইসে বড় APK-এর বৃদ্ধিমূলক লোডিং ত্বরান্বিত করে।
অ্যালগরিদম: Android সাইনিং কী-র জন্য RSA-2048 বা ECDSA P-256 ব্যবহার করার সুপারিশ করে। সার্টিফিকেটটি X.509 v3 হতে হবে। Android যাচাই করে যে ইনস্টলেশনের সময় সার্টিফিকেটটি বৈধ — যদি এর মেয়াদ শেষ হয়ে যায়, ইনস্টলেশন ব্লক করা হয়। এই কারণেই Google সার্টিফিকেটের বৈধতার সময়কাল কমপক্ষে 25 বছর নির্ধারণের সুপারিশ করে। Google Play App Signing দুটি কী ব্যবহার করে: অ্যাপ সাইনিং কী (app signing key) এবং আপলোড কী (upload key) — ডেভেলপার Console-এ APK আপলোড করার জন্য আপলোড কী ব্যবহার করে, এবং Google ব্যবহারকারীদের জন্য মূল কী দিয়ে অ্যাপে সাইন করে।
Java দুটি প্রধান Keystore ফরম্যাট সমর্থন করে: JKS (Java KeyStore) — Oracle-এর মালিকানাধীন ফরম্যাট যা JDK 1.2 থেকে বিদ্যমান, এবং PKCS12 — RSA Laboratories-এর মানসম্মত Public-Key Cryptography Standards #12 ফরম্যাট। JKS তার নিজস্ব ডেটা স্টোরেজ ফরম্যাট ব্যবহার করে এবং শুধুমাত্র Java ইকোসিস্টেমের মধ্যে সমর্থিত। PKCS12 হল একটি উন্মুক্ত মান যা Java, .NET, OpenSSL, Python (cryptography) এবং অধিকাংশ অন্যান্য ক্রিপ্টোগ্রাফিক লাইব্রেরি দ্বারা সমর্থিত।
Google Play 2021-এর পরে তৈরি নতুন Keystore-এর জন্য PKCS12-কে পছন্দের ফরম্যাট হিসেবে সুপারিশ করে। JDK 9 এবং পরবর্তী সংস্করণগুলি ডিফল্টরূপে PKCS12 ফরম্যাটে Keystore তৈরি করে (পূর্বে JKS ডিফল্ট ছিল)। PKCS12-এর প্রধান সুবিধা হল সামঞ্জস্যতা: একটি .p12 ফাইল Java-এর সাথে আবদ্ধ নয় এমন যেকোনো পরিবেশে খোলা যেতে পারে। OpenSSL PKCS12 থেকে সার্টিফিকেট বের করে PEM ফরম্যাটে রূপান্তর করতে পারে। JKS ফাইল পড়ার জন্য JDK ইউটিলিটির প্রয়োজন হয় এবং OpenSSL দ্বারা প্রক্রিয়া করা যায় না।
ফরম্যাটের মধ্যে রূপান্তর JDK-র keytool ইউটিলিটি ব্যবহার করে করা হয়। JKS থেকে PKCS12-তে মাইগ্রেট করার সময়, নিশ্চিত করুন যে সমস্ত alias এবং পাসওয়ার্ড সঠিকভাবে স্থানান্তরিত হয়েছে। keytool -importkeystore কমান্ড ফরম্যাট নির্বিশেষে একটি Keystore-এর বিষয়বস্তু অন্যটিতে আমদানি করার অনুমতি দেয়। রূপান্তরের পরে, কী সংস্করণ নিয়ে বিভ্রান্তি এড়াতে পুরানো JKS ফাইলটি মুছে ফেলা ভাল। Android Studio সাইনড বিল্ড জেনারেট করার সময় উভয় ফরম্যাট সমর্থন করে।
| বৈশিষ্ট্য | JKS | PKCS12 |
|---|---|---|
| মান | মালিকানাধীন (Oracle) | উন্মুক্ত (RSA Labs) |
| এক্সটেনশন | .jks / .keystore | .p12 / .pfx |
| সমর্থন | শুধু Java | Java, OpenSSL, .NET, Python |
| ডিফল্ট | JDK 8 পর্যন্ত | JDK 9+ |
| Google সুপারিশ | পুরনো | পছন্দের |
keytool ইউটিলিটি JDK (Java Development Kit)-এর অংশ এবং Keystore তৈরি, দেখা এবং পরিচালনার জন্য কমান্ডের একটি সম্পূর্ণ সেট সরবরাহ করে। একটি কী জোড়া দিয়ে একটি নতুন Keystore তৈরি করতে, PKCS12 ফরম্যাট, RSA অ্যালগরিদম, কী আকার এবং সার্টিফিকেট বৈধতার সময়কাল নির্দিষ্ট করে keytool -genkeypair কমান্ড ব্যবহার করা হয়। Google Play-তে কমপক্ষে 25 বছর (9125 দিন) সার্টিফিকেট বৈধতা প্রয়োজন — -validity প্যারামিটারে এই মান নির্দিষ্ট করার সুপারিশ করা হয়।
Android প্রকল্পের জন্য PKCS12 ফরম্যাটে Keystore জেনারেট করার উদাহরণ। -dname প্যারামিটারে সার্টিফিকেটের X.500 Distinguished Name থাকে। -ext প্যারামিটার প্রয়োজন হলে Subject Alternative Name অন্তর্ভুক্ত করে — Android-এর জন্য, Basic Constraints যথেষ্ট:
# Android-এর জন্য PKCS12 Keystore তৈরি করা
keytool -genkeypair -alias "upload_key" \
-keyalg RSA -keysize 2048 -validity 9125 \
-keystore "release-keystore.p12" \
-storetype PKCS12 \
-dname "CN=Developer,O=Company,C=RU"
Keytool Keystore পাসওয়ার্ড এবং কী পাসওয়ার্ডের জন্য অনুরোধ করবে (এগুলি মিলতে পারে)। -storetype PKCS12 প্যারামিটার আধুনিক ফরম্যাটে একটি ফাইল তৈরি করে। -keysize 2048 ন্যূনতম RSA কী আকারের জন্য Google-এর প্রয়োজনীয়তা পূরণ করে। -validity 9125 (25 বছর) অ্যাপ্লিকেশনের সম্পূর্ণ প্রত্যাশিত জীবনচক্রের জন্য সামঞ্জস্য নিশ্চিত করে। Keystore তৈরি করার পরে, keytool -list -v -keystore release-keystore.p12 কমান্ড দিয়ে এর বিষয়বস্তু যাচাই করার সুপারিশ করা হয়।
Keystore এন্ট্রি পরীক্ষা করার জন্য, -list ফ্ল্যাগ সহ কমান্ড ব্যবহার করা হয়। আউটপুটে alias, তৈরি এবং মেয়াদ শেষ হওয়ার তারিখ, এন্ট্রির ধরন এবং SHA-256 ফিঙ্গারপ্রিন্ট অন্তর্ভুক্ত থাকে। Android Studio বিদ্যমান Keystore নির্বাচন করার সময় Generate Signed Bundle / APK ডায়ালগে একই তথ্য প্রদর্শন করে:
# Keystore এন্ট্রি দেখা
keytool -list -v -keystore "release-keystore.p12" \
-storetype PKCS12
CI/CD পাইপলাইনে, Keystore-কে নিরাপদে সংরক্ষণ করতে হবে এবং আপোসের ঝুঁকি ছাড়াই বিল্ড এজেন্টে পাস করতে হবে। GitHub Actions বাইনারি ফাইল base64 ফরম্যাটে সংরক্ষণের জন্য Secrets সরবরাহ করে। Keystore base64 কমান্ড দিয়ে এনকোড করা হয়, ফলস্বরূপ স্ট্রিং রিপোজিটরি সিক্রেটে সংরক্ষিত হয় এবং বিল্ড ধাপে এটি আবার ফাইলে ডিকোড করা হয়। GitLab CI File টাইপের Variables-এর মাধ্যমে অনুরূপ প্রক্রিয়া ব্যবহার করে।
GitHub Actions-এ Keystore সহ CI বিল্ড সেট আপ করার উদাহরণে সিক্রেট থেকে Keystore ডিকোড করা, Gradle বৈশিষ্ট্য কনফিগার করা এবং সাইনড বিল্ড সম্পাদন করা অন্তর্ভুক্ত। Gradle-এর Android প্লাগইন keystore.properties ফাইল (স্থানীয় ডেভেলপমেন্টের জন্য .gitignore থেকে বাদ) বা CI সিস্টেম পরিবেশ ভেরিয়েবল থেকে Keystore পাথ এবং পাসওয়ার্ড পড়ে:
// build.gradle (app) — সাইনিং কনফিগারেশন
@Override
android {
signingConfigs {
release {
storeFile file("release-keystore.p12")
storePassword System.getenv("STORE_PASSWORD")
keyAlias System.getenv("KEY_ALIAS")
keyPassword System.getenv("KEY_PASSWORD")
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
Gradle CI সিস্টেম দ্বারা নির্ধারিত পরিবেশ ভেরিয়েবল পড়ে। Keystore ফাইলটি storeFile-এ নির্দিষ্ট করা অনুযায়ী অ্যাপ্লিকেশন মডিউলের রুটে অবস্থিত হওয়া উচিত। নিরাপত্তার জন্য, রিপোজিটরিতে কখনও পাসওয়ার্ড সংরক্ষণ করবেন না — CI সিস্টেম Secrets ব্যবহার করুন। Android-এর জন্য Fastlane supply প্লাগইন সরবরাহ করে, যা Google Play Console-এর সাথে কাজ করে, কিন্তু APK সাইনিং-এর জন্য এখনও এজেন্টে স্থানীয় Keystore প্রয়োজন।
একটি বিকল্প হল Google Play App Signing। এই বিকল্পটি ব্যবহার করার সময়, ডেভেলপার শুধুমাত্র আপলোড কী (upload key) Google Play-তে আপলোড করে, এবং Google তার নিজস্ব কী দিয়ে চূড়ান্ত APK-তে সাইন করে। এই ক্ষেত্রে, Keystore শুধুমাত্র আপলোড কী তৈরি করতে ব্যবহৃত হয়, এবং এটি হারানো আপডেটগুলিকে ব্লক করে না — একটি নতুন আপলোড কী তৈরি করা যেতে পারে এবং Console-এ নিবন্ধিত করা যেতে পারে। Google Play App Signing আগস্ট 2021 থেকে নতুন অ্যাপ্লিকেশনের জন্য বাধ্যতামূলক।
Keystore হারানো Android ডেভেলপমেন্টের সবচেয়ে গুরুতর সমস্যাগুলির মধ্যে একটি। ব্যাকআপ ছাড়া, বিদ্যমান অ্যাপ্লিকেশনের আপডেট প্রকাশ করা অসম্ভব — Google Play ভিন্ন কী দিয়ে সাইন করা APK প্রত্যাখ্যান করে। বিভিন্ন ভৌত বা ক্লাউড স্টোরেজে Keystore-এর কমপক্ষে দুটি ব্যাকআপ কপি রাখার সুপারিশ করা হয়: উদাহরণস্বরূপ, টিমের ক্লাউড স্টোরেজে একটি এনক্রিপ্ট করা ফাইল এবং প্রতিষ্ঠানের সেফ-এ একটি ভৌত মিডিয়া। Keystore এবং কী পাসওয়ার্ড ফাইল থেকে আলাদাভাবে সংরক্ষণ করা হয়, উদাহরণস্বরূপ, অ্যাক্সেস নিয়ন্ত্রণ সহ একটি পাসওয়ার্ড ম্যানেজারে।
Android Studio, Generate Signed Bundle / APK ডায়ালগে নতুন Keystore তৈরি করার সময়, ভবিষ্যতের বিল্ডের জন্য পাথ মনে রাখার প্রস্তাব দেয়। তবে, ডেভেলপমেন্ট এনভায়রনমেন্ট নিজে ব্যাকআপ তৈরি করে না — এটি ডেভেলপারের দায়িত্ব। টিম ডেভেলপমেন্টের জন্য, সমস্ত টিম সদস্যদের একটি সুরক্ষিত চ্যানেলের মাধ্যমে আপলোড কী পাঠানোর সাথে Google Play App Signing ব্যবহার করার সুপারিশ করা হয়। Gradle স্বয়ংক্রিয়ভাবে উৎপন্ন debug.keystore দিয়ে ডিবাগ বিল্ড সাইন করতে পারে, যার জন্য ব্যাকআপের প্রয়োজন হয় না — এটি সমস্ত Android Studio ইনস্টলেশনের জন্য একই।
স্থানান্তরের সময় Keystore নিরাপত্তা: .p12 বা .jks ফাইলগুলি শুধুমাত্র এনক্রিপ্টেড চ্যানেলের মাধ্যমে (SFTP, HTTPS, এনক্রিপ্টেড ইমেল অ্যাটাচমেন্ট) স্থানান্তর করা উচিত। Keystore কখনও সোর্স কোড রিপোজিটরিতে অন্তর্ভুক্ত করবেন না — এমনকি প্রাইভেটেও নয়। GitGuardian বা GitHub secret scanning স্বয়ংক্রিয়ভাবে ক্রেডেনশিয়াল প্রকাশ সনাক্ত করে, কিন্তু রিপোজিটরিতে Keystore সংরক্ষণ করা এখনও নিরাপত্তা লঙ্ঘন। CI/CD-এর জন্য, অবকাঠামো-স্তরের এনক্রিপশন সহ প্ল্যাটফর্মের সিক্রেট মেকানিজম (GitHub Actions Secrets, GitLab CI Variables, Jenkins Credentials) ব্যবহার করুন।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
আপনি যদি Google Play App Signing ব্যবহার করেন, তবে শুধুমাত্র আপলোড কী হারায় — আপনি একটি নতুন কী তৈরি করতে পারেন এবং Google Play Console-এ নিবন্ধন করতে পারেন। যদি App Signing সক্রিয় না থাকে, Keystore হারানোর অর্থ হল আপনি অ্যাপ্লিকেশন আপডেট করতে পারবেন না — আপনাকে একটি ভিন্ন প্যাকেজ নাম দিয়ে একটি নতুন অ্যাপ্লিকেশন প্রকাশ করতে হবে।
হ্যাঁ, একটি Keystore-এ বিভিন্ন অ্যাপ্লিকেশনের জন্য বিভিন্ন কী সহ একাধিক alias (এন্ট্রি) থাকতে পারে। একটি Keystore-এর মধ্যে প্রতিটি অ্যাপ্লিকেশনের জন্য একটি পৃথক alias ব্যবহার করার সুপারিশ করা হয়। Google Play বিভিন্ন অ্যাপ্লিকেশনের জন্য বিভিন্ন কী সমর্থন করে — একাধিক প্রকল্পের জন্য একটি Keystore ব্যবহারে কোনো বিধিনিষেধ নেই।
Android উভয় অ্যালগরিদম সমর্থন করে, কিন্তু ECDSA P-256 পছন্দনীয়: এটি ছোট স্বাক্ষর আকার এবং দ্রুততর যাচাইকরণ সহ RSA-2048-এর সমতুল্য নিরাপত্তা প্রদান করে। তবে, যদি Android 4.4 এবং নিচের সাথে সামঞ্জস্য প্রয়োজন হয়, RSA বেছে নিন — ECDSA শুধুমাত্র Android 4.3+ এ সমর্থিত।
Android অ্যাপ্লিকেশন ইনস্টল করার সময় সার্টিফিকেটের বৈধতার সময়কাল পরীক্ষা করে। যদি সার্টিফিকেটের মেয়াদ শেষ হয়ে যায়, ইনস্টলেশন ব্লক করা হয় — এমনকি যদি এটি বিদ্যমান অ্যাপ্লিকেশনের আপডেট হয়। 25 বছর হল Google-এর সুপারিশকৃত ন্যূনতম সময় যাতে একটি নতুন সার্টিফিকেট জারি না করেই মোবাইল অ্যাপ্লিকেশনের সম্পূর্ণ প্রত্যাশিত জীবনচক্র কভার করা যায়।
Debug.keystore Android SDK দ্বারা স্বয়ংক্রিয়ভাবে তৈরি হয় এবং ডিবাগ বিল্ড সাইন করার জন্য ব্যবহৃত হয়। এটি সমস্ত Android Studio ইনস্টলেশনের জন্য একই (স্ট্যান্ডার্ড পাসওয়ার্ড: android)। রিলিজ Keystore ডেভেলপার দ্বারা Google Play-তে প্রকাশিত সংস্করণ সাইন করার জন্য তৈরি করা হয় এবং এটি নিরাপদ রাখতে হবে — এটি হারানো গুরুতর।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন