Android OS छवियाँ दो स्थानों पर क्रिप्टोग्राफ़िक हस्ताक्षरों का उपयोग करती हैं:
- छवि के अंदर प्रत्येक
.apk
फ़ाइल पर हस्ताक्षर होना चाहिए। एंड्रॉइड का पैकेज मैनेजर दो तरीकों से.apk
हस्ताक्षर का उपयोग करता है:- जब किसी एप्लिकेशन को प्रतिस्थापित किया जाता है, तो पुराने एप्लिकेशन के डेटा तक पहुंच प्राप्त करने के लिए उसे पुराने एप्लिकेशन के समान कुंजी द्वारा हस्ताक्षरित किया जाना चाहिए। यह
.apk
ओवरराइट करके उपयोगकर्ता ऐप्स को अपडेट करने और/data
के तहत इंस्टॉल किए गए नए संस्करण के साथ सिस्टम ऐप को ओवरराइड करने दोनों के लिए सही है। - यदि दो या दो से अधिक एप्लिकेशन एक उपयोगकर्ता आईडी साझा करना चाहते हैं (ताकि वे डेटा आदि साझा कर सकें), तो उन्हें एक ही कुंजी से हस्ताक्षरित होना चाहिए।
- जब किसी एप्लिकेशन को प्रतिस्थापित किया जाता है, तो पुराने एप्लिकेशन के डेटा तक पहुंच प्राप्त करने के लिए उसे पुराने एप्लिकेशन के समान कुंजी द्वारा हस्ताक्षरित किया जाना चाहिए। यह
- ओटीए अपडेट पैकेज को सिस्टम द्वारा अपेक्षित कुंजी में से एक के साथ हस्ताक्षरित किया जाना चाहिए अन्यथा इंस्टॉलेशन प्रक्रिया उन्हें अस्वीकार कर देगी।
कुंजियाँ जारी करें
एंड्रॉइड ट्री में build/target/product/security
के अंतर्गत परीक्षण-कुंजियाँ शामिल हैं। make
का उपयोग करके एंड्रॉइड ओएस छवि का निर्माण परीक्षण-कुंजियों का उपयोग करके सभी .apk
फ़ाइलों पर हस्ताक्षर करेगा। चूँकि परीक्षण-कुंजियाँ सार्वजनिक रूप से ज्ञात हैं, कोई भी उन्हीं कुंजियों के साथ अपनी स्वयं की .apk फ़ाइलों पर हस्ताक्षर कर सकता है, जो उन्हें आपके 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
स्क्रिप्ट एक टारगेट-फाइल्स .zip
इनपुट के रूप में लेती है और एक नई टारगेट-फाइल्स .zip
तैयार करती है जिसमें सभी .apk
फाइलों को नई कुंजियों के साथ साइन किया गया है। नई हस्ताक्षरित छवियां IMAGES/
के अंतर्गत signed-target_files.zip
में पाई जा सकती हैं।
ओटीए पैकेज पर हस्ताक्षर करें
एक हस्ताक्षरित लक्ष्य-फ़ाइलें ज़िप को निम्नलिखित प्रक्रिया का उपयोग करके एक हस्ताक्षरित OTA अद्यतन ज़िप में परिवर्तित किया जा सकता है:
ota_from_target_files \
-k (--package_key)
signed-target_files.zip \
signed-ota_update.zip
हस्ताक्षर और साइडलोडिंग
साइडलोडिंग पुनर्प्राप्ति के सामान्य पैकेज हस्ताक्षर सत्यापन तंत्र को बायपास नहीं करता है - एक पैकेज स्थापित करने से पहले, पुनर्प्राप्ति यह सत्यापित करेगी कि यह पुनर्प्राप्ति विभाजन में संग्रहीत सार्वजनिक कुंजी से मेल खाने वाली निजी कुंजी में से एक के साथ हस्ताक्षरित है, जैसा कि यह ओवर-द-डिलीवर किए गए पैकेज के लिए होगा। -वायु।
मुख्य सिस्टम से प्राप्त अपडेट पैकेज को आम तौर पर दो बार सत्यापित किया जाता है: एक बार मुख्य सिस्टम द्वारा, एंड्रॉइड एपीआई में RecoverySystem.verifyPackage()
विधि का उपयोग करके, और फिर रिकवरी द्वारा। रिकवरीसिस्टम एपीआई मुख्य सिस्टम में फ़ाइल /system/etc/security/otacerts.zip
(डिफ़ॉल्ट रूप से) में संग्रहीत सार्वजनिक कुंजियों के विरुद्ध हस्ताक्षर की जाँच करता है। पुनर्प्राप्ति पुनर्प्राप्ति विभाजन रैम डिस्क में फ़ाइल /res/keys
में संग्रहीत सार्वजनिक कुंजियों के विरुद्ध हस्ताक्षर की जाँच करती है।
डिफ़ॉल्ट रूप से, बिल्ड द्वारा निर्मित लक्ष्य-फ़ाइलें .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 सेट करके इनमें से एक कुंजी निर्दिष्ट करते हैं। (यदि यह वेरिएबल सेट नहीं है तो टेस्टकी का उपयोग किया जाता है।) आप पथनाम द्वारा एक पूरी तरह से अलग कुंजी भी निर्दिष्ट कर सकते हैं, उदाहरण के लिए:
device/yoyodyne/apps/SpecialApp/Android.mk
[...] LOCAL_CERTIFICATE := device/yoyodyne/security/special
अब बिल्ड स्पेशलएप.एपीके पर हस्ताक्षर करने के लिए 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
खाली छोड़ दी जाती है, तो स्क्रिप्ट निर्दिष्ट एपीके को पूर्व-हस्ताक्षरित मानती है।
काल्पनिक टार्डिस उत्पाद के लिए, आपको छह पासवर्ड-संरक्षित कुंजियों की आवश्यकता है: 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 निचले स्तर के सिस्टम मॉड्यूल को स्थापित करने के लिए APEX फ़ाइल प्रारूप पेश करता है। जैसा कि APEX हस्ताक्षर में बताया गया है, प्रत्येक APEX फ़ाइल को दो कुंजियों के साथ हस्ताक्षरित किया जाता है: एक APEX के भीतर मिनी फ़ाइल सिस्टम छवि के लिए और दूसरा संपूर्ण APEX के लिए।
रिलीज़ के लिए हस्ताक्षर करते समय, APEX फ़ाइल के लिए दो हस्ताक्षर कुंजियाँ रिलीज़ कुंजियों से बदल दी जाती हैं। फ़ाइल सिस्टम पेलोड कुंजी को --extra_apex_payload
ध्वज के साथ निर्दिष्ट किया गया है और संपूर्ण APEX फ़ाइल हस्ताक्षर कुंजी को --extra_apks
ध्वज के साथ निर्दिष्ट किया गया है।
टार्डिस उत्पाद के लिए, मान लें कि आपके पास 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-बिट आरएसए कुंजी का उपयोग करता है। आप openingsl.org से ओपनएसएल टूल का उपयोग करके प्रमाणपत्र/निजी कुंजी जोड़े उत्पन्न कर सकते हैं:
# 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
ऊपर दिया गया openingsl pkcs8 कमांड बिना पासवर्ड के एक .pk8 फ़ाइल बनाता है, जो बिल्ड सिस्टम के साथ उपयोग के लिए उपयुक्त है। पासवर्ड से सुरक्षित .pk8 बनाने के लिए (जो आपको सभी वास्तविक रिलीज़ कुंजियों के लिए करना चाहिए), -nocrypt
तर्क को -passout stdin
से बदलें; फिर ओपनएसएल मानक इनपुट से पढ़े गए पासवर्ड के साथ निजी कुंजी को एन्क्रिप्ट करेगा। कोई प्रॉम्प्ट मुद्रित नहीं होता है, इसलिए यदि stdin टर्मिनल है तो प्रोग्राम तब हैंग होता हुआ दिखाई देगा जब वह वास्तव में आपके द्वारा पासवर्ड दर्ज करने की प्रतीक्षा कर रहा हो। अन्य स्थानों से पासवर्ड पढ़ने के लिए-पासआउट तर्क के लिए अन्य मानों का उपयोग किया जा सकता है; विवरण के लिए, ओपनएसएल दस्तावेज़ देखें।
Temp.pem मध्यवर्ती फ़ाइल में किसी भी प्रकार की पासवर्ड सुरक्षा के बिना निजी कुंजी होती है, इसलिए रिलीज़ कुंजी बनाते समय इसका सोच-समझकर निपटान करें। विशेष रूप से, GNUshred उपयोगिता नेटवर्क या जर्नल फ़ाइल सिस्टम पर प्रभावी नहीं हो सकती है। यह सुनिश्चित करने के लिए कि मध्यवर्ती अनजाने में उजागर न हों, कुंजी बनाते समय आप रैम डिस्क में स्थित एक कार्यशील निर्देशिका (जैसे कि tmpfs विभाजन) का उपयोग कर सकते हैं।
छवि फ़ाइलें बनाएँ
एक बार जब आप-target-files.zip पर हस्ताक्षर कर लेते हैं, तो आपको छवि बनाने की आवश्यकता होती है ताकि आप इसे डिवाइस पर रख सकें। लक्ष्य फ़ाइलों से हस्ताक्षरित छवि बनाने के लिए, एंड्रॉइड ट्री की जड़ से निम्नलिखित कमांड चलाएँ:
img_from_target_files signed-target-files.zip signed-img.zipपरिणामी फ़ाइल,
signed-img.zip
में सभी .img फ़ाइलें शामिल हैं। किसी डिवाइस पर छवि लोड करने के लिए, फास्टबूट का उपयोग निम्नानुसार करें:fastboot update signed-img.zip