रिलीज के लिए साइनिंग बिल्ड

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

Android OS छवियां दो स्थानों पर क्रिप्टोग्राफ़िक हस्ताक्षरों का उपयोग करती हैं:

  1. छवि के अंदर प्रत्येक .apk फ़ाइल पर हस्ताक्षर किए जाने चाहिए। Android का पैकेज मैनेजर दो तरह से .apk सिग्नेचर का उपयोग करता है:
    • जब किसी एप्लिकेशन को प्रतिस्थापित किया जाता है, तो पुराने एप्लिकेशन के डेटा तक पहुंच प्राप्त करने के लिए पुराने एप्लिकेशन के समान कुंजी द्वारा हस्ताक्षरित होना चाहिए। यह .apk को अधिलेखित करके उपयोगकर्ता ऐप्स को अपडेट करने और /data के अंतर्गत इंस्टॉल किए गए एक नए संस्करण के साथ सिस्टम ऐप को ओवरराइड करने के लिए सही है।
    • यदि दो या दो से अधिक एप्लिकेशन उपयोगकर्ता आईडी साझा करना चाहते हैं (ताकि वे डेटा साझा कर सकें, आदि), तो उन्हें एक ही कुंजी के साथ हस्ताक्षरित होना चाहिए।
  2. OTA अद्यतन पैकेज़ को सिस्टम द्वारा अपेक्षित कुंजियों में से एक के साथ हस्ताक्षरित होना चाहिए या स्थापना प्रक्रिया उन्हें अस्वीकार कर देगी।

रिलीज कीज

एंड्रॉइड ट्री में build/target/product/security के तहत टेस्ट-की शामिल हैं। मेक का उपयोग करके एक Android OS छवि make परीक्षण-कुंजी का उपयोग करके सभी .apk फ़ाइलों पर हस्ताक्षर करेगा। चूंकि परीक्षण-कुंजी सार्वजनिक रूप से जानी जाती हैं, कोई भी अपनी .apk फ़ाइलों को समान कुंजियों से हस्ताक्षर कर सकता है, जो उन्हें आपकी OS छवि में निर्मित सिस्टम ऐप्स को बदलने या हाईजैक करने की अनुमति दे सकता है। इस कारण से किसी भी सार्वजनिक रूप से जारी या परिनियोजित Android OS छवि को रिलीज़- की के एक विशेष सेट के साथ हस्ताक्षर करना महत्वपूर्ण है, जिसकी केवल आपके पास पहुंच है।

रिलीज़-की का अपना अनूठा सेट बनाने के लिए, इन आदेशों को अपने Android ट्री की जड़ से चलाएँ:

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 स्क्रिप्ट एक लक्ष्य-फ़ाइलें .zip इनपुट के रूप में लेती है और एक नई लक्ष्य-फ़ाइलें .zip उत्पन्न करती है जिसमें सभी .apk फ़ाइलों को नई कुंजियों के साथ हस्ताक्षरित किया गया है। नई हस्ताक्षरित छवियां IMAGES/ के अंतर्गत हस्ताक्षरित- signed-target_files.zip में पाई जा सकती हैं।

ओटीए पैकेज पर हस्ताक्षर

एक हस्ताक्षरित लक्ष्य-फ़ाइलें ज़िप को निम्नलिखित प्रक्रिया का उपयोग करके एक हस्ताक्षरित OTA अद्यतन ज़िप में परिवर्तित किया जा सकता है:
ota_from_target_files \
-k  (--package_key) 
signed-target_files.zip \
signed-ota_update.zip

हस्ताक्षर और साइडलोडिंग

साइडलोडिंग रिकवरी के सामान्य पैकेज सिग्नेचर वेरिफिकेशन मैकेनिज्म को बायपास नहीं करता है—पैकेज को इंस्टाल करने से पहले, रिकवरी यह सत्यापित करेगी कि यह रिकवरी पार्टीशन में स्टोर की गई पब्लिक कीज से मेल खाने वाली एक प्राइवेट की के साथ साइन किया गया है, ठीक उसी तरह जैसे कि ओवर-द-डिलीवर पैकेज के लिए होता है। -वायु।

