為提供更完善的安全性,部分裝置會內建安全元件 (SE),這是專用的防竄改硬體,用於儲存密碼編譯資料。Open Mobile API 是用來與裝置的安全元件通訊的標準 API。Android 9 推出了對此 API 的支援,並提供後端實作,包括安全元件服務和 SE HAL。
安全元件服務會檢查全球平台支援的安全元件 (基本上會檢查裝置是否已實作 SE HAL,如果是的話,有多少個)。這可做為測試 API 和基礎安全元件實作方式的基礎。
Open Mobile API 測試案例
Open Mobile API (OMAPI) 測試案例可用於強制執行 API 規範,並確認安全元素的基礎實作項目符合 Open Mobile API 規格。這些測試案例需要安裝特殊的程式模組,也就是安全元件上的 Java 卡應用程式,CTS 應用程式會使用這個程式模組進行通訊。如要安裝,請使用 google-cardlet.cap
中的範例小工具。
如要通過 OMAPI 測試案例,基礎安全元素服務和安全元素應具備下列功能:
- 所有安全元件讀取器名稱開頭應為 SIM、eSE 或 SD。
- 非 SIM 卡式讀卡機應可開啟基本頻道。
CtsOmapiTestCases.apk
不應能夠選取 A000000476416E64726F6964435453FF AID:CtsOmapiTestCases.apk
應能使用下列應用程式 ID (AID) 選取 applet:- 0xA000000476416E64726F696443545331
- 當應用程式接收到以下應用程式通訊協定資料單元 (APDU) 時,應用程式應擲回安全性例外狀況:
android.se.omapi.Channel.Transmit
(傳送):- 0x00700000
- 0x00708000
- 0x00A40404104A535231373754657374657220312E30
- 當程式集在「傳送」中收到以下 APDU 時,應不會傳回任何資料:
- 0x00060000
- 0x80060000
- 0xA0060000
- 0x94060000
- 0x000A000001AA
- 0x800A000001AA
- 0xA00A000001AA
- 0x940A000001AA
- 對於下列 Transmit APDU,程式集應傳回 256 位元組的資料:
- 0x0008000000
- 0x8008000000
- 0xA008000000
- 0x9408000000
- 0x000C000001AA00
- 0x800C000001AA00
- 0xA00C000001AA00
- 0x940C000001AA00
- 應用程式應針對各個 Transmit APDU 傳回下列狀態字詞回應:
傳送 APDU 狀態字詞 資料 0x00F30106 0x6200 否 0x00F30206 0x6281 否 0x00F30306 0x6282 否 0x00F30406 0x6283 否 0x00F30506 0x6285 否 0x00F30606 0x62F1 否 0x00F30706 0x62F2 否 0x00F30806 0x63F1 否 0x00F30906 0x63F2 否 0x00F30A06 0x63C2 否 0x00F30B06 0x6202 否 0x00F30C06 0x6280 否 0x00F30D06 0x6284 否 0x00F30E06 0x6286 否 0x00F30F06 0x6300 否 0x00F31006 0x6381 否 0x00F3010A01AA 0x6200 否 0x00F3020A01AA 0x6281 否 0x00F3030A01AA 0x6282 否 0x00F3040A01AA 0x6283 否 0x00F3050A01AA 0x6285 否 0x00F3060A01AA 0x62F1 否 0x00F3070A01AA 0x62F2 否 0x00F3080A01AA 0x63F1 否 0x00F3090A01AA 0x63F2 否 0x00F30A0A01AA 0x63C2 否 0x00F30B0A01AA 0x6202 否 0x00F30C0A01AA 0x6280 否 0x00F30D0A01AA 0x6284 否 0x00F30E0A01AA 0x6286 否 0x00F30F0A01AA 0x6300 否 0x00F3100A01AA 0x6381 否 0x00F3010800 0x6200 是 0x00F3020800 0x6281 是 0x00F3030800 0x6282 是 0x00F3040800 0x6283 是 0x00F3050800 0x6285 是 0x00F3060800 0x62F1 是 0x00F3070800 0x62F2 是 0x00F3080800 0x63F1 是 0x00F3090800 0x63F2 是 0x00F30A0800 0x63C2 是 0x00F30B0800 0x6202 是 0x00F30C0800 0x6280 是 0x00F30D0800 0x6284 是 0x00F30E0800 0x6286 是 0x00F30F0800 0x6300 是 0x00F3100800 0x6381 是 0x00F3010C01AA00 0x6200 可以* 0x00F3020C01AA00 0x6281 可以* 0x00F3030C01AA00 0x6282 可以* 0x00F3040C01AA00 0x6283 可以* 0x00F3050C01AA00 0x6285 可以* 0x00F3060C01AA00 0x62F1 可以* 0x00F3070C01AA00 0x62F2 可以* 0x00F3080C01AA00 0x63F1 可以* 0x00F3090C01AA00 0x63F2 可以* 0x00F30A0C01AA00 0x63C2 可以* 0x00F30B0C01AA00 0x6202 可以* 0x00F30C0C01AA00 0x6280 可以* 0x00F30D0C01AA00 0x6284 可以* 0x00F30E0C01AA00 0x6286 可以* 0x00F30F0C01AA00 0x6300 可以* 0x00F3100C01AA00 0x6381 可以* - 小程式應傳回分段回應,並將
0xFF
設為最後一個資料位元組,並為下列 APDU 提供相應的狀態字串和回應長度。APDU 狀態字詞 回應長度 (位元組) 0x00C2080000 0x9000 2048 0x00C4080002123400 0x9000 2048 0x00C6080000 0x9000 2048 0x00C8080002123400 0x9000 2048 0x00C27FFF00 0x9000 32767 0x00CF080000 0x9000 2048 0x94C2080000 0x9000 2048 - 程式集應針對指定的 APDU 傳回 SELECT 指令中收到的 P2 值 + 成功狀態字元串 (即
0x009000
):0x00F4000000
- 當應用程式接收到以下應用程式通訊協定資料單元 (APDU) 時,應用程式應擲回安全性例外狀況:
- A000000476416E64726F696443545332
- 選取後,這個 AID 應會傳回大於 2 個位元組的選取回應,並使用基本編碼規則 (BER) 和標記長度值 (TLV) 正確格式化。
- 0xA000000476416E64726F696443545331
CtsOmapiTestCases
- APK 的雜湊:0x5cc49e0bc83927486fbb3a17ed37276cbbceb290
存取權控管測試案例
在安全元素中設定的存取權控管機制可確保只有可存取小程式的應用程式才能與其通訊。此外,Android 也支援針對 APK 可交換的特定 APDU 設定規則。
如要通過這些測試,請設定特殊存取權控管規則,包括存取規則應用程式主控項 (ARA) 或存取規則檔案 (ARF)。您應使用用於 OMAPI 測試的應用程式小工具,因為需要支援相同的指令才能通過存取控制測試。
在下列 AID 下建立小程式的例項:
- 0xA000000476416E64726F696443545340
- 0xA000000476416E64726F696443545341
- 0xA000000476416E64726F696443545342
- 0xA000000476416E64726F696443545343
- 0xA000000476416E64726F696443545344
- 0xA000000476416E64726F696443545345
- 0xA000000476416E64726F696443545346
- 0xA000000476416E64726F696443545347
- 0xA000000476416E64726F696443545348
- 0xA000000476416E64726F696443545349
- 0xA000000476416E64726F69644354534A
- 0xA000000476416E64726F69644354534B
- 0xA000000476416E64726F69644354534C
- 0xA000000476416E64726F69644354534D
- 0xA000000476416E64726F69644354534E
- 0xA000000476416E64726F69644354534F
選取後,任何 AID 都應傳回超過 2 個位元組的選取回應,並使用 BER 和 TLV 正確格式化。
CtsSecureElementAccessControlTestCases1
- APK 的雜湊:0x4bbe31beb2f753cfe71ec6bf112548687bb6c34e
授權的 AID
0xA000000476416E64726F696443545340
已授權的 APDU:
- 0x00060000
- 0xA0060000
未經授權的 APDU:
- 0x0008000000
- 0x80060000
- 0xA008000000
- 0x9406000000
0xA000000476416E64726F696443545341
已授權的 APDU:
- 0x94060000
- 0x9408000000
- 0x940C000001AA00
- 0x940A000001AA
未經授權的 APDU:
- 0x00060000
- 0x80060000
- 0xA0060000
- 0x0008000000
- 0x000A000001AA
- 0x800A000001AA
- 0xA00A000001AA
- 0x8008000000
- 0xA008000000
- 0x000C0000001AA00
- 0x800C000001AA00
- 0xA00C000001AA00
0xA000000476416E64726F696443545342
0xA000000476416E64726F696443545344
0xA000000476416E64726F696443545345
0xA000000476416E64726F696443545347
0xA000000476416E64726F696443545348
0xA000000476416E64726F696443545349
0xA000000476416E64726F69644354534A
0xA000000476416E64726F69644354534B
0xA000000476416E64726F69644354534C
0xA000000476416E64726F69644354534D
0xA000000476416E64726F69644354534E
0xA000000476416E64726F69644354534F
未經授權的 AID
- 0xA000000476416E64726F696443545343
- 0xA000000476416E64726F696443545346
CtsSecureElementAccessControlTestCases2
- APK 的雜湊:0x93b0ff2260babd4c2a92c68aaa0039dc514d8a33
授權的 AID:
0xA000000476416E64726F696443545340
已授權的 APDU:
- 0x00060000
- 0xA0060000
未經授權的 APDU:
- 0x0008000000
- 0x80060000
- 0xA008000000
- 0x9406000000
0xA000000476416E64726F696443545341
已授權的 APDU:
- 0x94060000
- 0x9408000000
- 0x940C000001AA00
- 0x940A000001AA
未經授權的 APDU:
- 0x0006000
- 0x80060000
- 0xA0060000
- 0x0008000000
- 0x000A000001AA
- 0x800A000001AA
- 0xA00A000001AA
- 0x8008000000
- 0xA008000000
- 0x000C000001AA00
- 0x800C000001AA00
- 0xA00C000001AA00
0xA000000476416E64726F696443545343
0xA000000476416E64726F696443545345
0xA000000476416E64726F696443545346
未經授權的 AID
- 0xA000000476416E64726F696443545342
- 0xA000000476416E64726F696443545344
- 0xA000000476416E64726F696443545347
- 0xA000000476416E64726F696443545348
- 0xA000000476416E64726F696443545349
- 0xA000000476416E64726F69644354534A
- 0xA000000476416E64726F69644354534B
- 0xA000000476416E64726F69644354534C
- 0xA000000476416E64726F69644354534D
- 0xA000000476416E64726F69644354534E
- 0xA000000476416E64726F69644354534F
CtsSecureElementAccessControlTestCases3
- APK 的雜湊:0x5528ca826da49d0d7329f8117481ccb27b8833aa
授權的 AID:
0xA000000476416E64726F696443545340
已授權的 APDU:
- 0x00060000
- 0x80060000
- 0xA0060000
- 0x94060000
- 0x000A000001AA
- 0x800A000001AA
- 0xA00A000001AA
- 0x940A000001AA
- 0x0008000000
- 0x8008000000
- 0xA008000000
- 0x9408000000
- 0x000C000001AA00
- 0x800C000001AA00
- A00C000001AA00
- 940C000001AA00
0xA000000476416E64726F696443545341
已授權的 APDU:
- 0x94060000
- 0x9408000000
- 0x940C000001AA00
- 0x940A00000aAA
未經授權的 APDU:
- 0x00060000
- 0x80060000
- 0xA0060000
- 0x0008000000
- 0x000A000001AA
- 0x800A000001AA
- 0xA00A000001AA
- 0x8008000000
- 0xA008000000
- 0x000C000001AA00
- 0x800C000001AA00
- 0xA00C000001AA00
0xA000000476416E64726F696443545345
0xA000000476416E64726F696443545346
未經授權的 AID
- 0xA000000476416E64726F696443545342
- 0xA000000476416E64726F696443545343
- 0xA000000476416E64726F696443545344
- 0xA000000476416E64726F696443545347
- 0xA000000476416E64726F696443545348
- 0xA000000476416E64726F696443545349
- 0xA000000476416E64726F69644354534A
- 0xA000000476416E64726F69644354534B
- 0xA000000476416E64726F69644354534C
- 0xA000000476416E64726F69644354534D
- 0xA000000476416E64726F69644354534E
- 0xA000000476416E64726F69644354534F
附錄
UMTS 積體電路卡 (UICC) 的範例小程式和安裝步驟
1. 套件規格
檔案名稱: google-cardlet.cap
套件 ID:6F 6D 61 70 69 63 61 72 64 6C 65 74
版本:1.63
雜湊:5F72E0A073BA9E61A7358F2FE3F031A99F3F81E9
小程式:
6F 6D 61 70 69 4A 53 52 31 37 37 = SelectResponse 模組
6F 6D 61 70 69 43 61 63 68 69 6E 67 = XXLResponse 模組
匯入:
javacard.framework v1.3 - A0000000620101
java.lang v1.0 - A0000000620001
uicc.hci.framework v1.0 - A0000000090005FFFFFFFF8916010000
uicc.hci.services.cardemulation v1.0 - A0000000090005FFFFFFFF8916020100
uicc.hci.services.connectivity v1.0 - A0000000090005FFFFFFFF8916020200
卡片大小:39597
2. 安裝步驟
使用適當程序將 google-cardlet.cap
檔案載入 SIM 卡 (請洽詢 SE 製造商)。
針對每個小程式執行安裝指令。
OMAPI 測試
安裝小程式指令
80E60C00300C6F6D617069636172646C65740Bmodule_AID10AID01000EEF0AA008810101A5038201C0C9000000
Module_AID:6F 6D 61 70 69 4A 53 52 31 37 37
AID:A000000476416E64726F696443545331
80E60C00310C6F6D617069636172646C65740Bmodule_AID10AID010002C9000
Module_AID:6F 6D 61 70 69 43 61 63 68 69 6E 67
AID:A000000476416E64726F696443545332
AccessControl 測試 (使用 PKCS#15 結構的範本)
80E60C003C0C6F6D617069636172646C65740Bmodule_AID10AID01000EEF0AA008810101A5038201C0C9000000
Module_AID:6F 6D 61 70 69 4A 53 52 31 37 37
AID:
- 0xA000000476416E64726F696443545340
- 0xA000000476416E64726F696443545341
- 0xA000000476416E64726F696443545342
- 0xA000000476416E64726F696443545344
- 0xA000000476416E64726F696443545345
- 0xA000000476416E64726F696443545347
- 0xA000000476416E64726F696443545348
- 0xA000000476416E64726F696443545349
- 0xA000000476416E64726F69644354534A
- 0xA000000476416E64726F69644354534B
- 0xA000000476416E64726F69644354534C
- 0xA000000476416E64726F69644354534D
- 0xA000000476416E64726F69644354534E
- 0xA000000476416E64726F69644354534F
如需逐步指令來設定符合 CTS 測試的 PKCS#15 結構,請參閱「PKCS#15 的指令」。