minseo on Nostr: แอพที่ส่ง Play Store เข้ารหัสแบบใด? ...
แอพที่ส่ง Play Store เข้ารหัสแบบใด?
สรุป “Why App Signing Matters for Your Android Apps”
จากงาน Android Bangkok Conference 2024
การบิ้วแอพส่งขึ้น store เป็น process ที่สำคัญ ในการ deliver feature ให้ user ซึ่งไฟล์ aab ของเราสร้างจาก Android Studio เราอัพขึ้น Google Play จะ convert aab ของเราเป็น apk ที่เหมาะสมของ device นั้น ๆ เพราะแต่ละเครื่องมี spec ต่างกัน ก่อนแอพจะอยู่ที่ device จริง และมีอะไรบางอย่างที่เราไม่เคยรู้มาก่อน
Benefit จากการทำ signing
- Integrity: confirm package ว่ามาจากเราจริง ๆ นะ
- Security: ป้องกันคนเอาไฟล์แอพของเราไปแอบอ้างเป็นเจ้าของ sign ทับ เพราะ signature file พังแล้ว
ปกติเราจะบิ้วแอพผ่าน Android Studio หรือบางที่ก็จะมี CI/CD ทั้งสองแบบผ่าน signing key ออกมาเป็นแอพที่เป็น apk หรือ aab
.
🟢 APK Signature Scheme
script การยืนยันตัวตน และ code ข้างในยังเป็นเหมือนเดิม แบ่งจากการทำ signing
- v1 Scheme: มาจาก Java รองรับ code Java เท่านั้น และถ้าเปลี่ยน resource แต่ตัว signature ยังเหมือนเดิม → version 1
- v2+ Scheme: ครอบคลุมทุกไฟล์ เป็นการแทรก APK Signing block เข้าไป → version 2, 3, 3.1, 4
Signature Algorithm: มีหลายอันมาก ๆ หลัก ๆ เป็นพวก RSA, EC และ DSA
⭐ APK Signature Scheme v1: Android ทุก version support อันนี้เสมอ แต่ไม่แนะนำให้ใช้ เนื่องจากเรื่องความปลอดภัย และ performance
⭐ APK Signature Scheme v2: support Android 7.0 ขึ้นไป ถ้า Android version ตํ่ากว่านี้เป็น APK Signature Scheme v1 ข้อดีเลย คือ แอพติดตั้งไวขึ้น, verify integrity, apk file เล็กลง
⭐ APK Signature Scheme v3: suport Android 9 ขึ้นไป อยู่บนพื้นฐาน APK Signature Scheme v2 มี feature เพิ่ม คือ key rotation เป็นการ rotate keystore ถ้าสมมุติแอพเราตั้งมาแล้ว 10 ปี แล้ว key มัน expire ล่ะ ทำให้แอพของเราติดตั้งลง Android device ไม่ได้เลย ดังนั้นจะต้อง upgrade key ตัวใหม่เอาไปได้ และมี algorithm ที่แข็งแรงมากขึ้น ใช้ของใหม่ทับของเก่าได้เลย อีกทั้งมีหลักการ proof-of ใด ๆ ที่ชาว web3 จะได้ยิน proof-of-work เอย proof-of-stack เอย อันนี้เป็น proof-of-rotation รู้จัก key ก่อนหน้า ถึงจะเชื่อมของใหม่ได้
⭐ APK Signature Scheme v4: รองรับ Android 11 ขึ้นไป ทำให้ sign app ได้เร็วขึ้น load บางส่วน และ verify บางส่วนก่อนได้ อีกทั้งใช้ markle hash tree ในการทำ verify ได้เร็วขึ้น ทำให้ทำงานเร็วขึ้นอีกด้วย และมีไฟล์ .idsig แยกมาด้วย
⭐ APK Signature Scheme v3.1: รองรับ Android 13 ขึ้นไป สงสัยล่ะสิทำไมไม่ version 5 อะไรงี้ เพราะว่าแก้บัค version 3 แล้วก็ backward version 3 ให้ทำงานกับ version 4 ได้ด้วย
.
ถ้าเราอยากใช้ทำยังไง? สามารถไปเปิดที่ gradle ได้นะ ใส่ enableV3Signing กับ enableV4Signing โดยตอนที่ pentest ใช้ version 3 ผ่าน
.
🟢 Play App Signing
ใช้ key sign เป็น apk ให้ สามารถใช้ key เดิมได้ แต่แนะนำให้ generate upload key ซึ่งใช้ได้ตลอดเมื่อ build app ส่งเฉพาะ Google Play
การทำงาน signing บิ้วแอพผ่าน upload key แล้วส่งแอพขึ้น Play Store และ sign ไปหา user
PEPK tool (Play Encrypt Private Key tool): เป็น tool ที่เอาไว้ gen private key ส่งให้ Google Play เก็บไว้ในที่ปลอดภัย
ซึ่งเราสามารถ upgrade key เอง หรือผ่าน Play Store ก็ได้
algorithm ทื่ใช้: pentest บอกว่าไม่ strong พอ ควรใช้ RSASSA-PSS with 4096 bits ขึ้นไป แล้ว algorithm ที่มีอยู่ล่ะ
- Play App Signing: RSA key with 4096 bits (RSASSA_PKCS1V15)
- Android Studio: RSA key with 1024 bits (RSASSA_PKCS1V15)
.
🟢 Key upgrades on Google Play
- Android version 13 ขึ้นไป: support 3.1, upgrade มาใช้ key ใหม่
- Android version 7 - 12: ใช้ key เก่า ให้ Google Play ดูให้
- Android version ตํ่ากว่า 7: เป็น v1 ไม่แนะนำในด้านความปลอดภัย
Source Stamp Signer มาจาก Google Play ดูว่าแอพเราถูก download จากไหน
Post-key rotation เพิ่ม SHA-1, SHA-256 ห้ามลบ key เก่าเดี๋ยวแตก
อยาก gen ทำยังไง? JetBrains java runtime ได้ keystore ที่แข็งแรงมากขึ้น
.
🟢 APK Signature analysis
- apksigner เป็น tool ที่เอา apk มาแกะ แบบไม่ reverse engineer เรียก command line เพื่อ signing เอามา verify signature ได้
- apksigtool: เป็น 3rd-party บอก signing algorithm เน้น algorithm ที่ใช้ เอาไป check ได้
.
🟢 สรุป
- Google Play support key rotation ได้ / access data ด้วย signing key เดียวกัน ทำให้ส่งข้อมูลโดยไม่ผ่าน intent ได้
- ใช้ robust signature algorithm กับ key ของเรา
- ให้เก็บ signing key และ upload key แยกกัน
- เปิดใช้งาน v3 และ v4 scheme
- update minSDK เพื่อปิดการใช้งาน v1 scheme ก็คือแอพขั้นตํ่าต้อง Android 7 ขึ้นไปล่ะ
- ทำ spp signing เพื่อป้องกันคนแก้โค้ดและแอบอ้าง แต่ไม่กัน reverse engineer นะ ยังสามารถ sign ของใหม่ทับอยู่
#siamstr
สรุป “Why App Signing Matters for Your Android Apps”
จากงาน Android Bangkok Conference 2024

