মুক্তির জন্য সাইন তৈরি করে

অ্যান্ড্রয়েড ওএস ছবি দুটি জায়গায় ক্রিপ্টোগ্রাফিক স্বাক্ষর ব্যবহার করে:

  1. ছবির ভিতরে প্রতিটি .apk ফাইল অবশ্যই স্বাক্ষর করতে হবে। Android এর প্যাকেজ ম্যানেজার দুটি উপায়ে একটি .apk স্বাক্ষর ব্যবহার করে:
    • যখন একটি অ্যাপ্লিকেশন প্রতিস্থাপিত হয়, পুরানো অ্যাপ্লিকেশনের ডেটাতে অ্যাক্সেস পেতে এটিকে অবশ্যই পুরানো অ্যাপ্লিকেশনটির মতো একই কী দ্বারা স্বাক্ষর করতে হবে৷ এটি .apk ওভাররাইট করে ব্যবহারকারীর অ্যাপ আপডেট করার জন্য এবং /data অধীনে ইনস্টল করা একটি নতুন সংস্করণ সহ একটি সিস্টেম অ্যাপ ওভাররাইড করার জন্য উভয়ই সত্য।
    • যদি দুই বা ততোধিক অ্যাপ্লিকেশন একটি ইউজার আইডি শেয়ার করতে চায় (যাতে তারা ডেটা শেয়ার করতে পারে, ইত্যাদি), তাদের অবশ্যই একই কী দিয়ে স্বাক্ষর করতে হবে।
  2. OTA আপডেট প্যাকেজগুলি অবশ্যই সিস্টেম দ্বারা প্রত্যাশিত একটি কী দিয়ে স্বাক্ষর করতে হবে বা ইনস্টলেশন প্রক্রিয়া তাদের প্রত্যাখ্যান করবে।

রিলিজ চাবি

অ্যান্ড্রয়েড ট্রিতে build/target/product/security অধীনে পরীক্ষা-কী অন্তর্ভুক্ত রয়েছে। make ব্যবহার করে একটি অ্যান্ড্রয়েড ওএস ইমেজ তৈরি করা টেস্ট-কি ব্যবহার করে সমস্ত .apk ফাইলে স্বাক্ষর করবে। যেহেতু টেস্ট-কীগুলি সর্বজনীনভাবে পরিচিত, যে কেউ একই কী দিয়ে তাদের নিজস্ব .apk ফাইলগুলিতে স্বাক্ষর করতে পারে, যা তাদের আপনার OS ছবিতে তৈরি সিস্টেম অ্যাপগুলিকে প্রতিস্থাপন বা হাইজ্যাক করার অনুমতি দিতে পারে৷ এই কারণে যেকোনও সর্বজনীনভাবে প্রকাশিত বা স্থাপন করা Android OS ছবিতে একটি বিশেষ সেট রিলিজ-কী দিয়ে স্বাক্ষর করা গুরুত্বপূর্ণ যা শুধুমাত্র আপনার কাছে অ্যাক্সেস রয়েছে৷

আপনার নিজস্ব রিলিজ-কিগুলির অনন্য সেট তৈরি করতে, আপনার অ্যান্ড্রয়েড গাছের মূল থেকে এই কমান্ডগুলি চালান:

subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in releasekey platform shared media networkstack; do \
    ./development/tools/make_key ~/.android-certs/$x "$subject"; \
  done

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

একটি রিলিজ ইমেজ তৈরি করতে, ব্যবহার করুন:

