เซ็นบิลด์เพื่อเผยแพร่

รูปภาพระบบปฏิบัติการ Android ใช้ลายเซ็นการเข้ารหัสใน 2 ที่ต่อไปนี้

  1. ไฟล์ .apk แต่ละไฟล์ในรูปภาพต้องมีลายเซ็นกำกับ ของ Android Package Manager จะใช้ลายเซ็น .apk ใน 2 วิธี ได้แก่
    • เมื่อมีการแทนที่แอปพลิเคชัน แอปพลิเคชันนั้นต้องได้รับการรับรองโดยคีย์เดียวกับแอปพลิเคชันเก่าจึงจะเข้าถึงข้อมูลของแอปพลิเคชันเก่าได้ ซึ่งจะเป็นจริงทั้งสำหรับการอัปเดตแอปของผู้ใช้โดยการเขียนทับ .apk และสำหรับการลบล้างแอปของระบบที่ติดตั้งเวอร์ชันใหม่แล้วในส่วน /data
    • หากมีแอปพลิเคชันตั้งแต่ 2 แอปขึ้นไปต้องการแชร์ User ID (เพื่อให้สามารถแชร์ เป็นต้น) ข้อมูลเหล่านั้นจะต้องได้รับการลงนามด้วยคีย์เดียวกัน
  2. แพ็กเกจการอัปเดต OTA ต้องมีการลงชื่อด้วยคีย์ใดคีย์หนึ่งที่คาดหมายภายใน มิฉะนั้นขั้นตอนการติดตั้งจะปฏิเสธ

เผยแพร่คีย์

ต้นไม้ Android มี test-keys ในส่วน build/target/product/security การสร้างอิมเมจระบบปฏิบัติการ Android โดยใช้ make จะเซ็นชื่อไฟล์ .apk ทั้งหมดโดยใช้ test-keys เนื่องจากคีย์ทดสอบเป็นคีย์ที่เผยแพร่ต่อสาธารณะ ทุกคนจึงสามารถรับรองไฟล์ .apk ของตนเองด้วยคีย์เดียวกัน ซึ่งอาจทำให้บุคคลดังกล่าวแทนที่หรือลักลอบใช้แอประบบที่ฝังอยู่ในอิมเมจระบบปฏิบัติการได้ ด้วยเหตุนี้ จึงจำเป็นที่จะต้องลงชื่อ อิมเมจระบบปฏิบัติการ Android ที่เผยแพร่ต่อสาธารณะหรือใช้งานได้พร้อมชุดพิเศษ release-key ที่มีเพียงคุณเท่านั้นที่เข้าถึงได้

หากต้องการสร้างชุดคีย์การเผยแพร่ที่ไม่ซ้ำกัน ให้เรียกใช้คําสั่งต่อไปนี้จากรูทของต้นไม้ 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

ไฟล์ ZIP ของไฟล์เป้าหมายที่ลงนามแล้วแปลงเป็นไฟล์ ZIP การอัปเดต OTA ที่ลงนามได้ โดยใช้ขั้นตอนต่อไปนี้
ota_from_target_files \
-k  (--package_key) 
signed-target_files.zip \
signed-ota_update.zip

ลายเซ็นและการโหลดจากแหล่งที่ไม่รู้จัก

การโหลดจากอุปกรณ์อื่นไม่ได้ข้ามกลไกการยืนยันลายเซ็นแพ็กเกจตามปกติของการกู้คืน ก่อนที่จะติดตั้งแพ็กเกจ การกู้คืนจะยืนยันว่าแพ็กเกจได้รับการเซ็นชื่อด้วยคีย์ส่วนตัวรายการใดรายการหนึ่งที่ตรงกับคีย์สาธารณะที่จัดเก็บไว้ในพาร์ติชันการกู้คืน เช่นเดียวกับแพ็กเกจที่ส่งผ่านอากาศ

โดยทั่วไปการอัปเดตแพ็กเกจที่ได้รับจากระบบหลักจะได้รับการยืนยัน 2 ครั้ง ดังนี้ หนึ่งครั้งโดยระบบหลัก โดยใช้ RecoverySystem.verifyPackage() ใน API Android แล้วแก้ไขอีกครั้งโดย RecoverySystem API จะตรวจสอบลายเซ็นกับคีย์สาธารณะ ที่เก็บไว้ในระบบหลักในไฟล์ /system/etc/security/otacerts.zip (โดยค่าเริ่มต้น) การกู้คืนจะตรวจสอบลายเซ็นกับคีย์สาธารณะที่จัดเก็บไว้ ในดิสก์ RAM ของพาร์ติชันการกู้คืนในไฟล์ /res/keys

