본문 바로가기
기타

ATR과 APDU란?

by [Akashic Records] 개발의선지자 2025. 5. 25.

이번 포스팅에서는 스마트 카드

결제 시스템에서는 사용되는 통신 명령의 일종인 APDU과 응답인 ATR에 대해 개인적으로 정리해보고자 한다.

 

ATR(Answer to Reset)

 

IC 카드가 카드 단말기 또는 리더기 연결시 , 리더기 또는 단말기 -> 카드로 리셋 신호를 보낸다. 그 후 리셋신호에 대한 응답으로 보내는 카드 프로토콜과 통신 파라미터를 보내는 초기화 데이터이다

 

목적 

1. 카드 프로토콜 및 전송 매개변수를 (카드) 리더기에게 전송

2. 카드가 ATR 패킷을 보고 카드 특성 파악 및 적절한 통신 방식 설정

3. 카드 ISO/IEC 7816 등의 표준 여부 식별 가능

 

패킷 구성

1) TS | T0 | [Interface Bytes] | Historical Bytes | TCK 

 

 

각 패킷 의미

필드 의미
TS 전송 시작 바이트 : 통신 모드 
(디렉트 / 인버스)
T0 인터페이스 바이트의 개수 및 Historical Bytes의 길이 정보 포함
TAi, TBi, TCi, TDi 인터페이스 바이트
카드 통신 프로토콜과 전기적 특성 정의
Historical Bytes(최대 15바이트) 카드 어플리케이셔 또는 제조사 관련 정보
TCK 체크 바이트 (T=1 프로토콜 사용시 포함됨)

 

각 패킷 상세 정보

 

TS : 전송 방식 

HEX 바이트 수 의미
0x3B 1 Direct Convention
0x3F 1 Inverse Convention

 

T0 

바이트 비트 수 의미
상위 4 인터페이스 바이트 존재여부
하위 4 Historicl Bytes 길이

 

인터페이스 바이트

각 바이트 그룹은 논리적으로 같은 위치에 해당하는 i 인덱스를 가짐