मुख्य सिस्टम से प्राप्त अपडेट पैकेज को आम तौर पर दो बार सत्यापित किया जाता है: एक बार मुख्य सिस्टम द्वारा, android API में RecoverySystem.verifyPackage() विधि का उपयोग करके, और फिर पुनर्प्राप्ति द्वारा। रिकवरीसिस्टम एपीआई फ़ाइल /system/etc/security/otacerts.zip (डिफ़ॉल्ट रूप से) मुख्य सिस्टम में संग्रहीत सार्वजनिक कुंजी के खिलाफ हस्ताक्षर की जांच करता है। पुनर्प्राप्ति फ़ाइल /res/keys में पुनर्प्राप्ति विभाजन RAM डिस्क में संग्रहीत सार्वजनिक कुंजियों के विरुद्ध हस्ताक्षर की जाँच करता है।

डिफ़ॉल्ट रूप से, बिल्ड द्वारा निर्मित लक्ष्य-फ़ाइलें .zip परीक्षण कुंजी से मेल खाने के लिए OTA प्रमाणपत्र सेट करती हैं। जारी की गई छवि पर, एक अलग प्रमाणपत्र का उपयोग किया जाना चाहिए ताकि डिवाइस अद्यतन पैकेज की प्रामाणिकता को सत्यापित कर सकें। -o ध्वज को sign_target_files_apks पर पास करना, जैसा कि पिछले अनुभाग में दिखाया गया है, परीक्षण कुंजी प्रमाणपत्र को आपकी प्रमाणपत्र निर्देशिका से रिलीज़ कुंजी प्रमाणपत्र से बदल देता है।