โดยค่าเริ่มต้น ไฟล์เป้าหมาย .zip ที่สร้างโดยบิลด์จะตั้งค่าแอตทริบิวต์ ใบรับรอง OTA ที่ตรงกับคีย์ทดสอบ ในภาพที่มีการเผยแพร่แล้ว ต้องใช้ใบรับรองอื่นเพื่อให้อุปกรณ์ยืนยันความถูกต้องของแพ็กเกจอัปเดตได้ ส่ง Flag -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 ระบบที่ตรวจสอบความถูกต้องของแพ็กเกจที่ดาวน์โหลดจะไม่เรียกใช้การกู้คืน แพ็กเกจที่ลงนามด้วยคีย์นี้

ใบรับรองและคีย์ส่วนตัว

แต่ละคีย์จะอยู่ใน 2 ไฟล์ ได้แก่ ใบรับรอง ซึ่งมีส่วน นามสกุล .x509.pem และคีย์ส่วนตัวซึ่งมีส่วนขยาย .pk8 คีย์ส่วนตัวควรเก็บเป็นความลับและต้องใช้เพื่อลงนามในแพ็กเกจ คีย์ดังกล่าวอาจได้รับการปกป้องด้วยรหัสผ่าน ใบรับรองใน ตรงกันข้าม มีเฉพาะส่วนครึ่งสาธารณะของคีย์ ดังนั้นจึงสามารถกระจายของคีย์ได้ อย่างกว้างขวาง ซึ่งใช้เพื่อยืนยันว่าแพ็กเกจมีการลงนามโดย คีย์ส่วนตัว

บิลด์ Android มาตรฐานใช้คีย์ 5 รายการ ซึ่งทั้งหมดอยู่ใน build/target/product/security

คีย์ทดสอบ
คีย์เริ่มต้นทั่วไปสำหรับแพ็กเกจที่ไม่ได้ระบุคีย์
แพลตฟอร์ม
คีย์ทดสอบสำหรับแพ็กเกจที่เป็นส่วนหนึ่งของแพลตฟอร์มหลัก
แชร์
คีย์ทดสอบสำหรับสิ่งที่แชร์ในกระบวนการของบ้าน/รายชื่อติดต่อ
สื่อ
คีย์ทดสอบสำหรับแพ็กเกจที่เป็นส่วนหนึ่งของระบบสื่อ/ดาวน์โหลด
Networktack
คีย์ทดสอบสำหรับแพ็กเกจที่เป็นส่วนหนึ่งของระบบเครือข่าย คีย์ Networkstack ใช้เพื่อลงนามในไบนารีที่ออกแบบเป็น ส่วนประกอบของระบบโมดูล หากคุณสร้างการอัปเดตโมดูลแยกต่างหากและผสานรวมเป็นแบบที่สร้างไว้ล่วงหน้า ในรูปภาพของอุปกรณ์ คุณอาจไม่จำเป็นต้องสร้างคีย์ Networktack ใน แผนผังแหล่งที่มาของ Android

แพ็กเกจแต่ละรายการจะระบุคีย์ใดคีย์หนึ่งเหล่านี้โดยการตั้งค่า LOCAL_CERTIFICATE ในไฟล์ Android.mk (จะใช้คีย์ทดสอบหากไม่ได้ตั้งค่าตัวแปรนี้) นอกจากนี้ คุณยังระบุคีย์อื่นโดยสิ้นเชิงได้ด้วยเส้นทาง เช่น

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

LOCAL_CERTIFICATE := device/yoyodyne/security/special

ตอนนี้บิลด์ใช้คีย์ device/yoyodyne/security/special.{x509.pem,pk8} เพื่อลงชื่อ SpecialApp.apk บิลด์นี้ใช้ได้เฉพาะคีย์ส่วนตัวที่ ไม่ มีการป้องกันด้วยรหัสผ่าน

ตัวเลือกการลงนามขั้นสูง

การเปลี่ยนคีย์ App Signing ของ APK

สคริปต์การรับรอง sign_target_files_apks ทำงานในเป้าหมาย ไฟล์ที่สร้างขึ้นสำหรับบิลด์ ข้อมูลทั้งหมดเกี่ยวกับใบรับรองและข้อมูลส่วนตัว คีย์ที่ใช้ในเวลาบิลด์จะรวมอยู่ในไฟล์เป้าหมาย เมื่อเรียกใช้เมธอด สคริปต์การลงนามเพื่อลงนามสำหรับการเปิดตัว คีย์การรับรองสามารถแทนที่ได้โดยอิงตามคีย์ name หรือชื่อ APK

ใช้--key_mappingและ--default_key_mappings แฟล็กเพื่อระบุการแทนที่คีย์ตามชื่อคีย์:

  • Flag --key_mapping src_key=dest_key จะระบุการเปลี่ยนทดแทนทีละคีย์
  • Flag --default_key_mappings dir จะระบุไดเรกทอรีที่มีคีย์ 5 รายการเพื่อแทนที่คีย์ทั้งหมดใน build/target/product/security ซึ่งเทียบเท่ากับการใช้ --key_mapping 5 ครั้งเพื่อระบุการแมป
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 รายการ เพื่อระบุการแทนที่คีย์ Signing ตามชื่อ APK หากเว้นว่างไว้ key สคริปต์จะถือว่า APK ที่ระบุได้รับการรับรองล่วงหน้า

