보안 요소에 관한 CTS 테스트

보안 강화를 위해 일부 기기에는 암호화 데이터를 저장하기 위한 별도의 변조 방지 전용 하드웨어인 보안 요소(SE)가 내장되어 있습니다. Open Mobile API는 기기의 보안 요소와 통신하는 데 사용되는 표준 API입니다. Android 9은 이 API를 새롭게 지원하고 보안 요소 서비스 및 SE HAL을 포함한 백엔드 구현을 제공합니다.

보안 요소 서비스는 플랫폼에서 지원되는 글로벌 보안 요소의 지원을 확인합니다(기본적으로 기기에 SE HAL이 구현되어 있는지 확인하고 구현된 경우 그 개수를 확인함). 이는 API와 기본 보안 요소 구현을 테스트하기 위한 기초로 사용됩니다.

Open Mobile API 테스트 사례

OMAPI(Open Mobile API) 테스트 사례는 보안 요소의 기본 구현이 Open Mobile API 사양을 충족하는지 확인하고 API 가이드라인을 준수하는 데 사용됩니다. 이 테스트 사례를 사용하려면 CTS 애플리케이션에서 통신하는 데 사용하는 특수 애플릿인 보안 요소의 자바 카드 애플리케이션을 설치해야 합니다. 이 애플리케이션을 설치하려면 google-cardlet.cap에 있는 샘플 애플릿을 사용합니다.

OMAPI 테스트 사례를 통과하려면 기본 보안 요소 서비스와 SE에서 다음 조건을 갖추어야 합니다.

  1. 모든 보안 요소 리더 이름은 SIM, eSE 또는 SD로 시작해야 합니다.
  2. SIM 기반이 아닌 리더는 기본 채널을 열 수 있어야 합니다.
  3. CtsOmapiTestCases.apk는 A000000476416E64726F6964435453FF AID를 선택할 수 없어야 합니다.
  4. CtsOmapiTestCases.apk는 다음 애플리케이션 식별자(AID)가 있는 애플릿을 선택할 수 있어야 합니다.
    1. 0xA000000476416E64726F696443545331
      1. 애플릿이 android.se.omapi.Channel.Transmit(Transmit)에서 다음 애플리케이션 프로토콜 데이터 단위(APDU)를 수신하면 보안 예외를 발생시켜야 합니다.
        1. 0x00700000
        2. 0x00708000
        3. 0x00A40404104A535231373754657374657220312E30
      2. 애플릿은 Transmit에서 다음 APDU를 수신할 경우 데이터를 반환해서는 안 됩니다.
        1. 0x00060000
        2. 0x80060000
        3. 0xA0060000
        4. 0x94060000
        5. 0x000A000001AA
        6. 0x800A000001AA
        7. 0xA00A000001AA
        8. 0x940A000001AA
      3. 애플릿은 다음 Transmit APDU에 관한 256바이트 데이터를 반환해야 합니다.
        1. 0x0008000000
        2. 0x8008000000
        3. 0xA008000000
        4. 0x9408000000
        5. 0x000C000001AA00
        6. 0x800C000001AA00
        7. 0xA00C000001AA00
        8. 0x940C000001AA00
      4. 애플릿은 각 Transmit APDU에 관해 다음 상태 워드 응답을 반환해야 합니다.
        Transmit 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 반환함*
        *응답에는 첫 번째 바이트가 0x00 대신 0x01인 것을 제외하고 입력 APDU와 동일한 데이터가 포함되어야 합니다.
      5. 애플릿은 0xFF가 포함된 분할 응답을 마지막 데이터 바이트로 반환하고 다음 APDU에 관한 각 상태 워드와 응답 길이를 갖고 있어야 합니다.
        APDU 상태 워드 응답 길이(바이트)
        0x00C2080000 0x9000 2048
        0x00C4080002123400 0x9000 2048
        0x00C6080000 0x9000 2048
        0x00C8080002123400 0x9000 2048
        0x00C27FFF00 0x9000 32767
        0x00CF080000 0x9000 2048
        0x94C2080000 0x9000 2048
      6. 애플릿은 지정된 APDU: 0x00F4000000과 관련해 SELECT 명령어 + 성공 상태 워드(예: 0x009000)에 수신된 P2의 값을 반환해야 합니다.
    2. A000000476416E64726F696443545332
      1. 선택된 경우 이 AID는 기본 인코딩 규칙(BER)과 태그 길이 값(TLV)을 사용하여 형식이 올바로 지정된 2바이트를 초과하는 선택 응답을 반환해야 합니다.

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
  • 승인된 AID

    • 0xA000000476416E64726F696443545340

      1. 승인된 APDU:

        1. 0x00060000
        2. 0xA0060000
      2. 승인되지 않은 APDU:

        1. 0x0008000000
        2. 0x80060000
        3. 0xA008000000
        4. 0x9406000000
    • 0xA000000476416E64726F696443545341

      1. 승인된 APDU:

        1. 0x94060000
        2. 0x9408000000
        3. 0x940C000001AA00
        4. 0x940A000001AA
      2. 승인되지 않은 APDU:

        1. 0x00060000
        2. 0x80060000
        3. 0xA0060000
        4. 0x0008000000
        5. 0x000A000001AA
        6. 0x800A000001AA
        7. 0xA00A000001AA
        8. 0x8008000000
        9. 0xA008000000
        10. 0x000C0000001AA00
        11. 0x800C000001AA00
        12. 0xA00C000001AA00
    • 0xA000000476416E64726F696443545342

    • 0xA000000476416E64726F696443545344

    • 0xA000000476416E64726F696443545345

    • 0xA000000476416E64726F696443545347

    • 0xA000000476416E64726F696443545348

    • 0xA000000476416E64726F696443545349

    • 0xA000000476416E64726F69644354534A

    • 0xA000000476416E64726F69644354534B

    • 0xA000000476416E64726F69644354534C

    • 0xA000000476416E64726F69644354534D

    • 0xA000000476416E64726F69644354534E

    • 0xA000000476416E64726F69644354534F

  • 승인되지 않은 AID

    • 0xA000000476416E64726F696443545343
    • 0xA000000476416E64726F696443545346

