Uygulama İmzalama

Uygulama imzalama, geliştiricilerin uygulamanın yazarını tanımlamasına ve karmaşık arayüzler ve izinler oluşturmadan uygulamalarını güncellemesine olanak tanır. Android platformunda çalışan her uygulamanın geliştirici tarafından imzalanması gerekir. İmzalanmadan yüklemeye çalışan uygulamalar, Google Play veya Android cihazındaki paket yükleyici tarafından reddedilir.

Google Play'de uygulama imzalama, Google'ın geliştiriciye duyduğu güven ile geliştiricinin uygulamalarına duyduğu güven arasında köprü oluşturur. Geliştiriciler, uygulamalarının Android cihaza değiştirilmeden sağlandığını bilir; ve geliştiriciler, uygulamalarının davranışlarından sorumlu tutulabilir.

Android'de uygulama imzalama, bir uygulamayı Uygulama Korumalı Alanına yerleştirmenin ilk adımıdır. İmzalı uygulama sertifikası, hangi kullanıcı kimliğinin hangi uygulamayla ilişkilendirildiğini tanımlar; farklı uygulamalar, farklı kullanıcı kimlikleri altında çalışır. Uygulama imzalama, bir uygulamanın iyi tanımlanmış IPC dışında başka bir uygulamaya erişememesini sağlar.

Bir Android cihaza bir uygulama (APK dosyası) yüklendiğinde, Paket Yöneticisi APK'nın o APK'da bulunan sertifikayla uygun şekilde imzalandığını doğrular. Sertifika (veya daha doğrusu, sertifikadaki genel anahtar) cihazdaki herhangi bir başka APK'yı imzalamak için kullanılan anahtarla eşleşirse, yeni APK'nın bildirimde diğeriyle benzer şekilde bir UID paylaşacağını belirtme seçeneği vardır. imzalı APK'lar.

Başvurular bir üçüncü şahıs (OEM, operatör, alternatif pazar) tarafından veya kendinden imzalı olarak imzalanabilir. Android, geliştiricilerin dışarıdan yardım veya izin almadan oluşturabilecekleri kendinden imzalı sertifikalar kullanarak kod imzalama sağlar. Başvuruların merkezi bir makam tarafından imzalanması gerekmez. Android şu anda uygulama sertifikaları için CA doğrulaması yapmıyor.

Uygulamalar ayrıca İmza koruma seviyesinde güvenlik izinleri bildirerek, farklı UID'leri ve Uygulama Korumalı Alanlarını korurken yalnızca aynı anahtarla imzalanmış uygulamalara erişimi kısıtlayabilir. Aynı geliştirici anahtarıyla imzalanmış iki veya daha fazla uygulamanın bildirimlerinde paylaşılan bir UID bildirebildiği paylaşılan UID özelliği kullanılarak, paylaşılan bir Uygulama Korumalı Alanı ile daha yakın bir ilişkiye izin verilir.

APK imzalama şemaları

Android, üç uygulama imzalama şemasını destekler:

Maksimum uyumluluk için uygulamaları önce v1, sonra v2 ve sonra v3 olmak üzere tüm şemalarla imzalayın. Android 7.0+ ve daha yeni cihazlar, v2+ şemalarıyla imzalanan uygulamaları yalnızca v1 şemasıyla imzalananlardan daha hızlı yükler. Daha eski Android platformları v2+ imzalarını yok sayar ve bu nedenle uygulamaların v1 imzalarını içermesi gerekir.

JAR imzalama (v1 şeması)

APK imzalama, başından beri Android'in bir parçası olmuştur. İmzalı JAR'a dayalıdır. Bu şemayı kullanmayla ilgili ayrıntılar için Uygulamanızı imzalama konusundaki Android Studio belgelerine bakın.

v1 imzaları, APK'nın ZIP meta verileri gibi bazı bölümlerini korumaz. APK doğrulayıcının çok sayıda güvenilmeyen (henüz doğrulanmamış) veri yapısını işlemesi ve ardından imzaların kapsamadığı verileri atması gerekir. Bu, oldukça büyük bir saldırı yüzeyi sunar. Ayrıca, APK doğrulayıcının tüm sıkıştırılmış girişleri açması gerekir, bu da daha fazla zaman ve bellek tüketir. Bu sorunları çözmek için Android 7.0, APK Signature Scheme v2'yi kullanıma sundu.

APK İmza Şeması v2 & v3 (v2+ şeması)

Android 7.0 ve sonraki sürümleri çalıştıran cihazlar, APK imza şeması v2 (v2 şeması) ve sonraki sürümleri destekler. (v2 şeması, imzalama bloğuna ek bilgiler eklemek için Android 9'da v3'e güncellendi, ancak bunun dışında aynı şekilde çalışıyor.) APK'nin içeriği karma haline getirildi ve imzalandı, ardından ortaya çıkan APK İmzalama Bloğu APK'ya eklendi. Bir uygulamaya v2+ şemasını uygulamayla ilgili ayrıntılar için bkz. APK Signature Scheme v2 .

Doğrulama sırasında v2+ şeması, APK dosyasını bir blob olarak ele alır ve dosyanın tamamında imza denetimi gerçekleştirir. ZIP meta veri değişiklikleri de dahil olmak üzere APK'da yapılan herhangi bir değişiklik, APK imzasını geçersiz kılar. Bu APK doğrulama biçimi, önemli ölçüde daha hızlıdır ve daha fazla yetkisiz değişiklik sınıfının algılanmasını sağlar.

Yeni biçim geriye dönük uyumludur, bu nedenle yeni imza biçimiyle imzalanan APK'lar, bu APK'lar da v1 imzalı olduğu sürece eski Android cihazlara yüklenebilir (bunlar APK'ya eklenen ekstra verileri yok sayar).

APK imza doğrulama işlemi

Şekil 1. APK imza doğrulama işlemi

APK'nın tam dosya karması, APK İmzalama Bloğunda saklanan v2+ imzasına göre doğrulanır. Karma, v2+ imzasını içeren APK İmzalama Bloğu dışındaki her şeyi kapsar. APK İmzalama Bloğu dışında APK'da yapılan herhangi bir değişiklik, APK'nın v2+ imzasını geçersiz kılar. V2+ imzası çıkarılmış APK'lar da reddedilir çünkü v1 imzaları APK'nın v2 imzalı olduğunu belirtir, bu da Android 7.0 ve daha yeni sürümlerin APK'ları v1 imzalarını kullanarak doğrulamayı reddetmesine neden olur.

APK imza doğrulama işlemiyle ilgili ayrıntılar için APK Signature Scheme v2'nin Doğrulama bölümüne bakın .