NFC: NDEF, Tag 타입, Reader vs Card Emulation

NFCIoT

NFC(Near Field Communication)는 13.56 MHz에서 ~4 cm 거리로 동작하는 근접 통신 기술이다. 한쪽이 RF 필드를 생성하고, 다른 쪽이 이 필드에서 전력을 수확해 응답하므로 배터리 없는 태그와도 통신할 수 있다.

NFC 동작 모드

모드RF 필드 생성설명
Reader/Writer디바이스(폰/리더)패시브 태그를 읽거나 쓴다
Card Emulation외부 리더디바이스가 카드/태그처럼 동작한다
Peer-to-Peer양쪽두 디바이스 간 양방향 통신

NDEF (NFC Data Exchange Format)

NFC 태그에 저장되는 데이터의 표준 포맷. 태그 종류에 관계없이 동일한 NDEF 구조를 사용한다.

구조

NDEF Message
  └─ NDEF Record 1 (MB=1)
  └─ NDEF Record 2
  └─ NDEF Record N (ME=1)

NDEF Record 헤더 (1 byte):

비트이름의미
7MBMessage Begin
6MEMessage End
5CFChunk Flag
4SRShort Record (payload length가 1 byte)
3ILID Length 필드 존재
2-0TNFType Name Format (3-bit)

TNF 값:

의미예시
0x01NFC Forum Well-Known TypeURI(“U”), Text(“T”), Smart Poster(“Sp”)
0x02MIME Media Type”application/json”
0x03Absolute URI전체 URI를 타입으로 사용
0x04NFC Forum External Type”android.com:pkg”

URI Record 인코딩 예시

https://www.google.com을 태그에 저장할 때의 hex:

03 11 D1 01 0D 55 02 67 6F 6F 67 6C 65 2E 63 6F 6D FE
바이트의미
03TLV Type: NDEF Message
11TLV Length: 17 bytes
D1Header: MB=1, ME=1, SR=1, TNF=0x01 (Well-Known)
01Type Length: 1
0DPayload Length: 13
55Type: “U” (URI record)
02URI Prefix: https://www.
67..6D”google.com” (ASCII)
FETLV Terminator

URI prefix 코드로 URL 앞부분을 압축한다. 0x01 = http://www., 0x02 = https://www., 0x04 = https:// 등.

Tag 타입: Type 2 vs Type 4

Type 2 (NTAG213/215/216)

가장 많이 쓰이는 태그. ISO 14443-3A 기반, 106 kbit/s.

메모리는 4-byte 페이지 단위로 구성된다:

Page 0-2: UID + Lock bytes
Page 3:   CC (Capability Container)
Page 4~:  사용자 데이터 (NDEF TLV)

CC bytes (Page 3) 예시 — NTAG213:

E1 10 12 00

E1 — Magic: NFC Forum Type 2 Tag
10 — 버전 1.0
12 — 용량: 0x12 × 8 = 144 bytes
00 — 접근 권한: 읽기/쓰기 허용

READ 명령으로 4페이지(16 bytes)씩 읽는다. 용량은 48~888 bytes (NTAG216).

Type 4 (DESFire, ST25TA)

ISO 14443-4 (ISO-DEP) + ISO 7816-4 APDU 기반. 파일 시스템 구조를 가진다.

NDEF Tag Application (AID: D2760000850101)
  ├─ CC File (ID: E103)   — 태그 속성 정보
  └─ NDEF File (ID: E104) — NLEN(2 bytes) + NDEF Message

NDEF 읽기 APDU 시퀀스:

1. SELECT Application  → 00 A4 04 00 07 D2760000850101 00
                        ← 90 00

2. SELECT CC File      → 00 A4 00 0C 02 E103
                        ← 90 00

3. READ BINARY (CC)    → 00 B0 00 00 0F
                        ← [CC data] 90 00

4. SELECT NDEF File    → 00 A4 00 0C 02 E104
                        ← 90 00

5. READ BINARY (NLEN)  → 00 B0 00 00 02
                        ← [length] 90 00

6. READ BINARY (NDEF)  → 00 B0 00 02 [length]
                        ← [NDEF data] 90 00