(TA1, TB1, TC1, TD1 그리고 TD가 존재할 경우 다음 인터페이스 그룹 i+1이 이어짐

항목 바이트수  의미와 각 패킷 예시
TA1 1 통신 속도
FD(상위 4바이트) : 클럭 주기 계수
DI(하위 4바이트) : 비트 전송률 조정 계수
 
TB1 1 프로그램 전압(Vpp), 보호 타임아웃
현재 대부분 사용되지 않으며 보통 0xFF 또는 생략
 
TC1 1 통신 기다림 시간(Extra Guard Time)
기본값  : 0x00(2ETU)
0xFF : 카드가 최대 대기시간까지 미응답
 
TD1 1 다음 인터페이스 바이트 존재 여부 및 프로토콜 유형 
상위 4바이트 : 다음 인터페이스 바이트 존재 여부
하위 4바이트 : 통신 프로토콜 (T=0 , T=1 등)
 

 

Historical Bytes

카드의 어플리케이션 , 제조사 ID, 버젼 정보 등을 포함

 

TCK(선택옵션) - 프로토콜 체크 바이트

T=1 또는 그 이상의 프로토콜 사용시 존재

ATR의 모든 바이트 XOR 합이 0이 되도록 설정됨(TS제외)

 

응답성공 코드

HEX(2바이트) 의미
90 00 스마트 카드 응답 성공

 

예제 ATR
3B 9F 96 80 1F C3 80 31 A0 73 BE 21 13 67 43 20 00 00 00 81

 

분석

1. 3B -> TS

- Direct Convention

2. 9F -> T0 

- 상위 4비트(nibble) -> 1001 : TA1 , TD1 존재 

- 하위 4바트(nibble) -> 1111 : 히스토리 바이트 수(15바이트)  

3. 96 

- TA1 -> FI = 9, DI = 6

4. 80

TD1 -> TD2 있음, T=0 (하위 4비트)

5. 1F

TD2  -> T = 15   

6. C3 80 31 A0 73  .. (총 15바이트)

History Byte

7. 마지막 81 

TCK -> 체크 바이트(T = 0 프로토콜이 아니므로 체크 바이트 존재)

 

T= 0   -> 단순 , 기본 프로토콜 

T = 1 -> 블록 기반 프로토콜 (TCK 필수)

T=0과 T =1 하나의 프로토콜만을 우선 제공해야 한다. 또한  동시 지원은 허용 x 

 

단말기 리셋 직후의 동작 

단말기는 ic 카드의 접점을 활성한 후(카드 삽입 후)  , 콜드 리셋(cold reset)을 시작해야한다.

 

카드 거부시 동작

조건  단말기 동작
카드 거부 카드 세션을 중단하고 비활성화 시퀀스( deactivation sequence ) 시작
Cold ATR 거부 즉시 중단하지 않고 Ward Reset 수행
Warm ATR 거부 카드 세션을 중단하고 비활성화 시퀀스 시작

 

유효한 ATR 수신 후의 동작

유효한 cold 또는 warm ATR을 수신하면 단말기는 해당 ATR에 명시된 파라미터를 사용해 카드 세션을 계속 진행 할수 있다.

마지막 바이트가 수신된 이후, 단말기는 해당 프로토콜의 가드 타임(guard time)를 기다린 후 통신을 시작해야 한다.

APDU(Application Protocol Data Unit)

 

: 스마트 카드나 보안 디바이스(IC 카드, SIM 카드)와 통신 시 사용되는 명령어 

ISO/IEC 7816 표준 기반

 

APDU 구성 

1. Command APDU, 줄여서, C-APDU(호스트 -카드 리더기 -> 스마트 카드)

2. Response APDU, 줄여서, R-APDU(스마트카드 -> 호스트 - 카드 리더기)

 

C-APDU 구조(순서대로)

필수 패킷 

CLA(1byte, Class)  :  명령 CLASS , "FF"빼고 어떤 값을 가질수 있다. 

역할 : 카드가 어떤 집합을 사용하는 지 알려주는 역할 (명령의 종류, 보안 레벨 ,체널 등을 구분)

 

 

INS(1byte, Instruction) : 수행할 명령어

P1(1byte) : Parameter 1 명령 옵션

P2(1byte) : Parameter 2 명령 옵션

명령의 세부 동장 , 방식을 정의 (선택 방식 , 오프셋, 파일 ID등 사용)

 

선택

Lc(0, 1~255, Length Command) : 전송할 데이터 길이 

Data(variable, Lc만큼) : 전송할 데이터 

Le(0, 1~255) : 수신할 예상 응답 길이 (만약 Le =00일 때는 최대 256 바이트 응답 허용)

 

C-APDU 구조

case 1 : CLA INS P1 P2 

case 2 : CLA INS P1 P2, Le

case 3 : CLA INS P1 P2 Lc Data

case 4 : CLA INS P1 P2 Lc Data Le

 

R-APDU 구조(순서대로) 

Data(var, le만큼)
SW1 : 상태 코드 1 

SW 2 : 상태 코드 2

 

값(Hex) 설명
00 ISO/IEC 7816-4 기본 명령 (표준 클래스)
80 프로프라이어터리 클래스(비표준, ex : GPO)
84 보안 관련 클래스
90 ~ EF 채널/보안 정보 포함 가능

 

자주 쓰는 C-APDU INS 명령어

INS(HEX) 명령어 설명
A4 SELECT 파일/어플리케이션 선택
B0 READ BINARY 바이너리 파일 읽기
D6 UPDATE BINARY 바이너리 파일 쓰기
20 VERIFY PIN 검증
88 INTERNAL AUTHENTICATE 내부 인증 수행
84 GET CHALLENGE 난수 요청(보안용)

 

자주 쓰는 R-APDU SW1 SW2 명령어

 

SW1 SW2  설명
90 00  성공(SUCCESS)
6A 82 파일 없음 (FILE NOT FOUND)
6A 86 잘못된 파라미터
67 00  길이 오류

 

 

PSE(payment System directory)

정의

IC 카드에서 결제 시스템 정보를 저장한 구조화된 파일

카드 내 디렉터리 역할, 카드 내에 어떤 결제 어플리케이션(AID)이 설치되어 있는지를 탐색하는데 사용된다.

 

특징

1. IC 카드안에 DF(directory File) 형태로 존재

2. APDU 명령을 통해 파일 이름으로 SELECT 가능 

 

정의 카드 내 어플리케이션 디렉터리 파일
형식
  • "1PAY.SYS.DDF01" → 접촉식 결제 (Contact PSE)
  • "2PAY.SYS.DDF01" → 비접촉식 결제 (Contactles)
관련 APDU SELECT 명령(대부분 0x04)으로 접근
역할 설치된 결제 애플리케이션 (AID) 목록 제공
통신 흐름  PSE 선택 -> AID 선택 -> 거래 요청(APDU 연속 호출)

 

 

전체 통신 플로우 요약

  1. PSE 선택 (단말기 -> 카드)
    • SELECT 명령 (00 A4 ...)으로 "1PAY.SYS.DDF01" 선택
  2. APDU 응답 ( 카드 -> 단말기)
  3. AID 선택 (단말기 ->카드)
    • 사용자가 사용할 애플리케이션 선택
    • 다시 SELECT 명령으로 AID 선택 (00 A4 ...)  
  4. FCI 분석 
    • 응답 APDU에서 FCI (File Control Information) 분석
    • 안에 포함된 AID 목록을 파악
  5. Processing Options 요청
    • GET PROCESSING OPTIONS (80 A8 ...) 명령
  6. 레코드 읽기
    • READ RECORD (00 B2 ...) 등으로 거래 정보 획득
  7.  거래 처리 (인증 등)
  8.  

AID(Application Identifier)

 

: IC 카드 안에 있는 어플리케이션을 고유하게 식별하기 위한 바이트 문자열(최대 16바이트)

AID 구조

AID는 ISO/IEC 7816-5 표준에 따라 구성되며 일반적으로 다음과 같은 구성입니다:

구성 요소설명

 

AID 구성 의미 용도
RID
(5바이트)
등록된 애플리케이션 제공자 ID (Registered Application Provider Identifier) 결제 브랜드 식별
PIX
(최대 11바이트
애플리케이션 제공자의 선택적 확장 (Proprietary Identifier Extension) 특정 서비스나
애플리케이션 버젼 구분

 

 

브랜드AID 예시 설명

Visa A0000000031010 Visa Debit/Credit
MasterCard A0000000041010 MasterCard Credit
Amex A00000002501 American Express
UnionPay A000000333010101 중국 유니온페이
T-Money A000000677010106 한국 교통카드

 

'기타' 카테고리의 다른 글

그레이 코드  (0) 2025.05.09