더 나은 보안을 제공하기 위해 일부 장치에는 암호화 데이터를 저장하기 위한 별도의 변조 방지 전용 하드웨어인 SE(보안 요소)가 내장되어 있습니다. Open Mobile API는 장치의 보안 요소와 통신하는 데 사용되는 표준 API 입니다. Android 9는 이 API에 대한 지원을 도입하고 Secure Element Service 및 SE HAL을 포함한 백엔드 구현을 제공합니다.
보안 요소 서비스는 글로벌 플랫폼 지원 보안 요소에 대한 지원을 확인합니다(기본적으로 장치에 SE HAL 구현이 있는지, 그렇다면 몇 개인지 확인). 이는 API 및 기본 보안 요소 구현을 테스트하기 위한 기초로 사용됩니다.
모바일 API 테스트 사례 열기
OMAPI(Open Mobile API) 테스트 사례는 API 지침을 시행하고 보안 요소의 기본 구현이 Open Mobile API 사양을 충족하는지 확인하는 데 사용됩니다. 이러한 테스트 사례는 통신을 위해 CTS 응용 프로그램에서 사용하는 특수 애플릿, Secure Element에 Java 카드 응용 프로그램을 설치해야 합니다. 설치를 위해 google-cardlet.cap
에 있는 샘플 애플릿을 사용하십시오.
OMAPI 테스트 사례를 통과하려면 기본 보안 요소 서비스와 SE가 다음을 수행할 수 있어야 합니다.
- 모든 보안 요소 판독기 이름은 SIM, eSE 또는 SD로 시작해야 합니다.
- SIM 기반이 아닌 리더는 기본 채널을 열 수 있어야 합니다.
-
CtsOmapiTestCases.apk
는 A000000476416E64726F6964435453FF AID를 선택할 수 없어야 합니다. -
CtsOmapiTestCases.apk
는 다음 AID(응용 프로그램 식별자)가 있는 애플릿을 선택할 수 있어야 합니다.- 0xA000000476416E64726F696443545331
- 애플릿은
android.se.omapi.Channel.Transmit
( Transmit )에서 다음 APDU(응용 프로토콜 데이터 단위)를 수신할 때 보안 예외를 발생시켜야 합니다.- 0x00700000
- 0x00708000
- 0x00A40404104A535231373754657374657220312E30
- 애플릿은 전송 에서 다음 APDU를 수신할 때 데이터를 반환하지 않아야 합니다.
- 0x00060000
- 0x80060000
- 0xA0060000
- 0x94060000
- 0x000A000001AA
- 0x800A000001AA
- 0xA00A000001AA
- 0x940A000001AA
- 애플릿은 다음 전송 APDU에 대해 256바이트 데이터를 반환해야 합니다.
- 0x0008000000
- 0x8008000000
- 0xA008000000
- 0x9408000000
- 0x000C000001AA00
- 0x800C000001AA00
- 0xA00C000001AA00
- 0x940C000001AA00
- 애플릿은 각 전송 APDU에 대해 다음 상태 단어 응답을 반환해야 합니다.
*응답은 첫 번째 바이트가 0x00 대신 0x01이라는 점을 제외하고 입력 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 - 애플릿은 SELECT 명령에서 받은 P2 값 + 주어진 APDU에 대한 성공 상태 단어(예:
0x009000
)를 반환해야 합니다. 0x00F4000000
- 애플릿은
- A000000476416E64726F696443545332
- 이 AID를 선택하면 BER(기본 인코딩 규칙) 및 TLV(태그 길이 값)를 사용하여 올바르게 형식이 지정된 2바이트보다 큰 선택 응답을 반환해야 합니다.
- 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는 BER 및 TLV를 사용하여 올바르게 형식화된 2바이트보다 큰 선택 응답을 반환해야 합니다.
CtsSecureElementAccessControlTestCases1
- APK의 해시: 0x4bbe31beb2f753cfe71ec6bf112548687bb6c34e
승인된 에이즈
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
승인되지 않은 에이즈
- 0xA000000476416E64726F696443545343
- 0xA000000476416E64726F696443545346
CtsSecureElementAccessControlTestCases2
- APK의 해시: 0x93b0ff2260babd4c2a92c68aaa0039dc514d8a33
승인된 에이즈:
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
승인되지 않은 에이즈
- 0xA000000476416E64726F696443545342
- 0xA000000476416E64726F696443545344
- 0xA000000476416E64726F696443545347
- 0xA000000476416E64726F696443545348
- 0xA000000476416E64726F696443545349
- 0xA000000476416E64726F69644354534A
- 0xA000000476416E64726F69644354534B
- 0xA000000476416E64726F69644354534C
- 0xA000000476416E64726F69644354534D
- 0xA000000476416E64726F69644354534E
- 0xA000000476416E64726F69644354534F
CtsSecureElementAccessControlTestCases3
- APK의 해시: 0x5528ca826da49d0d7329f8117481ccb27b8833aa
승인된 에이즈:
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
승인되지 않은 에이즈
- 0xA000000476416E64726F696443545342
- 0xA000000476416E64726F696443545343
- 0xA000000476416E64726F696443545344
- 0xA000000476416E64726F696443545347
- 0xA000000476416E64726F696443545348
- 0xA000000476416E64726F696443545349
- 0xA000000476416E64726F69644354534A
- 0xA000000476416E64726F69644354534B
- 0xA000000476416E64726F69644354534C
- 0xA000000476416E64726F69644354534D
- 0xA000000476416E64726F69644354534E
- 0xA000000476416E64726F69644354534F
부록
UMTS UICC(집적 회로 카드)용 샘플 애플릿 및 설치 단계
1. 패키지 사양
파일 이름: google-cardlet.cap
패키지 보조: 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 테스트
애플릿 설치 명령
80E60C00300C6F6D617069636172646C65740B module_AID 10 AID 01000EEF0AA008810101A5038201C0C9000000
모듈_AID : 6F 6D 61 70 69 4A 53 52 31 37 37
원조 : A000000476416E64726F696443545331
80E60C00310C6F6D617069636172646C65740B module_AID 10 AID 010002C9000
모듈_AID : 6F 6D 61 70 69 43 61 63 68 69 6E 67
원조 : A000000476416E64726F696443545332
AccessControl 테스트(PKCS#15 구조를 사용하는 템플릿)
80E60C003C0C6F6D617069636172646C65740B module_AID 10 AID 01000EEF0AA008810101A5038201C0C9000000
모듈_AID : 6F 6D 61 70 69 4A 53 52 31 37 37
보조기구:
- 0xA000000476416E64726F696443545340
- 0xA000000476416E64726F696443545341
- 0xA000000476416E64726F696443545342
- 0xA000000476416E64726F696443545344
- 0xA000000476416E64726F696443545345
- 0xA000000476416E64726F696443545347
- 0xA000000476416E64726F696443545348
- 0xA000000476416E64726F696443545349
- 0xA000000476416E64726F69644354534A
- 0xA000000476416E64726F69644354534B
- 0xA000000476416E64726F69644354534C
- 0xA000000476416E64726F69644354534D
- 0xA000000476416E64726F69644354534E
- 0xA000000476416E64726F69644354534F
CTS 테스트와 일치하는 PKCS#15 구조를 설정하는 단계별 명령은 PKCS#15 용 명령을 참조하세요.