অ্যান্ড্রয়েড ওএস ছবি দুটি জায়গায় ক্রিপ্টোগ্রাফিক স্বাক্ষর ব্যবহার করে:
- ছবির ভিতরে প্রতিটি
.apk
ফাইল অবশ্যই স্বাক্ষর করতে হবে। Android এর প্যাকেজ ম্যানেজার দুটি উপায়ে একটি.apk
স্বাক্ষর ব্যবহার করে:- যখন একটি অ্যাপ্লিকেশন প্রতিস্থাপিত হয়, পুরানো অ্যাপ্লিকেশনের ডেটাতে অ্যাক্সেস পেতে এটিকে অবশ্যই পুরানো অ্যাপ্লিকেশনটির মতো একই কী দ্বারা স্বাক্ষর করতে হবে৷ এটি
.apk
ওভাররাইট করে ব্যবহারকারীর অ্যাপ আপডেট করার জন্য এবং/data
অধীনে ইনস্টল করা একটি নতুন সংস্করণ সহ একটি সিস্টেম অ্যাপ ওভাররাইড করার জন্য উভয়ই সত্য। - যদি দুই বা ততোধিক অ্যাপ্লিকেশন একটি ইউজার আইডি শেয়ার করতে চায় (যাতে তারা ডেটা শেয়ার করতে পারে, ইত্যাদি), তাদের অবশ্যই একই কী দিয়ে স্বাক্ষর করতে হবে।
- যখন একটি অ্যাপ্লিকেশন প্রতিস্থাপিত হয়, পুরানো অ্যাপ্লিকেশনের ডেটাতে অ্যাক্সেস পেতে এটিকে অবশ্যই পুরানো অ্যাপ্লিকেশনটির মতো একই কী দ্বারা স্বাক্ষর করতে হবে৷ এটি
- 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.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 keyopenssl 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 keyopenssl 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 keyopenssl pkcs8 -in temp.pem -topk8 -outform DER -out releasekey.pk8 -nocrypt
# securely delete the temp.pem fileshred --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
অ্যান্ড্রয়েড ওএস ছবি দুটি জায়গায় ক্রিপ্টোগ্রাফিক স্বাক্ষর ব্যবহার করে:
- ছবির ভিতরে প্রতিটি
.apk
ফাইল অবশ্যই স্বাক্ষর করতে হবে। Android এর প্যাকেজ ম্যানেজার দুটি উপায়ে একটি.apk
স্বাক্ষর ব্যবহার করে:- যখন একটি অ্যাপ্লিকেশন প্রতিস্থাপিত হয়, পুরানো অ্যাপ্লিকেশনের ডেটাতে অ্যাক্সেস পেতে এটিকে অবশ্যই পুরানো অ্যাপ্লিকেশনটির মতো একই কী দ্বারা স্বাক্ষর করতে হবে৷ এটি
.apk
ওভাররাইট করে ব্যবহারকারীর অ্যাপ আপডেট করার জন্য এবং/data
অধীনে ইনস্টল করা একটি নতুন সংস্করণ সহ একটি সিস্টেম অ্যাপ ওভাররাইড করার জন্য উভয়ই সত্য। - যদি দুই বা ততোধিক অ্যাপ্লিকেশন একটি ইউজার আইডি শেয়ার করতে চায় (যাতে তারা ডেটা শেয়ার করতে পারে, ইত্যাদি), তাদের অবশ্যই একই কী দিয়ে স্বাক্ষর করতে হবে।
- যখন একটি অ্যাপ্লিকেশন প্রতিস্থাপিত হয়, পুরানো অ্যাপ্লিকেশনের ডেটাতে অ্যাক্সেস পেতে এটিকে অবশ্যই পুরানো অ্যাপ্লিকেশনটির মতো একই কী দ্বারা স্বাক্ষর করতে হবে৷ এটি
- 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.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 keyopenssl 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 keyopenssl 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 keyopenssl pkcs8 -in temp.pem -topk8 -outform DER -out releasekey.pk8 -nocrypt
# securely delete the temp.pem fileshred --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