Android Uygulama İmzalama: Nasıl Çalışır ve Neden Önemlidir?
Android telefonunuza her uygulama yüklediğinizde arka planda sessiz ancak kritik bir güvenlik kontrolü gerçekleşir. Telefonunuz APK paketinin dijital imza'sini doğrular. Bu kriptografik el sıkışma, kötü niyetli bilgisayar korsanlarının uygulamalarınızı kötü amaçlı yazılımla "zehirlemesini" önleyen ve geliştiricilerin kimliklerini kaybetmeden güncellemeleri aktarabilmelerini sağlayan şeydir.
Uygulama yazıyorsanız imzalamak doğru yapmanız gereken bir şeydir; Eğer Android ile uğraşmayı seviyorsanız, sistemin anlaşılması en tatmin edici kısımlarından biridir. Her iki durumda da uygulama imzalama nasıl çalışır? zaman ayırmaya değer. Aşağıda teknolojiyi, imzalama düzenlerinin nasıl geliştiğini ve sertifikaları manuel olarak doğrulayın'yi çevrimiçi olarak nasıl yapabileceğinizi anlatacağız.
- Neden her Android uygulamasının imzalanması gerekiyor ve hangi şifrelemeyi içeriyor (RSA / EC).
- v1 (JAR), v2, v3 ve v4 imza şemaları arasındaki farklar ve uygulamanızın bugün hangisini kullanması gerektiği.
- Android, imza sürekliliğine dayalı olarak bir güncellemeye izin verilip verilmeyeceğine nasıl karar verir?
- Anahtar rotasyonu, bir geliştiricinin mevcut yüklemeleri bozmadan imzalama anahtarını değiştirmesine nasıl olanak tanır?
- Herhangi bir APK'nın imzasını kendiniz, komut satırından veya tarayıcı tabanlı doğrulayıcı aracımızla nasıl doğrulayabilirsiniz?
Uygulama İmzalama Nedir?
Uygulama imzalama, özünde bir geliştiricinin, uygulama dosyaları için bir imza bloğu oluşturmak üzere Özel Anahtar kullandığı bir süreçtir. İlgili Genel Anahtar daha sonra META-INF klasörü içindeki APK'ya yerleştirilir. Telefonunuz uygulamayı yüklemeye çalıştığında imzanın dosyanın içeriğiyle eşleşip eşleşmediğini kontrol etmek için genel anahtarı kullanır.
Bu iki ana özellik sağlar:
- Değişmezlik: Uygulama kodunun tek bir baytı değiştirilirse (örneğin bir Truva atı tarafından), imza artık dosyayla eşleşmez ve Android onu yüklemeyi reddeder.
- Kimlik Kanıtı: Bir uygulama mevcut olanı güncellemeye çalışırsa imzalarının eşleşmesi gerekir. Bu nedenle, tahrif edilmiş bir Facebook uygulamasını resmi uygulamanın üzerine yükleyemezsiniz.
İmzalama Şemalarının Gelişimi
Google, hem hızı hem de güvenliği artırmak için imzalama mekanizmasını sürekli olarak geliştirmiştir:
- V1 (Kavanoz İmzalama): APK (ZIP) içindeki dosyaları tek tek imzalar. Bu yavaştır çünkü işletim sisteminin her dosyayı açması ve kontrol etmesi gerekir. Ayrıca belirli ZIP manipülasyonlarına karşı da savunmasızdır.
- V2 (APK İmza Şeması): APK'nın ikili bloğunun tamamını imzalar. Doğrulamak için sıkıştırmanın açılmasını gerektirmez, bu da onu inanılmaz derecede hızlı hale getirir. Android 7.0'da (Nougat) tanıtıldı.
- V3 (Anahtar Döndürme): Anahtarların bir "soyunu" ekleyerek V2'yi genişletir. Geliştiricinin yeni bir anahtarın eski anahtarın yetkili halefi olduğunu kanıtlamasına olanak tanır. Android 9.0'da (Pie) tanıtıldı.
- V4 (Yayın imzalama): Özellikle artımlı kurulumlar için tasarlanmıştır ve uygulamaların USB veya Wi-Fi üzerinden indirilirken doğrulanmasına olanak tanır.
Sertifikalar Yandan Yükleme İçin Neden Önemlidir?
Resmi olmayan bir kaynaktan APK indirdiğinizde Sertifika Hashing'i en iyi arkadaşınızdır. Sertifika parmak izi (SHA-256 karması gibi), geliştiricinin imzalama anahtarını benzersiz şekilde tanımlar. Her uygulama, tüm güncellemelerinde aynı imzalama anahtarını korur; böylece APK'nın parmak izini, geliştiricinin yayınlanmış değeriyle karşılaştırarak APK'nın orijinal olduğunu doğrulayabilirsiniz.
Bir APK'nın sahte olduğundan şüpheleniyorsanız onu Çevrimiçi APK Doğrulayıcı aracılığıyla çalıştırmalısınız. Aracımız size şunları gösterecektir:
- İmzalayanın Ortak Ad (CN)'si (ör. "Android").
- Sertifikanın Geçerlilik Süresi'si.
- SHA-1/SHA-256 parmak izleri.
Android, Kurulum Sırasında Bir İmzayı Nasıl Doğrular?
"Sertifikayı doğrula" adımı o kadar sık gözden kaçırılıyor ki, bir APK'ya dokunduğunuzda işletim sisteminin gerçekte ne yaptığını gözden geçirmeye değer ve Android bunu yükleyip yüklemeyeceğine karar verir:
- APK'yı ZIP olarak açın ve imzalama bloğunu bulun. Merkezi dizinden hemen önce yapılandırılmış bir blok olan v2/v3 imzaları için; eski v1 şeması için META-INF/*.RSA, *.DSA veya *.EC'nin içeriğidir.
- APK'nın her iki baytının SHA-256 özetlerini hesaplayın. İmzalama bloğu kendi özetinin dışında bırakılır; geri kalan her şey tanımlanmış parçalar halinde karma hale getirilir.
- Her bir parçanın özetini, imzalama bloğunda kayıtlı özetlerle karşılaştırarak doğrulayın. Geliştirici dosyayı imzaladıktan sonra tek bir bayt bile değiştirilmişse özetler eşleşmez ve yükleme genel bir "Uygulama yüklenmedi" hatasıyla reddedilir.
- İmza bloğunun kendisinin sertifikanın özel anahtarıyla üretildiğini doğrulayın. Sertifikanın genel anahtarı, bloktaki kriptografik imzayı kontrol etmek için kullanılır. Başarılı bir kontrol, dosyayı imzalayan kişinin bu sertifikayla eşleştirilmiş özel anahtara sahip olduğu anlamına gelir.
- Sertifika parmak izini aynı paket adındaki mevcut kurulumlarla karşılaştırın. Paket zaten kuruluysa ve yeni APK farklı bir sertifikayla imzalanmışsa kurulum INSTALL_FAILED_UPDATE_INCOMPATIBLE ile reddedilir. Bu, işletim sisteminin kimliğe bürünmeye karşı ana savunmasıdır: Kötü niyetli bir kişi, bankanın imzalama anahtarını da çalmadığı sürece banka uygulamanızı kendi kopyasıyla değiştiremez.
Bunların hiçbiri geliştiricinin güvenilir olduğunu kanıtlamaz; yalnızca yüklemek üzere olduğunuz dosyanın imzaladıkları dosyayla bayt bakımından aynı olduğu ve başka hiçbir tarafın bu dosyaya müdahale etmediği kanıtlanır. Geliştiriciye güvenmek ayrı bir karardır ve hangi kaynaklardan kurulum yapacağınıza karar vererek vereceğiniz bir karardır.
"İmza Uyuşmazlığı" Gerçekte Ne Anlama Geliyor?
İnsanların yan yükleme sırasında karşılaştıkları en yaygın sürpriz, güncelleme sırasındaki "imza uyuşmazlığı" hatasıdır. İşte aslında olan şey:
- Play Store'dan Uygulama X sürüm 1.0 yüklediniz.
- Uygulama X sürüm 1.1'yi Play olmayan bir kaynaktan indirirsiniz.
- İşletim sistemi aynı paket adını (com.example.app görüyor ancak APK farklı bir sertifikayla imzalanmış (orijinal yayıncının değil, yan kaynağın imzalama anahtarı)). Kurulumu reddediyor.
Bunun pratikte gerçekleşmesinin iki yolu vardır:
- Üçüncü taraf APK, gerçekten farklı bir yayıncıdan'dir; örneğin "modlanmış" veya "yamalı" bir kopyadır. Yüklemeyi reddetmek doğru davranıştır; bunu yüklemek, bankanızın uygulamasının zaten dokunduğu verilerin aynısını bir yabancıya güvenmek anlamına gelir.
- Üçüncü taraf APK, resmi APK'nın yeniden yüklenmesi'dir, ancak Google'ın Play Uygulama İmzalama sistemi, her kullanıcının indirmesini kullanıcının anahtar yükle sarmalayıcısıyla imzalar. İki cihaz bazen aynı kavramsal uygulama sürümü için biraz farklı imza verilerini görebilir. Bu durumda kökteki sertifika parmak izi hâlâ eşleşiyor; APK Doğrulayıcı ile doğrulayabilirsiniz.
tamamen sertifika parmak izi mevcut kurulumunuzdan farklıysa, ilerlemenin tek yolu, yeni kopyayı yüklemeden önce ilk olarak geçerli kopyayı kaldırmaktır (verilerini kaybeder), imza doğrulamasını hiçbir zaman devre dışı bırakmamaktır.
Kendi İmza Anahtarınızı Oluşturma (Geliştiriciler İçin)
Android uygulamaları geliştiriyorsanız, sonunda kendi derlemelerinizi imzalamanız gerekecektir. Java SDK'sından keytool'yi kullanan standart tek satırlık komut şöyledir:
keytool -genkeypair -v \
-keystore my-release.keystore \
-alias my-app -keyalg RSA -keysize 2048 \
-validity 10000
Bilmeniz gereken iki şey:
- geçerlilik önemlidir: 10.000 gün (yaklaşık 27 yıl) geleneksel değerdir çünkü işletim sistemi, süresi dolmak üzere olan veya süresi dolmuş bir anahtarla imzalanan güncellemeleri tehlikeye atılmış olarak değerlendirir. Uzun ömürlü bir anahtarı bir kez oluşturun ve koruyun.
- Yayınlandıktan sonra anahtarları kolayca değiştiremezsiniz. V3 imzalama şeması, açık bir özellik olarak rotasyon anahtarını ekler: eski bir sertifika, saklanan bir kanıt aracılığıyla yenisini "kutsar" ve işletim sisteminin kimlik sürekliliğini korurken yeni anahtardan güncellemeleri kabul etmesine olanak tanır. V3 olmadan orijinal anahtarın kaybedilmesi, mevcut tüm yüklemelerin artık devre dışı bırakılması anlamına gelir.
Dışarıdan yüklenen test yapıları için imzasız bir hata ayıklama anahtar deposu uygundur; üretim için çevrimdışı yedeklemede saklanan, parola korumalı, uzun geçerliliğe sahip bir anahtar deposu kullanın.
Uygulama Kimliğini Bir Profesyonel Gibi Doğrulayın
Genel dosya adlarına güvenmeyin. APK'larınızın şifreleme özünü saniyeler içinde kontrol edin.
Sertifikaları Şimdi DoğrulayınYaygın İmza Tuzakları
- Kendinden İmzalı Sertifikalar: Çoğu Android uygulaması kendinden imzalıdır. Web siteleri için SSL'den farklı olarak Android uygulama imzalama için merkezi bir otorite yoktur. Geliştiriciye doğrudan güvenmeniz gerekir.
- Sertifikalarda Hata Ayıklama: Test amacıyla oluşturulan uygulamalar genel bir "hata ayıklama" anahtarı kullanır. Bu uygulamalar hiçbir zaman halka açıklanmamalı ve birçok güvenlik filtresi tarafından engellenmelidir.
- Anahtar Kaybı: Bir geliştirici özel anahtar deposunu kaybederse Asla uygulamasını yeniden güncelleyebilir. Farklı bir paket adına sahip "Yeni" bir uygulama yayınlamaları gerekecekti.
Hedef SDK'nız için Doğru İmzalama Şemasını Seçme
Uygulama imzalama, Android'in güvenliğinin çoğunu sessizce destekler. Özel/genel anahtar ilişkisi tıklandığında, yandan yüklenen bir uygulamayı yararlarına göre değerlendirebilir ve yüklediğiniz şeyin geliştiricinin imzalamasından bu yana değiştirilmediğini doğrulayabilirsiniz. Android'in dahili bileşenleri hakkında daha fazla bilgi için XAPK formatı kılavuzu ürünümüze bakın.