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ıştırılan her uygulamanın geliştirici tarafından imzalanması gerekir. İmzalanmadan yükleme yapmaya çalışan uygulamalar Google Play veya Android cihazdaki paket yükleyici tarafından reddedilecektir.
Google Play'de uygulama imzalama, Google'ın geliştiriciye olan güveni ile geliştiricinin uygulamasına olan güveni arasında köprü oluşturur. Geliştiriciler, uygulamalarının Android cihazına değiştirilmeden sunulduğunu biliyor; ve geliştiriciler, uygulamalarının davranışı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 söz konusu APK'da bulunan sertifikayla düzgün şekilde imzalandığını doğrular. Sertifika (veya daha doğrusu, sertifikadaki genel anahtar) cihazdaki başka bir APK'yi imzalamak için kullanılan anahtarla eşleşirse, yeni APK, manifestte bir UID'yi diğeriyle benzer şekilde paylaşacağını belirtme seçeneğine sahiptir. imzalı APK'lar.
Başvurular bir üçüncü taraf (OEM, operatör, alternatif pazar) tarafından veya kendi imzasıyla imzalanabilir. Android, geliştiricilerin harici yardım veya izin olmadan oluşturabilecekleri, kendinden imzalı sertifikaları kullanarak kod imzalama sağlar. Başvuruların merkezi bir otorite tarafından imzalanması zorunlu değildir. Android şu anda uygulama sertifikaları için CA doğrulaması gerçekleştirmiyor.
Uygulamalar aynı zamanda İmza koruma düzeyinde güvenlik izinleri beyan edebilir, farklı UID'leri ve Uygulama Korumalı Alanlarını korurken erişimi yalnızca aynı anahtarla imzalanmış uygulamalarla kısıtlayabilir. Aynı geliştirici anahtarıyla imzalanan 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:
- v1 şeması: JAR imzalamaya dayalı
- v2 şeması: Android 7.0'da tanıtılan APK İmza Şeması v2 .
- v3 şeması: Android 9'da tanıtılan APK İmza Şeması v3 .
Maksimum uyumluluk için uygulamaları önce v1, ardından v2 ve ardından v3 olmak üzere tüm şemalarla imzalayın. Android 7.0+ ve daha yeni cihazlar, v2+ şemalarıyla imzalanmış uygulamaları, yalnızca v1 şemasıyla imzalanmış uygulamalara göre daha hızlı yükler. Daha eski Android platformları v2+ imzalarını göz ardı eder ve bu nedenle uygulamaların v1 imzalarını içermesine ihtiyaç duyar.
JAR imzalama (v1 şeması)
APK imzalama, başından beri Android'in bir parçası olmuştur. İmzalı JAR'a dayanmaktadı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ı kısımlarını 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. Üstelik 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 tanıttı.
APK İmza Şeması v2 ve v3 (v2+ şeması)
Android 7.0 ve üzerini çalıştıran cihazlar APK imza şeması v2 (v2 şeması) ve üzerini destekler. (v2 şeması, imzalama bloğuna ek bilgi eklemek için Android 9'da v3 olarak güncellendi, ancak bunun dışında aynı şekilde çalışır.) APK'nın içeriği karma hale getirilir ve imzalanır, ardından ortaya çıkan APK İmzalama Bloğu, APK'ya eklenir. v2+ şemasını bir uygulamaya uygulamayla ilgili ayrıntılar için APK İmza Şeması v2'ye bakın.
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ına olanak tanır.
Yeni format geriye dönük olarak uyumludur, dolayısıyla yeni imza formatıyla imzalanan APK'lar, bu APK'lar aynı zamanda v1 imzalı olduğu sürece eski Android cihazlara (APK'ya eklenen ekstra verileri göz ardı eden) yüklenebilir.
APK'nin tüm dosya karması, APK İmza Bloğunda saklanan v2+ imzasıyla 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ı kaldırı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 süreciyle ilgili ayrıntılar için APK İmza Şeması v2'nin Doğrulama bölümüne bakın.