APK İmza Şeması v3.1

Genel Bakış

Android 13, mevcut APK Signature Scheme v3'ün geliştirilmiş hali olan APK Signature Scheme v3.1'i destekler. V3.1 şeması, APK İmza Şeması v3'ün rotasyonla ilgili bilinen bazı sorunlarını giderir. Özellikle v3.1 imza şeması, rotasyonun platformun daha sonraki bir sürümünü hedeflemesine olanak tanıyan SDK sürümü hedeflemeyi destekler.

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

  • Android 13 veya üstünü çalıştıran cihazlar, v3.1 bloğundaki dönüşümlü imzalayanı kullanır.
  • Android'in eski sürümlerini çalıştıran cihazlar, dönüşümlü imzalayanı yok sayar ve bunun yerine v3 bloğundaki orijinal imzalayanı kullanır.

Henüz imzalama anahtarını döndürmemiş uygulamaların herhangi bir ek işlem yapması gerekmez. Bu uygulamalar rotasyonu seçtiğinde sistem varsayılan olarak v3.1 imza şemasını uygular.

v3.1 imzalama bloğu

V3.1 imzalama bloğu, v3 imzalama 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ınacak. Bu, orijinal imzalayanın v3 imzalama bloğunda ve döndürülen imzalayanın v3.1 imzalama bloğunda APK'yı imzalamak için kullanılabildiğinden, uygulamaların çok hedefli APK'lar hakkında endişelenmelerine gerek kalmadan imzalama anahtarlarını güvenli bir şekilde döndürmesine olanak tanır. Bu aynı zamanda platformun, v3.1 imzasını doğrularken v3 imzalama bloğu için mevcut tüm doğrulama kodlarını yeniden kullanmasına olanak tanır.

Varsayılan olarak apksig kitaplığı, imzalama yapılandırmasında döndürülmüş bir anahtar ve köken sağlandığında v3.1 imzalama bloğunu kullanacaktır. Bir uygulamanın minSdkVersion Android 13'ten küçükse ve döndürülmüş bir anahtar kullanılıyorsa, v3 imzalama bloğundaki APK'yı imzalamak için kullanılabilmesi için orijinal imzalama anahtarının da belirtilmesi gerekir. Bu, APK'nın Android 9'dan önceki bir sürümü hedeflemesi durumunda orijinal imzalayanın gerekli olduğu mevcut davranışa benzer.

Belirli bir SDK sürümünden başlayarak anahtar rotasyonunu hedeflemeyi desteklemek için apksig kitaplığı, rotasyon için minimum SDK versiyonunun ayarlanmasına izin verecek yeni API'leri ortaya çıkaracaktır. Rotasyon desteği için minimum sürüm olarak Android 13'ten daha düşük bir SDK sürümü belirtilirse orijinal v3 blok kullanılacaktır. V3.1 imzalama bloğu yalnızca rotasyon için minimum SDK sürümünün Android 13 ve sonrasına ayarlandığı rotasyonun mevcut olduğu durumlarda kullanılır. V3 imzalama bloğu, rotasyon minimum SDK sürümü sıyırma koruması için yeni bir özniteliğe sahip olacaktır.

APK Lineage'ı İçerir Rotasyon-min-sdk-versiyonunun değeri v3 imzalama bloğu v3.1 imzalama bloğu
HAYIR Varsayılan veya herhangi bir değer (aşağıda x ile temsil edilir) Android 9 ve sonraki sürümleri hedefleyen, orijinal imza sahibiyle imzalanmıştır Mevcut değil
Evet Varsayılan Android 9'dan 12L'ye kadar olan sürümleri hedefleyen orijinal imza sahibiyle imzalanmıştır Dönüşümlü imzalayanla imzalandı, Android 13 ve sonraki sürümleri hedefliyor
Evet x < 33 (Android 13) Döndürülmüş imzalayanla imzalandı, Android 9 ve sonraki sürümler hedefleniyor Mevcut değil
Evet x >= 33 (Android 13) Orijinal imza sahibiyle imzalanmıştır, Android 9'u hedef alır - ( x -1) Dönüşümlü imzalayanla imzalandı, x+ hedefleniyor

Rotasyonla ilgili sorunlar

Platformda rotasyonla ilgili aşağıdaki sorunlar çözüldü:

Android 12 düzeltmeleri

  • Platform, istekte bulunan uygulamaya yalnızca uygulamanın mevcut imzalayanının diğer uygulamanın imzalama soyundan olması veya mevcut imzalayan olması durumunda imza izni verir; bu, iki uygulamanın imzalamayla ilgili en iyi uygulamaları izlemesi ve farklı imzalama anahtarlarına geçiş yapması durumunda istekte bulunan uygulamaya imza izni verilmesini engeller.
  • Platformun APK geri alma özelliği, imzalama soyundaki önceki anahtarın geri alma özelliğine sahip olmadığı sürece, imzalama anahtarı döndürülen bir APK'yı geri alamaz; ancak bu özellik, yeni bir paket güncellemesinin imzalanması için izin verdiği için döndürme amacını boşa çıkarır. önceki imzalama anahtarı ve döndürülen anahtarı geri alma.
  • Yalnızca döndürülmüş anahtarla imzalanmış ve daha sonra orijinal anahtarla ve kökendeki 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 kökendeki döndürülmüş anahtarı gösterecektir.

Android 11 düzeltmeleri

  • PackageManager#checkSignatures iki paketin orijinal imzalama anahtarlarını kontrol edecek şekilde düzgün şekilde güncellenmedi. Bu durum, orijinal imzalama anahtarını kullanan enstrümantasyon APK'sı ile döndürülmüş bir imzalama anahtarı kullanan uygulamalara yönelik enstrümantasyonu bozdu.
  • sharedUserId altındaki paketler imzalama kökenlerini paylaşır. Güncellenmiş imzalama kökenine sahip bir uygulama bir sharedUiserId yüklendiğinde veya güncellendiğinde, bu uygulamanın kökeni, sharedUserId için paylaşılan kökenin yerini aldı (yani, bir uygulamanın imzalama kökeni A -> B ise ve bir uygulama, sharedUserId güncellendiyse) B -> C soyuna sahipse, sharedUserId kökeni B -> C) ile değiştirilecektir. Benzer şekilde, imza soyundaki önceki bir imzalayanın yetenekleri, imzalama dizisi değiştirilmediği sürece güncellenemez.

v4 entegrasyonu

v4 imza şeması, apksigner'a sağlanan imzalama yapılandırmasını kullanır; Döndürme için birden fazla imzalama yapılandırmasının sağlanması durumunda, en son döndürülen imzalama yapılandırması kullanılır. V3.1'in piyasaya sürülmesinden önce, v3 yalnızca bu en son dönüşümlü imzalama yapılandırmasını içeriyordu; dolayısıyla v4 bu yapılandırmayı olduğu gibi kullanabiliyordu; bununla v4 imza şeması, SigningInfo'da döndürülmüş imzalama anahtarını kullandığından rotasyonu destekleyebildi. V4 SigningInfo tam imzalama kökenini içermese de platformun herhangi bir imza sorgusu için kökene erişmesine izin vermek üzere bunu v3 imzalama bloğundan alabilir. Sağlanan rotasyon min-sdk sürümü 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çerecektir. v3.1 bloğundaki imzalama yapılandırmalarının her biri için ek imzalama bilgi blokları içeren v4 imza şemasının bir uzantısı oluşturuldu.

Doğrulama

V3.1 uygulamanızı test etmek için cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ konumunda PkgInstallSignatureVerificationTest.java CTS testlerini çalıştırın.

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