Tandatangan Apl Android: Cara Ia Berfungsi dan Mengapa Ia Penting
Setiap kali anda memasang apl pada telefon Android anda, pemeriksaan keselamatan yang senyap tetapi kritikal berlaku di latar belakang. Telefon anda mengesahkan tandatangan digital pakej APK. Jabat tangan kriptografi inilah yang menghalang penggodam berniat jahat daripada "meracuni" apl anda dengan perisian hasad sambil memastikan pembangun boleh menolak kemas kini tanpa kehilangan identiti mereka.
Jika anda menulis apl, tandatangan ialah sesuatu yang anda perlu betulkan; jika anda hanya suka bermain-main dengan Android, ia adalah salah satu bahagian sistem yang paling memuaskan untuk difahami. Walau apa pun, cara tandatangan apl berfungsi berbaloi dengan masa anda. Di bawah ini kami membincangkan teknologi, cara skim penandatanganan berkembang, dan cara anda boleh mengesahkan sijil secara manual dalam talian.
- Mengapa setiap apl Android mesti ditandatangani dan kriptografi yang terlibat (RSA / EC).
- Perbezaan antara skim tandatangan v1 (JAR), v2, v3 dan v4 dan yang mana satu apl anda patut gunakan hari ini.
- Cara Android memutuskan sama ada untuk membenarkan kemas kini berdasarkan kesinambungan tandatangan.
- Cara putaran kunci membolehkan pembangun menukar kunci tandatangan mereka tanpa memecahkan pemasangan sedia ada.
- Cara untuk mengesahkan sendiri mana-mana tandatangan APK, pada baris arahan atau dengan pengesah berasaskan pelayar kami.
Apakah itu App Signing?
Pada terasnya, tandatangan apl ialah proses di mana pembangun menggunakan Kunci Peribadi untuk menjana blok tandatangan bagi fail apl mereka. Kunci Awam yang sepadan kemudiannya dibenamkan dalam APK dalam folder META-INF. Apabila telefon anda cuba memasang apl, ia menggunakan kunci awam untuk menyemak sama ada tandatangan itu sepadan dengan kandungan fail.
Ini menyediakan dua sifat utama:
- Kebolehubahan: Jika satu bait kod apl ditukar (cth., oleh Trojan), tandatangan tidak lagi sepadan dengan fail dan Android akan menolak untuk memasangnya.
- Bukti Identiti: Jika apl cuba mengemas kini yang sedia ada, tandatangan mereka mesti sepadan. Inilah sebabnya anda tidak boleh memasang apl Facebook yang diusik berbanding apl rasmi.
Evolusi Skim Menandatangani
Google telah terus meningkatkan mekanisme tandatangan untuk meningkatkan kelajuan dan keselamatan:
- V1 (Tandatangan Balang): Menandatangani fail individu dalam APK (ZIP). Ini lambat kerana OS perlu unzip dan menyemak setiap fail. Ia juga terdedah kepada manipulasi ZIP tertentu.
- V2 (Skim Tandatangan APK): Menandatangani keseluruhan blok binari APK. Ia tidak memerlukan unzip untuk mengesahkan, menjadikannya sangat pantas. Ia diperkenalkan dalam Android 7.0 (Nougat).
- V3 (Putaran Kekunci): Memanjangkan V2 dengan menambahkan "keturunan" kunci. Ia membolehkan pembangun membuktikan bahawa kunci baharu ialah pengganti yang dibenarkan kepada kunci yang lebih lama. Diperkenalkan dalam Android 9.0 (Pie).
- V4 (Penandatanganan penstriman): Direka khusus untuk pemasangan tambahan, membenarkan apl disahkan semasa ia masih dimuat turun melalui USB atau Wi-Fi.
Mengapa Sijil Penting untuk Pemuatan Side
Apabila anda memuat turun APK daripada sumber tidak rasmi, Pencincangan Sijil ialah kawan baik anda. Cap jari sijil (seperti cincang SHA-256) secara unik mengenal pasti kunci tandatangan pembangun. Setiap apl menyimpan kunci tandatangan yang sama merentas semua kemas kininya, jadi anda boleh membandingkan cap jari APK dengan nilai diterbitkan pembangun untuk mengesahkan ia tulen.
Jika anda mengesyaki APK adalah palsu, anda harus menjalankannya melalui Pengesah APK Dalam Talian kami. Alat kami akan menunjukkan kepada anda:
- Nama Biasa (CN) penandatangan (cth., "Android").
- Tempoh Sah sijil.
- Cap jari SHA-1/SHA-256.
Cara Android Mengesahkan Tandatangan pada Masa Pemasangan
Langkah "sahkan sijil" sering ditonjolkan sehinggakan ia berbaloi untuk melihat perkara yang sebenarnya dilakukan oleh OS apabila anda mengetik APK dan Android memutuskan sama ada untuk memasangnya:
- Buka APK sebagai ZIP dan cari blok tandatangan. Untuk tandatangan v2/v3 yang merupakan blok berstruktur sejurus sebelum direktori pusat; untuk skim v1 warisan ia adalah kandungan META-INF/*.RSA, *.DSA atau *.EC.
- Kirakan ringkasan SHA-256 bagi setiap bait APK yang lain. Blok tandatangan dikecualikan daripada ringkasannya sendiri; semua yang lain dicincang dalam ketulan yang ditentukan.
- Sahkan setiap ringkasan bahagian terhadap ringkasan yang direkodkan dalam blok tandatangan. Jika walaupun satu bait telah diubah sejak pembangun menandatangani fail, ringkasan tidak akan sepadan dan pemasangan ditolak dengan ralat "Apl tidak dipasang" generik.
- Sahkan blok tandatangan itu sendiri dihasilkan dengan kunci peribadi sijil. Kunci awam sijil digunakan untuk menyemak tandatangan kriptografi dalam blok. Semakan yang berjaya bermakna sesiapa yang menandatangani fail memiliki kunci peribadi yang dipasangkan dengan sijil ini.
- Bandingkan cap jari sijil dengan mana-mana pemasangan sedia ada dengan nama pakej yang sama. Jika pakej sudah dipasang dan APK baharu ditandatangani dengan sijil berbeza, pemasangan ditolak dengan INSTALL_FAILED_UPDATE_INCOMPATIBLE. Ini ialah pertahanan anti-penyamaran utama OS: pelakon yang berniat jahat tidak boleh menggantikan apl bank anda dengan salinan mereka sendiri melainkan mereka turut mencuri kunci tandatangan bank.
Tiada satu pun daripada ini membuktikan pembangun itu boleh dipercayai, cuma fail yang akan anda pasangkan adalah sama bait dengan apa yang mereka tandatangani dan tiada pihak lain telah mengganggunya. Percaya kepada pembangun ialah keputusan yang berasingan, dan keputusan yang anda buat dengan memutuskan sumber mana yang anda pasang.
Maksud "Tandatangan Tidak Padan" Sebenarnya
Satu-satunya kejutan yang paling biasa orang ramai lakukan semasa pemuatan sisi ialah ralat "tanda tidak sepadan" semasa kemas kini. Inilah yang sebenarnya berlaku:
- Anda telah memasang Apl X versi 1.0 daripada Gedung Play.
- Anda memuat turun Apl X versi 1.1 daripada sumber bukan Main.
- OS melihat nama pakej yang sama (com.example.app tetapi APK ditandatangani dengan sijil yang berbeza (kunci tandatangan sumber sampingan, bukan milik penerbit asal)). Ia enggan memasang.
Dua cara ini berlaku dalam amalan:
- APK pihak ketiga ialah benar-benar daripada penerbit yang berbeza, contohnya salinan "diubah suai" atau "ditampal". Menolak pemasangan adalah kelakuan yang betul; memasangnya bermakna mempercayai orang yang tidak dikenali dengan data yang sama yang telah disentuh oleh apl bank anda.
- APK pihak ketiga ialah muat naik semula APK rasmi, tetapi sistem Tandatangan Apl Play Google menandatangani muat turun setiap pengguna dengan pembungkus kunci muat naik pengguna. Dua peranti kadangkala boleh melihat data tandatangan yang sedikit berbeza untuk versi apl konseptual yang sama. Dalam kes itu, cap jari sijil pada akar masih sepadan; anda boleh mengesahkan dengan Pengesah APK kami.
Jika cap jari sijil sungguh berbeza daripada pemasangan sedia ada anda, satu-satunya cara ke hadapan ialah menyahpasang salinan semasa terlebih dahulu (kehilangan datanya) sebelum memuatkan sisi ganti, jangan sekali-kali melumpuhkan pengesahan tandatangan.
Menjana Kunci Tandatangan Anda Sendiri (Untuk Pembangun)
Jika anda sedang membina apl Android, anda akhirnya perlu menandatangani binaan anda sendiri. Perintah satu baris standard menggunakan keytool daripada SDK Java ialah:
keytool -genkeypair -v \
-keystore my-release.keystore \
-alias my-app -keyalg RSA -keysize 2048 \
-validity 10000
Dua perkara yang perlu diketahui:
- kesahan penting: 10000 hari (kira-kira 27 tahun) adalah nilai konvensional kerana OS menganggap kemas kini yang ditandatangani dengan kunci hampir tamat tempoh atau tamat tempoh sebagai terjejas. Hasilkan kunci tahan lama sekali dan lindunginya.
- Setelah diterbitkan, anda tidak boleh menukar kunci dengan mudah. Skim penandatanganan v3 menambah kunci putaran sebagai ciri eksplisit: sijil lama "memberkati" yang baharu melalui bukti yang disimpan, membenarkan OS menerima kemas kini daripada kunci baharu sambil mengekalkan kesinambungan identiti. Tanpa v3, kehilangan kunci asal bermakna mengasuh semua pemasangan sedia ada.
Untuk binaan ujian termuat sisi, stor kunci nyahpepijat yang tidak ditandatangani adalah baik; untuk pengeluaran, gunakan stor kunci kesahan panjang yang dilindungi kata laluan yang disimpan dalam sandaran luar talian.
Sahkan Identiti Apl Seperti Pro
Jangan percaya nama fail generik. Semak inti kriptografi APK anda dalam beberapa saat.
Sahkan Sijil SekarangPerangkap Penandatanganan Biasa
- Sijil yang ditandatangani sendiri: Kebanyakan apl Android ditandatangani sendiri. Tidak seperti SSL untuk tapak web, tiada pihak berkuasa pusat untuk menandatangani apl Android. Anda mesti mempercayai pembangun secara langsung.
- Apl Sijil Nyahpepijat: yang dibina untuk ujian menggunakan kunci "nyahpepijat" generik. Apl ini tidak boleh dikeluarkan kepada umum dan disekat oleh banyak penapis keselamatan.
- Kehilangan Kunci: Jika pembangun kehilangan stor kunci peribadi mereka, mereka boleh tidak pernah mengemas kini apl mereka semula. Mereka perlu mengeluarkan apl "Baharu" dengan nama pakej yang berbeza.
Memilih Skim Tandatangan yang Tepat untuk SDK Sasaran Anda
Tandatangan apl secara senyap menyokong banyak keselamatan Android. Setelah perhubungan kunci persendirian/awam mengklik, anda boleh menilai apl yang dimuatkan sisi berdasarkan meritnya dan mengesahkan bahawa perkara yang anda pasang tidak diubah sejak pembangun menandatanganinya. Untuk maklumat lanjut tentang dalaman Android, lihat panduan kepada format XAPK kami.