Google is committed to advancing racial equity for Black communities. See how.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Penandatanganan Aplikasi

Penandatanganan aplikasi memungkinkan pengembang untuk mengidentifikasi pembuat aplikasi dan memperbarui aplikasi mereka tanpa membuat antarmuka dan izin yang rumit. Setiap aplikasi yang dijalankan di platform Android harus ditandatangani oleh pengembang . Aplikasi yang mencoba menginstal 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 terhadap aplikasi mereka. Pengembang tahu 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. Sertifikat aplikasi yang ditandatangani menentukan ID pengguna mana yang dikaitkan dengan aplikasi mana; berbagai aplikasi berjalan di bawah ID pengguna yang berbeda. Penandatanganan aplikasi memastikan bahwa satu aplikasi tidak dapat mengakses aplikasi lain kecuali melalui IPC yang ditentukan dengan baik.

Saat aplikasi (file APK) diinstal ke perangkat Android, Package Manager 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 dengan cara yang sama. APK bertanda tangan.

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 Application Sandbox yang berbeda. Hubungan yang lebih dekat dengan Application Sandbox diizinkan melalui fitur UID bersama tempat 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:

Untuk kompatibilitas maksimum, tandatangani aplikasi dengan semua skema, pertama dengan v1, lalu v2, lalu 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 menggunakan 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), lalu membuang data yang tidak tercakup oleh tanda tangan. Ini menawarkan permukaan serangan yang cukup besar. Selain itu, pemverifikasi APK harus membuka kompresi semua entri yang dikompresi, sehingga memakan lebih banyak waktu dan memori. Untuk mengatasi masalah ini, Android 7.0 memperkenalkan APK Signature Scheme v2.

APK Signature Scheme v2 & v3 (v2 + skema)

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 diupdate ke v3 di Android 9 untuk menyertakan informasi tambahan di blok penandatanganan, tetapi cara kerjanya sama.) Konten APK di-hash dan ditandatangani, lalu Blok Penandatanganan APK yang dihasilkan dimasukkan ke dalam APK. Untuk detail tentang menerapkan skema v2 + ke aplikasi, lihat APK Signature Scheme v2 .

Selama validasi, skema v2 + memperlakukan file APK sebagai blob dan melakukan pemeriksaan tanda tangan di seluruh file. Setiap modifikasi 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, jadi APK yang ditandatangani dengan format tanda tangan baru dapat diinstal di perangkat Android lama (yang mengabaikan data tambahan yang ditambahkan ke APK), selama APK ini juga bertanda tangan v1.

Proses verifikasi tanda tangan APK

Gambar 1. Proses verifikasi tanda tangan APK

Hash seluruh file APK diverifikasi terhadap tanda tangan v2 + yang disimpan di Blok Penandatanganan APK. Hash mencakup semuanya kecuali APK Signing Block, yang berisi tanda tangan v2 +. Modifikasi apa pun pada APK di luar Blok Penandatanganan APK membuat tanda tangan v2 + tidak valid. APK dengan tanda tangan v2 + yang dilucuti juga akan ditolak, karena tanda tangan v1-nya menentukan bahwa APK itu bertanda 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 APK Signature Scheme v2.