অ্যাপ বান্ডেলের জন্য কোড স্বচ্ছতা

কোড ট্রান্সপারেন্সি হল একটি ঐচ্ছিক কোড সাইনিং এবং অ্যান্ড্রয়েড অ্যাপ বান্ডেলের সাথে প্রকাশিত অ্যাপগুলির জন্য যাচাইকরণ পদ্ধতি। এটি একটি কোড ট্রান্সপারেন্সি সাইনিং কী ব্যবহার করে, যা শুধুমাত্র অ্যাপ ডেভেলপারের হাতে থাকে।

কোডের স্বচ্ছতা অ্যাপ বান্ডেল এবং APK-এর জন্য ব্যবহৃত সাইনিং স্কিম থেকে স্বাধীন। কোড ট্রান্সপারেন্সি কী অ্যাপ সাইনিং কী থেকে আলাদা এবং আলাদা যেটি প্লে অ্যাপ সাইনিং ব্যবহার করার সময় Google এর সুরক্ষিত পরিকাঠামোতে সংরক্ষিত থাকে।

কিভাবে কোড স্বচ্ছতা কাজ করে

বান্ডেল তৈরি হওয়ার পরে, কিন্তু বিতরণের জন্য প্লে কনসোলে আপলোড করার আগে প্রক্রিয়াটি একটি কোড ট্রান্সপারেন্সি ফাইল অন্তর্ভুক্ত করে কাজ করে।

কোড ট্রান্সপারেন্সি ফাইল হল একটি JSON ওয়েব টোকেন (JWT) যাতে বান্ডেলে অন্তর্ভুক্ত DEX ফাইল এবং নেটিভ লাইব্রেরি এবং তাদের হ্যাশের তালিকা থাকে। তারপরে এটি কোড ট্রান্সপারেন্সি কী ব্যবহার করে স্বাক্ষরিত হয় যা শুধুমাত্র বিকাশকারীর হাতে থাকে।

Code transparency diagram

এই কোড ট্রান্সপারেন্সি ফাইলটি অ্যাপ বান্ডেল থেকে তৈরি বেস APK-তে প্রচার করা হয় (বিশেষ করে বেস মডিউলের প্রধান বিভাজনে)। তারপর এটি যাচাই করা যেতে পারে যে:

  • APK-এ উপস্থিত সমস্ত DEX এবং নেটিভ কোড ফাইলের কোড ট্রান্সপারেন্সি ফাইলে হ্যাশগুলি মিলে যায়৷
  • অ্যাপে কোড ট্রান্সপারেন্সি সাইনিং কী-এর পাবলিক কী কম্পোনেন্ট ডেভেলপারের পাবলিক কী-এর সাথে মেলে (যা অবশ্যই ডেভেলপারকে একটি আলাদা, সুরক্ষিত চ্যানেলে প্রদান করতে হবে)।

একসাথে, এই তথ্যটি যাচাই করে যে APKগুলিতে থাকা কোডটি ডেভেলপারের উদ্দেশ্যের সাথে মিলে যায় এবং এটি পরিবর্তন করা হয়নি৷

কোড ট্রান্সপারেন্সি ফাইলটি রিসোর্স, অ্যাসেট, অ্যান্ড্রয়েড ম্যানিফেস্ট বা অন্য কোনও ফাইল যা ডিএক্স ফাইল নয় বা lib/ ফোল্ডারে থাকা নেটিভ লাইব্রেরিগুলি যাচাই করে না৷

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

পরিচিত সীমাবদ্ধতা

