การลงนามแอป Android: มันทำงานอย่างไรและเหตุใดจึงสำคัญ

A brass key on a smartphone showing a verified checkmark, illustrating Android app signing

ทุกครั้งที่คุณติดตั้งแอปบนโทรศัพท์ Android การตรวจสอบความปลอดภัยที่เงียบแต่สำคัญจะเกิดขึ้นในเบื้องหลัง โทรศัพท์ของคุณตรวจสอบ ลายเซ็นดิจิทัล ของแพ็คเกจ APK การจับมือกันด้วยการเข้ารหัสลับนี้เป็นสิ่งที่ป้องกันแฮกเกอร์ที่เป็นอันตรายจากการ "วางยาพิษ" แอปของคุณด้วยมัลแวร์ ในขณะเดียวกันก็ทำให้มั่นใจได้ว่านักพัฒนาจะสามารถพุชการอัปเดตได้โดยไม่สูญเสียตัวตนของพวกเขา

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

คุณจะได้เรียนรู้อะไรบ้างในบทความนี้
  • เหตุใดจึงต้องลงนามแอป Android ทุกแอปและการเข้ารหัสที่เกี่ยวข้อง (RSA / EC)
  • ความแตกต่างระหว่างรูปแบบลายเซ็น v1 (JAR), v2, v3 และ v4 และรูปแบบใดที่แอปของคุณควรใช้ในปัจจุบัน
  • วิธีที่ Android ตัดสินใจว่าจะอนุญาตการอัปเดตตามความต่อเนื่องของลายเซ็นหรือไม่
  • วิธีที่การหมุนเวียนคีย์ช่วยให้นักพัฒนาเปลี่ยนคีย์การลงนามได้โดยไม่ทำให้การติดตั้งที่มีอยู่เสียหาย
  • วิธีตรวจสอบลายเซ็นของ APK ด้วยตนเอง บนบรรทัดคำสั่งหรือด้วย ตัวตรวจสอบบนเบราว์เซอร์ ของเรา

App Signing คืออะไร?

หัวใจหลักของการลงนามแอปคือกระบวนการที่นักพัฒนาใช้ รหัสส่วนตัว เพื่อสร้างบล็อกลายเซ็นสำหรับไฟล์ของแอป จากนั้น กุญแจสาธารณะ ที่เกี่ยวข้องจะถูกฝังอยู่ใน APK ภายในโฟลเดอร์ META-INF เมื่อโทรศัพท์ของคุณพยายามติดตั้งแอป จะใช้คีย์สาธารณะเพื่อตรวจสอบว่าลายเซ็นตรงกับเนื้อหาของไฟล์หรือไม่

ซึ่งมีคุณสมบัติหลักสองประการ:

  1. ความไม่เปลี่ยนรูป: หากโค้ดของแอปมีการเปลี่ยนแปลงหนึ่งไบต์ (เช่น โดยโทรจัน) ลายเซ็นจะไม่ตรงกับไฟล์อีกต่อไป และ Android จะปฏิเสธที่จะติดตั้ง
  2. หลักฐานแสดงตัวตน: หากแอปพยายามอัปเดตแอปที่มีอยู่ ลายเซ็นของแอปนั้นจะต้องตรงกัน นี่คือสาเหตุที่คุณไม่สามารถติดตั้งแอพ Facebook ที่ถูกดัดแปลงทับแอพอย่างเป็นทางการได้

วิวัฒนาการของแผนการลงนาม

Google ได้อัปเกรดกลไกการลงนามอย่างต่อเนื่องเพื่อปรับปรุงทั้งความเร็วและความปลอดภัย:

เหตุใดใบรับรองจึงมีความสำคัญสำหรับไซด์โหลด

เมื่อคุณดาวน์โหลด APK จากแหล่งที่ไม่เป็นทางการ การแฮชใบรับรอง จะเป็นเพื่อนที่ดีที่สุดของคุณ ลายนิ้วมือของใบรับรอง (เช่น แฮช SHA-256) จะระบุคีย์การลงนามของนักพัฒนาโดยไม่ซ้ำกัน แต่ละแอปจะเก็บคีย์การลงนามเดียวกันในการอัปเดตทั้งหมด ดังนั้นคุณจึงสามารถเปรียบเทียบลายนิ้วมือของ APK กับค่าที่เผยแพร่ของนักพัฒนาเพื่อยืนยันว่าเป็นของแท้