สำหรับผลิตภัณฑ์ Tardis สมมติ คุณต้องมีคีย์ที่ป้องกันด้วยรหัสผ่าน 6 คีย์ ดังนี้ 5 คีย์สำหรับแทนที่ 5 คีย์ใน build/target/product/security และ 1 คีย์สำหรับแทนที่คีย์เพิ่มเติม device/yoyodyne/security/special ที่ SpecialApp ต้องใช้ในตัวอย่างด้านบน หากคีย์เป็นไปตามข้อกำหนดต่อไปนี้ ไฟล์:

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.

หลังจากแจ้งให้ผู้ใช้ป้อนรหัสผ่านสำหรับคีย์ทั้งหมดที่มีการป้องกันด้วยรหัสผ่าน สคริปต์จะลงนามไฟล์ APK ทั้งหมดในเป้าหมายอินพุต .zip อีกครั้งด้วย ปล่อยคีย์ ก่อนเรียกใช้คำสั่ง คุณยังสามารถตั้งค่า ตัวแปรสภาพแวดล้อม ANDROID_PW_FILE เป็นชื่อไฟล์ชั่วคราว เวลา สคริปต์จะเรียกเครื่องมือแก้ไขของคุณเพื่อให้คุณป้อนรหัสผ่านสำหรับคีย์ทั้งหมดได้ (วิธีนี้อาจช่วยให้ป้อนรหัสผ่านได้สะดวกกว่า)

การเปลี่ยนคีย์ Signing APEX

Android 10 เปิดตัวรูปแบบไฟล์ APEX สำหรับการติดตั้งโมดูลระบบระดับล่าง ตามที่อธิบายไว้ใน การลงชื่อ APEX ไฟล์ APEX แต่ละไฟล์ ลงนามด้วยคีย์ 2 คีย์ คีย์หนึ่งสำหรับอิมเมจระบบไฟล์ขนาดเล็กภายใน APEX และ อื่นๆ สำหรับทั้ง APEX

เมื่อลงนามสำหรับรุ่น ระบบจะแทนที่คีย์การรับรอง 2 รายการสำหรับไฟล์ APEX ด้วยแป้นปลดล็อก คีย์เพย์โหลดของระบบไฟล์จะระบุด้วย --extra_apex_payload Flag และคีย์การลงนามไฟล์ APEX ทั้งหมดคือ ที่ระบุด้วยแฟล็ก --extra_apks

สําหรับผลิตภัณฑ์ tardis สมมติว่าคุณมีการกําหนดค่าคีย์ต่อไปนี้สําหรับไฟล์ APEX 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 สำหรับไฟล์ APEX และ 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 เพื่อดูเอกสารประกอบเกี่ยวกับ Flag ทั้งหมด

สร้างคีย์ด้วยตนเอง

Android ใช้คีย์ RSA 2048 บิตที่มีตัวคูณสาธารณะ 3 คุณสามารถสร้าง คู่คีย์ของใบรับรอง/คีย์ส่วนตัวโดยใช้เครื่องมือ openssl จาก openssl.org

# 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 เป็นเทอร์มินัล โปรแกรมจะปรากฏ เวลาที่รอให้คุณป้อนรหัสผ่านเท่านั้น ค่าอื่นๆ อาจเป็น ใช้สำหรับอาร์กิวเมนต์ Passout เพื่ออ่านรหัสผ่านจากตำแหน่งอื่น สำหรับ ดูรายละเอียดได้ที่ เอกสาร openssl

ไฟล์กลาง temp.pem มีคีย์ส่วนตัวโดยไม่มีคีย์ การป้องกันด้วยรหัสผ่าน ดังนั้นควรกำจัดอย่างระมัดระวังเมื่อสร้างการเผยแพร่ คีย์ โดยเฉพาะอย่างยิ่ง ยูทิลิตีของ GNUshred อาจไม่มีประสิทธิภาพบนเครือข่ายหรือ ระบบไฟล์รายการบันทึก คุณสามารถใช้ไดเรกทอรีการทำงานที่อยู่ในดิสก์ RAM (เช่น พาร์ติชัน tmpfs) เมื่อสร้างคีย์เพื่อให้มั่นใจว่าคีย์กลางจะไม่เปิดเผยโดยไม่ตั้งใจ

สร้างไฟล์รูปภาพ

เมื่อได้รับ signed-target_files.zip แล้ว คุณจะต้องสร้างรูปภาพเพื่อนำไปใส่ลงในอุปกรณ์ หากต้องการสร้างรูปภาพที่ลงนามจากไฟล์เป้าหมาย ให้เรียกใช้ คำสั่งต่อไปนี้จากรูทของ Android แผนผัง:

img_from_target_files signed-target_files.zip signed-img.zip
ไฟล์ผลลัพธ์ signed-img.zip มีไฟล์ .img ทั้งหมด หากต้องการโหลดภาพลงในอุปกรณ์ ให้ใช้ Fastboot ดังนี้
fastboot update signed-img.zip