make dist
sign_target_files_apks \
-o \    # explained in the next section
--default_key_mappings ~/.android-certs out/dist/*-target_files-*.zip \
signed-target_files.zip

sign_target_files_apks স্ক্রিপ্ট ইনপুট হিসাবে একটি target-files .zip নেয় এবং একটি নতুন টার্গেট-ফাইল .zip তৈরি করে যাতে সমস্ত .apk ফাইল নতুন কী দিয়ে স্বাক্ষর করা হয়েছে। নতুন স্বাক্ষরিত ছবিগুলি IMAGES/ signed-target_files.zip এর অধীনে পাওয়া যাবে।

OTA প্যাকেজ সাইন ইন করুন

একটি স্বাক্ষরিত লক্ষ্য-ফাইল জিপ নিম্নলিখিত পদ্ধতি ব্যবহার করে একটি স্বাক্ষরিত OTA আপডেট জিপে রূপান্তরিত করা যেতে পারে:
ota_from_target_files \
-k  (--package_key) 
signed-target_files.zip \
signed-ota_update.zip

স্বাক্ষর এবং সাইডলোডিং

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

প্রধান সিস্টেম থেকে প্রাপ্ত আপডেট প্যাকেজগুলি সাধারণত দুইবার যাচাই করা হয়: একবার প্রধান সিস্টেম দ্বারা, Android API-এ RecoverySystem.verifyPackage() পদ্ধতি ব্যবহার করে এবং তারপরে আবার পুনরুদ্ধারের মাধ্যমে। RecoverySystem API /system/etc/security/otacerts.zip ফাইলে (ডিফল্টরূপে) প্রধান সিস্টেমে সংরক্ষিত পাবলিক কীগুলির বিরুদ্ধে স্বাক্ষর পরীক্ষা করে। পুনরুদ্ধার /res/keys ফাইলে পুনরুদ্ধার পার্টিশন RAM ডিস্কে সংরক্ষিত সর্বজনীন কীগুলির বিরুদ্ধে স্বাক্ষর পরীক্ষা করে।

ডিফল্টরূপে, বিল্ড দ্বারা উত্পাদিত টার্গেট-ফাইল .zip পরীক্ষা কী-এর সাথে মেলে OTA শংসাপত্র সেট করে। একটি প্রকাশ করা ছবিতে, একটি ভিন্ন শংসাপত্র ব্যবহার করা আবশ্যক যাতে ডিভাইসগুলি আপডেট প্যাকেজের সত্যতা যাচাই করতে পারে৷ -o পতাকাটি sign_target_files_apks এ পাস করা, যেমনটি পূর্ববর্তী বিভাগে দেখানো হয়েছে, পরীক্ষা কী শংসাপত্রটিকে আপনার শংসাপত্র ডিরেক্টরি থেকে প্রকাশ কী শংসাপত্রের সাথে প্রতিস্থাপন করে।

সাধারণত সিস্টেম ইমেজ এবং রিকভারি ইমেজ একই সেট OTA পাবলিক কী সঞ্চয় করে। কীগুলির পুনরুদ্ধারের সেটে একটি কী যোগ করার মাধ্যমে, প্যাকেজগুলিতে সাইন ইন করা সম্ভব যা শুধুমাত্র সাইডলোডিংয়ের মাধ্যমে ইনস্টল করা যেতে পারে (ধরে নেওয়া হচ্ছে মূল সিস্টেমের আপডেট ডাউনলোড পদ্ধতিটি সঠিকভাবে otacerts.zip-এর বিরুদ্ধে যাচাই করছে)। আপনি আপনার পণ্যের সংজ্ঞাতে PRODUCT_EXTRA_RECOVERY_KEYS ভেরিয়েবল সেট করে শুধুমাত্র পুনরুদ্ধারে অন্তর্ভুক্ত করার জন্য অতিরিক্ত কীগুলি নির্দিষ্ট করতে পারেন:

vendor/yoyodyne/tardis/products/tardis.mk
 [...]

PRODUCT_EXTRA_RECOVERY_KEYS := vendor/yoyodyne/security/tardis/sideload

এটি পুনরুদ্ধার কী ফাইলে সর্বজনীন কী vendor/yoyodyne/security/tardis/sideload.x509.pem অন্তর্ভুক্ত করে যাতে এটি এটির সাথে স্বাক্ষরিত প্যাকেজগুলি ইনস্টল করতে পারে৷ যদিও অতিরিক্ত কীটি otacerts.zip-এ অন্তর্ভুক্ত নয় , তাই যে সিস্টেমগুলি ডাউনলোড করা প্যাকেজগুলি সঠিকভাবে যাচাই করে সেগুলি এই কী দিয়ে স্বাক্ষরিত প্যাকেজগুলির জন্য পুনরুদ্ধারের আহ্বান জানায় না।

শংসাপত্র এবং ব্যক্তিগত কী

প্রতিটি কী দুটি ফাইলে আসে: সার্টিফিকেট , যার এক্সটেনশন আছে .x509.pem, এবং প্রাইভেট কী , যার এক্সটেনশন আছে .pk8। ব্যক্তিগত কী গোপন রাখা উচিত এবং একটি প্যাকেজ স্বাক্ষর করার জন্য প্রয়োজন। কী নিজেই একটি পাসওয়ার্ড দ্বারা সুরক্ষিত হতে পারে। সার্টিফিকেট, বিপরীতে, চাবির শুধুমাত্র সর্বজনীন অর্ধেক ধারণ করে, তাই এটি ব্যাপকভাবে বিতরণ করা যেতে পারে। এটি সংশ্লিষ্ট ব্যক্তিগত কী দ্বারা একটি প্যাকেজ স্বাক্ষরিত হয়েছে তা যাচাই করতে ব্যবহৃত হয়।

স্ট্যান্ডার্ড অ্যান্ড্রয়েড বিল্ড পাঁচটি কী ব্যবহার করে, যার সবকটিই build/target/product/security থাকে:

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

স্বতন্ত্র প্যাকেজগুলি তাদের Android.mk ফাইলে LOCAL_CERTIFICATE সেট করে এই কীগুলির মধ্যে একটি নির্দিষ্ট করে৷ (এই ভেরিয়েবল সেট না থাকলে testkey ব্যবহার করা হয়।) এছাড়াও আপনি pathname দ্বারা সম্পূর্ণ ভিন্ন কী উল্লেখ করতে পারেন, যেমন:

device/yoyodyne/apps/SpecialApp/Android.mk
 [...]

LOCAL_CERTIFICATE := device/yoyodyne/security/special

এখন বিল্ডটি SpecialApp.apk স্বাক্ষর করতে device/yoyodyne/security/special.{x509.pem,pk8} কী ব্যবহার করে। বিল্ড শুধুমাত্র ব্যক্তিগত কী ব্যবহার করতে পারে যা পাসওয়ার্ড সুরক্ষিত নয়

উন্নত সাইনিং অপশন

APK সাইনিং কী প্রতিস্থাপন

সাইনিং স্ক্রিপ্ট sign_target_files_apks একটি বিল্ডের জন্য তৈরি করা টার্গেট ফাইলগুলিতে কাজ করে। বিল্ড টাইমে ব্যবহৃত সার্টিফিকেট এবং প্রাইভেট কী সংক্রান্ত সমস্ত তথ্য টার্গেট ফাইলগুলিতে অন্তর্ভুক্ত করা হয়েছে। মুক্তির জন্য সাইন করার জন্য সাইনিং স্ক্রিপ্ট চালানোর সময়, সাইনিং কীগুলি কী নাম বা APK নামের উপর ভিত্তি করে প্রতিস্থাপন করা যেতে পারে।

কী নামের উপর ভিত্তি করে কী প্রতিস্থাপন নির্দিষ্ট করতে --key_mapping এবং --default_key_mappings পতাকা ব্যবহার করুন:

  • --key_mapping src_key = dest_key পতাকা একটি সময়ে একটি কী প্রতিস্থাপন নির্দিষ্ট করে।
  • --default_key_mappings dir ফ্ল্যাগ build/target/product/security সমস্ত কী প্রতিস্থাপন করার জন্য পাঁচটি কী সহ একটি ডিরেক্টরি নির্দিষ্ট করে; এটি ম্যাপিং নির্দিষ্ট করতে পাঁচবার --key_mapping ব্যবহার করার সমতুল্য।
build/target/product/security/testkey      = dir/releasekey
build/target/product/security/platform     = dir/platform
build/target/product/security/shared       = dir/shared
build/target/product/security/media        = dir/media
build/target/product/security/networkstack = dir/networkstack

APK নামের উপর ভিত্তি করে সাইনিং কী প্রতিস্থাপন নির্দিষ্ট করতে --extra_apks apk_name1,apk_name2,... = key পতাকা ব্যবহার করুন। যদি key খালি রাখা হয়, স্ক্রিপ্টটি নির্দিষ্ট করা APKগুলিকে পূর্ব-স্বাক্ষরিত হিসাবে বিবেচনা করে।

হাইপোথেটিক্যাল টার্ডিস প্রোডাক্টের জন্য, আপনার ছয়টি পাসওয়ার্ড-সুরক্ষিত কী দরকার: পাঁচটি build/target/product/security তে পাঁচটি প্রতিস্থাপন করতে এবং উপরের উদাহরণে স্পেশাল অ্যাপের প্রয়োজনীয় অতিরিক্ত কী device/yoyodyne/security/special প্রতিস্থাপনের জন্য একটি। যদি কীগুলি নিম্নলিখিত ফাইলগুলিতে থাকে:

vendor/yoyodyne/security/tardis/releasekey.x509.pem
vendor/yoyodyne/security/tardis/releasekey.pk8
vendor/yoyodyne/security/tardis/platform.x509.pem
vendor/yoyodyne/security/tardis/platform.pk8
vendor/yoyodyne/security/tardis/shared.x509.pem
vendor/yoyodyne/security/tardis/shared.pk8
vendor/yoyodyne/security/tardis/media.x509.pem
vendor/yoyodyne/security/tardis/media.pk8
vendor/yoyodyne/security/tardis/networkstack.x509.pem
vendor/yoyodyne/security/tardis/networkstack.pk8
vendor/yoyodyne/security/special.x509.pem
vendor/yoyodyne/security/special.pk8           # NOT password protected
vendor/yoyodyne/security/special-release.x509.pem
vendor/yoyodyne/security/special-release.pk8   # password protected

তারপর আপনি এই মত সব অ্যাপ্লিকেশন সাইন ইন হবে:

./build/make/tools/releasetools/sign_target_files_apks \
    --default_key_mappings vendor/yoyodyne/security/tardis \
    --key_mapping vendor/yoyodyne/security/special=vendor/yoyodyne/security/special-release \
    --extra_apks PresignedApp= \
    -o tardis-target_files.zip \
    signed-tardis-target_files.zip

এটি নিম্নলিখিতগুলি নিয়ে আসে:

Enter password for vendor/yoyodyne/security/special-release key>
Enter password for vendor/yoyodyne/security/tardis/networkstack key>
Enter password for vendor/yoyodyne/security/tardis/media key>
Enter password for vendor/yoyodyne/security/tardis/platform key>
Enter password for vendor/yoyodyne/security/tardis/releasekey key>
Enter password for vendor/yoyodyne/security/tardis/shared key>
    signing: Phone.apk (vendor/yoyodyne/security/tardis/platform)
    signing: Camera.apk (vendor/yoyodyne/security/tardis/media)
    signing: NetworkStack.apk (vendor/yoyodyne/security/tardis/networkstack)
    signing: Special.apk (vendor/yoyodyne/security/special-release)
    signing: Email.apk (vendor/yoyodyne/security/tardis/releasekey)
        [...]
    signing: ContactsProvider.apk (vendor/yoyodyne/security/tardis/shared)
    signing: Launcher.apk (vendor/yoyodyne/security/tardis/shared)
NOT signing: PresignedApp.apk
        (skipped due to special cert string)
rewriting SYSTEM/build.prop:
  replace:  ro.build.description=tardis-user Eclair ERC91 15449 test-keys
     with:  ro.build.description=tardis-user Eclair ERC91 15449 release-keys
  replace: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/test-keys
     with: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/release-keys
    signing: framework-res.apk (vendor/yoyodyne/security/tardis/platform)
rewriting RECOVERY/RAMDISK/default.prop:
  replace:  ro.build.description=tardis-user Eclair ERC91 15449 test-keys
     with:  ro.build.description=tardis-user Eclair ERC91 15449 release-keys
  replace: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/test-keys
     with: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/release-keys
using:
    vendor/yoyodyne/security/tardis/releasekey.x509.pem
for OTA package verification
done.

সমস্ত পাসওয়ার্ড-সুরক্ষিত কীগুলির জন্য ব্যবহারকারীকে পাসওয়ার্ডের জন্য অনুরোধ করার পরে, স্ক্রিপ্টটি রিলিজ কীগুলির সাথে ইনপুট লক্ষ্য .zip এ থাকা সমস্ত APK ফাইলগুলিকে পুনরায় সাইন করে। কমান্ডটি চালানোর আগে, আপনি ANDROID_PW_FILE এনভায়রনমেন্ট ভেরিয়েবলটিকে একটি অস্থায়ী ফাইলের নামেও সেট করতে পারেন; তারপর স্ক্রিপ্টটি আপনার সম্পাদককে অনুরোধ করে যাতে আপনি সমস্ত কীগুলির জন্য পাসওয়ার্ড লিখতে পারেন (এটি পাসওয়ার্ডগুলি প্রবেশ করার আরও সুবিধাজনক উপায় হতে পারে)।

APEX স্বাক্ষর কী প্রতিস্থাপন

Android 10 নিম্ন-স্তরের সিস্টেম মডিউল ইনস্টল করার জন্য APEX ফাইল বিন্যাস প্রবর্তন করে। APEX সাইনিং- এ যেমন ব্যাখ্যা করা হয়েছে, প্রতিটি APEX ফাইল দুটি কী দিয়ে স্বাক্ষরিত হয়: একটি APEX-এর মধ্যে থাকা মিনি ফাইল সিস্টেম ইমেজের জন্য এবং অন্যটি সমগ্র APEX-এর জন্য।

রিলিজের জন্য সাইন করার সময়, একটি APEX ফাইলের জন্য দুটি সাইনিং কী রিলিজ কী দিয়ে প্রতিস্থাপিত হয়। ফাইল সিস্টেম পেলোড কী --extra_apex_payload পতাকা দিয়ে নির্দিষ্ট করা হয়েছে এবং সম্পূর্ণ APEX ফাইল সাইনিং কী --extra_apks পতাকা দিয়ে নির্দিষ্ট করা হয়েছে।

tardis পণ্যের জন্য, ধরে নিন যে আপনার কাছে com.android.conscrypt.apex , com.android.media.apex , এবং com.android.runtime.release.apex APEX ফাইলগুলির জন্য নিম্নলিখিত কী কনফিগারেশন রয়েছে৷

name="com.android.conscrypt.apex" public_key="PRESIGNED" private_key="PRESIGNED" container_certificate="PRESIGNED" container_private_key="PRESIGNED"
name="com.android.media.apex" public_key="PRESIGNED" private_key="PRESIGNED" container_certificate="PRESIGNED" container_private_key="PRESIGNED"
name="com.android.runtime.release.apex" public_key="vendor/yoyodyne/security/testkeys/com.android.runtime.avbpubkey" private_key="vendor/yoyodyne/security/testkeys/com.android.runtime.pem" container_certificate="vendor/yoyodyne/security/testkeys/com.google.android.runtime.release_container.x509.pem" container_private_key="vendor/yoyodyne/security/testkeys/com.google.android.runtime.release_container.pk8"

এবং আপনার কাছে নিম্নলিখিত ফাইলগুলি রয়েছে যাতে রিলিজ কীগুলি রয়েছে:

vendor/yoyodyne/security/runtime_apex_container.x509.pem
vendor/yoyodyne/security/runtime_apex_container.pk8
vendor/yoyodyne/security/runtime_apex_payload.pem

রিলিজ সাইনিংয়ের সময় নিম্নলিখিত কমান্ডটি com.android.runtime.release.apex এবং com.android.tzdata.apex সাইনিং কীগুলিকে ওভাররাইড করে৷ বিশেষ করে, com.android.runtime.release.apex নির্দিষ্ট রিলিজ কীগুলির সাথে স্বাক্ষরিত হয় ( APEX ফাইলের জন্য runtime_apex_container এবং ফাইল ইমেজ পেলোডের জন্য runtime_apex_payload )। com.android.tzdata.apex প্রাক-স্বাক্ষরিত হিসাবে বিবেচিত হয়। অন্যান্য সমস্ত APEX ফাইলগুলি লক্ষ্য ফাইলগুলিতে তালিকাভুক্ত ডিফল্ট কনফিগারেশন দ্বারা পরিচালিত হয়।

./build/make/tools/releasetools/sign_target_files_apks \
    --default_key_mappings   vendor/yoyodyne/security/tardis \
    --extra_apks             com.android.runtime.release.apex=vendor/yoyodyne/security/runtime_apex_container \
    --extra_apex_payload_key com.android.runtime.release.apex=vendor/yoyodyne/security/runtime_apex_payload.pem \
    --extra_apks             com.android.media.apex= \
    --extra_apex_payload_key com.android.media.apex= \
    -o tardis-target_files.zip \
    signed-tardis-target_files.zip

উপরের কমান্ডটি চালানোর ফলে নিম্নলিখিত লগগুলি পাওয়া যায়:

        [...]
    signing: com.android.runtime.release.apex                  container (vendor/yoyodyne/security/runtime_apex_container)
           : com.android.runtime.release.apex                  payload   (vendor/yoyodyne/security/runtime_apex_payload.pem)
NOT signing: com.android.conscrypt.apex
        (skipped due to special cert string)
NOT signing: com.android.media.apex
        (skipped due to special cert string)
        [...]

অন্যান্য বিকল্প

sign_target_files_apks সাইনিং স্ক্রিপ্ট বিল্ড প্রোপার্টি ফাইলে বিল্ড বিবরণ এবং ফিঙ্গারপ্রিন্ট পুনর্লিখন করে যাতে বিল্ডটি একটি স্বাক্ষরিত বিল্ড। --tag_changes পতাকা আঙ্গুলের ছাপে কি সম্পাদনা করা হয় তা নিয়ন্ত্রণ করে। সমস্ত পতাকার ডকুমেন্টেশন দেখতে -h দিয়ে স্ক্রিপ্টটি চালান।

ম্যানুয়ালি কী তৈরি করুন

অ্যান্ড্রয়েড পাবলিক এক্সপোনেন্ট 3 সহ 2048-বিট RSA কী ব্যবহার করে। আপনি openssl.org থেকে openssl টুল ব্যবহার করে সার্টিফিকেট/প্রাইভেট কী জোড়া তৈরি করতে পারেন:

# generate RSA key
openssl genrsa -3 -out temp.pem 2048
Generating RSA private key, 2048 bit long modulus
....+++
.....................+++
e is 3 (0x3)

# create a certificate with the public part of the key
openssl req -new -x509 -key temp.pem -out releasekey.x509.pem -days 10000 -subj '/C=US/ST=California/L=San Narciso/O=Yoyodyne, Inc./OU=Yoyodyne Mobility/CN=Yoyodyne/emailAddress=yoyodyne@example.com'

# create a PKCS#8-formatted version of the private key
openssl pkcs8 -in temp.pem -topk8 -outform DER -out releasekey.pk8 -nocrypt

# securely delete the temp.pem file
shred --remove temp.pem

উপরে দেওয়া openssl pkcs8 কমান্ডটি পাসওয়ার্ড ছাড়াই একটি .pk8 ফাইল তৈরি করে, যা বিল্ড সিস্টেমে ব্যবহারের জন্য উপযুক্ত। একটি পাসওয়ার্ড দিয়ে সুরক্ষিত একটি .pk8 তৈরি করতে (যা আপনার সমস্ত প্রকৃত রিলিজ কীগুলির জন্য করা উচিত), -nocrypt আর্গুমেন্টকে -passout stdin দিয়ে প্রতিস্থাপন করুন; তারপর openssl স্ট্যান্ডার্ড ইনপুট থেকে পড়া পাসওয়ার্ড সহ ব্যক্তিগত কী এনক্রিপ্ট করবে। কোন প্রম্পট প্রিন্ট করা হয় না, তাই যদি stdin টার্মিনাল হয় তাহলে প্রোগ্রামটি হ্যাং হয়ে যাবে যখন এটি সত্যিই আপনার পাসওয়ার্ড দেওয়ার জন্য অপেক্ষা করছে। অন্যান্য অবস্থান থেকে পাসওয়ার্ড পড়ার জন্য পাসআউট আর্গুমেন্টের জন্য অন্যান্য মান ব্যবহার করা যেতে পারে; বিস্তারিত জানার জন্য, openssl ডকুমেন্টেশন দেখুন।

temp.pem ইন্টারমিডিয়েট ফাইলে কোনো ধরনের পাসওয়ার্ড সুরক্ষা ছাড়াই ব্যক্তিগত কী রয়েছে, তাই রিলিজ কী তৈরি করার সময় এটিকে ভেবেচিন্তে নিষ্পত্তি করুন। বিশেষ করে, GNUshred ইউটিলিটি নেটওয়ার্ক বা জার্নাল্ড ফাইল সিস্টেমে কার্যকর নাও হতে পারে। ইন্টারমিডিয়েটগুলি অসাবধানতাবশত উন্মুক্ত না হয় তা নিশ্চিত করার জন্য কী তৈরি করার সময় আপনি একটি RAM ডিস্কে অবস্থিত একটি কার্যকরী ডিরেক্টরি ব্যবহার করতে পারেন (যেমন tmpfs পার্টিশন)।

ইমেজ ফাইল তৈরি করুন

আপনি signed-target_files.zip হলে, আপনাকে ছবিটি তৈরি করতে হবে যাতে আপনি এটি একটি ডিভাইসে রাখতে পারেন। টার্গেট ফাইলগুলি থেকে স্বাক্ষরিত চিত্র তৈরি করতে, অ্যান্ড্রয়েড গাছের মূল থেকে নিম্নলিখিত কমান্ডটি চালান:

img_from_target_files signed-target_files.zip signed-img.zip
ফলস্বরূপ ফাইল, signed-img.zip , সমস্ত .img ফাইল ধারণ করে। একটি ডিভাইসে একটি ছবি লোড করতে, নিম্নরূপ fastboot ব্যবহার করুন:
fastboot update signed-img.zip
,

অ্যান্ড্রয়েড ওএস ছবি দুটি জায়গায় ক্রিপ্টোগ্রাফিক স্বাক্ষর ব্যবহার করে:

  1. ছবির ভিতরে প্রতিটি .apk ফাইল অবশ্যই স্বাক্ষর করতে হবে। Android এর প্যাকেজ ম্যানেজার দুটি উপায়ে একটি .apk স্বাক্ষর ব্যবহার করে:
    • যখন একটি অ্যাপ্লিকেশন প্রতিস্থাপিত হয়, পুরানো অ্যাপ্লিকেশনের ডেটাতে অ্যাক্সেস পেতে এটিকে অবশ্যই পুরানো অ্যাপ্লিকেশনটির মতো একই কী দ্বারা স্বাক্ষর করতে হবে৷ এটি .apk ওভাররাইট করে ব্যবহারকারীর অ্যাপ আপডেট করার জন্য এবং /data অধীনে ইনস্টল করা একটি নতুন সংস্করণ সহ একটি সিস্টেম অ্যাপ ওভাররাইড করার জন্য উভয়ই সত্য।
    • যদি দুই বা ততোধিক অ্যাপ্লিকেশন একটি ইউজার আইডি শেয়ার করতে চায় (যাতে তারা ডেটা শেয়ার করতে পারে, ইত্যাদি), তাদের অবশ্যই একই কী দিয়ে স্বাক্ষর করতে হবে।
  2. OTA আপডেট প্যাকেজগুলি অবশ্যই সিস্টেম দ্বারা প্রত্যাশিত একটি কী দিয়ে স্বাক্ষর করতে হবে বা ইনস্টলেশন প্রক্রিয়া তাদের প্রত্যাখ্যান করবে।

রিলিজ চাবি

অ্যান্ড্রয়েড ট্রিতে build/target/product/security অধীনে পরীক্ষা-কী অন্তর্ভুক্ত রয়েছে। make ব্যবহার করে একটি অ্যান্ড্রয়েড ওএস ইমেজ তৈরি করা টেস্ট-কি ব্যবহার করে সমস্ত .apk ফাইলে স্বাক্ষর করবে। যেহেতু টেস্ট-কীগুলি সর্বজনীনভাবে পরিচিত, যে কেউ একই কী দিয়ে তাদের নিজস্ব .apk ফাইলগুলিতে স্বাক্ষর করতে পারে, যা তাদের আপনার OS ছবিতে তৈরি সিস্টেম অ্যাপগুলিকে প্রতিস্থাপন বা হাইজ্যাক করার অনুমতি দিতে পারে৷ এই কারণে যেকোনও সর্বজনীনভাবে প্রকাশিত বা স্থাপন করা Android OS ছবিতে একটি বিশেষ সেট রিলিজ-কী দিয়ে স্বাক্ষর করা গুরুত্বপূর্ণ যা শুধুমাত্র আপনার কাছে অ্যাক্সেস রয়েছে৷

আপনার নিজস্ব রিলিজ-কিগুলির অনন্য সেট তৈরি করতে, আপনার অ্যান্ড্রয়েড গাছের মূল থেকে এই কমান্ডগুলি চালান:

subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in releasekey platform shared media networkstack; do \
    ./development/tools/make_key ~/.android-certs/$x "$subject"; \
  done

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

একটি রিলিজ ইমেজ তৈরি করতে, ব্যবহার করুন:

make dist
sign_target_files_apks \
-o \    # explained in the next section
--default_key_mappings ~/.android-certs out/dist/*-target_files-*.zip \
signed-target_files.zip

sign_target_files_apks স্ক্রিপ্ট ইনপুট হিসাবে একটি target-files .zip নেয় এবং একটি নতুন টার্গেট-ফাইল .zip তৈরি করে যাতে সমস্ত .apk ফাইল নতুন কী দিয়ে স্বাক্ষর করা হয়েছে। নতুন স্বাক্ষরিত ছবিগুলি IMAGES/ signed-target_files.zip এর অধীনে পাওয়া যাবে।

OTA প্যাকেজ সাইন ইন করুন

একটি স্বাক্ষরিত লক্ষ্য-ফাইল জিপ নিম্নলিখিত পদ্ধতি ব্যবহার করে একটি স্বাক্ষরিত OTA আপডেট জিপে রূপান্তরিত করা যেতে পারে:
ota_from_target_files \
-k  (--package_key) 
signed-target_files.zip \
signed-ota_update.zip

স্বাক্ষর এবং সাইডলোডিং

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

প্রধান সিস্টেম থেকে প্রাপ্ত আপডেট প্যাকেজগুলি সাধারণত দুইবার যাচাই করা হয়: একবার প্রধান সিস্টেম দ্বারা, Android API-এ RecoverySystem.verifyPackage() পদ্ধতি ব্যবহার করে এবং তারপরে আবার পুনরুদ্ধারের মাধ্যমে। RecoverySystem API /system/etc/security/otacerts.zip ফাইলে (ডিফল্টরূপে) প্রধান সিস্টেমে সংরক্ষিত পাবলিক কীগুলির বিরুদ্ধে স্বাক্ষর পরীক্ষা করে। পুনরুদ্ধার /res/keys ফাইলে পুনরুদ্ধার পার্টিশন RAM ডিস্কে সংরক্ষিত সর্বজনীন কীগুলির বিরুদ্ধে স্বাক্ষর পরীক্ষা করে।

ডিফল্টরূপে, বিল্ড দ্বারা উত্পাদিত টার্গেট-ফাইল .zip পরীক্ষা কী-এর সাথে মেলে OTA শংসাপত্র সেট করে। একটি প্রকাশ করা ছবিতে, একটি ভিন্ন শংসাপত্র ব্যবহার করা আবশ্যক যাতে ডিভাইসগুলি আপডেট প্যাকেজের সত্যতা যাচাই করতে পারে৷ -o পতাকাটি sign_target_files_apks এ পাস করা, যেমনটি পূর্ববর্তী বিভাগে দেখানো হয়েছে, পরীক্ষা কী শংসাপত্রটিকে আপনার শংসাপত্র ডিরেক্টরি থেকে প্রকাশ কী শংসাপত্রের সাথে প্রতিস্থাপন করে।

সাধারণত সিস্টেম ইমেজ এবং রিকভারি ইমেজ একই সেট OTA পাবলিক কী সঞ্চয় করে। কীগুলির পুনরুদ্ধারের সেটে একটি কী যোগ করার মাধ্যমে, প্যাকেজগুলিতে সাইন ইন করা সম্ভব যা শুধুমাত্র সাইডলোডিংয়ের মাধ্যমে ইনস্টল করা যেতে পারে (ধরে নেওয়া হচ্ছে মূল সিস্টেমের আপডেট ডাউনলোড পদ্ধতিটি সঠিকভাবে otacerts.zip-এর বিরুদ্ধে যাচাই করছে)। আপনি আপনার পণ্যের সংজ্ঞাতে PRODUCT_EXTRA_RECOVERY_KEYS ভেরিয়েবল সেট করে শুধুমাত্র পুনরুদ্ধারে অন্তর্ভুক্ত করার জন্য অতিরিক্ত কীগুলি নির্দিষ্ট করতে পারেন:

vendor/yoyodyne/tardis/products/tardis.mk
 [...]

PRODUCT_EXTRA_RECOVERY_KEYS := vendor/yoyodyne/security/tardis/sideload

এটি পুনরুদ্ধার কী ফাইলে সর্বজনীন কী vendor/yoyodyne/security/tardis/sideload.x509.pem অন্তর্ভুক্ত করে যাতে এটি এটির সাথে স্বাক্ষরিত প্যাকেজগুলি ইনস্টল করতে পারে৷ যদিও অতিরিক্ত কীটি otacerts.zip-এ অন্তর্ভুক্ত নয় , তাই যে সিস্টেমগুলি ডাউনলোড করা প্যাকেজগুলি সঠিকভাবে যাচাই করে সেগুলি এই কী দিয়ে স্বাক্ষরিত প্যাকেজগুলির জন্য পুনরুদ্ধারের আহ্বান জানায় না।

শংসাপত্র এবং ব্যক্তিগত কী

প্রতিটি কী দুটি ফাইলে আসে: সার্টিফিকেট , যার এক্সটেনশন আছে .x509.pem, এবং প্রাইভেট কী , যার এক্সটেনশন আছে .pk8। ব্যক্তিগত কী গোপন রাখা উচিত এবং একটি প্যাকেজ স্বাক্ষর করার জন্য প্রয়োজন। কী নিজেই একটি পাসওয়ার্ড দ্বারা সুরক্ষিত হতে পারে। সার্টিফিকেট, বিপরীতে, চাবির শুধুমাত্র সর্বজনীন অর্ধেক ধারণ করে, তাই এটি ব্যাপকভাবে বিতরণ করা যেতে পারে। এটি সংশ্লিষ্ট ব্যক্তিগত কী দ্বারা একটি প্যাকেজ স্বাক্ষরিত হয়েছে তা যাচাই করতে ব্যবহৃত হয়।

স্ট্যান্ডার্ড অ্যান্ড্রয়েড বিল্ড পাঁচটি কী ব্যবহার করে, যার সবকটিই build/target/product/security থাকে:

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

স্বতন্ত্র প্যাকেজগুলি তাদের Android.mk ফাইলে LOCAL_CERTIFICATE সেট করে এই কীগুলির মধ্যে একটি নির্দিষ্ট করে৷ (এই ভেরিয়েবল সেট না থাকলে testkey ব্যবহার করা হয়।) এছাড়াও আপনি pathname দ্বারা সম্পূর্ণ ভিন্ন কী উল্লেখ করতে পারেন, যেমন:

device/yoyodyne/apps/SpecialApp/Android.mk
 [...]

LOCAL_CERTIFICATE := device/yoyodyne/security/special

এখন বিল্ডটি SpecialApp.apk স্বাক্ষর করতে device/yoyodyne/security/special.{x509.pem,pk8} কী ব্যবহার করে। বিল্ড শুধুমাত্র ব্যক্তিগত কী ব্যবহার করতে পারে যা পাসওয়ার্ড সুরক্ষিত নয়

উন্নত সাইনিং অপশন

APK সাইনিং কী প্রতিস্থাপন

সাইনিং স্ক্রিপ্ট sign_target_files_apks একটি বিল্ডের জন্য তৈরি করা টার্গেট ফাইলগুলিতে কাজ করে। বিল্ড টাইমে ব্যবহৃত সার্টিফিকেট এবং প্রাইভেট কী সংক্রান্ত সমস্ত তথ্য টার্গেট ফাইলগুলিতে অন্তর্ভুক্ত করা হয়েছে। মুক্তির জন্য সাইন করার জন্য সাইনিং স্ক্রিপ্ট চালানোর সময়, সাইনিং কীগুলি কী নাম বা APK নামের উপর ভিত্তি করে প্রতিস্থাপন করা যেতে পারে।

কী নামের উপর ভিত্তি করে কী প্রতিস্থাপন নির্দিষ্ট করতে --key_mapping এবং --default_key_mappings পতাকা ব্যবহার করুন:

  • --key_mapping src_key = dest_key পতাকা একটি সময়ে একটি কী প্রতিস্থাপন নির্দিষ্ট করে।
  • --default_key_mappings dir ফ্ল্যাগ build/target/product/security সমস্ত কী প্রতিস্থাপন করার জন্য পাঁচটি কী সহ একটি ডিরেক্টরি নির্দিষ্ট করে; এটি ম্যাপিং নির্দিষ্ট করতে পাঁচবার --key_mapping ব্যবহার করার সমতুল্য।
build/target/product/security/testkey      = dir/releasekey
build/target/product/security/platform     = dir/platform
build/target/product/security/shared       = dir/shared
build/target/product/security/media        = dir/media
build/target/product/security/networkstack = dir/networkstack

APK নামের উপর ভিত্তি করে সাইনিং কী প্রতিস্থাপন নির্দিষ্ট করতে --extra_apks apk_name1,apk_name2,... = key পতাকা ব্যবহার করুন। যদি key খালি রাখা হয়, স্ক্রিপ্টটি নির্দিষ্ট করা APKগুলিকে পূর্ব-স্বাক্ষরিত হিসাবে বিবেচনা করে।

হাইপোথেটিক্যাল টার্ডিস প্রোডাক্টের জন্য, আপনার ছয়টি পাসওয়ার্ড-সুরক্ষিত কী দরকার: পাঁচটি build/target/product/security তে পাঁচটি প্রতিস্থাপন করতে এবং উপরের উদাহরণে স্পেশাল অ্যাপের প্রয়োজনীয় অতিরিক্ত কী device/yoyodyne/security/special প্রতিস্থাপনের জন্য একটি। যদি কীগুলি নিম্নলিখিত ফাইলগুলিতে থাকে:

vendor/yoyodyne/security/tardis/releasekey.x509.pem
vendor/yoyodyne/security/tardis/releasekey.pk8
vendor/yoyodyne/security/tardis/platform.x509.pem
vendor/yoyodyne/security/tardis/platform.pk8
vendor/yoyodyne/security/tardis/shared.x509.pem
vendor/yoyodyne/security/tardis/shared.pk8
vendor/yoyodyne/security/tardis/media.x509.pem
vendor/yoyodyne/security/tardis/media.pk8
vendor/yoyodyne/security/tardis/networkstack.x509.pem
vendor/yoyodyne/security/tardis/networkstack.pk8
vendor/yoyodyne/security/special.x509.pem
vendor/yoyodyne/security/special.pk8           # NOT password protected
vendor/yoyodyne/security/special-release.x509.pem
vendor/yoyodyne/security/special-release.pk8   # password protected

তারপর আপনি এই মত সব অ্যাপ্লিকেশন সাইন ইন হবে:

./build/make/tools/releasetools/sign_target_files_apks \
    --default_key_mappings vendor/yoyodyne/security/tardis \
    --key_mapping vendor/yoyodyne/security/special=vendor/yoyodyne/security/special-release \
    --extra_apks PresignedApp= \
    -o tardis-target_files.zip \
    signed-tardis-target_files.zip

এটি নিম্নলিখিতগুলি নিয়ে আসে:

Enter password for vendor/yoyodyne/security/special-release key>
Enter password for vendor/yoyodyne/security/tardis/networkstack key>
Enter password for vendor/yoyodyne/security/tardis/media key>
Enter password for vendor/yoyodyne/security/tardis/platform key>
Enter password for vendor/yoyodyne/security/tardis/releasekey key>
Enter password for vendor/yoyodyne/security/tardis/shared key>
    signing: Phone.apk (vendor/yoyodyne/security/tardis/platform)
    signing: Camera.apk (vendor/yoyodyne/security/tardis/media)
    signing: NetworkStack.apk (vendor/yoyodyne/security/tardis/networkstack)
    signing: Special.apk (vendor/yoyodyne/security/special-release)
    signing: Email.apk (vendor/yoyodyne/security/tardis/releasekey)
        [...]
    signing: ContactsProvider.apk (vendor/yoyodyne/security/tardis/shared)
    signing: Launcher.apk (vendor/yoyodyne/security/tardis/shared)
NOT signing: PresignedApp.apk
        (skipped due to special cert string)
rewriting SYSTEM/build.prop:
  replace:  ro.build.description=tardis-user Eclair ERC91 15449 test-keys
     with:  ro.build.description=tardis-user Eclair ERC91 15449 release-keys
  replace: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/test-keys
     with: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/release-keys
    signing: framework-res.apk (vendor/yoyodyne/security/tardis/platform)
rewriting RECOVERY/RAMDISK/default.prop:
  replace:  ro.build.description=tardis-user Eclair ERC91 15449 test-keys
     with:  ro.build.description=tardis-user Eclair ERC91 15449 release-keys
  replace: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/test-keys
     with: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/release-keys
using:
    vendor/yoyodyne/security/tardis/releasekey.x509.pem
for OTA package verification
done.

সমস্ত পাসওয়ার্ড-সুরক্ষিত কীগুলির জন্য ব্যবহারকারীকে পাসওয়ার্ডের জন্য অনুরোধ করার পরে, স্ক্রিপ্টটি রিলিজ কীগুলির সাথে ইনপুট লক্ষ্য .zip এ থাকা সমস্ত APK ফাইলগুলিকে পুনরায় সাইন করে। কমান্ডটি চালানোর আগে, আপনি ANDROID_PW_FILE এনভায়রনমেন্ট ভেরিয়েবলটিকে একটি অস্থায়ী ফাইলের নামেও সেট করতে পারেন; তারপর স্ক্রিপ্টটি আপনার সম্পাদককে অনুরোধ করে যাতে আপনি সমস্ত কীগুলির জন্য পাসওয়ার্ড লিখতে পারেন (এটি পাসওয়ার্ডগুলি প্রবেশ করার আরও সুবিধাজনক উপায় হতে পারে)।

APEX স্বাক্ষর কী প্রতিস্থাপন

Android 10 নিম্ন-স্তরের সিস্টেম মডিউল ইনস্টল করার জন্য APEX ফাইল বিন্যাস প্রবর্তন করে। APEX সাইনিং- এ যেমন ব্যাখ্যা করা হয়েছে, প্রতিটি APEX ফাইল দুটি কী দিয়ে স্বাক্ষরিত হয়: একটি APEX-এর মধ্যে থাকা মিনি ফাইল সিস্টেম ইমেজের জন্য এবং অন্যটি সমগ্র APEX-এর জন্য।

রিলিজের জন্য সাইন করার সময়, একটি APEX ফাইলের জন্য দুটি সাইনিং কী রিলিজ কী দিয়ে প্রতিস্থাপিত হয়। ফাইল সিস্টেম পেলোড কী --extra_apex_payload পতাকা দিয়ে নির্দিষ্ট করা হয়েছে এবং সম্পূর্ণ APEX ফাইল সাইনিং কী --extra_apks পতাকা দিয়ে নির্দিষ্ট করা হয়েছে।

tardis পণ্যের জন্য, ধরে নিন যে আপনার কাছে com.android.conscrypt.apex , com.android.media.apex , এবং com.android.runtime.release.apex APEX ফাইলগুলির জন্য নিম্নলিখিত কী কনফিগারেশন রয়েছে৷

name="com.android.conscrypt.apex" public_key="PRESIGNED" private_key="PRESIGNED" container_certificate="PRESIGNED" container_private_key="PRESIGNED"
name="com.android.media.apex" public_key="PRESIGNED" private_key="PRESIGNED" container_certificate="PRESIGNED" container_private_key="PRESIGNED"
name="com.android.runtime.release.apex" public_key="vendor/yoyodyne/security/testkeys/com.android.runtime.avbpubkey" private_key="vendor/yoyodyne/security/testkeys/com.android.runtime.pem" container_certificate="vendor/yoyodyne/security/testkeys/com.google.android.runtime.release_container.x509.pem" container_private_key="vendor/yoyodyne/security/testkeys/com.google.android.runtime.release_container.pk8"

এবং আপনার কাছে নিম্নলিখিত ফাইলগুলি রয়েছে যাতে রিলিজ কীগুলি রয়েছে:

vendor/yoyodyne/security/runtime_apex_container.x509.pem
vendor/yoyodyne/security/runtime_apex_container.pk8
vendor/yoyodyne/security/runtime_apex_payload.pem

রিলিজ সাইনিংয়ের সময় নিম্নলিখিত কমান্ডটি com.android.runtime.release.apex এবং com.android.tzdata.apex সাইনিং কীগুলিকে ওভাররাইড করে৷ বিশেষ করে, com.android.runtime.release.apex নির্দিষ্ট রিলিজ কীগুলির সাথে স্বাক্ষরিত হয় ( APEX ফাইলের জন্য runtime_apex_container এবং ফাইল ইমেজ পেলোডের জন্য runtime_apex_payload )। com.android.tzdata.apex প্রাক-স্বাক্ষরিত হিসাবে বিবেচিত হয়। অন্যান্য সমস্ত APEX ফাইলগুলি লক্ষ্য ফাইলগুলিতে তালিকাভুক্ত ডিফল্ট কনফিগারেশন দ্বারা পরিচালিত হয়।

./build/make/tools/releasetools/sign_target_files_apks \
    --default_key_mappings   vendor/yoyodyne/security/tardis \
    --extra_apks             com.android.runtime.release.apex=vendor/yoyodyne/security/runtime_apex_container \
    --extra_apex_payload_key com.android.runtime.release.apex=vendor/yoyodyne/security/runtime_apex_payload.pem \
    --extra_apks             com.android.media.apex= \
    --extra_apex_payload_key com.android.media.apex= \
    -o tardis-target_files.zip \
    signed-tardis-target_files.zip

উপরের কমান্ডটি চালানোর ফলে নিম্নলিখিত লগগুলি পাওয়া যায়:

        [...]
    signing: com.android.runtime.release.apex                  container (vendor/yoyodyne/security/runtime_apex_container)
           : com.android.runtime.release.apex                  payload   (vendor/yoyodyne/security/runtime_apex_payload.pem)
NOT signing: com.android.conscrypt.apex
        (skipped due to special cert string)
NOT signing: com.android.media.apex
        (skipped due to special cert string)
        [...]

অন্যান্য বিকল্প

sign_target_files_apks সাইনিং স্ক্রিপ্ট বিল্ড প্রোপার্টি ফাইলে বিল্ড বিবরণ এবং ফিঙ্গারপ্রিন্ট পুনর্লিখন করে যাতে বিল্ডটি একটি স্বাক্ষরিত বিল্ড। --tag_changes পতাকা আঙ্গুলের ছাপে কি সম্পাদনা করা হয় তা নিয়ন্ত্রণ করে। সমস্ত পতাকার ডকুমেন্টেশন দেখতে -h দিয়ে স্ক্রিপ্টটি চালান।

ম্যানুয়ালি কী তৈরি করুন

অ্যান্ড্রয়েড পাবলিক এক্সপোনেন্ট 3 সহ 2048-বিট RSA কী ব্যবহার করে। আপনি openssl.org থেকে openssl টুল ব্যবহার করে সার্টিফিকেট/প্রাইভেট কী জোড়া তৈরি করতে পারেন:

# generate RSA key
openssl genrsa -3 -out temp.pem 2048
Generating RSA private key, 2048 bit long modulus
....+++
.....................+++
e is 3 (0x3)

# create a certificate with the public part of the key
openssl req -new -x509 -key temp.pem -out releasekey.x509.pem -days 10000 -subj '/C=US/ST=California/L=San Narciso/O=Yoyodyne, Inc./OU=Yoyodyne Mobility/CN=Yoyodyne/emailAddress=yoyodyne@example.com'

# create a PKCS#8-formatted version of the private key
openssl pkcs8 -in temp.pem -topk8 -outform DER -out releasekey.pk8 -nocrypt

# securely delete the temp.pem file
shred --remove temp.pem

উপরে দেওয়া openssl pkcs8 কমান্ডটি পাসওয়ার্ড ছাড়াই একটি .pk8 ফাইল তৈরি করে, যা বিল্ড সিস্টেমে ব্যবহারের জন্য উপযুক্ত। একটি পাসওয়ার্ড দিয়ে সুরক্ষিত একটি .pk8 তৈরি করতে (যা আপনার সমস্ত প্রকৃত রিলিজ কীগুলির জন্য করা উচিত), -nocrypt আর্গুমেন্টকে -passout stdin দিয়ে প্রতিস্থাপন করুন; তারপর openssl স্ট্যান্ডার্ড ইনপুট থেকে পড়া পাসওয়ার্ড সহ ব্যক্তিগত কী এনক্রিপ্ট করবে। কোন প্রম্পট প্রিন্ট করা হয় না, তাই যদি stdin টার্মিনাল হয় তাহলে প্রোগ্রামটি হ্যাং হয়ে যাবে যখন এটি সত্যিই আপনার পাসওয়ার্ড দেওয়ার জন্য অপেক্ষা করছে। অন্যান্য অবস্থান থেকে পাসওয়ার্ড পড়ার জন্য পাসআউট আর্গুমেন্টের জন্য অন্যান্য মান ব্যবহার করা যেতে পারে; বিস্তারিত জানার জন্য, openssl ডকুমেন্টেশন দেখুন।

temp.pem ইন্টারমিডিয়েট ফাইলে কোনো ধরনের পাসওয়ার্ড সুরক্ষা ছাড়াই ব্যক্তিগত কী রয়েছে, তাই রিলিজ কী তৈরি করার সময় এটিকে ভেবেচিন্তে নিষ্পত্তি করুন। বিশেষ করে, GNUshred ইউটিলিটি নেটওয়ার্ক বা জার্নাল্ড ফাইল সিস্টেমে কার্যকর নাও হতে পারে। ইন্টারমিডিয়েটগুলি অসাবধানতাবশত উন্মুক্ত না হয় তা নিশ্চিত করার জন্য কী তৈরি করার সময় আপনি একটি RAM ডিস্কে অবস্থিত একটি কার্যকরী ডিরেক্টরি ব্যবহার করতে পারেন (যেমন tmpfs পার্টিশন)।

ইমেজ ফাইল তৈরি করুন

আপনি signed-target_files.zip হলে, আপনাকে ছবিটি তৈরি করতে হবে যাতে আপনি এটি একটি ডিভাইসে রাখতে পারেন। টার্গেট ফাইলগুলি থেকে স্বাক্ষরিত চিত্র তৈরি করতে, অ্যান্ড্রয়েড গাছের মূল থেকে নিম্নলিখিত কমান্ডটি চালান:

img_from_target_files signed-target_files.zip signed-img.zip
ফলস্বরূপ ফাইল, signed-img.zip , সমস্ত .img ফাইল ধারণ করে। একটি ডিভাইসে একটি ছবি লোড করতে, নিম্নরূপ fastboot ব্যবহার করুন:
fastboot update signed-img.zip