UICC operatör ayrıcalıkları

Android 5.1, evrensel entegre devre kartı (UICC) uygulamalarının sahipleriyle alakalı API'lere özel ayrıcalıklar sağlamak için bir mekanizma sundu. Android platformu, bir UICC'de depolanan sertifikaları yükler ve bir dizi özel API'ye çağrı yapmak için bu sertifikalar tarafından imzalanan uygulamalara izin verir.

Android 7.0, bu özelliği UICC operatör ayrıcalığı kuralları için diğer depolama kaynaklarını destekleyecek şekilde genişleterek API'leri kullanabilen operatörlerin sayısını önemli ölçüde artırdı. API referansı için CarrierConfigManager'a bakın. Talimatlar için Operatör Yapılandırması'na bakın.

Operatörler, UICC üzerinde tam kontrole sahiptir. Bu nedenle bu mekanizma, cihazlarda özel ayrıcalıkları korurken ve uygulamaları cihaz başına platform sertifikasıyla imzalama veya sistem uygulaması olarak önceden yükleme gerekmeden, genel uygulama dağıtım kanallarında (Google Play gibi) barındırılan mobil ağ operatöründen (MNO) uygulamaları yönetmenin güvenli ve esnek bir yolunu sunar.

UICC'deki kurallar

UICC'deki depolama alanı, GlobalPlatform Güvenli Öğe Erişimi Kontrolü spesifikasyonu ile uyumludur. Karttaki uygulama tanımlayıcısı (AID) A00000015141434C00'tür ve kartta depolanan kuralları almak için standart GET DATA komutu kullanılır. Bu kuralları, kartın kablosuz (OTA) güncellemeleri aracılığıyla güncelleyebilirsiniz.

Veri hiyerarşisi

UICC kuralları aşağıdaki veri hiyerarşisini kullanır (parantez içindeki iki karakterli harf ve sayı kombinasyonu, nesne etiketidir). Her kural REF-AR-DO (E2) şeklindedir ve REF-DO ile AR-DO öğelerinin birleşiminden oluşur:

  • REF-DO (E1), DeviceAppID-REF-DO veya DeviceAppID-REF-DO ile PKG-REF-DO'in bir birleşimini içerir.
    • DeviceAppID-REF-DO (C1), sertifikanın SHA-1 (20 bayt) veya SHA-256 (32 bayt) imzasını depolar.
    • PKG-REF-DO (CA), manifestte tanımlanan, ASCII kodlu, maksimum uzunluğu 127 bayt olan tam paket adı dizesidir.
  • AR-DO (E3), 64 ayrı izni temsil eden 8 bayt bitlik bir maske olan PERM-AR-DO (DB) öğesini içerecek şekilde genişletildi.

PKG-REF-DO yoksa sertifika tarafından imzalanan tüm uygulamalara erişim izni verilir. Aksi takdirde hem sertifikanın hem de paket adının eşleşmesi gerekir.

Kural örneği

Uygulama adı com.google.android.apps.myapp ve onaltılık dizedeki SHA-1 sertifikası:

AB:CD:92:CB:B1:56:B2:80:FA:4E:14:29:A6:EC:EE:B6:E5:C1:BF:E4

On altılık dizedeki UICC kuralı:

E243 <= 43 is value length in hex
  E135
    C114 ABCD92CBB156B280FA4E1429A6ECEEB6E5C1BFE4
    CA1D 636F6D2E676F6F676C652E616E64726F69642E617070732E6D79617070
  E30A
    DB08 0000000000000001

Erişim kuralı dosyası desteği

Android 7.0, erişim kuralı dosyasından (ARF) operatör ayrıcalık kurallarını okuma desteği ekler.

Android platformu, önce erişim kuralı uygulaması (ARA) AID A00000015141434C00'yi seçmeye çalışır. UICC'de AID'yi bulamazsa PKCS15 AID'yi A000000063504B43532D3135 seçerek ARF'ye geri döner. Ardından Android, 0x4300 adresindeki erişim denetimi kuralları dosyasını (ACRF) okur ve FFFFFFFFFFFF AID'sine sahip girişleri arar. Farklı AID'lere sahip girişler yoksayılır. Bu nedenle, diğer kullanım alanlarına yönelik kurallar birlikte var olabilir.

