Android 5.1 版推出了一項機制,可為 API 授予特殊權限 與通用整合電路卡 (UICC) 應用程式的擁有者相關。 Android 平台會載入儲存在 UICC 上的憑證,並授予以下權限: ,以便呼叫幾個特殊 API。
Android 7.0 擴充了這項功能,以支援 UICC 的其他儲存空間來源 大幅超越電信業者的特殊權限規範 增加可使用 API 的電信業者數量如需 API 參考資料 請參閱 CarrierConfigManager如需操作說明, 查看電信業者 設定。
電信業者可以完全控制 UICC,因此這項機制可提供 以安全有彈性的方式,透過行動網路業者 (MNO) 管理應用程式 Google Play 是在通用應用程式發布管道 (例如 Google Play) 上代管 保有裝置特殊權限,也不必自行簽署應用程式 或預先安裝做為系統應用程式。
UICC 規則
UICC 的儲存空間與
GlobalPlatform
安全元件存取控制規格。應用程式 ID
卡片上的 (AID) 為 A00000015141434C00
,並且符合標準
GET DATA
指令來擷取儲存在卡片中的規則。您可以更新這些規則
更新卡片內容
資料階層
UICC 規則會使用以下的資料階層 (兩個字元的字母和
數字組合則是物件標記)。每項規則
REF-AR-DO
(E2
),並由
REF-DO
和 AR-DO
:
REF-DO
(E1
) 包含DeviceAppID-REF-DO
的串連DeviceAppID-REF-DO
和PKG-REF-DO
。DeviceAppID-REF-DO
(C1
) 會儲存 SHA-1 (20 個位元組) 或憑證的 SHA-256 (32 位元組) 簽章。PKG-REF-DO
(CA
) 是完整套件名稱 由 ASCII 編碼在資訊清單中定義的字串,長度上限為 127 個位元組。
AR-DO
(E3
) 已擴大納入範圍PERM-AR-DO
(DB
),此為 8 位元組 代表 64 項不同權限的遮罩。
如果 PKG-REF-DO
不存在,表示任何由憑證簽署的應用程式
;否則憑證和套件名稱
比對。
規則範例
應用程式名稱為 com.google.android.apps.myapp
,而
十六進位字串中的 SHA-1 憑證如下:
AB:CD:92:CB:B1:56:B2:80:FA:4E:14:29:A6:EC:EE:B6:E5:C1:BF:E4
十六進位字串中的 UICC 規則如下:
E243 <= 43 is value length in hex E135 C114 ABCD92CBB156B280FA4E1429A6ECEEB6E5C1BFE4 CA1D 636F6D2E676F6F676C652E616E64726F69642E617070732E6D79617070 E30A DB08 0000000000000001
存取規則檔案支援
Android 7.0 開始支援讀取電信業者權限規則 規則檔案 (ARF) 即可。
Android 平台會先嘗試選取存取規則應用程式
(ARA) AID A00000015141434C00
。如果找不到
在 UICC 上的 AID 會改回使用 ARF,做法是選取 PKCS15 AID
A000000063504B43532D3135
。接著,Android 會讀取
存取控制規則檔案 (ACRF),位於 0x4300
AID:FFFFFFFFFFFF
。系統會忽略具有不同 AID 的項目,因此
可以同時存在其他用途的規則
十六進位字串中的 ACRF 內容範例:
30 10 A0 08 04 06 FF FF FF FF FF FF 30 04 04 02 43 10
存取控管條件檔案 (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
在上述範例中,0x4310
是 ACCF 的地址,
包含憑證雜湊值
61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81
。應用程式
由此憑證簽署的電信業者權限。
已啟用的 API
Android 支援下列 API。
電話管理工具
- 讓電信業者應用程式向 UICC 要求驗證/回應的方法:
getIccAuthentication
。 - 用於檢查發出呼叫應用程式是否已獲得電信業者的方法
權限:
hasCarrierPrivileges
。 - 覆寫品牌和數字的方法:
- 直接 UICC 通訊的方法:
- 將裝置模式設為全域的方法:
setPreferredNetworkTypeToGlobal
。 - 取得裝置或網路身分的方法:
- 國際行動裝置識別碼 (IMEI):
getImei
- 行動設備 ID (MEID):
getMeid
- 網路存取 ID (NAI):
getNai
- SIM 卡序號:
getSimSerialNumber
- 國際行動裝置識別碼 (IMEI):
- 取得電信業者設定的方法:
getCarrierConfig
- 取得資料傳輸網路類型的方法:
getDataNetworkType
- 取得語音服務網路類型的方法:
getVoiceNetworkType
- 取得 UICC SIM 卡 (USIM) 應用程式相關資訊的方法:
- SIM 卡序號:
getSimSerialNumber
- 卡片資訊:
getUiccCardsInfo
- GID1 (群組 ID level1):
getGroupIdLevel1
- 第 1 行的電話號碼字串:
getLine1Number
- 禁止的公用土地行動網路 (PLMN):
getForbiddenPlmns
- 對等的住家 PLMN:
getEquivalentHomePlmns
- SIM 卡序號:
- 取得或設定語音信箱號碼的方法:
- 傳送特殊撥號代碼的方法:
sendDialerSpecialCode
- 重設無線電數據機的方法:
rebootModem
- 取得或設定網路選取模式的方法:
- 要求網路掃描的方法:
requestNetworkScan
- 取得或設定允許/偏好網路類型的方法:
- 檢查使用者設定是否已啟用行動數據或漫遊的方法:
- 檢查或設定數據連線的方法,原因如下:
- 取得緊急電話號碼清單的方法:
getEmergencyNumberList
- 控制機會網路的方法:
- 設定或清除行動網路訊號強度更新要求的方法:
電話回呼
TelephonyCallback
的介面附有回呼方法,可
當註冊的狀態變更時,通知呼叫應用程式:
- 訊息等待指標已變更:
onMessageWaitingIndicatorChanged
- 來電轉接指標已變更:
onCallForwardingIndicatorChanged
- IP 多媒體系統 (IMS) 通話中斷導致發生變更:
onImsCallDisconnectCauseChanged
- 精確的數據連線狀態變更:
onPreciseDataConnectionStateChanged
- 目前的緊急電話號碼清單已變更:
onEmergencyNumberListChanged
敬上 - 有效的資料訂閱 ID 已變更:
onActiveDataSubscriptionIdChanged
- 電信業者網路已變更:
onCarrierNetworkChange
- 網路註冊或位置/路由/追蹤區域更新
失敗:
onRegistrationFailed
- 限制資訊異動:
onBarringInfoChanged
- 目前的實體管道設定已變更:
onPhysicalChannelConfigChanged
訂閱管理員
- 取得各種訂閱資訊的方法:
- 取得有效訂閱項目數量的方法:
getActiveSubscriptionInfoCount
- 管理訂閱群組的方法:
- 取得或設定計費關係方案說明的方法 特定電信業者之間的交易
- 暫時覆寫不同廣告客戶之間帳單關係方案的方法
會將特定電信業者和特定訂閱者視為非計量付費:
setSubscriptionOverrideUnmetered
- 暫時覆寫不同廣告客戶之間帳單關係方案的方法
特定電信業者和特定訂閱者即視為擁擠:
setSubscriptionOverrideCongested
- 用來檢查具有指定情境的應用程式
有權根據中繼資料管理指定訂閱項目:
canManageSubscription
簡訊管理工具
- 讓呼叫端建立新傳入簡訊的方法:
injectSmsPdu
。 - 無須撰寫簡訊即可傳送簡訊的方法
提供者:
sendTextMessageWithoutPersisting
電信業者 ConfigManager
- 變更設定的方式已變更:
notifyConfigChangedForSubId
。 - 取得預設訂閱項目的電信業者設定方法:
getConfig
- 取得指定訂閱項目的電信業者設定的方法:
getConfigForSubId
如需指示,請參閱: 電信業者設定:
BugreportManager
用於啟動連線能力錯誤報告的方法。這是特別版的
錯誤報告,其中僅包含用於偵錯連線相關資訊
問題:
startConnectivityBugreport
網路統計資料管理員
- 查詢網路用量摘要的方法:
querySummary
- 查詢網路使用記錄的方法:
queryDetails
- 註冊或取消註冊網路使用回呼的方法:
ImsMmTelManager
- 註冊或取消註冊 IMS MmTel 註冊回呼的方法:
ImsRcsManager
- 註冊或取消註冊 IMS RCS 註冊回呼的方法:
- 取得 IMS 註冊狀態或傳輸類型的方法:
佈建管理員
- 註冊及取消註冊 IMS 功能佈建更新的方法 回呼:
- 與 IMS MmTel 或 RCS 功能佈建狀態相關的方法:
EuiccManager
切換至 (啟用) 指定訂閱項目的方法:
switchToSubscription
電信業者訊息服務
透過系統接收新簡訊和多媒體訊息的服務,或是
。如要擴充這個類別,請在資訊清單檔案中使用
android.Manifest.permission#BIND_CARRIER_MESSAGING_SERVICE
權限,並加入具有 #SERVICE_INTERFACE
的意圖篩選器
動作。方法包括:
- 篩選內送簡訊的方法:
onFilterSms
- 如何攔截裝置傳送的簡訊:
onSendTextSms
- 攔截從裝置傳送的二進位簡訊的方法:
onSendDataSms
- 如何攔截裝置傳送的長簡訊:
onSendMultipartTextSms
- 攔截從裝置傳送的多媒體訊息的方法:
onSendMms
- 收到的多媒體訊息的下載方法:
onDownloadMms
電信業者服務
向系統公開電信業者專屬功能的服務。目的地:
擴充此類別,使用
「android.Manifest.permission#BIND_CARRIER_SERVICES
」權限和
加入含有 CARRIER_SERVICE_INTERFACE
動作的意圖篩選器。
如果服務具有長期繫結,請將
android.service.carrier.LONG_LIVED_BINDING
到
true
定義。
平台會將 CarrierService
與特殊旗標繫結,
貨運公司服務程序
應用程式待命值區。這麼做會將電信業者服務應用程式排除在外
應用程式閒置限制:提高裝置保持運作的可能性
記憶體不足。不過,如果電信業者服務應用程式因任何原因而當機
除非應用程式重新啟動,且繫結處於繫結狀態,否則就會失去上述所有權限
重建。因此,保持電信業者服務應用程式的穩定非常重要。
CarrierService
中的方法包括:
- 如何覆寫及設置電信業者專屬設定:
onLoadConfig
- 為了通知系統近期即將變更的電信業者網路,
電信業者應用程式:
notifyCarrierNetworkChange
電話供應商
允許修改的內容供應器 API (插入、刪除、更新、查詢)
傳送到電話資料庫值欄位的定義:
Telephony.Carriers
;如需更多資訊,請參閱
Telephony
類別參考資料
Wifi 網路建議
建構 WifiNetworkSuggestion
物件時,請使用下列程式碼
設定訂閱 ID 或訂閱群組的方法:
- 設定訂閱 ID 的方法:
setSubscriptionId
- Metohd 設定訂閱群組:
setSubscriptionGroup
Android 平台
在偵測到的 UICC 上,平台會建構內部 UICC 物件,
在 UICC 中加入電信業者權限規則。
UiccCarrierPrivilegeRules.java
載入規則、從 UICC 卡剖析規則,並將其快取到記憶體中。時間
需要檢查權限,UiccCarrierPrivilegeRules
會比較
呼叫端憑證和本身的規則。如果移除 UICC,
就會連同 UICC 物件一併刪除。
驗證
透過 驗證實作結果
Compatibility Test Suite (CTS) (使用 CtsCarrierApiTestCases.apk
),
您必須具備正確的 UICC 規則或 ARF 支援的開發人員 UICC。
請您選擇的 SIM 卡供應商備妥開發人員 UICC,
並使用該 UICC 執行測試。
UICC 不需要有效的行動網路服務即可通過 CTS 測試,
準備 UICC
如果是 Android 11 以下版本,CtsCarrierApiTestCases.apk
:
由 aosp-testkey
簽署,含雜湊值
61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81
。
自 Android 12 起,CtsCarrierApiTestCases.apk
為
簽署者
cts-uicc-2021-testkey
,雜湊值
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
。
在 Android 中執行 CTS 電信業者 API 測試 12,裝置需使用搭配 CTS 電信業者的 SIM 卡 權限符合最新版 第三方 GSMA TS.48 測試設定檔規格。
相同的 SIM 卡也能用於 Android 12。
修改 CTS SIM 卡設定檔
- 新增:在
存取規則應用程式主要版本 (ARA-M) 或 ARF。兩個簽名都必須
中的編碼方式是:
- 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):
- 建立:ADF USIM 小檔案 (EF) 不存在
TS.48 和 CTS 的必要欄位:
- EF_MBDN (6FC7),記錄大小:28,記錄號碼:4
- 內容
- Rec1:566F696365204D61696CFFFFFFFF06915155555555FF...FF
- Rec2-n:FF...FF
- 內容
- EF_EXT6 (6FC8),記錄大小:13,記錄號碼:1
- 內容:00FF...FF
- EF_MBI (6FC9),記錄大小:4,記錄號碼:1
- 內容:Rec1: 01010101
- EF_MWIS (6FCA),記錄大小:5,記錄號碼:1
- 內容:0000000000
- 內容:00FF...FF
- EF_MBDN (6FC7),記錄大小:28,記錄號碼:4
- 修改:USIM 服務表格:啟用服務 n°47, n°48
- EF_UST (6F38)
- 內容:
9EFFBF1DFFFE0083410310010400406E01
- 內容:
- EF_UST (6F38)
- 修改:DF-5GS 和 DF-SAIP 檔案
- DF-5GS - EF_5GS3GPPLOCI (USIM/5FC0/4F01)
- 內容:
FFFFFFFFFFFFFFFFFFFFFFFFFF42F618FFFFFE01
- 內容:
- DF-5GS - EF_5GSN3GPPLOCI (USIM/5FC0/4F02)
- 內容:
FFFFFFFFFFFFFFFFFFFFFFFFFF42F618FFFFFE01
- 內容:
- DF-5GS - EF SUCI_Calc_Info (USIM/5FC0/4F07)
- 內容:
A0020000FF…FF
- 內容:
- DF-SAIP - EF SUCI_Calc_Info_USIM (USIM/5FD0/4F01)
- 內容:
A0020000FF…FF
- 內容:
- DF-5GS - EF_5GS3GPPLOCI (USIM/5FC0/4F01)
- 修改:使用電信業者名稱字串「Android CTS」
,並在包含此標示的個別 EF 中:
- EF_SPN (USIM/6F46)
- 內容:
01416E64726F696420435453FF..FF
- 內容:
- EF_PNN (USIM/6FC5)
- 內容:
Rec1 430B83413759FE4E934143EA14FF..FF
- 內容:
- EF_SPN (USIM/6F46)
符合測試設定檔結構
請下載並搭配使用下列一般測試設定檔結構最新版本。 這些設定檔無法提供個人化的 CTS 電信業者權限規則或其他修改 。
執行測試
為了方便起見,CTS 支援設有限制的裝置權杖
測試只在使用相同權杖設定的裝置上執行。電信業者 API CTS
測試支援裝置權杖 sim-card-with-certs
。例如:
下列裝置權杖會限制電信業者 API 測試只在裝置上執行
abcd1234
:
cts-tradefed run cts --device-token abcd1234:sim-card-with-certs
在未使用裝置權杖的情況下執行測試時,系統會針對所有用戶端執行測試 裝置。
常見問題
如何在 UICC 中更新憑證?
答:採用現有的卡片 OTA 更新機制。
UICC 可以與其他規則並用嗎?
答:相同的 AID 底下可以在 UICC 上設定其他安全性規則。 平台就會自動篩除這類事件
如果應用程式依賴 是否有憑證?
答:由於與 移除 UICC 後,UICC 會遭到刪除。
UICC 上的憑證有數量限制嗎?
答:平台並未限制憑證數量。但由於 是線性檢查,過多規則可能會導致檢查延遲。
這項解決方案支援的 API 數量有上限 方法?
答:否,但範圍僅限於與電信業者相關的 API。
有些 API 是否禁止使用這個方法?如果是,步驟 強制執行方式?(也就是說,您是否能夠透過測試來驗證 API 是否支援這項功能?)
答:請參閱 Android 相容性的「API 行為相容性」一節 定義文件 (CDD)。我們進行了一些 CTS 測試 API 的權限模型則維持不變。
多 SIM 卡功能如何運作?
答:系統會使用使用者指定的預設 SIM 卡。
這是否以任何方式與其他 SE 存取權互動或重疊) 例如 SEEK?
答:舉例來說,SEEK 使用的 AID 與 UICC 相同。所以規則
並由 SEEK 或
UiccCarrierPrivileges
。
什麼時候適合檢查電信業者的權限?
答:SIM 卡狀態載入後。
原始設備製造商 (OEM) 可以停用部分電信業者 API 嗎?
答:否。我們認為目前的 API 是最基本的對象, 並計劃日後使用位元遮罩,取得更精細的控制選項。
setOperatorBrandOverride
會覆寫所有其他表單
業者
名稱字串?例如 SE13、UICC SPN 或網路型 NITZ?
是的,業者品牌覆寫為最高優先順序。設定完畢後,這個屬性會覆寫 ALL 其他形式的運算子名稱字串。
injectSmsPdu
方法呼叫有什麼作用?
答:這個方法有助於在雲端備份/還原簡訊。
injectSmsPdu
呼叫會啟用還原函式。
簡訊篩選功能是onFilterSms
通話依據,是
簡訊 UDH 連接埠篩選功能?還是電信業者應用程式可以存取「所有」傳入的簡訊?
答:電信業者可以存取所有簡訊資料。
要支援的 DeviceAppID-REF-DO
擴充功能
32 位元組似乎
不符合目前的 GP 規格 (僅允許 0 或 20 位元組),因此原因為何
要導入這項異動嗎?SHA-1 不足以
才能避免碰撞?您是否已提議此變更 GP
能回溯相容於現有的 ARA-M/ARF 嗎?
答:為提供具前瞻性的安全防護,這項擴充功能導入 SHA-256
對於 DeviceAppID-REF-DO
及 SHA-1,後者目前
是 GP SEAC 標準的唯一選項我們強烈建議使用 SHA-256。
如果 DeviceAppID
為 0 (空白),會將規則套用到
未套用特定規則的所有裝置應用程式?
答:如要使用電信業者 API,必須填入 DeviceAppID-REF-DO
。
空白畫面僅供測試之用,不建議用於運作
Deployment 規格
,瞭解如何調查及移除這項存取權。
根據您的規格,PKG-REF-DO
使用了
不得使用 DeviceAppID-REF-DO
本身。但
這項指令仍舊列於規格的表 6-4 中
REF-DO
的定義。這是特有用途嗎?程式碼
只有在 REF-DO
中使用 PKG-REF-DO
時才會開始運作嗎?
答:將 PKG-REF-DO
設為單一值的選項
已從最新版本中移除「REF-DO
」中的項目。
PKG-REF-DO
只能與
DeviceAppID-REF-DO
。
我們會假設可以授予所有電信業者權限 或是進行更精細的控制如果是的話,位元之間的對應關係定義在 遮罩和實際權限?每個課程分別具備一項權限嗎?每項權限 方法?64 項權限長期下來是否有足夠的權限? ,瞭解如何調查及移除這項存取權。
答:這項功能僅保留於日後使用,歡迎建議。
您可以進一步定義 Android 適用的 DeviceAppID
具體來說是?這是發布商的 SHA-1 (20 個位元組) 雜湊值
憑證用於簽署指定應用程式,因此名稱不應反映
這種概念呢?(名稱會讓許多讀者感到困惑,
適用於以同一發布商憑證簽署的所有應用程式)。
答:DeviceAppID
現有的規格我們盡量減少變更規格,以降低
應用方式。詳情請參閱「UICC 的規則」。