Android 13 mendukung skema tanda tangan APK v3.1, yang merupakan peningkatan dari skema tanda tangan APK v3 yang ada. Skema v3.1 membahas beberapa masalah umum pada APK Signature Scheme v3 terkait rotasi. Secara khusus, skema tanda tangan v3.1 mendukung penargetan versi SDK, yang memungkinkan rotasi untuk menargetkan rilis platform selanjutnya.
Skema tanda tangan v3.1 menggunakan ID blok yang tidak dikenali di Android 12 atau yang lebih rendah. Oleh karena itu, platform ini menerapkan perilaku penanda tangan berikut:
- Perangkat yang menjalankan Android 13 atau yang lebih baru menggunakan penanda tangan yang dirotasi di blok v3.1.
- Perangkat yang menjalankan versi Android yang lebih lama mengabaikan penanda tangan yang dirotasi dan menggunakan penanda tangan asli dalam blok v3.
Aplikasi yang belum merotasi kunci penandatanganannya tidak memerlukan tindakan tambahan. Setiap kali aplikasi ini memilih untuk merotasi, sistem akan menerapkan skema tanda tangan v3.1 secara default.
Blok penandatanganan v3.1
Blok penandatanganan v3.1 memiliki konten yang sama dengan blok penandatanganan v3, tetapi dengan ID blok baru, tanda tangan ini hanya dikenali di perangkat yang menjalankan Android 13 dan yang lebih tinggi. Hal ini memungkinkan aplikasi merotasi kunci penandatanganannya dengan aman tanpa perlu khawatir tentang APK multi-target karena penanda tangan asli dapat digunakan untuk menandatangani APK di blok penandatanganan v3 dan penanda tangan yang dirotasi di blok penandatanganan v3.1. Hal ini juga memungkinkan platform menggunakan kembali semua kode verifikasi yang ada untuk blok penandatanganan v3 saat memverifikasi tanda tangan v3.1.
Secara default, library apksig menggunakan blok penandatanganan v3.1 setiap kali kunci dan urutan yang dirotasi diberikan dalam konfigurasi penandatanganan. Jika minSdkVersion aplikasi kurang dari
Android 12 dan kunci yang dirotasi sedang digunakan, kunci penandatanganan asli juga harus
ditentukan agar dapat digunakan untuk menandatangani APK di blok penandatanganan v3. Hal ini mirip dengan perilaku saat ini yang mengharuskan penanda tangan asli jika APK menargetkan versi yang lebih lama dari Android 9.
Untuk mendukung penargetan rotasi kunci yang dimulai dari versi SDK tertentu, library apksig mengekspos API baru yang memungkinkan penetapan versi SDK minimum untuk rotasi. Jika versi SDK yang kurang dari Android 12 ditentukan sebagai versi minimum untuk dukungan rotasi, blok v3 asli akan digunakan. Blok penandatanganan v3.1 hanya digunakan jika ada rotasi dengan versi SDK minimum untuk rotasi ditetapkan ke Android 12 dan yang lebih tinggi. Blok penandatanganan v3 memiliki atribut untuk perlindungan penghapusan versi SDK minimum rotasi.
| APK menyertakan urutan | Nilai rotation-min-sdk-version | Blok penandatanganan v3 | Blok penandatanganan v3.1 |
|---|---|---|---|
| Tidak | Default atau nilai apa pun (diwakili oleh x di bawah) | Ditandatangani dengan penanda tangan asli, menargetkan Android 9 dan yang lebih tinggi | Tidak ada |
| Ya | Default | Ditandatangani dengan penanda tangan asli, menargetkan Android 9 hingga 12L | Ditandatangani dengan penanda tangan yang dirotasi, menargetkan Android 12 dan yang lebih tinggi |
| Ya | x < 33 (Android 13) | Ditandatangani dengan penanda tangan yang dirotasi, menargetkan Android 9 dan yang lebih tinggi | Tidak ada |
| Ya | x >= 33 (Android 13) | Ditantatangani dengan penanda tangan asli, menargetkan Android 9 - (x-1) | Ditandatangani dengan penanda tangan yang dirotasi, menargetkan x+ |
Masalah terkait rotasi
Masalah terkait rotasi berikut telah diselesaikan di platform:
Perbaikan Android 12
- Platform hanya akan memberikan izin tanda tangan ke aplikasi yang meminta jika penanda tangan saat ini dari salah satu aplikasi berada dalam urutan penandatanganan, atau merupakan penanda tangan saat ini, dari aplikasi lain; hal ini mencegah pemberian izin tanda tangan ke aplikasi yang meminta jika kedua aplikasi mengikuti praktik terbaik kunci penandatanganan dan dirotasi ke kunci penandatanganan yang berbeda.
- Fitur rollback APK platform tidak dapat melakukan rollback APK yang baru saja dirotasi kunci penandatanganannya kecuali jika kunci sebelumnya dalam urutan penandatanganan memiliki kemampuan rollback, tetapi kemampuan ini mengalahkan tujuan rotasi karena memungkinkan update paket baru ditandatangani oleh kunci penandatanganan sebelumnya dan melakukan rollback kunci yang dirotasi.
- APK yang hanya ditandatangani dengan kunci yang dirotasi dan kemudian diupdate dengan APK yang ditandatangani dengan kunci asli dan kunci yang dirotasi dalam urutan hanya menampilkan kunci yang dirotasi dalam urutan di perangkat yang menjalankan Android 11 dan yang lebih lama.
Perbaikan Android 11
PackageManager#checkSignaturestidak diupdate dengan benar untuk memeriksa kunci penandatanganan asli dari dua paket. Hal ini merusak instrumentasi untuk aplikasi yang menggunakan kunci penandatanganan yang dirotasi dengan APK instrumentasi menggunakan kunci penandatanganan asli.- Paket di bawah
sharedUserIdberbagi urutan penandatanganannya. Setiap kali aplikasi dengan urutan penandatanganan yang diupdate diinstal atau diupdate disharedUiserId, urutan aplikasi tersebut akan menggantikan urutan bersama untuksharedUserId(yaitu, jika urutan penandatanganan aplikasi adalah A -> B, dan aplikasi diupdate disharedUserIddengan urutan B -> C, urutansharedUserIdakan diganti dengan B -> C). Demikian pula, kemampuan penanda tangan sebelumnya dalam urutan tidak dapat diupdate kecuali jika urutan penandatanganan diubah.
Integrasi v4
Skema tanda tangan v4 menggunakan konfigurasi penandatanganan yang diberikan ke apksigner; jika beberapa konfigurasi penandatanganan diberikan untuk rotasi, konfigurasi penandatanganan yang dirotasi terbaru akan digunakan. Sebelum diperkenalkannya v3.1, v3 hanya menyertakan konfigurasi penandatanganan yang dirotasi terbaru ini, sehingga v4 dapat menggunakan konfigurasi ini sebagaimana adanya; dengan demikian, skema tanda tangan v4 dapat mendukung rotasi karena menggunakan kunci penandatanganan yang dirotasi di SigningInfo. Meskipun v4 SigningInfo tidak menyertakan urutan penandatanganan lengkap, v4 dapat mengambilnya dari blok penandatanganan v3 untuk memungkinkan platform mengakses urutan untuk kueri tanda tangan apa pun. Saat v3.1 digunakan untuk menargetkan rotasi untuk rotation-min-sdk-version yang disediakan, konfigurasi v3 generik menyertakan konfigurasi penandatanganan asli serta konfigurasi penandatanganan yang dirotasi terbaru. Ekstensi skema tanda tangan v4 telah dibuat yang menyertakan blok info penandatanganan tambahan untuk setiap konfigurasi penandatanganan dari blok v3.1.
Validasi
Untuk menguji implementasi v3.1, jalankan pengujian CTS PkgInstallSignatureVerificationTest.java di cts/hostsidetests/appsecurity/src/android/appsecurity/cts/.
Untuk mengetahui informasi selengkapnya tentang pengujian, lihat bagian verifikasi di v3.