Onaltılık dizedeki örnek ACRF içeriği:

30 10 A0 08 04 06 FF FF FF FF FF FF 30 04 04 02 43 10

Örnek erişim denetimi koşulları dosyası (ACCF) içeriği:

30 16 04 14 61 ED 37 7E 85 D3 86 A8 DF EE 6B 86 4B D8 5B 0B FA A5 AF 81

Yukarıdaki örnekte 0x4310, 61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81 sertifika karmasını içeren ACCF adresidir. Bu sertifikayla imzalanan uygulamalara operatör ayrıcalıkları verilir.

Etkin API'ler

Android aşağıdaki API'leri destekler.

TelephonyManager

TelephonyCallback

TelephonyCallback, kayıtlı durumlar değiştiğinde arayan uygulamayı bilgilendirmek için geri çağırma yöntemi içeren arayüzlere sahiptir:

Abonelik Yöneticisi

SmsManager

CarrierConfigManager

Talimatlar için Operatör Yapılandırması başlıklı makaleyi inceleyin.

Hata Raporu Yöneticisi

Hata raporunun yalnızca bağlantıyla ilgili sorunları hata ayıklamayla ilgili bilgileri içeren özel bir sürümü olan bağlantı hata raporunu başlatma yöntemi: startConnectivityBugreport

NetworkStatsManager

ImsMmTelManager

ImsRcsManager

ProvisioningManager

EuiccManager

Belirtilen aboneliğe geçme (etkinleştirme) yöntemi: switchToSubscription

CarrierMessagingService

Yeni SMS ve MMS gönderildiğinde veya alındığında sistemden çağrı alan hizmet. Bu sınıfı genişletmek için manifest dosyanızda hizmeti android.Manifest.permission#BIND_CARRIER_MESSAGING_SERVICE izniyle bildirin ve #SERVICE_INTERFACE işlemiyle bir intent filtresi ekleyin. Yöntemler şunlardır:

CarrierService

Operatöre özgü işlevleri sisteme sunan hizmet. Bu sınıfı genişletmek için hizmeti uygulama manifest dosyasında android.Manifest.permission#BIND_CARRIER_SERVICES izniyle beyan edin ve CARRIER_SERVICE_INTERFACE işlemini içeren bir intent filtresi ekleyin. Hizmetin uzun ömürlü bir bağlaması varsa hizmetin meta verilerinde android.service.carrier.LONG_LIVED_BINDING değerini true olarak ayarlayın.

Platform, operatör hizmeti işleminin özel bir uygulama bekleme havuzunda çalışmasına izin vermek için CarrierService'ü özel işaretlerle bağlar. Bu, operatör hizmet uygulamasının uygulama boşta kalma kısıtlamasından muaf tutulmasını sağlar ve cihaz belleği düşük olduğunda uygulamanın etkin kalma olasılığını artırır. Ancak operatör hizmeti uygulaması herhangi bir nedenle kilitlenirse uygulama yeniden başlatılıp bağlama yeniden kurulana kadar yukarıdaki tüm ayrıcalıkları kaybeder. Bu nedenle, operatör hizmet uygulamasının kararlı kalması kritik önem taşır.

CarrierService içindeki yöntemler şunlardır:

  • Operatöre özgü yapılandırmaları geçersiz kılmak ve ayarlamak için: onLoadConfig
  • Operatör uygulaması tarafından yapılacak bir operatör ağı değişikliği hakkında sistemi bilgilendirmek için: notifyCarrierNetworkChange

Telefon hizmeti sağlayıcısı

Telefon veritabanında değişiklik (ekle, sil, güncelle, sorgu) yapılmasına olanak tanıyan içerik sağlayıcı API'leri. Değer alanları Telephony.Carriers adresinde tanımlanır. Daha fazla bilgi için Telephony sınıf referansına bakın.

Kablosuz Ağ Önerisi

Bir WifiNetworkSuggestion nesnesi oluştururken abonelik kimliği veya abonelik grubu ayarlamak için aşağıdaki yöntemleri kullanın:

Android platformu

Algılanan bir UICC'de platform, UICC'nin bir parçası olarak operatör ayrıcalık kurallarını içeren dahili UICC nesneleri oluşturur. UiccCarrierPrivilegeRules.java kuralları yükler, UICC kartından ayrıştırır ve bellekte önbelleğe alır. Ayrıcalık kontrolü gerektiğinde UiccCarrierPrivilegeRules, arayanın sertifikasını kendi kurallarıyla tek tek karşılaştırır. UICC kaldırılırsa kurallar, UICC nesnesi ile birlikte yok edilir.

Doğrulama

CtsCarrierApiTestCases.apk kullanarak Compatibility Test Suite (CTS) aracılığıyla uygulamayı doğrulamak için doğru UICC kurallarına veya ARF desteğine sahip bir geliştirici UICC'niz olmalıdır. Tercih ettiğiniz SIM kart tedarikçisinden, bu bölümde açıklandığı gibi doğru ARF ile bir geliştirici UICC'si hazırlamasını isteyin ve testleri çalıştırmak için bu UICC'yi kullanın. UICC, CTS testlerini geçmek için aktif hücresel hizmet gerektirmez.

UICC'yi hazırlama

Android 11 ve önceki sürümlerde CtsCarrierApiTestCases.apk, aosp-testkey tarafından 61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81 karma oluşturma değeriyle imzalanır.

Android 12'den itibaren CtsCarrierApiTestCases.apk, cts-uicc-2021-testkey tarafından imzalanır. Karma değeri CE:7B:2B:47:AE:2B:75:52:C8:F9:2C:C2:91:24:27:98:83:04:1F:B6:23:A5:F1:94:A8:2C:9B:F1:5D:49:2A:A0'dir.

Android 12'de CTS operatör API'si testlerini çalıştırmak için cihazın, üçüncü taraf GSMA TS.48 Test Profili spesifikasyonunun en son sürümünde belirtilen koşulları karşılayan CTS operatör ayrıcalıklarına sahip bir SIM kullanması gerekir.

Aynı SIM, Android 12'den önceki sürümlerde de kullanılabilir.

CTS SIM profilini değiştirme

  1. Ekle: Erişim kuralı uygulama ana dosyasına (ARA-M) veya ARF'ye CTS operatör ayrıcalıkları. Her iki imza da operatör ayrıcalık kurallarına kodlanmalıdır:
    1. Karma1(SHA1): 61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81
    2. Hash2(SHA256): CE:7B:2B:47:AE:2B:75:52:C8:F9:2C:C2:91:24:27:98:83:04:1F:B6:23:A5:F1:94:A8:2C:9B:F1:5D:49:2A:A0
  2. Oluştur: TS.48'de bulunmayan ve CTS için gereken ADF USIM temel dosyaları (EF'ler):
    1. EF_MBDN (6FC7), kayıt boyutu: 28, kayıt numarası: 4
      • İçerik
        1. Kayıt1: 566F696365204D61696CFFFFFFFF0691515555555FF…FF
        2. Rec2-n: FF…FF
    2. EF_EXT6 (6FC8), kayıt boyutu:13, kayıt numarası: 1
      • İçerik: 00FF...FF
        1. EF_MBI (6FC9), kayıt boyutu: 4, kayıt numarası: 1
      • İçerik: Rec1: 01010101
        1. EF_MWIS (6FCA), kayıt boyutu: 5, kayıt numarası: 1
      • İçerik: 0000000000
  3. Değiştirme: USIM hizmet tablosu: 47 ve 48 numaralı hizmetleri etkinleştirin
    1. EF_UST (6F38)
      • İçerik: 9EFFBF1DFFFE0083410310010400406E01
  4. Değiştir: DF-5GS ve DF-SAIP dosyaları
    1. DF-5GS - EF_5GS3GPPLOCI (USIM/5FC0/4F01)
      • İçerik: FFFFFFFFFFFFFFFFFFFFFFFFFF42F618FFFFFE01
    2. DF-5GS - EF_5GSN3GPPLOCI (USIM/5FC0/4F02)
      • İçerik: FFFFFFFFFFFFFFFFFFFFFFFFFF42F618FFFFFE01
    3. DF-5GS - EF SUCI_Calc_Info (USIM/5FC0/4F07)
      • İçerik: A0020000FF…FF
    4. DF-SAIP - EF SUCI_Calc_Info_USIM (USIM/5FD0/4F01)
      • İçerik: A0020000FF…FF
  5. Değiştirme: Bu tanımı içeren ilgili EF'lerde Android CTS taşıyıcı adı dizesini kullanın:
    1. EF_SPN (USIM/6F46)
      • İçerik: 01416E64726F696420435453FF..FF
    2. EF_PNN (USIM/6FC5)
      • İçerik: Rec1 430B83413759FE4E934143EA14FF..FF

