Penandatanganan aplikasi memungkinkan pengembang untuk mengidentifikasi pembuat aplikasi dan memperbarui aplikasi mereka tanpa membuat antarmuka dan izin yang rumit. Setiap aplikasi yang dijalankan pada platform Android harus ditandatangani oleh pengembang . Aplikasi yang mencoba memasang tanpa ditandatangani akan ditolak oleh Google Play atau penginstal paket di perangkat Android.
Di Google Play, penandatanganan aplikasi menjembatani kepercayaan yang dimiliki Google dengan pengembang dan kepercayaan yang dimiliki pengembang dengan aplikasi mereka. Pengembang mengetahui bahwa aplikasi mereka disediakan, tidak dimodifikasi, ke perangkat Android; dan pengembang dapat dimintai pertanggungjawaban atas perilaku aplikasi mereka.
Di Android, penandatanganan aplikasi adalah langkah pertama untuk menempatkan aplikasi di Application Sandbox-nya. Sertifikat aplikasi yang ditandatangani menentukan ID pengguna mana yang dikaitkan dengan aplikasi mana; aplikasi yang berbeda berjalan di bawah ID pengguna yang berbeda. Penandatanganan aplikasi memastikan bahwa satu aplikasi tidak dapat mengakses aplikasi lain kecuali melalui IPC yang terdefinisi dengan baik.
Saat aplikasi (file APK) diinstal ke perangkat Android, Pengelola Paket memverifikasi bahwa APK telah ditandatangani dengan benar dengan sertifikat yang disertakan dalam APK tersebut. Jika sertifikat (atau, lebih tepatnya, kunci publik dalam sertifikat) cocok dengan kunci yang digunakan untuk menandatangani APK lain di perangkat, APK baru memiliki opsi untuk menentukan dalam manifes bahwa ia akan berbagi UID dengan yang lain secara serupa - APK yang ditandatangani.
Aplikasi dapat ditandatangani oleh pihak ketiga (OEM, operator, pasar alternatif) atau ditandatangani sendiri. Android menyediakan penandatanganan kode menggunakan sertifikat yang ditandatangani sendiri yang dapat dibuat oleh pengembang tanpa bantuan atau izin eksternal. Aplikasi tidak harus ditandatangani oleh otoritas pusat. Android saat ini tidak melakukan verifikasi CA untuk sertifikat aplikasi.
Aplikasi juga dapat mendeklarasikan izin keamanan pada tingkat perlindungan Tanda Tangan, membatasi akses hanya ke aplikasi yang ditandatangani dengan kunci yang sama sambil mempertahankan UID dan Kotak Pasir Aplikasi yang berbeda. Hubungan yang lebih dekat dengan Application Sandbox bersama diizinkan melalui fitur UID bersama di mana dua atau lebih aplikasi yang ditandatangani dengan kunci pengembang yang sama dapat mendeklarasikan UID bersama dalam manifesnya.
Skema penandatanganan APK
Android mendukung tiga skema penandatanganan aplikasi:
- skema v1: berdasarkan penandatanganan JAR
- Skema v2: Skema Tanda Tangan APK v2 , yang diperkenalkan di Android 7.0.
- Skema v3: Skema Tanda Tangan APK v3 , yang diperkenalkan di Android 9.
Untuk kompatibilitas maksimum, tandatangani aplikasi dengan semua skema, pertama dengan v1, lalu v2, dan kemudian v3. Perangkat Android 7.0+ dan yang lebih baru menginstal aplikasi yang ditandatangani dengan skema v2+ lebih cepat daripada yang hanya ditandatangani dengan skema v1. Platform Android yang lebih lama mengabaikan tanda tangan v2+ dan karenanya membutuhkan aplikasi untuk memuat tanda tangan v1.
Penandatanganan JAR (skema v1)
Penandatanganan APK telah menjadi bagian dari Android sejak awal. Ini didasarkan pada JAR yang ditandatangani . Untuk detail tentang penggunaan skema ini, lihat dokumentasi Android Studio tentang Menandatangani aplikasi Anda .
Tanda tangan v1 tidak melindungi beberapa bagian APK, seperti metadata ZIP. Pemverifikasi APK perlu memproses banyak struktur data yang tidak tepercaya (belum diverifikasi) dan kemudian membuang data yang tidak tercakup oleh tanda tangan. Ini menawarkan permukaan serangan yang cukup besar. Selain itu, pemverifikasi APK harus membuka kompresi semua entri terkompresi, menghabiskan lebih banyak waktu dan memori. Untuk mengatasi masalah ini, Android 7.0 memperkenalkan APK Signature Scheme v2.
Skema Tanda Tangan APK v2 & v3 (skema v2+)
Perangkat yang menjalankan Android 7.0 dan yang lebih baru mendukung skema tanda tangan APK v2 (skema v2) dan yang lebih baru. (Skema v2 telah diperbarui ke v3 di Android 9 untuk menyertakan informasi tambahan di blok penandatanganan, tetapi sebaliknya berfungsi sama.) Konten APK di-hash dan ditandatangani, kemudian Blok Penandatanganan APK yang dihasilkan dimasukkan ke dalam APK. Untuk detail tentang menerapkan skema v2+ ke aplikasi, lihat Skema Tanda Tangan APK v2 .
Selama validasi, skema v2+ memperlakukan file APK sebagai gumpalan dan melakukan pemeriksaan tanda tangan di seluruh file. Modifikasi apa pun pada APK, termasuk modifikasi metadata ZIP, membuat tanda tangan APK tidak valid. Bentuk verifikasi APK ini jauh lebih cepat dan memungkinkan deteksi lebih banyak kelas modifikasi yang tidak sah.
Format baru ini kompatibel dengan versi sebelumnya, sehingga APK yang ditandatangani dengan format tanda tangan baru dapat diinstal pada perangkat Android lama (yang mengabaikan data tambahan yang ditambahkan ke APK), selama APK ini juga bertanda tangan v1.
Hash seluruh file APK diverifikasi terhadap tanda tangan v2+ yang disimpan di Blok Penandatanganan APK. Hash mencakup semuanya kecuali Blok Penandatanganan APK, yang berisi tanda tangan v2+. Modifikasi apa pun pada APK di luar Blok Penandatanganan APK akan membatalkan tanda tangan v2+ APK. APK dengan tanda tangan v2+ yang dilucuti juga ditolak, karena tanda tangan v1-nya menetapkan bahwa APK telah ditandatangani v2, yang membuat Android 7.0 dan yang lebih baru menolak untuk memverifikasi APK menggunakan tanda tangan v1-nya.
Untuk detail tentang proses verifikasi tanda tangan APK, lihat bagian Verifikasi dari Skema Tanda Tangan APK v2.