Pag-sign ng Android App: Paano Ito Gumagana at Bakit Ito Mahalaga
Sa tuwing mag-i-install ka ng app sa iyong Android phone, isang tahimik ngunit kritikal na pagsusuri sa seguridad ang nangyayari sa background. Bine-verify ng iyong telepono ang digital na lagda ng APK package. Ang cryptographic na handshake na ito ang pumipigil sa mga nakakahamak na hacker na "lason" ang iyong mga app gamit ang malware habang tinitiyak na makakapag-push ang mga developer ng mga update nang hindi nawawala ang kanilang pagkakakilanlan.
Kung magsusulat ka ng mga app, ang pag-sign ay isang bagay na kailangan mo lang gawin nang tama; kung gusto mo lang makipag-usap sa Android, isa ito sa pinakakasiya-siyang bahagi ng system na maunawaan. Alinmang paraan, sulit ang kung paano gumagana ang pag-sign ng app sa iyong oras. Sa ibaba ay tinatalakay namin ang teknolohiya, kung paano umunlad ang mga scheme ng pagpirma, at kung paano mo magagawa ang manu-manong i-verify ang mga sertipiko online.
- Bakit kailangang pirmahan ang bawat Android app at kung anong cryptography ang kasangkot (RSA / EC).
- Ang pagkakaiba sa pagitan ng v1 (JAR), v2, v3, at v4 signature scheme, at kung alin ang dapat gamitin ng iyong app ngayon.
- Paano nagpapasya ang Android kung papayagan ang isang update batay sa pagpapatuloy ng lagda.
- Paano hinahayaan ng pag-ikot ng key ang isang developer na baguhin ang kanilang signing key nang hindi sinisira ang mga kasalukuyang pag-install.
- Paano i-verify ang anumang lagda ng APK sa iyong sarili, sa command line o sa aming verifier na nakabatay sa browser.
Ano ang App Signing?
Sa kaibuturan nito, ang pag-sign ng app ay isang proseso kung saan gumagamit ang isang developer ng Pribadong Susi upang bumuo ng signature block para sa mga file ng kanilang app. Ang kaukulang Pampublikong Susi ay naka-embed sa APK sa loob ng META-INF folder. Kapag sinubukan ng iyong telepono na i-install ang app, ginagamit nito ang pampublikong key upang tingnan kung tumutugma ang lagda sa nilalaman ng file.
Nagbibigay ito ng dalawang pangunahing katangian:
- Kawalang pagbabago: Kung binago ang isang byte ng code ng app (hal., ng isang Trojan), hindi na tutugma ang signature sa file, at tatanggihan ng Android na i-install ito.
- Katibayan ng Pagkakakilanlan: Kung sinubukan ng isang app na i-update ang isang umiiral na, dapat tumugma ang kanilang mga lagda. Ito ang dahilan kung bakit hindi ka makakapag-install ng na-tamper na Facebook app sa opisyal na app.
Ebolusyon ng mga Scheme sa Paglagda
Patuloy na in-upgrade ng Google ang mekanismo ng pag-sign upang mapahusay ang bilis at seguridad:
- Ang V1 (Pag-sign ng Jar): ay pumipirma ng mga indibidwal na file sa loob ng APK (ZIP). Mabagal ito dahil kailangang i-unzip ng OS at suriin ang bawat file. Mahina rin ito sa ilang partikular na manipulasyon ng ZIP.
- Pinirmahan ng V2 (APK Signature Scheme): ang buong binary block ng APK. Hindi ito nangangailangan ng pag-unzip upang ma-verify, na ginagawa itong napakabilis. Ipinakilala ito sa Android 7.0 (Nougat).
- Pinapalawak ng V3 (Pag-ikot ng Key): ang V2 sa pamamagitan ng pagdaragdag ng "lineage" ng mga key. Nagbibigay-daan ito sa isang developer na patunayan na ang isang bagong key ay ang awtorisadong kahalili sa isang mas luma. Ipinakilala sa Android 9.0 (Pie).
- V4 (Streaming signing): Partikular na idinisenyo para sa mga incremental na pag-install, na nagpapahintulot sa mga app na ma-verify habang dina-download pa rin ang mga ito sa pamamagitan ng USB o Wi-Fi.
Bakit Mahalaga ang Mga Sertipiko para sa Sideloading
Kapag nag-download ka ng APK mula sa isang hindi opisyal na pinagmulan, ang Hashing ng Sertipiko ay ang iyong matalik na kaibigan. Ang isang fingerprint ng certificate (tulad ng SHA-256 hash) ay natatanging kinikilala ang signing key ng developer. Ang bawat app ay nagpapanatili ng parehong signing key sa lahat ng mga update nito, kaya maaari mong ihambing ang fingerprint ng isang APK sa na-publish na halaga ng developer upang makumpirma na ito ay totoo.
Kung pinaghihinalaan mong peke ang isang APK, dapat mo itong patakbuhin sa aming Online na Tagasuri ng APK. Ipapakita sa iyo ng aming tool:
- Ang Karaniwang Pangalan (CN) ng lumagda (hal., "Android").
- Ang Panahon ng Bisa ng certificate.
- Ang Mga fingerprint ng SHA-1/SHA-256.
Paano Bine-verify ng Android ang isang Lagda sa Oras ng Pag-install
Ang hakbang na "i-verify ang certificate" ay madalas na binabanggit kaya sulit na talakayin kung ano talaga ang ginagawa ng OS kapag nag-tap ka ng APK at nagpasya ang Android kung i-install ito:
- Buksan ang APK bilang ZIP at hanapin ang signing block. Para sa v2/v3 signature na isang structured block kaagad bago ang central directory; para sa legacy v1 scheme ito ay ang mga nilalaman ng META-INF/*.RSA, *.DSA, o *.EC.
- Compute SHA-256 digest ng bawat iba pang byte ng APK. Ang signing block ay hindi kasama sa sarili nitong digest; lahat ng iba pa ay na-hash sa mga tinukoy na chunks.
- I-verify ang digest ng bawat chunk laban sa mga digest na naitala sa signing block. Kung kahit isang byte ay binago mula noong pirmahan ng developer ang file, hindi tutugma ang mga digest at tinanggihan ang pag-install na may generic na error na "Hindi naka-install ang app."
- I-verify na ang signing block mismo ay ginawa gamit ang pribadong key ng certificate. Ang public key ng certificate ay ginagamit upang suriin ang cryptographic signature sa block. Ang isang matagumpay na pagsusuri ay nangangahulugan na sinumang pumirma sa file ay nagtataglay ng pribadong key na ipinares sa certificate na ito.
- Ihambing ang fingerprint ng certificate sa anumang umiiral nang pag-install ng parehong pangalan ng package. Kung naka-install na ang package at nilagdaan ang bagong APK gamit ang ibang certificate, tatanggihan ang pag-install gamit ang INSTALL_FAILED_UPDATE_INCOMPATIBLE. Ito ang pangunahing depensa ng OS laban sa pagpapanggap: hindi maaaring palitan ng malisyosong aktor ang iyong bank app ng sarili nilang kopya maliban kung ninakaw din nila ang signing key ng bangko.
Wala sa mga ito ang nagpapatunay na mapagkakatiwalaan ang developer, tanging ang file na iyong ii-install ay byte-pareho sa kanilang nilagdaan at walang ibang partido ang nakialam dito. Ang pagtitiwala sa developer ay isang hiwalay na desisyon, at isa ang gagawin mo sa pamamagitan ng pagpapasya kung aling mga source ang iyong ini-install.
Ano Talaga ang Ibig sabihin ng "Signature Mismatch".
Ang nag-iisang pinakakaraniwang sorpresang tinatamaan ng mga tao kapag nag-sideload ay ang error na "signature mismatch" sa pag-update. Narito ang aktwal na nangyayari:
- Mayroon kang App X na bersyon 1.0 na naka-install mula sa Play Store.
- Nagda-download ka ng App X na bersyon 1.1 mula sa isang mapagkukunan na hindi Play.
- Nakikita ng OS ang parehong pangalan ng package (com.example.app ngunit ang APK ay nilagdaan ng ibang certificate (ang signing key ng side-source, hindi ng orihinal na publisher)). Tumanggi itong mag-install.
Dalawang paraan ito nangyayari sa pagsasanay:
- Ang third-party na APK ay tunay na mula sa ibang publisher, halimbawa isang "modded" o "patched" na kopya. Ang pagtanggi sa pag-install ay ang tamang pag-uugali; ang pag-install nito ay nangangahulugan ng pagtitiwala sa isang estranghero na may parehong data na nahawakan na ng app ng iyong bangko.
- Ang third-party na APK ay isang muling pag-upload ng opisyal na APK, ngunit nilalagdaan ng Google Play App Signing system ang pag-download ng bawat user gamit ang susi sa pag-upload wrapper ng user. Makakakita minsan ang dalawang device ng bahagyang magkaibang signature data para sa parehong konseptong bersyon ng app. Sa kasong iyon, tumutugma pa rin ang fingerprint ng certificate sa ugat; maaari mong i-verify sa aming Tagasuri ng APK.
Kung ang certificate fingerprint tunay ay naiiba sa iyong kasalukuyang pag-install, ang tanging paraan pasulong ay i-uninstall muna ang kasalukuyang kopya (nawawala ang data nito) bago i-sideload ang kapalit, hindi kailanman i-disable ang signature verification.
Pagbuo ng Iyong Sariling Signing Key (Para sa Mga Developer)
Kung gumagawa ka ng mga Android app, kakailanganin mong lagdaan ang sarili mong mga build. Ang karaniwang one-line command gamit ang keytool mula sa isang Java SDK ay:
keytool -genkeypair -v \
-keystore my-release.keystore \
-alias my-app -keyalg RSA -keysize 2048 \
-validity 10000
Dalawang bagay na dapat malaman:
- Mahalaga ang bisa: 10000 araw (humigit-kumulang 27 taon) ang karaniwang halaga dahil tinatrato ng OS ang mga update na nilagdaan gamit ang malapit nang mag-expire o nag-expire na key bilang nakompromiso. Bumuo ng isang mahabang buhay na susi nang isang beses at protektahan ito.
- Kapag na-publish na, hindi ka madaling makapagpalit ng mga key. Ang scheme ng pag-sign ng v3 ay nagdaragdag ng key pag-ikot bilang isang tahasang tampok: isang lumang certificate ang "nagpapala" ng bago sa pamamagitan ng isang naka-imbak na patunay, na nagpapahintulot sa OS na tumanggap ng mga update mula sa bagong key habang pinapanatili ang pagkakakilanlan na pagpapatuloy. Kung walang v3, ang pagkawala ng orihinal na key ay nangangahulugan ng pagkaulila sa lahat ng umiiral na pag-install.
Para sa mga sideloaded na pagtatayo ng pagsubok, maayos ang isang unsigned debug keystore; para sa produksyon, gumamit ng password-protected long-validity keystore na naka-store sa offline backup.
I-verify ang App Identity Tulad ng isang Pro
Huwag magtiwala sa mga generic na pangalan ng file. Suriin ang cryptographic na puso ng iyong mga APK sa ilang segundo.
I-verify ang Mga Sertipiko NgayonMga Karaniwang Pikit sa Pagpirma
- Mga Sertipikong Pinirmahan ng Sarili: Karamihan sa mga Android app ay self-signed. Hindi tulad ng SSL para sa mga website, walang sentral na awtoridad para sa pag-sign ng Android app. Dapat kang direktang magtiwala sa developer.
- Gumagamit ng generic na "debug" key ang Mga Sertipiko sa Pag-debug: Apps na binuo para sa pagsubok. Ang mga app na ito ay hindi dapat kailanman ilabas sa publiko at na-block ng maraming mga filter ng seguridad.
- Pagkawala ng Susi: Kung mawala ng developer ang kanilang pribadong keystore, maaari nilang i-update muli ng hindi kailanman ang kanilang app. Kailangan nilang maglabas ng "Bago" na app na may ibang pangalan ng package.
Pagpili ng Tamang Signing Scheme para sa Iyong Target na SDK
Ang pag-sign ng app ay tahimik na nagpapatibay sa maraming seguridad ng Android. Sa sandaling mag-click ang pribado/pampublikong key na relasyon, maaari mong hatulan ang isang sideloaded na app sa mga merito nito at kumpirmahin na ang ini-install mo ay hindi nabago mula noong lagdaan ito ng developer. Para sa higit pa sa Android internals, tingnan ang aming gabay sa format na XAPK.