Test profili yapısıyla eşleşme

Aşağıdaki genel test profili yapılarının en son sürümünü indirip eşleştirin. Bu profillerde kişiselleştirilmiş CTS Operatör Ayrıcalığı kuralı veya yukarıda listelenen diğer değişiklikler bulunmaz.

Test çalıştırma

CTS, kolaylık sağlamak için testlerin yalnızca aynı jetonla yapılandırılan cihazlarda çalıştırılmasını kısıtlayan bir cihaz jetonunu destekler. Carrier API CTS testleri, cihaz jetonu sim-card-with-certs'ü destekler. Örneğin, aşağıdaki cihaz jetonu, operatör API testlerini yalnızca abcd1234 adlı cihazda çalışacak şekilde kısıtlar:

cts-tradefed run cts  --device-token abcd1234:sim-card-with-certs

Bir test, cihaz jetonu kullanmadan çalıştırıldığında tüm cihazlarda çalıştırılır.

SSS

UICC'de sertifikalar nasıl güncellenebilir?

Y: Mevcut kart OTA güncelleme mekanizmasını kullanın.

UICC diğer kurallarla birlikte kullanılabilir mi?

Y: UICC'de aynı AID altında başka güvenlik kurallarının olması sorun değildir. Platform bunları otomatik olarak filtreler.

UICC, üzerindeki sertifikalara dayanan bir uygulama için kaldırıldığında ne olur?

C: UICC kaldırıldığında UICC ile ilişkili kurallar yok edildiği için uygulama ayrıcalıklarını kaybeder.

UICC'deki sertifika sayısına ilişkin bir sınır var mı?

C: Platform, sertifika sayısını sınırlamaz. Ancak kontrol doğrusal olduğundan çok fazla kural, kontrolde gecikmeye neden olabilir.

Bu yöntemle destekleyebileceğimiz API sayısıyla ilgili bir sınır var mı?

Y: Hayır ancak kapsamı operatörle ilgili API'lerle sınırlıyoruz.

Bu yöntemin kullanılması yasak olan API'ler var mı? Varsa bu yaptırımları nasıl uygularsınız? (yani, bu yöntemle hangi API'lerin desteklendiğini doğrulamak için testleriniz var mı?)

Y: Android Uyumluluk Tanım Belgesi'nin (CDD) API Davranış Uyumluluğu bölümüne bakın. API'lerin izin modelinin değişmediğinden emin olmak için bazı CTS testlerimiz var.

Çoklu SIM özelliğiyle bu özelliğin işleyiş şekli

C: Kullanıcı tarafından belirtilen varsayılan SIM kullanılır.

Bu, diğer SE erişim teknolojileri (ör. SEEK) ile herhangi bir şekilde etkileşime giriyor veya örtüşüyor mu?

C: Örneğin, SEEK, UICC'dekiyle aynı AID'yi kullanır. Bu nedenle kurallar birlikte bulunur ve SEEK veya UiccCarrierPrivileges tarafından filtrelenir.

Operatör ayrıcalıklarını ne zaman kontrol etmeliyim?

C: SIM durumu yüklendi yayınından sonra.

OEM'ler, operatör API'lerinin bir kısmını devre dışı bırakabilir mi?

Y: Hayır. Mevcut API'lerin minimum düzeyde olduğuna inanıyoruz ve gelecekte daha ayrıntılı kontrol için bit maskesini kullanmayı planlıyoruz.

