APK imza şeması v3.1

Genel Bakış

Android 13, mevcut APK imza şeması v3'te yapılan bir iyileştirme olan APK imza şeması v3.1'i destekler. 3.1 sürümü, APK İmza Şeması v3'te rotasyonla ilgili bilinen sorunların bazılarını ele alır. Özellikle v3.1 imza şeması, SDK sürümü hedeflemeyi destekler. Bu sayede, rotasyonla platformun daha yeni bir sürümünü hedefleyebilirsiniz.

v3.1 imza şeması, Android 12 veya daha eski sürümlerde tanınmayan bir blok kimliği kullanır. Bu nedenle platform, aşağıdaki imzalayan davranışını uygular:

  • Android 13 veya sonraki sürümleri çalıştıran cihazlar, v3.1 bloğunda döndürülmüş imzalayıcıyı kullanır.
  • Android'in eski sürümlerini çalıştıran cihazlar, döndürülen imzalamayı yoksayar ve bunun yerine v3 bloğundaki orijinal imzalamayı kullanır.

İmzalama anahtarlarını henüz döndürmemiş uygulamalar için ek işlem gerekmez. Bu uygulamalar döndürmeyi seçtiğinde sistem varsayılan olarak v3.1 imza şemasını uygular.

v3.1 imzalama bloğu

v3.1 imza bloğu, v3 imza bloğuyla aynı içeriğe sahip olacak ancak yeni blok kimliğiyle bu imzalar yalnızca Android 13 ve sonraki sürümleri çalıştıran cihazlarda tanınacaktır. Bu sayede, uygulamalar çok hedefli APK'lar hakkında endişelenmenize gerek kalmadan imzalama anahtarlarını güvenle döndürebilir. Bunun nedeni, orijinal imzalayan, APK'yı imzalamak için v3 imzalama bloğunda, döndürülen imzalayan ise v3.1 imzalama bloğunda kullanılabilir. Bu, platformun v3.1 imzasını doğrularken v3 imzalama bloğu için mevcut tüm doğrulama kodlarını yeniden kullanmasına da olanak tanır.

Varsayılan olarak apksig kitaplığı, imzalama yapılandırmasında döndürülmüş bir anahtar ve soy ağacı sağlandığında v3.1 imzalama bloğunu kullanır. Bir uygulamanın minSdkVersion sürümü Android 13'ten eskiyse ve döndürülmüş bir anahtar kullanılıyorsa v3 imzalama bloğunda APK'yı imzalamak için orijinal imzalama anahtarı da belirtilmelidir. Bu, APK Android 9'dan önceki bir sürümü hedefliyorsa orijinal imzalayıcının gerekli olduğu mevcut davranışa benzer.

Belirli bir SDK sürümünden itibaren anahtar rotasyonunu hedeflemeyi desteklemek için apksig kitaplığı, rotasyon için minimum SDK sürümü ayarlamanıza olanak tanıyacak yeni API'ler sunar. Rotasyon desteği için minimum sürüm olarak Android 13'ten eski bir SDK sürümü belirtilirse orijinal v3 bloğu kullanılır. 3.1 sürümü imzalama bloğu yalnızca rotasyon için minimum SDK sürümünün Android 13 ve sonraki sürümler olarak ayarlandığı rotasyon varlığında kullanılır. V3 imza bloğu, minimum SDK sürümü sarma koruması için yeni bir özelliğe sahip olacak.

APK, soy ağacını içerir rotation-min-sdk-version değerinin değeri v3 imzalama bloğu v3.1 imzalama bloğu
Hayır Varsayılan veya herhangi bir değer (aşağıda x ile gösterilir) Orijinal imzalayıcıyla imzalanmış, Android 9 ve sonraki sürümleri hedefleyen Yok
Evet Varsayılan Orijinal imzalayıcıyla imzalanmış, Android 9 ile 12L'yi hedefleyen Android 13 ve sonraki sürümleri hedefleyen, döndürülmüş imzalayıcıyla imzalandı
Evet x < 33 (Android 13) Android 9 ve sonraki sürümleri hedefleyen, döndürülmüş imzalayıcıyla imzalandı Yok
Evet x >= 33 (Android 13) Orijinal imzalayanla imzalandı, Android 9'u hedefliyor - (x-1) x+ hedefleyen, döndürülmüş imzalayıcıyla imzalandı

