Android 5.1 ha introdotto un meccanismo per concedere privilegi speciali alle API per i proprietari delle app di schede a circuiti integrati universali (UICC). La La piattaforma Android carica i certificati archiviati su un UICC e concede l'autorizzazione a app firmate da questi certificati per effettuare chiamate a una manciata di API speciali.
Android 7.0 ha esteso questa funzionalità al supporto di altre origini di archiviazione per UICC regole sui privilegi dell'operatore, aumentando il numero di operatori che possono utilizzare le API. Come riferimento per le API, consulta CarrierConfigManager; per avere istruzioni, consulta Operatore Configurazione.
Gli operatori hanno il controllo completo dello UICC, quindi questo meccanismo fornisce una un modo sicuro e flessibile per gestire le app dall'operatore di rete mobile (MNO) ospitati su canali di distribuzione generici di app (come Google Play) mentre che conservano privilegi speciali sui dispositivi e senza la necessità di firmare le app con il certificato della piattaforma per dispositivo o preinstallarla come app di sistema.
Regole su UICC
Lo spazio di archiviazione nello UICC è compatibile con
Piattaforma globale
Specifica Secure Element Access Control. L'identificatore dell'app
(AID) sulla carta è A00000015141434C00
e lo standard
GET DATA
per recuperare le regole memorizzate nella scheda. Puoi aggiornare queste regole
tramite aggiornamenti OTA (card over-the-air).
Gerarchia dei dati
Le regole UICC utilizzano la seguente gerarchia di dati (la lettera a due caratteri e
la combinazione di numeri tra parentesi è il tag dell'oggetto). Ogni regola è
REF-AR-DO
(E2
) ed è costituito da una concatenazione di
REF-DO
e AR-DO
:
REF-DO
(E1
) contieneDeviceAppID-REF-DO
o una concatenazione diDeviceAppID-REF-DO
ePKG-REF-DO
.DeviceAppID-REF-DO
(C1
) archivia l'algoritmo SHA-1 (20 byte) o una firma SHA-256 (32 byte) del certificato.PKG-REF-DO
(CA
) è il nome completo del pacchetto stringa definita nel manifest, con codifica ASCII, lunghezza massima 127 byte.
AR-DO
(E3
) è stato esteso per includerePERM-AR-DO
(DB
), che è un bit da 8 byte che rappresenta 64 autorizzazioni separate.
Se PKG-REF-DO
non è presente, qualsiasi app firmata dal certificato
se un utente dispone dell'autorizzazione di accesso. altrimenti sia il certificato che il nome del pacchetto
corrispondono.
Esempio di regola
Il nome dell'app è com.google.android.apps.myapp
e
Il certificato SHA-1 nella stringa esadecimale è:
AB:CD:92:CB:B1:56:B2:80:FA:4E:14:29:A6:EC:EE:B6:E5:C1:BF:E4
La regola nell'UICC in stringa esadecimale è:
E243 <= 43 is value length in hex E135 C114 ABCD92CBB156B280FA4E1429A6ECEEB6E5C1BFE4 CA1D 636F6D2E676F6F676C652E616E64726F69642E617070732E6D79617070 E30A DB08 0000000000000001
Supporto dei file delle regole di accesso
Android 7.0 aggiunge il supporto per la lettura delle regole dei privilegi dell'operatore dall'accesso file di regole (ARF).
La piattaforma Android tenta innanzitutto di selezionare l'applicazione della regola di accesso
(ARA) AIUTO A00000015141434C00
. Se non trova
l'AID sulla UICC, quest'ultimo torna all'ARF selezionando l'AID PKCS15
A000000063504B43532D3135
. Android legge quindi
file delle regole di controllo dell'accesso (ACRF) all'indirizzo 0x4300
e cerca le voci
con AID FFFFFFFFFFFF
. Le voci con AID diversi vengono ignorate, quindi
per altri casi d'uso possono coesistere.
Esempio di contenuto ACRF nella stringa esadecimale:
30 10 A0 08 04 06 FF FF FF FF FF FF 30 04 04 02 43 10
Esempio di contenuto del file delle condizioni di controllo dell'accesso (ACCF):
30 16 04 14 61 ED 37 7E 85 D3 86 A8 DF EE 6B 86 4B D8 5B 0B FA A5 AF 81
Nell'esempio precedente, 0x4310
è l'indirizzo per ACCF, che
contiene l'hash del certificato
61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81
. App
firmato da questo certificato. Vengono concessi i privilegi di operatore.
API abilitate
Android supporta le API riportate di seguito.
Gestore telefonia
- Metodo per consentire all'app dell'operatore di chiedere all'UICC una sfida/risposta:
getIccAuthentication
. - Metodo per verificare se all'app per le chiamate è stato concesso l'operatore
privilegiati:
hasCarrierPrivileges
. - Metodi per sostituire marca e numero:
- Metodi per la comunicazione diretta UICC:
- Metodo per impostare la modalità dispositivo su globale:
setPreferredNetworkTypeToGlobal
. - Metodi per ottenere le identità dei dispositivi o della rete:
- Identità internazionale delle apparecchiature mobili (IMEI):
getImei
- MEID (Mobile Equipment Identifier):
getMeid
- Identificatore di accesso alla rete (NAI):
getNai
- Numero di serie della SIM:
getSimSerialNumber
- Identità internazionale delle apparecchiature mobili (IMEI):
- Metodo per ottenere la configurazione dell'operatore:
getCarrierConfig
- Metodo per ottenere il tipo di rete per la trasmissione dati:
getDataNetworkType
- Metodo per ottenere il tipo di rete per il servizio vocale:
getVoiceNetworkType
- Metodi per recuperare le informazioni sull'app UICC SIM (USIM):
- Numero di serie della SIM:
getSimSerialNumber
- Dati della carta:
getUiccCardsInfo
- GID1 (ID gruppo livello 1):
getGroupIdLevel1
- Stringa del numero di telefono per la riga 1:
getLine1Number
- Rete mobile terrestre pubblica (PLMN) vietata:
getForbiddenPlmns
- PLMN per casa equivalente:
getEquivalentHomePlmns
- Numero di serie della SIM:
- Metodi per ricevere o impostare un numero della segreteria:
- Metodo per inviare un codice tastiera speciale:
sendDialerSpecialCode
- Metodo per reimpostare il modem radio:
rebootModem
- Metodi per ottenere o impostare le modalità di selezione della rete:
- Metodo per richiedere una scansione della rete:
requestNetworkScan
- Metodi per recuperare o impostare i tipi di rete consentiti/preferiti:
- Metodi per verificare se i dati mobili o il roaming sono attivi in base alle impostazioni utente:
- Metodi per verificare o impostare la connessione dati con motivo:
- Metodo per recuperare l'elenco dei numeri di emergenza:
getEmergencyNumberList
- Metodi per controllare le reti opportunistiche:
- Metodi per impostare o cancellare la richiesta di aggiornamento dell'intensità del segnale cellulare:
Chiamata di telefonia
TelephonyCallback
ha interfacce con un metodo di callback per
invia una notifica all'app per le chiamate quando cambiano gli stati registrati:
- L'indicatore di messaggio in attesa è cambiato:
onMessageWaitingIndicatorChanged
- L'indicatore di deviazione chiamate è cambiato:
onCallForwardingIndicatorChanged
- Causa della disconnessione del sistema multimediale IP (IMS) modificata:
onImsCallDisconnectCauseChanged
- Lo stato preciso della connessione dati è cambiato:
onPreciseDataConnectionStateChanged
- L'elenco dei numeri di emergenza attuale è cambiato:
onEmergencyNumberListChanged
- ID abbonamento dati attivo modificato:
onActiveDataSubscriptionIdChanged
- Rete dell'operatore modificata:
onCarrierNetworkChange
- La registrazione della rete o un aggiornamento di posizione/routing/area di monitoraggio
non riuscito:
onRegistrationFailed
- La modifica delle informazioni di esclusione:
onBarringInfoChanged
- L'attuale configurazione del canale fisico è cambiata:
onPhysicalChannelConfigChanged
Gestore abbonamenti
- Metodi per recuperare varie informazioni sull'abbonamento:
- Metodo per ottenere il numero di abbonamenti attivi:
getActiveSubscriptionInfoCount
- Metodi per gestire i gruppi di abbonamenti:
- Metodi per ottenere o impostare la descrizione del piano di relazione di fatturazione tra un operatore e un abbonato specifico:
- Metodo per ignorare temporaneamente il piano di relazione di fatturazione tra un
operatore e un abbonato specifico per essere considerati senza limiti:
setSubscriptionOverrideUnmetered
- Metodo per ignorare temporaneamente il piano di relazione di fatturazione tra un
operatore e un abbonato specifico per essere considerati congestionati:
setSubscriptionOverrideCongested
- Metodo per verificare se l'app con il contesto specificato è
hai l'autorizzazione a gestire l'abbonamento in questione in base ai relativi metadati:
canManageSubscription
Gestore SMS
- Metodo per consentire al chiamante di creare nuovi SMS in arrivo:
injectSmsPdu
. - Metodo per inviare un messaggio SMS basato su testo senza scrivere nell'SMS
fornitore:
sendTextMessageWithoutPersisting
CarrierConfigManager
- Metodo di notifica modificato:
notifyConfigChangedForSubId
. - Metodo per ottenere la configurazione dell'operatore per l'abbonamento predefinito:
getConfig
- Metodo per ottenere la configurazione dell'operatore per l'abbonamento specificato:
getConfigForSubId
Per istruzioni, vedi Configurazione operatore.
Gestore segnalazione bug
Metodo per avviare una segnalazione di bug relativi alla connettività, che è una versione specializzata
la segnalazione di bug, che include solo informazioni per il debug della connettività
problemi:
startConnectivityBugreport
GestoreStats
- Metodo per eseguire una query sul riepilogo dell'utilizzo della rete:
querySummary
- Metodo per eseguire query sulla cronologia di utilizzo della rete:
queryDetails
- Metodi per registrare o annullare la registrazione del callback di utilizzo della rete:
ImsMmTelManager
- Metodi per registrare o annullare la registrazione del callback di registrazione MmTel IMS:
Gestore ImsRcs
- Metodi per registrare o annullare la registrazione del callback di registrazione RCS IMS:
- Metodi per ottenere lo stato di registrazione o il tipo di trasporto IMS:
ProvisioningManager
- Metodi per registrare e annullare la registrazione degli aggiornamenti del provisioning delle funzionalità IMS callback:
- Metodi relativi allo stato del provisioning per la funzionalità MmTel o RCS di IMS:
Gestore Euicc
Metodo per attivare (attivare) l'abbonamento specificato:
switchToSubscription
Servizio di messaggistica dell'operatore
Servizio che riceve chiamate dal sistema quando vengono inviati nuovi SMS ed MMS
ricevuto. Per estendere questa classe, dichiara il servizio nel file manifest con
android.Manifest.permission#BIND_CARRIER_MESSAGING_SERVICE
e includi un filtro per intent con #SERVICE_INTERFACE
un'azione. I metodi includono:
- Metodo per filtrare i messaggi SMS in entrata:
onFilterSms
- Metodo per intercettare messaggi SMS inviati dal dispositivo:
onSendTextSms
- Metodo per intercettare messaggi SMS binari inviati dal dispositivo:
onSendDataSms
- Metodo per intercettare lunghi messaggi SMS inviati dal dispositivo:
onSendMultipartTextSms
- Metodo per intercettare i messaggi MMS inviati dal dispositivo:
onSendMms
- Metodo per scaricare i messaggi MMS ricevuti:
onDownloadMms
Servizio vettore
Servizio che espone al sistema funzionalità specifiche dell'operatore. A
estendere questa classe, dichiara il servizio nel file manifest dell'app con
Autorizzazione android.Manifest.permission#BIND_CARRIER_SERVICES
e
Includi un filtro per intent con l'azione CARRIER_SERVICE_INTERFACE
.
Se il servizio ha un'associazione di lunga durata, imposta
Da android.service.carrier.LONG_LIVED_BINDING
a
true
nei metadati del servizio.
La piattaforma associa CarrierService
a flag speciali per consentire
il processo di servizio del corriere eseguito in uno speciale
del bucket in standby dell'app. In questo modo l'app di servizio dell'operatore viene esclusa
limitazione relativa all'inattività delle app e che queste ultime rimangano attive quando il dispositivo
è in esaurimento. Tuttavia, se per qualsiasi motivo l'app
del servizio dell'operatore si arresta in modo anomalo,
perde tutti i privilegi precedenti fino al riavvio dell'app e all'associazione
ristabilita. È quindi fondamentale mantenere stabile l'app del servizio dell'operatore.
I metodi in CarrierService
includono:
- Per eseguire l'override e impostare le configurazioni specifiche dell'operatore:
onLoadConfig
- Per informare il sistema di un cambiamento imminente e intenzionale della rete dell'operatore
l'app dell'operatore:
notifyCarrierNetworkChange
Fornitore di servizi di telefonia
API del fornitore di contenuti per consentire le modifiche (inserimento, eliminazione, aggiornamento, query)
al database della telefonia. I campi dei valori sono definiti
Telephony.Carriers
; per ulteriori dettagli, consulta
il riferimento del corso Telephony
Suggerimento rete Wi-Fi
Quando crei un oggetto WifiNetworkSuggestion
, utilizza quanto segue
per impostare un ID sottoscrizione o un gruppo di abbonamenti:
- Metodo per impostare un ID sottoscrizione:
setSubscriptionId
- Metodo per impostare un gruppo di abbonamenti:
setSubscriptionGroup
Piattaforma Android
Su un UICC rilevato, la piattaforma crea oggetti UICC interni che
Includere regole sui privilegi dell'operatore come parte
della UICC.
UiccCarrierPrivilegeRules.java
carica le regole, le analizza dalla scheda UICC e le memorizza nella memoria. Quando
è necessario un controllo dei privilegi, UiccCarrierPrivilegeRules
confronta
certificato del chiamante con le proprie regole una per una. Se lo UICC viene rimosso,
vengono eliminate insieme all'oggetto UICC.
Convalida
Per convalidare l'implementazione tramite
Suite di test di compatibilità (Compatibility Test Suite, CTS) utilizzando CtsCarrierApiTestCases.apk
,
devi avere uno sviluppatore UICC con le regole UICC corrette o il supporto ARF.
Chiedi al fornitore della scheda SIM di tua scelta di preparare uno sviluppatore UICC con la
ARF corretto come descritto in questa sezione e utilizzare tale UICC per eseguire i test. La
La UICC non richiede un servizio di rete cellulare attivo per superare i test CTS.
Prepara l'UICC
Per Android 11 e versioni precedenti, il valore di CtsCarrierApiTestCases.apk
è
firmato da aosp-testkey
, con valore hash
61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81
.
A partire da Android 12, CtsCarrierApiTestCases.apk
è
firmato da
cts-uicc-2021-testkey
, valore hash
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
.
Eseguire i test dell'API dell'operatore CTS in Android 12, il dispositivo deve utilizzare una SIM con l'operatore CTS che soddisfano i requisiti specificati nella versione più recente di la terza parte . Specifica del profilo di test GSMA TS.48.
La stessa SIM può essere utilizzata anche per versioni precedenti a Android 12.
Modifica il profilo SIM CTS
- Aggiungi: privilegi dell'operatore CTS in
app master (ARA-M) o ARF per la regola di accesso. Entrambe le firme devono essere
codificati nelle regole dei privilegi dell'operatore:
- Hash1(SHA1):
61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81
- 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
- Hash1(SHA1):
- Crea:file ADF USIM elementari (EF) non presenti in
TS.48 e richiesti per CTS:
- .
- EF_MBDN (6FC7), dimensione record: 28, numero record: 4
- Content (Contenuti)
- Rec1: 566F696365204D61696CFFFFFFFF06915155555555FF...FF
- Rec2-n: FF...FF
- Content (Contenuti)
- EF_EXT6 (6FC8), dimensione record:13, numero record: 1
- Contenuti: 00FF...FF
- EF_MBI (6FC9), dimensione record: 4, numero di record: 1
- Contenuto: Rec1: 01010101
- EF_MWIS (6FCA), dimensione record: 5, numero di record: 1
- Contenuti: 0000000000
- Contenuti: 00FF...FF
- EF_MBDN (6FC7), dimensione record: 28, numero record: 4
- Modifica: tabella di servizio USIM: Abilita servizi n°47, n°48
- .
- EF_UST (6F38)
- Contenuti:
9EFFBF1DFFFE0083410310010400406E01
- Contenuti:
- EF_UST (6F38)
- Modifica: file DF-5GS e DF-SAIP
- .
- DF-5GS - EF_5GS3GPPLOCI (USIM/5FC0/4F01)
- Contenuti:
FFFFFFFFFFFFFFFFFFFFFFFFFF42F618FFFFFE01
- Contenuti:
- DF-5GS - EF_5GSN3GPPLOCI (USIM/5FC0/4F02)
- Contenuti:
FFFFFFFFFFFFFFFFFFFFFFFFFF42F618FFFFFE01
- Contenuti:
- DF-5GS - EF SUCI_Calc_Info (USIM/5FC0/4F07)
- Contenuti:
A0020000FF…FF
- Contenuti:
- DF-SAIP - EF SUCI_Calc_Info_USIM (USIM/5FD0/4F01)
- Contenuti:
A0020000FF…FF
- Contenuti:
- DF-5GS - EF_5GS3GPPLOCI (USIM/5FC0/4F01)
- Modifica: utilizza la stringa del nome dell'operatore Android CTS.
nei rispettivi EF contenenti questa designazione:
- EF_SPN (USIM/6F46)
- Contenuti:
01416E64726F696420435453FF..FF
- Contenuti:
- EF_PNN (USIM/6FC5)
- Contenuti:
Rec1 430B83413759FE4E934143EA14FF..FF
- Contenuti:
- EF_SPN (USIM/6F46)
Abbina la struttura del profilo di test
Scarica e abbina la versione più recente delle seguenti strutture generiche di profili di test. Questi profili non avranno la regola Privilegio operatore CTS personalizzata o di altro tipo elencati sopra.
Esegui test
Per praticità, CTS supporta un token del dispositivo che limita
in modo che vengano eseguiti solo su dispositivi configurati con lo stesso token. CTS API Carrier
i test supportano il token del dispositivo sim-card-with-certs
. Ad esempio:
il seguente token del dispositivo limita l'esecuzione dei test dell'API dell'operatore solo sul dispositivo
abcd1234
:
cts-tradefed run cts --device-token abcd1234:sim-card-with-certs
Quando si esegue un test senza utilizzare un token del dispositivo, il test viene eseguito su tutti dispositivi mobili.
Domande frequenti
Come è possibile aggiornare i certificati nell'UICC?
R: Usa il meccanismo di aggiornamento OTA della carta esistente.
La UICC può coesistere con altre regole?
R: È possibile avere altre regole di sicurezza nell'UICC con lo stesso AID; la piattaforma li esclude automaticamente.
Cosa succede quando lo UICC viene rimosso per un'app che si basa sul certificati?
R: L'app perde i suoi privilegi a causa delle regole associate al UICC viene eliminato alla rimozione UICC.
Esiste un limite al numero di certificati nell'UICC?
R: La piattaforma non limita il numero di certificati; ma poiché Il controllo è lineare, troppe regole possono comportare una latenza per il controllo.
Esiste un limite al numero di API che possiamo supportare con questo ? .
R: No, ma limitiamo l'ambito alle API correlate all'operatore.
Esistono alcune API a cui è vietato utilizzare questo metodo? Se sì, come per applicarli? ovvero ci sono dei test per confermare quali API supportati con questo metodo?)
R: Consulta le Sezione Compatibilità comportamentale delle API della Compatibilità Android Definition Document (CDD). Abbiamo dei test CTS per assicurarci di autorizzazione delle API rimane invariato.
Come funziona con la funzionalità multi-SIM?
R: Viene utilizzata la SIM predefinita specificata dall'utente.
Interagisce in qualche modo o si sovrappone ad altri accessi di SE per la disabilità, come SEEK?
R: Ad esempio, SEEK utilizza lo stesso AID dell'UICC. Quindi le regole
coesistono e sono filtrati in base a SEEK o
UiccCarrierPrivileges
.
Qual è un buon momento per verificare i privilegi dell'operatore?
R: Dopo il caricamento dello stato della SIM, la trasmissione.
Gli OEM possono disabilitare parte delle API degli operatori?
R: No. Riteniamo che le API attuali siano l'insieme minimo e prevedono di utilizzare la maschera di bit per un controllo più granulare in futuro.
setOperatorBrandOverride
sostituisce TUTTI gli altri moduli
dell'operatore
stringhe di nomi? Ad esempio, SE13, UICC SPN o NITZ basato sulla rete?
Sì, l'override del brand dell'operatore ha la priorità più alta. Una volta impostato, sostituisce TUTTI con altre forme di stringhe con i nomi degli operatori.
A cosa serve la chiamata al metodo injectSmsPdu
?
R: Questo metodo facilita il backup/ripristino degli SMS nel cloud. La
La chiamata injectSmsPdu
attiva la funzione di ripristino.
Per il filtro SMS, la chiamata onFilterSms
si basa su
Filtro delle porte UDH SMS? Oppure le app dell'operatore hanno accesso a TUTTI gli SMS in arrivo?
R: Gli operatori hanno accesso a tutti i dati degli SMS.
L'estensione di DeviceAppID-REF-DO
al supporto
32 byte sembrano essere
incompatibile con l'attuale specifica GP (che consente solo 0 o 20 byte), quindi perché
state introducendo questa modifica? SHA-1 non è sufficiente per
evitare le collisioni? Hai già proposto questa modifica a GP, perché potrebbe
non essere compatibili con le versioni precedenti di ARA-M/ARF?
R: Per fornire una sicurezza a prova di futuro, questa estensione introduce l'algoritmo SHA-256
per DeviceAppID-REF-DO
oltre a SHA-1, che attualmente
l'unica opzione nello standard GP SEAC. Ti consigliamo vivamente di utilizzare l'algoritmo SHA-256.
Se DeviceAppID
è 0 (vuoto), applichi la regola a
tutte le app del dispositivo non interessate da una regola specifica?
R: Le API degli operatori richiedono la compilazione di DeviceAppID-REF-DO
.
Il campo vuoto è a scopo di test e non è consigliato per scopi operativi
deployment di machine learning.
di Gemini Advanced.
In base alle tue specifiche, PKG-REF-DO
usato solo
stessa, senza DeviceAppID-REF-DO
, non dovrebbe essere accettata. Ma
è comunque descritto nella Tabella 6-4 della specifica come estensione
definizione di REF-DO
. È intenzionale? In che modo il codice
Si comportano quando solo PKG-REF-DO
viene utilizzato in REF-DO
?
R: L'opzione di avere PKG-REF-DO
come singolo valore
elemento in REF-DO
è stato rimosso nell'ultima versione.
PKG-REF-DO
deve verificarsi solo in combinazione con
DeviceAppID-REF-DO
.
Partiamo dal presupposto di poter concedere l'accesso a tutte le autorizzazioni basate sull'operatore o avere un controllo più granulare. In tal caso, cosa definisce la mappatura tra il bit e le autorizzazioni effettive? Un'autorizzazione per corso? Un'autorizzazione per ? 64 autorizzazioni separate sono sufficienti nel lungo periodo? di Gemini Advanced.
R: Queste informazioni sono riservate per il futuro e siamo lieti di ricevere suggerimenti.
Puoi definire ulteriormente DeviceAppID
per Android?
nello specifico? Questo è il valore hash SHA-1 (20 byte) del publisher.
utilizzato per firmare l'app in questione, quindi il nome non dovrebbe rispecchiare che
che non ha uno scopo specifico? (Il nome potrebbe confondere molti lettori, in quanto la regola è quindi
applicabile a tutte le app firmate con lo stesso certificato del publisher.)
R: Il DeviceAppID
per l'archiviazione dei certificati è supportato dalla
specifica esistente. Abbiamo cercato di ridurre al minimo le modifiche alle specifiche per abbassare la barriera
e all'adozione dei nuovi strumenti. Per maggiori dettagli, consulta l'articolo Regole per UICC.