setOperatorBrandOverride, operatör ad dizelerinin diğer TÜM biçimlerini geçersiz kılar mı? Örneğin, SE13, UICC SPN veya ağa dayalı NITZ?

Evet, operatör markasını geçersiz kılma işlemi en yüksek önceliğe sahip. Bu ayar etkinleştirildiğinde, operatör adı dizelerinin TÜM diğer biçimleri geçersiz kılınır.

injectSmsPdu yöntem çağrısı ne işe yarar?

C: Bu yöntem, bulutta SMS yedekleme/geri yüklemeyi kolaylaştırır. injectSmsPdu çağrısı, geri yükleme işlevini etkinleştirir.

SMS filtrelemesi için onFilterSms çağrısı, SMS UDH bağlantı noktası filtrelemesine mi dayalı? Yoksa operatör uygulamalarının gelen TÜM SMS'lere erişimi var mı?

C: Operatörler tüm SMS verilerine erişebilir.

DeviceAppID-REF-DO'un 32 bayt desteklemek için genişletilmesi, mevcut GP spesifikasyonuyla (yalnızca 0 veya 20 bayta izin verir) uyumlu değil. Peki bu değişikliği neden uyguluyoruz? SHA-1, çakışmaları önlemek için yeterli değil mi? Mevcut ARA-M/ARF ile geriye dönük uyumlu olmayabileceği için bu değişikliği GP'ye önerdiniz mi?

C: Bu uzantı, gelecekte de geçerli olacak bir güvenlik sağlamak için DeviceAppID-REF-DO için SHA-1'e ek olarak SHA-256'yı da kullanıma sunar. SHA-1 şu anda GP SEAC standardındaki tek seçenektir. SHA-256 kullanmanızı önemle tavsiye ederiz.

DeviceAppID 0 (boş) ise kuralı belirli bir kural kapsamında olmayan tüm cihaz uygulamalarına mı uyguluyorsunuz?

Y: Operatör API'leri için DeviceAppID-REF-DO doldurulmalıdır. Boş olması test amaçlıdır ve operasyonel dağıtımlarda önerilmez.

Şartnamenize göre, DeviceAppID-REF-DO olmadan tek başına kullanılan PKG-REF-DO kabul edilmemelidir. Ancak yine de spesifikasyondaki Tablo 6-4'te REF-DO tanımının genişletilmesi olarak tanımlanmaktadır. Bunu bilerek mi yaptınız? REF-DO içinde yalnızca PKG-REF-DO kullanıldığında kod nasıl davranır?

Y: REF-DO içinde PKG-REF-DO'un tek değerli bir öğe olarak yer alması seçeneği son sürümde kaldırıldı. PKG-REF-DO yalnızca DeviceAppID-REF-DO ile birlikte kullanılmalıdır.

Tüm operatör tabanlı izinlere erişim izni verebileceğimizi veya daha ayrıntılı kontrol sahibi olabileceğimizi varsayıyoruz. Öyleyse bit maskesi ile gerçek izinler arasındaki eşlemeyi ne tanımlar? Sınıf başına bir izin mi? Her yöntem için bir izin mi? Uzun vadede 64 ayrı izin yeterli mi?

C: Bu özellik gelecek için ayrılmıştır. Önerilerinizi bekliyoruz.

Android için özel olarak DeviceAppID öğesini daha ayrıntılı tanımlayabilir misiniz? Bu, belirli bir uygulamayı imzalamak için kullanılan yayıncı sertifikasının SHA-1 (20 bayt) karma değeridir. Dolayısıyla, ad bu amacı yansıtmamalı mı? (Kural aynı yayıncı sertifikasıyla imzalanan tüm uygulamalar için geçerli olduğundan bu ad birçok okuyucu için kafa karıştırıcı olabilir.)

Y: DeviceAppID sertifikaları depolama mevcut spesifikasyon tarafından desteklenir. Kullanıma geçişin önündeki engelleri azaltmak için spesifikasyon değişikliklerini en aza indirmeye çalıştık. Ayrıntılar için UICC'deki kurallar başlıklı makaleyi inceleyin.