보안 요소에 대한 CTS 테스트

더 나은 보안을 제공하기 위해 일부 장치에는 암호화 데이터를 저장하기 위한 별도의 변조 방지 전용 하드웨어인 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가 다음을 수행할 수 있어야 합니다.

  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. 애플릿은 전송 에서 다음 APDU를 수신할 때 데이터를 반환하지 않아야 합니다.
        1. 0x00060000
        2. 0x80060000
        3. 0xA0060000
        4. 0x94060000
        5. 0x000A000001AA
        6. 0x800A000001AA
        7. 0xA00A000001AA
        8. 0x940A000001AA
      3. 애플릿은 다음 전송 APDU에 대해 256바이트 데이터를 반환해야 합니다.
        1. 0x0008000000
        2. 0x8008000000
        3. 0xA008000000
        4. 0x9408000000
        5. 0x000C000001AA00
        6. 0x800C000001AA00
        7. 0xA00C000001AA00
        8. 0x940C000001AA00
      4. 애플릿은 각 전송 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 예*
        *응답은 첫 번째 바이트가 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. 애플릿은 SELECT 명령에서 받은 P2 값 + 주어진 APDU에 대한 성공 상태 단어(예: 0x009000 )를 반환해야 합니다. 0x00F4000000
    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
  • 승인된 에이즈

    • 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

  • 승인되지 않은 에이즈

    • 0xA000000476416E64726F696443545343
    • 0xA000000476416E64726F696443545346

CtsSecureElementAccessControlTestCases2

  • APK의 해시: 0x93b0ff2260babd4c2a92c68aaa0039dc514d8a33
  • 승인된 에이즈:

    • 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

  • 승인되지 않은 에이즈

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

CtsSecureElementAccessControlTestCases3

  • APK의 해시: 0x5528ca826da49d0d7329f8117481ccb27b8833aa
  • 승인된 에이즈:

    • 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

  • 승인되지 않은 에이즈

    • 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 용 명령을 참조하세요.