Android 17 (API düzeyi 37), Android ekosisteminin kuantum sonrası kriptografiye (PQC) geçişini desteklemek için tasarlanmış bir karma imza şeması olan APK İmza Şeması v3.2'yi kullanıma sunar.
Sektör, PQC algoritmalarını geniş ölçekte dağıtırken v3.2 şeması derinlemesine savunma sağlar. APK'ları hem RSA veya ECDSA gibi klasik bir algoritmayla hem de PQC algoritmasıyla imzalamanız gerekir. Bu karma yaklaşım, APK'nızı korumak için klasik kriptografiyi kullanırken kuantum bilgisayarlardan gelen tehditlere karşı savunma sağlar.
Amaç ve ayrıntılar
v3.2 şeması, sektörle uyumlu standart bir geçiş mekanizması olarak çalışır. Bu karma yaklaşım sayesinde, klasik imza algoritmalarının kanıtlanmış güvenliğine güvenmeye devam ederken PQC'nin kuantuma dirençli avantajlarından yararlanabilirsiniz. Yeni standartlaştırılmış PQC algoritmaları büyük ölçekte operasyonel olgunluğa ulaştığında bu karma yapılandırmadan tek bir PQC imzalama anahtarına geçebilirsiniz. v3.2 imza şeması için platform desteği Android 17 ile başlar. Daha eski Android sürümlerinde v3.2 engellemesi atlanır ve imza doğrulaması için önceki şemalar kullanılır.
Bu geçiş sırasında güvenliği korumak ve düşürme saldırılarını önlemek için v3.2 şeması aşağıdaki davranışları zorunlu kılar:
- Yeni anahtar materyali: Hibrit bloklara geçiş için yeni klasik ve PQC anahtarlarının oluşturulması gerekir. Hibrit ve hibrit olmayan yapılandırmalar arasında anahtar materyali yeniden kullanmayın.
- Örtülü rotasyon: Platform, karma bloğu örtülü anahtar rotasyonu olarak değerlendirir. Platform, yeni klasik anahtarı uygulamanın mevcut imzalama soyuna sondan bir önceki anahtar olarak ekler ve yeni PQC anahtarını uygulamanın mevcut imzalama kimliği olarak değerlendirir.
- Paylaşılan soy: Örtülü döndürmenin başarılı bir şekilde yürütülmesi için hibrit bloktaki hem yeni klasik anahtar hem de yeni PQC anahtarı aynı imzalama soyunu paylaşmalıdır. Uygulamanın mevcut imzalama geçmişini (tek bir orijinal anahtar veya daha önce değiştirilmiş anahtarların soyu) her iki yeni karma imzalayan için de kopyalamanız gerekir. Platform, uygulamayı karma şemaya geçiren tüzel kişinin, uygulamanın mevcut imzalama kimliğinin yasal sahibi olduğunu doğrulamak için bu paylaşılan soyu kullanır.
- PQC tek imzalayan kısıtlaması: PQC'nin ilk kullanıma sunulması sırasında Android, PQC algoritmalarının kullanımını açıkça v3.2 karma blokla kısıtlar. Platform, v2, v3.0 veya v3.1 gibi önceki imza şemalarını kullanarak tek imzalayanlı PQC yapılandırmasını doğrulamaz.
- Geri geçiş: v3.2 karma bloktan tek imzalayanlı bir bloğa (gelecekteki bir sürümde desteklendiğinde klasik imzalayan veya PQC imzalayan) geri geçiş yaparken platform, karma bloktaki hem klasik hem de PQC anahtarlarının yeni imzalama soyunda bulunduğunu ve yeni tek imzalayanı onayladığını doğrular.
Geçişle ilgili en iyi uygulamalar
Daha düşük Android sürümleriyle uyumluluğu korumak ve PQC imzalamaya geçiş sırasında güvenli bir yükseltme yolu sağlamak için APK'lar, tek bir klasik anahtarla imzalanmış standart bir v3.0 veya v3.1 imza bloğu içermeye devam etmelidir. Yalnızca Android 17 (API düzeyi 37) ve sonraki sürümler v3.2 karma şemasını desteklediğinden bu koşul, daha düşük sürümleri çalıştıran cihazların uygulamayı doğrulayıp yüklemesine olanak tanır.
Klasik yedek yapılandırma
PQC geçişi sırasında operasyonel bir güvenlik ağı sağlamak için klasik bir yedek yapılandırma uygulayın.
- Mevcut uygulamalar: Uygulamanın mevcut imzalama anahtarı K0, bu geri dönüş için doğal bir temel görevi görür.
- Yeni uygulamalar: Başlangıç kimliğini oluşturmak için yeni karma anahtarlar C_K1 ve PQC_K1 ile birlikte temel bir klasik imzalama anahtarı (K0) oluşturun.
Her iki senaryoda da APK, klasik anahtar K0 tarafından imzalanmış standart bir v3.0 veya v3.1 imza bloğu ile yeni karma anahtarlar C_K1 ve PQC_K1 tarafından imzalanmış v3.2 karma bloğunu içermelidir.
v3.2 şemasının ilk dağıtımı sırasında, karma blok için imza soyu, K0'a ROLLBACK özelliğini vermelidir. Bu özellik, dağıtım sorunları ortaya çıkarsa uygulamanın kullanıcı güncellemelerini kesintiye uğratmadan klasik bir imzaya geri dönmesini sağlar. Yeterli çalışma zamanı verisi, karma dağıtımın kararlı olduğunu onayladıktan sonra yeni anahtarlarınızı tamamen güvence altına almak için sonraki güncellemelerde ROLLBACK özelliğini kaldırmanızı öneririz.
Uzun vadeli yapılandırma koşulları
Uygulamanız yalnızca karma şemayı destekleyen bir platform sürümünü hedeflediği sürece bu karma imzalama yapılandırmasını korumanız gerekir. Platform sürümü tek imzalayanlı PQC anahtarlarını desteklese bile, v3.2 karma blok gerektiren bir sürümü hedefleyen tüm APK'ları her iki anahtarla da imzalamanız gerekir.
APK imza şeması v3.2 bloğu
APK İmza Bloğu, v3.2 imza bloğunu v2, v3.0 ve v3.1 imza bloklarıyla birlikte depolar.
3.2 sürümündeki blok yapısı 3.0 sürümüne benzer ancak karma blok olduğunu belirtmek için yeni bir blok kimliği olan 0x70e1c89f kullanır. Geçerli bir v3.2
bloğu tam olarak iki imzalayan içermelidir.
Desteklenen algoritmalar
v3.2 şeması başlangıçta aşağıdaki PQC imza algoritmalarını destekler:
- ML-DSA-65
- ML-DSA-87
Bunlar, hibrit bloğu oluşturmak için v3.0 ve v3.1'de desteklenenler gibi standart klasik imza algoritmalarıyla eşleştirilir.
Biçim
APK İmza Bloğu, APK İmza Şeması v3.2 bloğunu ID
0x70e1c89f altında saklar.
v3.2 bloğunun biçimi v3.0 ile aynıdır ancak üst düzey imzalayan öğeleri dizisi, aynı SDK sürümünü hedefleyen tam olarak iki giriş içermelidir:
- uzunluk önekli imzalayanın uzunluk önekli dizisi:
- uzunluk önekli imzalayan (Klasik)
- uzunluk ön ekli imzalayan (PQC)
Her imzalayan, standart v3 biçimini kullanır:
- uzunluk önekli imzalı veriler:
- uzunluk önekli özetlerin uzunluk önekli dizisi:
- imza algoritması kimliği (4 bayt)
- digest (length-prefixed)
- uzunluk ön ekli sertifika dizisi:
- uzunluk önekli X.509 sertifikası (ASN.1 DER formu)
- minSDK (uint32)
- maxSDK (uint32)
- Uzunluk önekli ek özelliklerin uzunluk önekli dizisi:
- Kimlik (uint32)
- değer (değişken uzunluk: ek özelliğin uzunluğu - 4 bayt)
- minSDK (uint32)
- maxSDK (uint32)
- uzunluk önekli imzaların uzunluk önekli dizisi:
- imza algoritması kimliği (4 bayt)
- İmzalı veriler üzerinde uzunluk önekli imza
- uzunluk önekli ortak anahtar (
SubjectPublicKeyInfo, ASN.1 DER biçimi)
Doğrulama
Android 17 (API düzeyi 37) ve sonraki sürümlerde v3.2 imzasını doğrulamak için platform hem klasik hem de PQC imzalayanları doğrular, uyumluluklarını onaylar ve örtülü rotasyon soyunu kontrol eder. Android 16 (API düzeyi 36) ve önceki platform sürümlerinde platform, bu karma imza bloğunu işlemez ve bunun yerine önceki şemaları kullanır.
Genel süreç şu şekildedir:
- APK İmza Şeması v3.2 Bloğu'nu (ID 0x70e1c89f) bulun.
- Blokta tam olarak iki imza sahibi olduğunu doğrulayın. İki adetten az veya fazla varsa doğrulama işlemi başarısız olur.
- Bir imzalayanın klasik imza algoritması, diğerinin ise PQC imza algoritması kullandığını doğrulayın. Her ikisi de klasik veya her ikisi de PQC ise doğrulama başarısız olur.
- Her iki imzalayanın da tam olarak aynı SDK aralığını (
minSdkVersionvemaxSdkVersion) hedeflediğini doğrulayın. - İki imzalayanın her biri için standart v3 doğrulamasını gerçekleştirin:
- İmzalar arasından desteklenen en güçlü imza algoritması kimliğini seçin.
- Ortak anahtarı kullanarak imzalı verilerdeki imzalarla ilgili imzayı doğrulayın.
- İmzalı verilerdeki
minSdkVersionvemaxSdkVersiondeğerlerinin, imzasızminSdkVersionvemaxSdkVersiondeğerleriyle eşleştiğini doğrulayın. - Sertifikaları ayrıştırın ve ilk sertifikanın ortak anahtarla eşleştiğini doğrulayın.
- Ek özellikleri ayrıştırarak rotasyon kanıtı yapılarını ayıklayın.
- İmzalama geçmişini (rotasyon kanıtı) doğrulayın:
- Her iki imza sahibinin de aynı önceki imza geçmişine sahip olduğunu kontrol edin.
- Soy uzunlukları eşleşmeli ve mevcut imzalayanlara kadar olan tüm sertifikalar ve özellik işaretleri aynı olmalıdır.
- Geçmişler eşleşiyorsa soy ağaçlarını birleştirin: Klasik imzalayanın sertifikasını PQC imzalayanın sertifikasının öncülü olarak kabul edin ve PQC imzalayanı mevcut terminal düğümü olarak atayın.
- İçerik Özetlerini Doğrulama:
- Her iki imzalayan için özet haritasında yineleme yapın.
- Eşleşen özet algoritmaları için hesaplanan özet değerlerinin klasik ve PQC imzalayanlar arasında aynı olduğunu doğrulayın.
- APK içeriklerinin bütünlüğünü doğrulamak için doğrulanmış imzalayanlardan alınan eşleşen özetleri kullanın (v2 ve v3'e benzer şekilde).
- Uygulama zaten yüklüyse paket güncelleme soyunu doğrulayın:
- Tek imzalayandan güncelleme: Yüklenen uygulama tek bir klasik anahtarla imzalandıysa bu anahtar, yeni karma blokun imzalama soyunda karma imzalayanların öncüsü olarak bulunmalıdır.
- Hibrit imzalayan sürümünden hibrit imzalayan sürümüne güncelleme yaparak hibrit imzalamaya devam etme: Yüklü uygulama v3.2 hibrit bloğuyla imzalandıysa hem önceki klasik hem de PQC anahtarları, güncelleme APK'sının v3.2 bloğunda mevcut etkin imzalayanlar olarak kalmalı veya her ikisi de yeni döndürülmüş hibrit anahtarları onaylayan yeni imzalama soyunda bulunmalıdır.
- Karma imzalama yönteminden tek imzalama yöntemine geçiş: Yüklü uygulama v3.2 karma blokla imzalandıysa ve güncelleme APK'sı tek imzalama yöntemine (PQC veya klasik) geri dönüyorsa önceki karma imzalama yöntemlerinin her ikisi de güncelleme APK'sının imzalama geçmişinde yer almalı ve yeni tek imzalama anahtarını onaylamalıdır.
- Geçersiz güncelleme yolları: Bir geliştirici, karma imzalı bir uygulamayı yalnızca karma anahtarlardan birini tek imzalayan olarak kullanarak uygun bir rotasyon olmadan güncellemeye çalışırsa güncelleme başarısız olur. Düşürme saldırılarını önlemek için her iki anahtar da açıkça geçişe dahil edilmelidir.
- Adımlardan herhangi biri başarısız olursa doğrulama işlemi başarısız olur.
Soyma koruması
Daha düşük imza şemalarına yönelik düşürme saldırılarını önlemek için v3.2 şeması, önceki şema yinelemelerine benzer şekilde koruma özelliklerini kaldırma özelliğini içerir.
İmzalama aracı, v3.0 ve v3.1 imza bloklarının ek özelliklerine iki özel karma çıkarma koruması özelliği yazar. Bu özellikler, v3.2 hibrit bloğunun bulunması ve doğrulanması gereken tam SDK sürümü sınırlarını tanımlar:
- Minimum SDK sürümü özelliği (kimlik:
0xbf940529): Bu özelliğin değeri, karma imzalama bloğu tarafından desteklenen minimum SDK sürümünü belirler. - Maksimum SDK sürümü özelliği
(kimlik
0x9f06b79c): Bu özelliğin değeri, karma imzalama bloğunun desteklediği maksimum SDK sürümünü belirler. Bu özellik, daha yeni platform sürümlerinde karma imza gerekmediğinde tek imzalayanlı yapılandırmaya geçiş yapmanıza olanak tanır.
Platform, blok eksik olduğu veya SDK aralığı cihaz için geçerli olmadığı için v3.2 doğrulamasını atlıyorsa APK'yı mevcut olan bir sonraki blokla karşılaştırarak doğrular. Önceki blokta bu sıyırma koruması özellikleri varsa platform aşağıdaki kontrolleri uygular:
- Varlık ve aralık doğrulama: v3.0 veya v3.1 imza bloğu minimum SDK özelliğini (ID
0xbf940529, değer X) ya da maksimum SDK özelliğini (ID0x9f06b79c, değer Y) içeriyorsa platform, APK'da v3.2 karma bloğunun bulunmasını zorunlu kılar. Platform, hedeflediği SDK aralığının bu özellikler tarafından belirtilen sınırlara uygun olduğunu doğrulamak için karma bloğu okur. v3.2 bloğu eksikse veya dahili minimum ve maksimum SDK hedef değerleri X ve Y değerlerine eşit değilse platform yüklemeyi reddeder. - Aralık içinde zorunlu kılma: Cihazın SDK sürümü, bu özellikler tarafından belirtilen geçerli aralıkta (maksimum özelliği sağladığınızda X'e eşit veya daha büyük, Y'ye eşit veya daha küçük) yer alıyorsa platform, imza doğrulaması için v3.2 karma blokunun kullanılmasını zorunlu kılar. Platform, bu hedef SDK aralığındaki bir cihazda v3.0 veya v3.1 blokunu doğrularsa v3.2 bloku kötü amaçlı olarak atlandığı ya da kaldırıldığı için platform yüklemeyi reddeder.
Platform, bu sınırları zorunlu kılarak bir APK'nın ne zaman v3.2 bloğu içermesi gerektiğini belirler. Blok kaldırılmışsa platform, sürüm düşürme saldırısını önlemek için yüklemeyi reddeder.
Uygulamanızı doğrulama
v3.2 imza şemasını uygulamanızı test etmek için HybridSignatureVerificationTest.java konumundaki cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ CTS testlerini çalıştırın.
Bu testler, başarılı yüklemeler, yalnızca klasik sürümlerden yapılan güncellemeler, ROLLBACK özelliği kullanılarak yapılan geri alma geçişleri ve sıyırma saldırısı azaltma doğrulamaları dahil olmak üzere kapsamlı bir senaryo grubunu kapsar.