관리 메뉴

IT.FARMER

RFID Card Read / SmartCard 본문

JAVA/Smart Card

RFID Card Read / SmartCard

아이티.파머 2016. 7. 21. 23:59
반응형
반응형

RFID를 찾아 보다보니 RFID / NFC / Serail 통신이 세가지를 모두 찾아보게 되었다.

생각보다 RFID 스마트카드 종류가 많다는 것에 놀라웠다.

 

학부시절에 유비쿼터스에 관련된 보고서를 작성하면서 RFID에 대한 내용을 찾아보고 레포트를 작성한 기억이 난다.

이런 시대가 언제 올까하고 생각했는데,  그 시대는 생각보다 빠르게 다가와 있었다.

 

RFID에 읽을 카드로 스마트 가트를 사용했고,

여기에 쓰인 카드는 MIFARE Classic 1k 카드이다.

이카드는 16byte의 0 block ~ 63 block 의 64개의 block으로 구성되어 있다.

 

 

이카드의 종류는 카드에 읽힌 ART값을 보고 판단하게 되는데 카드의 종류는 다음과 같이 확인 가능하다.

카드 정보를 확인 하기 위한 방법

ATR = { 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A}

RID  : A0 00 00 03 06

Standard(SS) = 03 (ISO 14443A , Part3)

Card Name = {00 01} (MIFARE Classic 1K)

 

참고

 

Card Name (C0 .. C1)
00 01: MIFARE Classic 1K 00 38: MIFARE Plus SL2 2K
00 02: MIFARE Classic 4K 00 39: MIFARE Plus SL2 4K
00 03: MIFARE Ultralight 00 30: Topaz and Jewel
00 26: MIFARE Mini 00 3B: FeliCa
00 3A: MIFARE Ultralight C FF 28: JCOP 30
00 36: MIFARE Plus SL1 2K FF [SAK]: undefined tags
00 37: MIFARE Plus SL1 4K

(이처럼 많은 카드가 존재)

 

메모리 구조로 간단하게 살펴보면 다음과 같다.

 

 

위에 언급한 바와같이 64개의 Block으로 구성되어 있다. 이는 각 16개의 selection으로 나뉘는데 1개의 Selection에는 4개의 block을 가지고, 

이는 이후 이야기할 Authentication(인증)에 사용된다. 하나의 Selection에 인증을 받으면 4개의 block에 접근 가능하다.

 

이외에 Ultralight 카드도 있다. (RFID 카드를 사니 이카드를 공짜로 주더라구요... ) 이건 1K와 다른 메모리 구조인데, 1~3번까지 otp block 이었던것으로 기억된다. (메뉴얼 참고.)

 

 

각각의 블럭 데이터에 접근하기 위해서 단숨에 접근하면 좋겠지만.

접근 할수 있는 인증을 받아야 하는데, 데이터를 읽기위한 프로세스는 다음과 같다.

 

 

KeyLoad 위한 APUD 커맨드이다.

 

Command Class INS P1 P2 LC Data In
  FF 82 00 00 06 FF FF FF FF FF
명령클래스 특정명령
 
명령
매개변수1
 
명령
매개변수2
 
데이터 필드의 Byte 길이 0xED 0x85 0x7E 0x25 0x00  0x0A
읽기 외부인증 Key Structure
00-15
Key
Number
00-01
6Byte CardUID + 00 0A 6Byte

 

DATA는 임으로 구성하여 이에대한 조합을 알아낼수 있도록 제공해 주어야 한다.

 

 

 

Authentication Load 위한 APUD 커맨드이다.

 

Command Class INS P1 P2 P3 Data In
  FF 88 00 04 00  
  읽기 내부인증   Block Number Key Type
60-61
TypeA- TypeB
 

 

 

Data Read Block

Command Class INS P1 P2 Le
  FF 80 00 04 10
읽기 바이너리 읽기   Block Number Data Length Max 16Byte
4byte 씩 증가

 

 

 

이로써 하나의 Blcok에 저장된 16byte의 값을 가져올수 있다.

해당 명령어는 Hex Code로 명령어를 기입해야한다. (읽혀진 하나의 Block에 16바이트 존재)

 

 

 

SmartCard Example Code

 

반응형