การบิ้วแอพส่งขึ้น store เป็น process ที่สำคัญ ในการ deliver feature ให้ user ซึ่งไฟล์ aab ของเราสร้างจาก Android Studio เราอัพขึ้น Google Play จะ convert aab ของเราเป็น apk ที่เหมาะสมของ device นั้น ๆ เพราะแต่ละเครื่องมี spec ต่างกัน ก่อนแอพจะอยู่ที่ device จริง และมีอะไรบางอย่างที่เราไม่เคยรู้มาก่อน
Benefit จากการทำ signing
- Integrity: confirm package ว่ามาจากเราจริง ๆ นะ
- Security: ป้องกันคนเอาไฟล์แอพของเราไปแอบอ้างเป็นเจ้าของ sign ทับ เพราะ signature file พังแล้ว
ปกติเราจะบิ้วแอพผ่าน Android Studio หรือบางที่ก็จะมี CI/CD ทั้งสองแบบผ่าน signing key ออกมาเป็นแอพที่เป็น apk หรือ aab
.
🟢 APK Signature Scheme
script การยืนยันตัวตน และ code ข้างในยังเป็นเหมือนเดิม แบ่งจากการทำ signing
- v1 Scheme: มาจาก Java รองรับ code Java เท่านั้น และถ้าเปลี่ยน resource แต่ตัว signature ยังเหมือนเดิม → version 1
- v2+ Scheme: ครอบคลุมทุกไฟล์ เป็นการแทรก APK Signing block เข้าไป → version 2, 3, 3.1, 4
Signature Algorithm: มีหลายอันมาก ๆ หลัก ๆ เป็นพวก RSA, EC และ DSA
⭐ APK Signature Scheme v1: Android ทุก version support อันนี้เสมอ แต่ไม่แนะนำให้ใช้ เนื่องจากเรื่องความปลอดภัย และ performance
⭐ APK Signature Scheme v2: support Android 7.0 ขึ้นไป ถ้า Android version ตํ่ากว่านี้เป็น APK Signature Scheme v1 ข้อดีเลย คือ แอพติดตั้งไวขึ้น, verify integrity, apk file เล็กลง
⭐ APK Signature Scheme v3: suport Android 9 ขึ้นไป อยู่บนพื้นฐาน APK Signature Scheme v2 มี feature เพิ่ม คือ key rotation เป็นการ rotate keystore ถ้าสมมุติแอพเราตั้งมาแล้ว 10 ปี แล้ว key มัน expire ล่ะ ทำให้แอพของเราติดตั้งลง Android device ไม่ได้เลย ดังนั้นจะต้อง upgrade key ตัวใหม่เอาไปได้ และมี algorithm ที่แข็งแรงมากขึ้น ใช้ของใหม่ทับของเก่าได้เลย อีกทั้งมีหลักการ proof-of ใด ๆ ที่ชาว web3 จะได้ยิน proof-of-work เอย proof-of-stack เอย อันนี้เป็น proof-of-rotation รู้จัก key ก่อนหน้า ถึงจะเชื่อมของใหม่ได้
⭐ APK Signature Scheme v4: รองรับ Android 11 ขึ้นไป ทำให้ sign app ได้เร็วขึ้น load บางส่วน และ verify บางส่วนก่อนได้ อีกทั้งใช้ markle hash tree ในการทำ verify ได้เร็วขึ้น ทำให้ทำงานเร็วขึ้นอีกด้วย และมีไฟล์ .idsig แยกมาด้วย
⭐ APK Signature Scheme v3.1: รองรับ Android 13 ขึ้นไป สงสัยล่ะสิทำไมไม่ version 5 อะไรงี้ เพราะว่าแก้บัค version 3 แล้วก็ backward version 3 ให้ทำงานกับ version 4 ได้ด้วย
.
ถ้าเราอยากใช้ทำยังไง? สามารถไปเปิดที่ gradle ได้นะ ใส่ enableV3Signing กับ enableV4Signing โดยตอนที่ pentest ใช้ version 3 ผ่าน
.
🟢 Play App Signing
ใช้ key sign เป็น apk ให้ สามารถใช้ key เดิมได้ แต่แนะนำให้ generate upload key ซึ่งใช้ได้ตลอดเมื่อ build app ส่งเฉพาะ Google Play
การทำงาน signing บิ้วแอพผ่าน upload key แล้วส่งแอพขึ้น Play Store และ sign ไปหา user
PEPK tool (Play Encrypt Private Key tool): เป็น tool ที่เอาไว้ gen private key ส่งให้ Google Play เก็บไว้ในที่ปลอดภัย
ซึ่งเราสามารถ upgrade key เอง หรือผ่าน Play Store ก็ได้
algorithm ทื่ใช้: pentest บอกว่าไม่ strong พอ ควรใช้ RSASSA-PSS with 4096 bits ขึ้นไป แล้ว algorithm ที่มีอยู่ล่ะ
- Play App Signing: RSA key with 4096 bits (RSASSA_PKCS1V15)
- Android Studio: RSA key with 1024 bits (RSASSA_PKCS1V15)
.
🟢 Key upgrades on Google Play
- Android version 13 ขึ้นไป: support 3.1, upgrade มาใช้ key ใหม่
- Android version 7 - 12: ใช้ key เก่า ให้ Google Play ดูให้
- Android version ตํ่ากว่า 7: เป็น v1 ไม่แนะนำในด้านความปลอดภัย
Source Stamp Signer มาจาก Google Play ดูว่าแอพเราถูก download จากไหน
Post-key rotation เพิ่ม SHA-1, SHA-256 ห้ามลบ key เก่าเดี๋ยวแตก
อยาก gen ทำยังไง? JetBrains java runtime ได้ keystore ที่แข็งแรงมากขึ้น
.
🟢 APK Signature analysis
- apksigner เป็น tool ที่เอา apk มาแกะ แบบไม่ reverse engineer เรียก command line เพื่อ signing เอามา verify signature ได้
- apksigtool: เป็น 3rd-party บอก signing algorithm เน้น algorithm ที่ใช้ เอาไป check ได้
.
🟢 สรุป
- Google Play support key rotation ได้ / access data ด้วย signing key เดียวกัน ทำให้ส่งข้อมูลโดยไม่ผ่าน intent ได้
- ใช้ robust signature algorithm กับ key ของเรา
- ให้เก็บ signing key และ upload key แยกกัน
- เปิดใช้งาน v3 และ v4 scheme
- update minSDK เพื่อปิดการใช้งาน v1 scheme ก็คือแอพขั้นตํ่าต้อง Android 7 ขึ้นไปล่ะ
- ทำ spp signing เพื่อป้องกันคนแก้โค้ดและแอบอ้าง แต่ไม่กัน reverse engineer นะ ยังสามารถ sign ของใหม่ทับอยู่
#siamstr