आम तौर पर सिस्टम छवि और पुनर्प्राप्ति छवि ओटीए सार्वजनिक कुंजी के समान सेट को संग्रहीत करती है। केवल कुंजियों के पुनर्प्राप्ति सेट में एक कुंजी जोड़कर, उन पैकेजों पर हस्ताक्षर करना संभव है जिन्हें केवल साइडलोडिंग के माध्यम से स्थापित किया जा सकता है (यह मानते हुए कि मुख्य सिस्टम का अपडेट डाउनलोड तंत्र 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 सेट करके इनमें से किसी एक कुंजी को निर्दिष्ट करते हैं। (यदि यह चर सेट नहीं है तो टेस्टकी का उपयोग किया जाता है।) आप पथनाम द्वारा एक पूरी तरह से अलग कुंजी भी निर्दिष्ट कर सकते हैं, उदाहरण के लिए:

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

LOCAL_CERTIFICATE := device/yoyodyne/security/special

अब बिल्ड SpecialApp.apk पर हस्ताक्षर करने के लिए device/yoyodyne/security/special.{x509.pem,pk8} कुंजी का उपयोग करता है। बिल्ड केवल निजी कुंजियों का उपयोग कर सकता है जो पासवर्ड से सुरक्षित नहीं हैं।

उन्नत हस्ताक्षर विकल्प

एपीके साइनिंग की रिप्लेसमेंट

साइनिंग स्क्रिप्ट sign_target_files_apks एक बिल्ड के लिए जेनरेट की गई टारगेट फाइलों पर काम करती है। निर्माण समय में उपयोग किए जाने वाले प्रमाणपत्रों और निजी कुंजियों की सभी जानकारी लक्ष्य फ़ाइलों में शामिल है। रिलीज के लिए हस्ताक्षर करने के लिए हस्ताक्षर स्क्रिप्ट चलाते समय, कुंजी नाम या एपीके नाम के आधार पर हस्ताक्षर कुंजियों को बदला जा सकता है।

कुंजी नामों के आधार पर कुंजी प्रतिस्थापन निर्दिष्ट करने के लिए --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

एपीके नामों के आधार पर हस्ताक्षर कुंजी प्रतिस्थापन निर्दिष्ट करने के लिए --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 में सभी एपीके फाइलों पर फिर से हस्ताक्षर करती है। कमांड चलाने से पहले, आप ANDROID_PW_FILE पर्यावरण चर को अस्थायी फ़ाइल नाम पर भी सेट कर सकते हैं; स्क्रिप्ट तब आपके संपादक को सभी कुंजियों के लिए पासवर्ड दर्ज करने की अनुमति देने के लिए आमंत्रित करती है (यह पासवर्ड दर्ज करने का एक अधिक सुविधाजनक तरीका हो सकता है)।

एपेक्स साइनिंग की रिप्लेसमेंट

एंड्रॉइड 10 निचले स्तर के सिस्टम मॉड्यूल को स्थापित करने के लिए एपेक्स फ़ाइल प्रारूप पेश करता है। जैसा कि एपेक्स साइनिंग में बताया गया है, प्रत्येक एपेक्स फाइल पर दो चाबियों के साथ हस्ताक्षर किए जाते हैं: एक एपेक्स के भीतर मिनी फाइल सिस्टम इमेज के लिए और दूसरा पूरे एपेक्स के लिए।

रिलीज के लिए साइन करते समय, एपेक्स फाइल के लिए दो साइनिंग कीज को रिलीज कीज से बदल दिया जाता है। फ़ाइल सिस्टम पेलोड कुंजी --extra_apex_payload ध्वज के साथ निर्दिष्ट है और संपूर्ण एपेक्स फ़ाइल हस्ताक्षर कुंजी --extra_apks ध्वज के साथ निर्दिष्ट है।

टार्डिस उत्पाद के लिए, मान लें कि आपके पास com.android.conscrypt.apex , com.android.media.apex , और com.android.runtime.release.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 को निर्दिष्ट रिलीज़ कुंजियों के साथ हस्ताक्षरित किया गया है (एपेक्स फ़ाइल के लिए runtime_apex_container , और फ़ाइल छवि पेलोड के लिए runtime_apex_payload )। com.android.tzdata.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 के साथ स्क्रिप्ट चलाएँ।

मैन्युअल रूप से कुंजी उत्पन्न करना

Android सार्वजनिक घातांक 3 के साथ 2048-बिट RSA कुंजियों का उपयोग करता है। आप Opensl.org से Opensl टूल का उपयोग करके प्रमाणपत्र/निजी कुंजी जोड़े उत्पन्न कर सकते हैं:

# 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

ऊपर दिया गया opensl pkcs8 कमांड बिना पासवर्ड वाली .pk8 फाइल बनाता है, जो बिल्ड सिस्टम के साथ उपयोग के लिए उपयुक्त है। पासवर्ड के साथ सुरक्षित .pk8 बनाने के लिए (जो आपको सभी वास्तविक रिलीज कुंजियों के लिए करना चाहिए), -nocrypt तर्क को -passout stdin से बदलें; फिर ओपनएसएल मानक इनपुट से पढ़े गए पासवर्ड के साथ निजी कुंजी को एन्क्रिप्ट करेगा। कोई संकेत मुद्रित नहीं किया जाता है, इसलिए यदि stdin टर्मिनल है तो प्रोग्राम तब हैंग होता दिखाई देगा जब यह वास्तव में केवल आपके पासवर्ड दर्ज करने की प्रतीक्षा कर रहा हो। अन्य मानों का उपयोग अन्य स्थानों से पासवर्ड पढ़ने के लिए-पासआउट तर्क के लिए किया जा सकता है; विवरण के लिए, ओपनएसएल दस्तावेज देखें।

Temp.pem इंटरमीडिएट फ़ाइल में किसी भी प्रकार की पासवर्ड सुरक्षा के बिना निजी कुंजी होती है, इसलिए रिलीज़ कुंजियाँ बनाते समय इसे सोच-समझकर निपटाएँ। विशेष रूप से, GNUshred उपयोगिता नेटवर्क या जर्नल फाइल सिस्टम पर प्रभावी नहीं हो सकती है। इंटरमीडिएट अनजाने में उजागर नहीं होते हैं यह सुनिश्चित करने के लिए कुंजी उत्पन्न करते समय आप रैम डिस्क (जैसे tmpfs विभाजन) में स्थित एक कार्यशील निर्देशिका का उपयोग कर सकते हैं।

छवि फ़ाइलें बनाना

एक बार जब आप साइन-टारगेट-फाइल्स.ज़िप कर लेते हैं, तो आपको छवि बनाने की आवश्यकता होती है ताकि आप इसे एक डिवाइस पर रख सकें। लक्ष्य फ़ाइलों से हस्ताक्षरित छवि बनाने के लिए, Android ट्री की जड़ से निम्न कमांड चलाएँ:

img_from_target_files signed-target-files.zip signed-img.zip
परिणामी फ़ाइल, signed-img.zip , में सभी .img फ़ाइलें शामिल हैं। किसी डिवाइस पर छवि लोड करने के लिए, फास्टबूट का उपयोग निम्नानुसार करें:
fastboot update signed-img.zip