비교

Type 2Type 4
프로토콜ISO 14443-3AISO 14443-4 + ISO 7816-4
속도106 kbit/s최대 424 kbit/s
용량48~888 bytes4 KB~32 KB+
명령 체계자체 READ/WRITE (페이지 단위)APDU (SELECT/READ BINARY)
메모리 모델플랫 페이지 (4 bytes/page)파일 시스템 (CC + NDEF 파일)
보안정적 lock bits, 선택적 패스워드AES 암호화, ACL
단가$0.050.20$0.505.00
칩 예시NTAG213/215/216DESFire EV3, ST25TA
용도URL 스티커, 마케팅, 제품 태그결제, 교통카드, 출입통제, 디지털 키

Reader/Writer 모드

디바이스가 RF 필드를 생성해 패시브 태그를 읽는 모드.

동작 흐름 (Type A)

Reader                           Tag
  │── SENS_REQ (0x26) ─────────→│  태그 탐색
  │←─ SENS_RES (ATQA) ──────────│  플랫폼 정보 응답
  │── SDD_REQ (Anti-collision) →│  UID 요청
  │←─ SDD_RES (UID + BCC) ──────│  UID 응답
  │── SEL_REQ (Select) ────────→│  태그 선택
  │←─ SEL_RES (SAK) ────────────│  선택 확인
  │── RATS ─────────────────────→│  (Type 4만) ISO-DEP 활성화
  │←─ ATS ───────────────────────│

이후 Type 2는 READ/WRITE 명령, Type 4는 APDU로 데이터를 교환한다.

Card Emulation 모드

디바이스가 카드처럼 동작한다. RF 필드를 생성하지 않고, 외부 리더의 필드에 응답한다.

SE vs HCE

Secure Element (SE)Host Card Emulation (HCE)
처리 위치전용 보안 칩 (SE/SIM/eSE)호스트 CPU (Android 앱)
보안하드웨어 수준 탬퍼 방지소프트웨어 샌드박스
프로비저닝SE에 사전 탑재 필요앱 설치만으로 가능
용도결제 (Apple Pay), 차량 키멤버십, 교통, 출입, 커스텀 앱
플랫폼iOS/Android 모두Android 4.4+

HCE APDU 흐름

외부 리더                      폰 (HCE)
  │── SELECT AID ──────────→│  00 A4 04 00 [Lc] [AID] 00
  │←─ Response ─────────────│  [data] 90 00
  │── Application APDU ────→│  애플리케이션별 명령
  │←─ Response ─────────────│  응답 + Status Word

외부 리더가 SELECT AID를 보내면, Android NFC 컨트롤러가 AID 라우팅 테이블에서 대상 서비스를 찾아 APDU를 전달한다.

차량 디지털 키에서의 Card Emulation

CCC Digital Key는 NFC card emulation을 사용한다:

  1. 차량 도어 핸들의 NFC 리더가 RF 필드 생성
  2. 폰의 NFC 컨트롤러가 응답, Secure Element의 차량 키 applet으로 APDU 라우팅
  3. SE에서 ECC 기반 인증 수행 (SPAKE2+, NIST P-256)
  4. 인증 성공 시 차량 잠금해제

Express 모드: iPhone XS 이후, 배터리가 방전된 후에도 최대 5시간 NFC가 동작한다. NFC 컨트롤러가 iOS 없이 독립적으로 Express Card 트랜잭션을 처리한다.

메모

  • Type 2 태그의 UID는 고정이지만, HCE 디바이스는 탭마다 랜덤 UID를 생성한다. 리더가 UID로 디바이스를 식별하면 안 된다
  • NDEF TLV 길이가 254 bytes를 초과하면 3-byte 형식(0xFF + 2-byte big-endian)을 사용한다
  • NFC를 BLE/WiFi 프로비저닝의 OOB 채널로 사용하면 ~4 cm 범위에서만 크레덴셜이 교환되므로 도청이 어렵다
  • Type 4 태그의 APDU 응답에서 90 00은 성공, 6A 82는 파일 없음, 6D 00은 명령 미지원