Penandatanganan Aplikasi Android: Cara Kerja dan Mengapa Penting
Setiap kali Anda memasang aplikasi di ponsel Android, pemeriksaan keamanan penting namun senyap terjadi di latar belakang. Ponsel Anda memverifikasi tanda tangan digital paket APK. Jabat tangan kriptografi inilah yang mencegah peretas jahat "meracuni" aplikasi Anda dengan malware sekaligus memastikan pengembang dapat mengirimkan pembaruan tanpa kehilangan identitas mereka.
Jika Anda menulis aplikasi, penandatanganan adalah sesuatu yang harus Anda lakukan dengan benar; jika Anda hanya ingin mengutak-atik Android, ini adalah salah satu bagian sistem yang paling memuaskan untuk dipahami. Apa pun pilihannya, cara kerja penandatanganan aplikasi sepadan dengan waktu Anda. Di bawah ini kami membahas teknologinya, bagaimana skema penandatanganan berkembang, dan bagaimana Anda dapat memverifikasi sertifikat secara manual online.
- Mengapa setiap aplikasi Android harus ditandatangani dan kriptografi apa yang terlibat (RSA/EC).
- Perbedaan antara skema tanda tangan v1 (JAR), v2, v3, dan v4, dan skema mana yang harus digunakan aplikasi Anda saat ini.
- Cara Android memutuskan apakah akan mengizinkan pembaruan berdasarkan kontinuitas tanda tangan.
- Bagaimana rotasi kunci memungkinkan pengembang mengubah kunci penandatanganannya tanpa merusak instalasi yang sudah ada.
- Cara memverifikasi sendiri tanda tangan APK apa pun, pada baris perintah atau dengan pemverifikasi berbasis browser kami.
Apa itu Penandatanganan Aplikasi?
Pada intinya, penandatanganan aplikasi adalah proses di mana pengembang menggunakan Kunci Pribadi untuk menghasilkan blok tanda tangan untuk file aplikasi mereka. Kunci Publik yang sesuai kemudian tertanam dalam APK di dalam folder META-INF. Saat ponsel Anda mencoba menginstal aplikasi, ponsel menggunakan kunci publik untuk memeriksa apakah tanda tangannya cocok dengan konten file.
Ini memberikan dua properti utama:
- Kekekalan: Jika satu byte kode aplikasi diubah (misalnya oleh Trojan), tanda tangan tidak akan lagi cocok dengan file tersebut, dan Android akan menolak untuk menginstalnya.
- Bukti Identitas: Jika suatu aplikasi mencoba memperbarui aplikasi yang sudah ada, tanda tangannya harus cocok. Inilah sebabnya mengapa Anda tidak dapat memasang aplikasi Facebook yang dirusak daripada aplikasi resmi.
Evolusi Skema Penandatanganan
Google terus meningkatkan mekanisme penandatanganan untuk meningkatkan kecepatan dan keamanan:
- V1 (Penandatanganan Jar): Menandatangani file individual dalam APK (ZIP). Ini lambat karena OS harus mengekstrak dan memeriksa setiap file. Ini juga rentan terhadap manipulasi ZIP tertentu.
- V2 (Skema Tanda Tangan APK): Menandatangani seluruh blok biner APK. Tidak perlu membuka ritsleting untuk memverifikasi, membuatnya sangat cepat. Itu diperkenalkan di Android 7.0 (Nougat).
- V3 (Rotasi Kunci): Memperluas V2 dengan menambahkan "silsilah" kunci. Hal ini memungkinkan pengembang untuk membuktikan bahwa kunci baru adalah penerus resmi dari kunci lama. Diperkenalkan di Android 9.0 (Pai).
- V4 (Penandatanganan streaming): Dirancang khusus untuk instalasi tambahan, memungkinkan aplikasi diverifikasi saat masih diunduh melalui USB atau Wi-Fi.
Mengapa Sertifikat Penting untuk Sideloading
Saat Anda mengunduh APK dari sumber tidak resmi, Hashing Sertifikat adalah teman terbaik Anda. Sidik jari sertifikat (seperti hash SHA-256) secara unik mengidentifikasi kunci penandatanganan pengembang. Setiap aplikasi menyimpan kunci penandatanganan yang sama di semua pembaruannya, sehingga Anda dapat membandingkan sidik jari APK dengan nilai yang dipublikasikan pengembang untuk mengonfirmasi keasliannya.
Jika Anda mencurigai suatu APK palsu, Anda harus menjalankannya melalui Pemverifikasi APK Online kami. Alat kami akan menunjukkan kepada Anda:
- Nama Umum (CN) penandatangan (misalnya, "Android").
- Masa Berlaku dari sertifikat.
- Sidik jari SHA-1/SHA-256.
Bagaimana Android Memverifikasi Tanda Tangan pada Waktu Penginstalan
Langkah "verifikasi sertifikat" sering kali diabaikan sehingga ada baiknya menelusuri apa yang sebenarnya dilakukan OS saat Anda mengetuk APK dan Android memutuskan apakah akan menginstalnya:
- Buka APK sebagai ZIP dan temukan blok penandatanganan. Untuk tanda tangan v2/v3 yang merupakan blok terstruktur tepat sebelum direktori pusat; untuk skema legacy v1 isinya META-INF/*.RSA, *.DSA, atau *.EC.
- Hitung intisari SHA-256 dari setiap byte APK lainnya. Blok penandatanganan dikecualikan dari intisarinya sendiri; segala sesuatu yang lain di-hash dalam potongan yang ditentukan.
- Verifikasi intisari setiap potongan terhadap intisari yang dicatat di blok penandatanganan. Jika bahkan satu byte pun telah diubah sejak pengembang menandatangani file, intisari tidak akan cocok dan instalasi ditolak dengan kesalahan umum "Aplikasi tidak diinstal".
- Verifikasi bahwa blok penandatanganan itu sendiri dibuat dengan kunci pribadi sertifikat. Kunci publik sertifikat digunakan untuk memeriksa tanda tangan kriptografi di blok. Pemeriksaan yang berhasil berarti siapa pun yang menandatangani file tersebut memiliki kunci pribadi yang dipasangkan dengan sertifikat ini.
- Bandingkan sidik jari sertifikat dengan instalasi apa pun yang ada dengan nama paket yang sama. Jika paket sudah terinstal dan APK baru ditandatangani dengan sertifikat yang berbeda, instalasi ditolak dengan INSTALL_FAILED_UPDATE_INCOMPATIBLE. Ini adalah pertahanan utama anti-peniruan identitas OS: pelaku jahat tidak dapat mengganti aplikasi bank Anda dengan salinannya sendiri kecuali mereka juga mencuri kunci penandatanganan bank.
Semua ini tidak membuktikan bahwa pengembang dapat dipercaya, hanya saja file yang akan Anda instal identik dengan byte yang mereka tandatangani dan tidak ada pihak lain yang merusaknya. Kepercayaan pada pengembang adalah keputusan terpisah, dan keputusan yang Anda buat dengan memutuskan dari sumber mana Anda menginstal.
Apa Arti Sebenarnya "Ketidakcocokan Tanda Tangan".
Satu-satunya kejutan paling umum yang dialami orang ketika melakukan sideload adalah kesalahan "ketidakcocokan tanda tangan" pada pembaruan. Inilah yang sebenarnya terjadi:
- Anda telah menginstal Aplikasi X versi 1.0 dari Play Store.
- Anda mengunduh Aplikasi X versi 1.1 dari sumber non-Play.
- OS melihat nama paket yang sama (com.example.app namun APK ditandatangani dengan sertifikat yang berbeda (kunci penandatanganan sumber samping, bukan penerbit asli)). Ia menolak untuk menginstal.
Ada dua cara hal ini terjadi dalam praktiknya:
- APK pihak ketiga adalah asli dari penerbit lain, misalnya salinan yang "dimodifikasi" atau "ditambal". Menolak instalasi adalah tindakan yang benar; menginstalnya berarti memercayai orang asing dengan data yang sama yang telah disentuh oleh aplikasi bank Anda.
- APK pihak ketiga adalah unggahan ulang APK resmi, namun sistem Penandatanganan Aplikasi Google Play menandatangani setiap download pengguna dengan wrapper kunci unggah milik pengguna. Dua perangkat terkadang dapat melihat data tanda tangan yang sedikit berbeda untuk versi aplikasi konseptual yang sama. Dalam hal ini sidik jari sertifikat pada akar masih cocok; Anda dapat memverifikasi dengan Pemverifikasi APK kami.
Jika sidik jari sertifikat sungguh-sungguh berbeda dari instalasi Anda yang sudah ada, satu-satunya cara untuk maju adalah dengan menghapus salinan saat ini terlebih dahulu (kehilangan datanya) sebelum melakukan sideload penggantinya, jangan pernah menonaktifkan verifikasi tanda tangan.
Menghasilkan Kunci Penandatanganan Anda Sendiri (Untuk Pengembang)
Jika Anda membuat aplikasi Android, pada akhirnya Anda harus menandatangani versi Anda sendiri. Perintah satu baris standar yang menggunakan keytool dari Java SDK adalah:
keytool -genkeypair -v \
-keystore my-release.keystore \
-alias my-app -keyalg RSA -keysize 2048 \
-validity 10000
Dua hal yang perlu diketahui:
- keabsahan penting: 10.000 hari (kira-kira 27 tahun) adalah nilai konvensional karena OS memperlakukan pembaruan yang ditandatangani dengan kunci yang hampir kedaluwarsa atau kedaluwarsa sebagai telah disusupi. Hasilkan kunci berumur panjang satu kali dan lindungi.
- Setelah dipublikasikan, Anda tidak dapat dengan mudah berpindah kunci. Skema penandatanganan v3 menambahkan kunci rotasi sebagai fitur eksplisit: sertifikat lama "memberkati" sertifikat baru melalui bukti yang disimpan, memungkinkan OS menerima pembaruan dari kunci baru sambil menjaga kesinambungan identitas. Tanpa v3, kehilangan kunci asli berarti menghentikan semua instalasi yang ada.
Untuk build pengujian yang di-sideload, keystore debug yang tidak ditandatangani dapat digunakan; untuk produksi, gunakan keystore validitas panjang yang dilindungi kata sandi dan disimpan dalam cadangan offline.
Verifikasi Identitas Aplikasi Seperti Profesional
Jangan percaya nama file umum. Periksa inti kriptografi APK Anda dalam hitungan detik.
Verifikasi Sertifikat SekarangKesalahan Umum dalam Penandatanganan
- Sertifikat yang Ditandatangani Sendiri: Sebagian besar aplikasi Android ditandatangani sendiri (self-signed). Berbeda dengan SSL untuk situs web, tidak ada otoritas pusat untuk penandatanganan aplikasi Android. Anda harus mempercayai pengembangnya secara langsung.
- Sertifikat Debug: Aplikasi yang dibuat untuk pengujian menggunakan kunci "debug" umum. Aplikasi ini tidak boleh dirilis ke publik dan diblokir oleh banyak filter keamanan.
- Kerugian Kunci: Jika pengembang kehilangan keystore pribadinya, mereka dapat memperbarui tidak pernah aplikasinya lagi. Mereka harus merilis aplikasi "Baru" dengan nama paket yang berbeda.
Memilih Skema Penandatanganan yang Tepat untuk SDK Target Anda
Penandatanganan aplikasi secara diam-diam mendasari sebagian besar keamanan Android. Setelah hubungan kunci pribadi/publik diklik, Anda dapat menilai aplikasi yang di-sideload berdasarkan manfaatnya dan mengonfirmasi bahwa apa yang Anda instal belum diubah sejak pengembang menandatanganinya. Untuk informasi lebih lanjut tentang internal Android, lihat panduan untuk format XAPK kami.