4/29/2010

Analyze the ISO 8583 Protocol


Hypercom T4220 Terminal
Hypercom T4220 Terminal
오른쪽에 보이는 Hypercom 단말기에서 생성되고 전송되는 ISO 8583 Message를 분석하는 Project를 하게되었다. Network팀에서 Wireshark프로그램으로  캡쳐한 패킷을 분석하는 일이다.

먼저 ISO 8583에 대해 알아보자.

ISO 8583이란?
ISO 8583은 위키에서 다음과 같이 정의하고 있다.
ISO 8583 Financial transaction card originated messages — Interchange message specifications is the International Organization for Standardization standard for systems that exchange electronic transactions made by cardholders using payment cards.
한국표준정보망에서는 '금융 거래 카드 발원 메시지-교환 메시지 규격'으로 정의하고 있다.


간단하게 말하면, 신용카드등을 소유하고 있는 Cardholder들이 상품구매나 ATM기기에서 돈을 뽑는 등 Card를 사용할 때 발생하는 Card Transaction 정보를 표준으로 만든 것이다.(적어도 난 그렇게 이해했다 -_ㅠ)




ISO 8583의 구성
ISO 8583은 크게 다음과 같은 3가지로 구성된다.
  • Message Type [2byte]
  • Bitmaps [8byte (if secondary bitmap exist, Bitmap length is 16byte)]
  • Fields
위키의 Introduction에서 보듯이 규격 표준이 정의되어 있지만 각 회사마다 Message Format에 맞춰 Message Type 및 각 Field 들을 재정의해 사용한다.

Message Type은 현재 Message의 제목이나 이름과 같다.
Bitmaps는 현재 Message Type에 어떤 Fields들이 포함되었는지 보여준다.
각 Fields는 현재 Message의 정보를 나타낸다.



실제 Message Format의 예를 보며 ISO 8583 의 구성요소를 파헤쳐보자. (아래 설명요소는 Global Payments EAST Spec을 토대로 분석한 것이다.각 Spec에 따라 분석하는데 차이가 있을 수 있으므로 주의하자.)
  1. Message Type:
        항상 2byte로 Sample에서는 1200을 나타낸다.


  2. Bitmaps [8Byte or 16Byte]:
        아래 Sample의 1st Bitmap은 16진수로 '302004032040000a '이다.
        2진수로 바꾸면 '0011 0000 0010 0000 0000 0100 0000 0011 0010 0000 0100 0000 0000 0000 0000 1010' 이다.
        2진수에서 1로 Set되어있는 부분이 어떤 Field가 포함되어있는지를 나타내준다. 위의 2진수를 보면 3, 4, 11, 22, 31, 32, 35, 42, 61, 63번째 Bit가 1로 Set되어있다.
        각 번호는 Spec에 따로 정의되어 있다.


        2진수에서 첫번째 Bit는 2nd Bitmap의 존재여부를 알려주는 Indicator이다.
        이 Bit가 1로 Set되어 있다면 2nd Bitmap이 존재한다. 예를 들어보면 1st Bitmap의 16진수가 'f02404010040000a'라면  2진수는 다음과 같다.
        '1111 0000 0010 0100 0000 0100 0000 0001 0000 0000 0100 0000 0000 0000 0000 1010'

        첫번째 Bit가 1로 Set되어 있기 때문에 뒤에어 나오는 8byte가 2nd Bitmap이 된다.
        2nd Bitmap의 16진수가 '0000000000000004'이라면 2진수는 다음과 같다.
        '0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100'

        따라서 이 16byte Bitmap에서 나타나는 Field는 (1st Bitmap)1, 2, 3, 4, 11, 14, 22, 32, 42, 61, 63 그리고 (2nd Bitmap)126 이다.


  3. Fields
        아래 Sample을 보면 각 Bit에 대응하는 Field들의 이름이 나와있고 각 Field의 길이와 데이터가 나와있다(이러한 정보는 Spec에 정의되어 있다).

        Sample에서 nibble은 1/2 Byte의 숫자를(용어선택이 어려웠다.. BCD로 했어야 했나?) Ascii 는 1Byte의 ASCII 문자를 나타낸다.

        그리고 LL과 LLL은 가변길이를 나타내는데 LL의 경우 첫번째 1Byte가 길이를 지정하고 LLL의 경우 2Byte가 길이를 지정한다. 길이를 결정할 때에는 주의해야한다. 예를 들어 31번 Field acquirer refer data를 보자. 가변길이 LL에서 길이가 2로 지정되어 있다. 현재 ascii 이라서 2Byte가 데이터를 나타내지만 nibble인 경우는 1Byte를 나타내게 된다.

ISO Packet Sample

표 위의 그림은 Wireshark으로 캡쳐해서 얻어온 결과로써, 왼쪽부터 줄버호, ASCII 코드, 일반String 순으로 나열되어 있다.

그림에 나와있는 표는 따로 만든 ISO Packet Analysis 프로그램을 통해 분석한 결과이다.



참고: Wiki - http://en.wikipedia.org/wiki/ISO_8583
    sanjib-swain Blog - http://sanjib-swain.blogspot.com/2009/06/brief-explanation-of-iso-8583-protocol.html






UCharge(Payment Client Module)

1. 프로그램 설명

카드 트랜잭션 패킷을 분석한 내용을 토대로 PC에서 실제로 트랜잭션을 만들어 보내고 승인받는 결제 프로그램을 만들었습니다. 상용 결제 프로그램은 Global Payments와 같은 벤더에게 트랜잭션 메시지가 제대로 생성됨을 인증받는 1차 테스트를 통과해야 합니다. 이 프로그램은 그 1차 테스트를 통과하기 위한 목적으로 만들어졌고, 제가 근무하는 동안 테스트에 통과했습니다.

다음과 같은 카드 트랜잭션을 지원합니다.

  1. Credit - Purchase, Void, Return, Adjustment , Force, Pre & Post Authorization Transaction
  2. Debit - Purchase and Return Transaction
  3. EBT - Purchase, Return, Balance Inquiry, Boucher Clear Transaction
  4. Balance - End of Day Transaction (Host or UCharge Based) 


TCP/IP 방식 또는 Modem을 이용한 Dial-Up방식으로 트랜잭션을 발생시킬 수 있습니다.


프로그램은 MVP(Model, View, Presenter) 디자인 패턴을 이용해 작성되었습니다







2. 프로젝를 통해 배운점


  • 미국 카드 트랜잭션에 관련된 내용
  • Magnetic Stripe, PIN Pad, Modem 사용법 및 제어방법 
  • AT Command 기초 
  • MVP 디자인 패턴 
  • SSL, TripleDES 기초 개념

.






댓글 없음:

댓글 쓰기