CtsSecureElementAccessControlTestCases2

  • APK 해시: 0x93b0ff2260babd4c2a92c68aaa0039dc514d8a33
  • 승인된 AID:

    • 0xA000000476416E64726F696443545340

      1. 승인된 APDU:

        1. 0x00060000
        2. 0xA0060000
      2. 승인되지 않은 APDU:

        1. 0x0008000000
        2. 0x80060000
        3. 0xA008000000
        4. 0x9406000000
    • 0xA000000476416E64726F696443545341

      1. 승인된 APDU:

        1. 0x94060000
        2. 0x9408000000
        3. 0x940C000001AA00
        4. 0x940A000001AA
      2. 승인되지 않은 APDU:

        1. 0x0006000
        2. 0x80060000
        3. 0xA0060000
        4. 0x0008000000
        5. 0x000A000001AA
        6. 0x800A000001AA
        7. 0xA00A000001AA
        8. 0x8008000000
        9. 0xA008000000
        10. 0x000C000001AA00
        11. 0x800C000001AA00
        12. 0xA00C000001AA00
    • 0xA000000476416E64726F696443545343

    • 0xA000000476416E64726F696443545345

    • 0xA000000476416E64726F696443545346

  • 승인되지 않은 AID

    • 0xA000000476416E64726F696443545342
    • 0xA000000476416E64726F696443545344
    • 0xA000000476416E64726F696443545347
    • 0xA000000476416E64726F696443545348
    • 0xA000000476416E64726F696443545349
    • 0xA000000476416E64726F69644354534A
    • 0xA000000476416E64726F69644354534B
    • 0xA000000476416E64726F69644354534C
    • 0xA000000476416E64726F69644354534D
    • 0xA000000476416E64726F69644354534E
    • 0xA000000476416E64726F69644354534F

CtsSecureElementAccessControlTestCases3

  • APK 해시: 0x5528ca826da49d0d7329f8117481ccb27b8833aa
  • 승인된 AID:

    • 0xA000000476416E64726F696443545340

      1. 승인된 APDU:

        1. 0x00060000
        2. 0x80060000
        3. 0xA0060000
        4. 0x94060000
        5. 0x000A000001AA
        6. 0x800A000001AA
        7. 0xA00A000001AA
        8. 0x940A000001AA
        9. 0x0008000000
        10. 0x8008000000
        11. 0xA008000000
        12. 0x9408000000
        13. 0x000C000001AA00
        14. 0x800C000001AA00
        15. A00C000001AA00
        16. 940C000001AA00
    • 0xA000000476416E64726F696443545341

      1. 승인된 APDU:

        1. 0x94060000
        2. 0x9408000000
        3. 0x940C000001AA00
        4. 0x940A00000aAA
      2. 승인되지 않은 APDU:

        1. 0x00060000
        2. 0x80060000
        3. 0xA0060000
        4. 0x0008000000
        5. 0x000A000001AA
        6. 0x800A000001AA
        7. 0xA00A000001AA
        8. 0x8008000000
        9. 0xA008000000
        10. 0x000C000001AA00
        11. 0x800C000001AA00
        12. 0xA00C000001AA00
    • 0xA000000476416E64726F696443545345

    • 0xA000000476416E64726F696443545346

  • 승인되지 않은 AID

    • 0xA000000476416E64726F696443545342
    • 0xA000000476416E64726F696443545343
    • 0xA000000476416E64726F696443545344
    • 0xA000000476416E64726F696443545347
    • 0xA000000476416E64726F696443545348
    • 0xA000000476416E64726F696443545349
    • 0xA000000476416E64726F69644354534A
    • 0xA000000476416E64726F69644354534B
    • 0xA000000476416E64726F69644354534C
    • 0xA000000476416E64726F69644354534D
    • 0xA000000476416E64726F69644354534E
    • 0xA000000476416E64726F69644354534F

부록

UICC(UMTS 통합 회로 카드)의 샘플 애플릿 및 설치 단계

1. 패키지 사양

파일 이름: google-cardlet.cap

패키지 AID: 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 module
6F 6D 61 70 69 43 61 63 68 69 6E 67 = XXLResponse module

가져오기:
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 설치 단계

적합한 절차(SE 제조업체에 확인)를 통해 google-cardlet.cap 파일을 SIM 카드에 로드합니다.

애플릿마다 설치 명령어를 실행합니다.

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 명령어를 참고하세요.