หากคุณสงสัยว่า APK นั้นเป็นของปลอม คุณควรเรียกใช้ผ่าน เครื่องมือตรวจสอบ APK ออนไลน์ ของเรา เครื่องมือของเราจะแสดงให้คุณเห็น:

Android ตรวจสอบลายเซ็น ณ เวลาติดตั้งอย่างไร

ขั้นตอน "ยืนยันใบรับรอง" มักจะถูกมองข้ามไปจนคุ้มค่าที่จะพิจารณาว่าระบบปฏิบัติการทำอะไรจริง ๆ เมื่อคุณแตะ APK และ Android ตัดสินใจว่าจะติดตั้งหรือไม่:

  1. เปิด APK เป็น ZIP และค้นหาบล็อกการลงนาม สำหรับลายเซ็น v2/v3 ที่เป็นบล็อกที่มีโครงสร้างทันทีก่อนไดเร็กทอรีกลาง สำหรับรูปแบบ v1 แบบเดิม จะเป็นเนื้อหาของ META-INF/*.RSA, *.DSA หรือ *.EC
  2. คำนวณ SHA-256 แยกย่อยของไบต์อื่นๆ ของ APK บล็อกการลงนามถูกแยกออกจากการแยกย่อยของตัวเอง ทุกสิ่งทุกอย่างจะถูกแฮชในส่วนที่กำหนดไว้
  3. ตรวจสอบการแยกย่อยของแต่ละชิ้นเทียบกับการแยกย่อยที่บันทึกไว้ในบล็อกการลงนาม หากมีการเปลี่ยนแปลงแม้แต่ไบต์เดียวนับตั้งแต่ผู้พัฒนาลงนามไฟล์ ข้อมูลสรุปจะไม่ตรงกันและการติดตั้งจะถูกปฏิเสธโดยมีข้อผิดพลาด "ไม่ได้ติดตั้งแอป" ทั่วไป
  4. ตรวจสอบว่าบล็อกการลงนามนั้นถูกสร้างขึ้นด้วยคีย์ส่วนตัวของใบรับรอง รหัสสาธารณะของใบรับรองใช้เพื่อตรวจสอบลายเซ็นการเข้ารหัสในบล็อก การตรวจสอบที่สำเร็จหมายความว่าใครก็ตามที่ลงนามในไฟล์มีคีย์ส่วนตัวที่จับคู่กับใบรับรองนี้
  5. เปรียบเทียบลายนิ้วมือใบรับรองกับการติดตั้งชื่อแพ็คเกจเดียวกันที่มีอยู่ หากติดตั้งแพ็คเกจแล้วและ APK ใหม่ลงนามด้วยใบรับรองอื่น การติดตั้งจะถูกปฏิเสธด้วย INSTALL_FAILED_UPDATE_INCOMPATIBLE นี่คือการป้องกันการแอบอ้างบุคคลอื่นหลักของระบบปฏิบัติการ: ผู้ประสงค์ร้ายไม่สามารถแทนที่แอปธนาคารของคุณด้วยสำเนาของตนเองได้ เว้นแต่พวกเขาจะขโมยรหัสลงนามของธนาคารด้วย

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

"ลายเซ็นไม่ตรงกัน" หมายถึงอะไรจริงๆ

สิ่งที่ทำให้คนประหลาดใจที่พบบ่อยที่สุดเมื่อไซด์โหลดคือข้อผิดพลาด "ลายเซ็นไม่ตรงกัน" ในการอัปเดต นี่คือสิ่งที่เกิดขึ้นจริง:

สิ่งนี้เกิดขึ้นได้สองวิธีในทางปฏิบัติ:

  1. APK ของบุคคลที่สามคือ จากสำนักพิมพ์อื่นอย่างแท้จริง เช่น สำเนา "modded" หรือ "patched" การปฏิเสธการติดตั้งถือเป็นพฤติกรรมที่ถูกต้อง การติดตั้งจะหมายถึงการไว้วางใจคนแปลกหน้าด้วยข้อมูลเดียวกันกับที่แอปของธนาคารของคุณสัมผัสแล้ว
  2. APK ของบุคคลที่สามคือ การอัปโหลด APK อย่างเป็นทางการอีกครั้ง แต่ระบบ Play App Signing ของ Google ลงนามการดาวน์โหลดของผู้ใช้แต่ละรายด้วย Wrapper คีย์การอัปโหลด ของผู้ใช้ บางครั้งอุปกรณ์สองเครื่องอาจเห็นข้อมูลลายเซ็นที่แตกต่างกันเล็กน้อยสำหรับแอปเวอร์ชันที่มีแนวคิดเดียวกัน ในกรณีนั้นลายนิ้วมือของใบรับรองที่รูทยังคงตรงกัน คุณสามารถตรวจสอบกับ เครื่องมือตรวจสอบ APK ของเราได้

หากลายนิ้วมือใบรับรอง อย่างแท้จริง แตกต่างจากการติดตั้งที่คุณมีอยู่ วิธีเดียวที่จะดำเนินการต่อได้คือการถอนการติดตั้งสำเนาปัจจุบันก่อน (สูญเสียข้อมูล) ก่อนที่จะไซด์โหลดสำเนาทดแทน โดยห้ามปิดการตรวจสอบลายเซ็น

การสร้างคีย์การลงนามของคุณเอง (สำหรับนักพัฒนา)

หากคุณกำลังสร้างแอป Android คุณจะต้องลงนามในบิลด์ของคุณเองในที่สุด คำสั่งบรรทัดเดียวมาตรฐานที่ใช้ keytool จาก Java SDK คือ:

keytool -genkeypair -v \
        -keystore my-release.keystore \
        -alias my-app -keyalg RSA -keysize 2048 \
        -validity 10000

สองสิ่งที่ควรรู้:

สำหรับบิลด์การทดสอบแบบไซด์โหลด ที่เก็บคีย์การดีบักที่ไม่ได้ลงนามก็ใช้ได้ สำหรับการผลิต ให้ใช้ที่เก็บคีย์ความถูกต้องยาวนานที่ป้องกันด้วยรหัสผ่านซึ่งจัดเก็บไว้ในการสำรองข้อมูลออฟไลน์

ยืนยันตัวตนของแอปอย่างมืออาชีพ

อย่าเชื่อถือชื่อไฟล์ทั่วไป ตรวจสอบหัวใจการเข้ารหัสของ APK ของคุณในไม่กี่วินาที

ตรวจสอบใบรับรองทันที

ข้อผิดพลาดทั่วไปในการลงนาม

  1. ใบรับรองที่ลงนามด้วยตนเอง: แอพ Android ส่วนใหญ่ลงนามด้วยตนเอง ไม่เหมือนกับ SSL สำหรับเว็บไซต์ ไม่มีอำนาจกลางสำหรับการลงนามแอป Android คุณต้องเชื่อถือนักพัฒนาซอฟต์แวร์โดยตรง
  2. แอป ใบรับรองการแก้ไขข้อบกพร่อง: ที่สร้างขึ้นเพื่อการทดสอบใช้คีย์ "debug" ทั่วไป แอปเหล่านี้ไม่ควรเผยแพร่สู่สาธารณะและถูกบล็อกโดยตัวกรองความปลอดภัยจำนวนมาก
  3. การสูญเสียที่สำคัญ: หากนักพัฒนาสูญเสียที่เก็บคีย์ส่วนตัว พวกเขาสามารถ ไม่เคย อัปเดตแอปได้อีกครั้ง พวกเขาจะต้องเปิดตัวแอป "ใหม่" ที่มีชื่อแพ็คเกจอื่น

การเลือกแผนการลงนามที่เหมาะสมสำหรับ SDK เป้าหมายของคุณ

การลงนามแอปเป็นการสนับสนุนความปลอดภัยของ Android อย่างมาก เมื่อความสัมพันธ์ของคีย์ส่วนตัว/สาธารณะคลิก คุณสามารถตัดสินแอปที่ถูกไซด์โหลดได้จากข้อดีของแอป และยืนยันว่าสิ่งที่คุณกำลังติดตั้งไม่มีการเปลี่ยนแปลงนับตั้งแต่นักพัฒนาลงนาม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับระบบภายในของ Android โปรดดู คำแนะนำเกี่ยวกับรูปแบบ XAPK ของเรา

ออกแบบและจัดทำเอกสารโดย Mst Shaefale หัวหน้านักพัฒนาและสถาปนิกแพ็คเกจ Android • ตรวจสอบแล้วบน Android 12–15

Mst Shaefale ดูแลการควบรวมกิจการ XAPK/APKS ฝั่งไคลเอ็นต์, ตัวแยกวิเคราะห์รายการไบนารี และเครื่องมือลงนาม APK v1+v2 ที่ xapktoapk.com พบคำสั่งที่ล้าสมัยหรือการเปลี่ยนแปลงระบบปฏิบัติการหรือไม่ ส่งบันทึกบรรณาธิการ