Döndürmeyle ilgili sorunlar

Platformda, dönmeyle ilgili aşağıdaki sorunlar çözüldü:

Android 12 düzeltmeleri

  • Platform, yalnızca istek yapan uygulamanın mevcut imzalayıcısı, imzalama soy ağacındaysa veya diğer uygulamanın mevcut imzalayıcısıysa istek yapan uygulamaya imza izni verir. Bu, iki uygulama imzalama anahtarı en iyi uygulamalarını uygulayıp farklı imzalama anahtarlarına geçerse istek yapan uygulamaya imza izni verilmesini engeller.
  • Platformun APK geri alma özelliği, imzalama soy ağacındaki önceki anahtarda geri alma özelliği olmadığı sürece, imzalama anahtarı yeni döndürülmüş bir APK'yı geri alamaz. Ancak bu özellik, yeni bir paket güncellemesinin önceki imzalama anahtarıyla imzalanmasına ve döndürülen anahtarın geri alınmasına izin verdiği için rotasyonun amacını ortadan kaldırır.
  • Yalnızca döndürülmüş anahtarla imzalanmış ve daha sonra, soy ağacında orijinal anahtar ve döndürülmüş anahtarla imzalanmış bir APK ile güncellenen bir APK, Android 11 ve önceki sürümleri çalıştıran cihazlarda yalnızca soy ağacında döndürülmüş anahtarı gösterir.

Android 11 düzeltmeleri

  • PackageManager#checkSignatures, iki paketin orijinal imzalama anahtarlarını kontrol edecek şekilde düzgün şekilde güncellenmedi. Bu durum, rotasyona tabi tutulmuş bir imzalama anahtarı kullanan uygulamalarda orijinal imzalama anahtarını kullanan enstrümantasyon APK'sı ile enstrümantasyonu bozdu.
  • sharedUserId altındaki paketler, imzalama soylarını paylaşır. Güncellenen bir imzalama soyağacına sahip bir uygulama sharedUiserId'te yüklendiğinde veya güncellendiğinde, söz konusu uygulamanın soyağacı sharedUserId'ün paylaşılan soyağacını değiştiriyordu (yani, bir uygulamanın imzalama soyağacı A -> B ise ve uygulama sharedUserId'te B -> C soyağacıyla güncellenirse sharedUserId soyağacı B -> C ile değiştiriliyordu). Benzer şekilde, imzalama soy ağacı değiştirilmediği sürece soy ağacındaki önceki bir imzalayanın özellikleri güncellenemez.

v4 entegrasyonu

V4 imza şeması, apksigner'a sağlanan imza yapılandırmasını kullanır. Rotasyon için birden fazla imza yapılandırması sağlanırsa en son döndürülen imza yapılandırması kullanılır. v3.1 kullanıma sunulmadan önce v3 yalnızca bu en son döndürülmüş imzalama yapılandırmasını içeriyordu. Bu nedenle v4 bu yapılandırmayı olduğu gibi kullanabiliyordu. Bu sayede v4 imza şeması, SigningInfo'sunda döndürülmüş imzalama anahtarını kullandığı için döndürmeyi destekleyebiliyordu. SigningInfo v4, imzalama soy ağacının tamamını içermese de platformun herhangi bir imza sorgusu için soy ağacına erişmesine izin vermek üzere bunu v3 imzalama bloğundan alabilir. Sağlanan rotation-min-sdk-version için rotasyonu hedeflemek üzere v3.1 kullanıldığında genel v3 yapılandırması hem orijinal imzalama yapılandırmasını hem de en son döndürülmüş imzalama yapılandırmasını içerir. v3.1 bloğundaki imza yapılandırmalarının her biri için ek imza bilgisi blokları içeren v4 imza şemasının bir uzantısı oluşturuldu.

Doğrulama

3.1 sürümünü uygulamanızı test etmek için PkgInstallSignatureVerificationTest.java'te cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ CTS testlerini çalıştırın.

Test hakkında daha fazla bilgi için v3'teki doğrulama bölümüne göz atın.