Uygulama İmzalama

Uygulama imzalama, geliştiricilerin uygulamanın yazarını belirlemelerine ve karmaşık arayüzler ve izinler oluşturmadan uygulamalarını güncellemelerine olanak tanır. Android platformunda çalıştırılan her uygulama geliştirici tarafından imzalanmalıdır . İmzalanmadan yüklenmeye ç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 uygulamalarına duyduğu güveni birbirine bağlar. Geliştiriciler, uygulamalarının Android cihaza değiştirilmemiş olarak sağlandığını bilirler; ve geliştiriciler uygulamalarının davranışından sorumlu tutulabilirler.

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 herhangi bir uygulamaya erişememesini sağlar.

Bir Android cihaza bir uygulama (APK dosyası) yüklendiğinde, Paket Yöneticisi APK'nin söz konusu APK'da bulunan sertifika ile doğru şekilde imzalandığını doğrular. Sertifika (veya daha doğrusu, sertifikadaki genel anahtar) cihazdaki başka herhangi bir APK'yi imzalamak için kullanılan anahtarla eşleşirse, yeni APK, bir UID'yi benzer şekilde diğeriyle paylaşacağını manifestte belirtme seçeneğine sahiptir -igned APK'lar.

Uygulamalar bir üçüncü taraf (OEM, operatör, alternatif pazar) tarafından veya kendinden imzalı olarak imzalanabilir. Android, geliştiricilerin harici yardım veya izin olmadan oluşturabileceği 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ı gerçekleştirmemektedir.

Uygulamalar ayrıca, farklı UID'leri ve Uygulama Sanal Alanlarını korurken yalnızca aynı anahtarla imzalanmış uygulamalara erişimi kısıtlayarak İmza koruma düzeyinde güvenlik izinleri beyan edebilir. Paylaşılan bir Uygulama Sandbox ile daha yakın bir ilişkiye, aynı geliştirici anahtarıyla imzalanmış iki veya daha fazla uygulamanın bildirimlerinde paylaşılan bir UID bildirebildiğipaylaşılan UID özelliği aracılığıyla izin verilir.

APK imzalama şemaları

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

Maksimum uyumluluk için, uygulamaları önce v1, ardından v2 ve ardından v3 ile tüm şemalarla imzalayın. Android 7.0+ ve daha yeni cihazlar, v2 + şemalarıyla imzalanmış uygulamaları yalnızca v1 şemasıyla imzalananlardan daha hızlı yükler. Daha eski Android platformları v2 + imzalarını yok sayar ve bu nedenle v1 imzaları içeren uygulamalara ihtiyaç duyar.

JAR imzalama (v1 şeması)

APK imzalama, en 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 ile ilgili Android Studio belgelerine bakın.

v1 imzaları, APK'nın ZIP meta verileri gibi bazı kısımlarını korumaz. APK doğrulayıcısı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. Dahası, APK doğrulayıcının sıkıştırılmış tüm girişleri açması gerekir, bu da daha fazla zaman ve bellek tüketir. Bu sorunları gidermek için Android 7.0, APK Signature Scheme v2'yi kullanıma sundu.

APK İmza Şeması v2 ve 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 aksi takdirde aynı şekilde çalışır.) APK'nin içerikleri karma hale getirilir ve imzalanır, ardından ortaya çıkan APK İmzalama Bloğu APK'ye eklenir. V2 + şemasını bir uygulamaya uygulama ile ilgili ayrıntılar için bkz. APK Signature Scheme v2 .

Doğrulama sırasında, v2 + şeması APK dosyasını bir blob olarak değerlendirir ve tüm dosya boyunca imza denetimi gerçekleştirir. ZIP meta veri değişiklikleri dahil 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 olarak uyumludur, bu nedenle yeni imza biçimiyle imzalanan APK'lar, bu APK'lar v1 imzalı olduğu sürece daha eski Android cihazlara yüklenebilir (bu, APK'ye eklenen ekstra verileri yok sayar).

APK imza doğrulama süreci

Şekil 1. APK imza doğrulama süreci

APK'nin tüm dosya karması, APK İmzalama Bloğunda depolanan 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ışındaki APK'da yapılan herhangi bir değişiklik, APK'nin v2 + imzasını geçersiz kılar. Soyulmuş v2 + imzasına sahip APK'lar da reddedilir, çünkü v1 imzaları APK'nin v2 imzalı olduğunu belirtir ve bu da Android 7.0 ve daha yeni sürümlerin v1 imzalarını kullanarak APK'ları doğrulamayı reddetmesine neden olur.

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