কিছু নির্দিষ্ট পরিস্থিতিতে আছে যখন কোড স্বচ্ছতা ব্যবহার করা যাবে না:

  • ম্যানিফেস্টে sharedUserId অ্যাট্রিবিউট নির্দিষ্ট করে এমন অ্যাপ। এই ধরনের অ্যাপ্লিকেশনগুলি অন্যান্য অ্যাপ্লিকেশনগুলির সাথে তাদের প্রক্রিয়া ভাগ করতে পারে, যা তারা যে কোডটি কার্যকর করছে সে সম্পর্কে আশ্বাস দেওয়া কঠিন করে তোলে।
  • অ্যান্টি-ট্যাম্পার সুরক্ষা বা অন্য কোনও পরিষেবা ব্যবহার করে যে অ্যাপগুলি কোড ট্রান্সপারেন্সি ফাইল তৈরি হওয়ার পরে কোড পরিবর্তন করে তা কোড ট্রান্সপারেন্সি ভেরিফিকেশন ব্যর্থ হবে।
  • যে অ্যাপগুলি 21 (Android 5.0) এর নীচের API স্তরগুলিতে লিগ্যাসি মাল্টিডেক্স ব্যবহার করে এবং বৈশিষ্ট্য মডিউল ব্যবহার করে। Android 5.0+ ডিভাইসে Google Play দ্বারা অ্যাপটি ইনস্টল করা হলে কোডের স্বচ্ছতা কাজ করতে থাকবে। পুরানো OS সংস্করণে কোড স্বচ্ছতা অক্ষম করা হবে।

কিভাবে কোড স্বচ্ছতা যোগ করতে

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

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

অ্যান্ড্রয়েড গ্রেডল প্লাগইন ব্যবহার করে

কোড স্বচ্ছতা সমর্থনের জন্য Android Gradle প্লাগইন সংস্করণ 7.1.0-alpha03 বা তার নতুন সংস্করণ প্রয়োজন। কোড স্বচ্ছতা স্বাক্ষর করার জন্য ব্যবহৃত কী কনফিগার করতে, bundle ব্লকে নিম্নলিখিত যোগ করুন।

গ্রোভি

// In your app module's build.gradle file:
android {
    ...
    bundle {
        codeTransparency {
            signing {
                keyAlias = "ALIAS"
                keyPassword = "PASSWORD"
                storeFile = file("path/to/keystore")
                storePassword = "PASSWORD"
            }
        }
        ...
    }
}

কোটলিন

// In your app module's build.gradle.kts file:
android {
    ...
    bundle {
        codeTransparency {
            signing {
                keyAlias = "ALIAS"
                keyPassword = "PASSWORD"
                storeFile = file("path/to/keystore")
                storePassword = "PASSWORD"
            }
        }
        ...
    }
}

ব্যবহৃত কীটি অবশ্যই একটি হতে হবে যা আপনি শুধুমাত্র কোড স্বচ্ছতার জন্য ব্যবহার করবেন, এবং অ্যাপ সাইনিং কীটি নয় যা প্লে অ্যাপ সাইনিং দ্বারা ব্যবহৃত হয়।

কমান্ড লাইনে bundletool ব্যবহার করে

কোড স্বচ্ছতা সমর্থনের জন্য bundletool সংস্করণ 1.7.0 বা নতুন প্রয়োজন, যা আপনি GitHub থেকে ডাউনলোড করতে পারেন।

একটি অ্যান্ড্রয়েড অ্যাপ বান্ডেলে কোড স্বচ্ছতা যোগ করতে নিম্নলিখিত কমান্ডটি চালান। ব্যবহৃত কীটি অবশ্যই এমন একটি হতে হবে যা আপনি শুধুমাত্র কোড স্বচ্ছতার জন্য ব্যবহার করবেন, এবং প্লে অ্যাপ সাইনিং দ্বারা ব্যবহৃত অ্যাপ সাইনিং কী নয়।

bundletool add-transparency \
  --bundle=/MyApp/my_app.aab \
  --output=/MyApp/my_app_with_transparency.aab \
  --ks=/MyApp/keystore.jks \
  --ks-pass=file:/MyApp/keystore.pwd \
  --ks-key-alias=MyKeyAlias \
  --key-pass=file:/MyApp/key.pwd

বিকল্পভাবে, আপনি যদি আপনার নিজের স্বাক্ষর করার সরঞ্জামগুলি ব্যবহার করতে চান, আপনি স্বাক্ষরবিহীন কোড স্বচ্ছতা ফাইল তৈরি করতে bundletool ব্যবহার করতে পারেন, এটি একটি পৃথক পরিবেশে স্বাক্ষর করতে পারেন এবং বান্ডেলে স্বাক্ষরটি ইনজেক্ট করতে পারেন:

# Generate code transparency file
bundletool add-transparency \
  --mode=generate_code_transparency_file \
  --bundle=/MyApp/my_app.aab \
  --output=/MyApp/code_transparency_file.jwt \
  --transparency-key-certificate=/MyApp/transparency.cert

# Add code transparency signature to the bundle
bundletool add-transparency \
  --mode=inject_signature \
  --bundle=/MyApp/my_app.aab \
  --output=/MyApp/my_app_with_transparency.aab \
  --transparency-key-certificate=/MyApp/transparency.cert \
  --transparency-signature=/MyApp/signature

একটি অ্যাপের কোড স্বচ্ছতা যাচাই করুন

কোড ট্রান্সপারেন্সি ফাইলের বিপরীতে কোড যাচাই করার জন্য বিভিন্ন পদ্ধতি রয়েছে, আপনার Android ডিভাইসে APK ইনস্টল করা আছে বা আপনার কম্পিউটারে স্থানীয়ভাবে ডাউনলোড করা হয়েছে তার উপর নির্ভর করে।

একটি অ্যাপ বান্ডেল বা APK সেট চেক করতে Bundletool ব্যবহার করে

আপনি একটি অ্যাপ বান্ডেল বা একটি APK সেটে কোডের স্বচ্ছতা যাচাই করতে bundletool ব্যবহার করতে পারেন। পাবলিক সার্টিফিকেট ফিঙ্গারপ্রিন্ট প্রিন্ট করতে check-transparency কমান্ড ব্যবহার করুন:

# For checking a bundle:
bundletool check-transparency \
  --mode=bundle \
  --bundle=/MyApp/my_app_with_transparency.aab

No APK present. APK signature was not checked.
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.


# For checking a ZIP containing app's APK splits:
bundletool check-transparency \
  --mode=apk \
  --apk-zip=/MyApp/my_app_with_transparency.zip

APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): 02 34 E5 98 CD A7 B2 12 ..
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.

আপনি ঐচ্ছিকভাবে পাবলিক সার্টিফিকেট নির্দিষ্ট করতে পারেন যার বিপরীতে আপনি বান্ডেল বা APK সেটটি যাচাই করতে চান, যাতে আপনাকে ম্যানুয়ালি হ্যাশগুলি তুলনা করতে না হয়:

bundletool check-transparency \
  --mode=bundle \
  --bundle=/MyApp/my_app_with_transparency.aab \
  --transparency-key-certificate=/MyApp/transparency.cert

No APK present. APK signature was not checked.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.


bundletool check-transparency \
  --mode=apk \
  --apk-zip=/MyApp/my_app_with_transparency.zip \
  --apk-signing-key-certificate=/MyApp/apk.cert \
  --transparency-key-certificate=/MyApp/transparency.cert

APK signature verified for the provided apk signing key certificate.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.

একটি ডিভাইসে ইনস্টল করা একটি অ্যাপ চেক করতে Bundletool ব্যবহার করে

একটি অ্যান্ড্রয়েড ডিভাইসে ইনস্টল করা একটি অ্যাপ পরীক্ষা করার জন্য, নিশ্চিত করুন যে ডিভাইসটি আপনার কম্পিউটারের সাথে ADB এর মাধ্যমে সংযুক্ত আছে এবং নিম্নলিখিত কমান্ডটি ইস্যু করুন:

bundletool check-transparency \
  --mode=connected_device \
  --package-name="com.my.app"

APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): 02 34 E5 98 CD A7 B2 12 ..
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.

সংযুক্ত ডিভাইসের স্বচ্ছতা পরীক্ষাটি আপনার নির্দিষ্ট করা একটি পাবলিক কী-এর বিপরীতে স্বাক্ষরটিকে ঐচ্ছিকভাবে যাচাই করতে পারে:

bundletool check-transparency \
  --mode=connected-device \
  --package-name="com.my.app" \
  --apk-signing-key-certificate=/MyApp/apk.cert \
  --transparency-key-certificate=/MyApp/transparency.cert

APK signature verified for the provided apk signing key certificate.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.