ID TECH
기술 게시물 전체 보기

기술 포스트

EMV 개발 가이드, 파트 I

ID TECH는 다양한 결제 단말기를 제조·판매하고 있으며, 현재 출시된 제품의 대부분은 "칩 카드"(또는 "스마트 카드")와 호환됩니다. 칩 카드를 이용한 결제는 일반적으로 "접촉식 EMV" 또는 간단히 "EMV"라고 부릅니다. (EMV는 카드 브랜드 컨소시엄인 Europay, Mastercard, Visa의 머리글자를 딴 약어입니다.)

업계 용어로, EMV 거래란 4권으로 구성된 EMV 결제 시스템용 집적회로 카드 규격(EMV Integrated Circuit Card Specifications for Payment Systems) (출처: https://www.emvco.com/)의 요건을 충족하는 거래를 의미합니다. 이 규격을 완전히 이해하려면 상당한 시간이 필요합니다. 4권 분량에 달하는 방대한 규격이기 때문입니다. 그러나 ID TECH는 POS 통합업체 및 신속한 시장 출시가 필요한 개발자들을 위해 다양한 무료 도구, SDK, 데모, 기타 리소스를 제공함으로써 "EMV 호환성" 확보를 보다 쉽게 달성할 수 있도록 지원합니다. EMV 컴플라이언스.

EMV 개발, 어디서부터 시작할까요?

ID TECH의 신규 고객 대부분은 기술적인 역량이 뛰어난 편입니다. 그럼에도 불구하고, 새로운 프로젝트를 시작할 때 고객이 보유한 EMV 지식 수준은 다양합니다. 대부분의 고객은 MSR(마그네틱 카드 리더기) 환경에서의 결제 시스템에 대한 이해도가 높습니다. EMV 경험이 있는 고객도 있지만, 비접촉식 EMV에 익숙한 개발자도 있지만, EMV 자체가 처음인 개발자도 있습니다.

참고로, 저희는 통합 개발자들에게 ID TECH의 무료 백서인 EMV Transactions with the Universal SDK를 먼저 살펴볼 것을 권장합니다. 이 25페이지 분량의 백서 전반부에서는 EMV 이벤트 흐름을 다시 한번 정리해 줍니다. 해당 흐름의 주요 이벤트는 다음과 같이 요약할 수 있습니다.

이 프로세스의 각 단계에서 카드 리더기는 ISO-7816에 정의된 매우 낮은 수준의 프로토콜을 사용하여 스마트 카드의 칩과 통신합니다. 이와 관련된 카드 리더기 로직의 대부분은 EMV Level 2 kernel이라고 알려진 영역 내에 격리되어 있습니다. 즉, 결제 앱 개발자는 카드 자체가 아닌 kernel 에 명령을 전달하는 것만 신경 쓰면 되며, 그 외의 영역은 접근할 수 없습니다. 그러나 이 역시 정확한 표현은 아닙니다. 실제로 결제 앱 개발자는 reader에 명령을 전달하고, 리더기가 kernel과의 필요한 내부 상호작용을 처리하며, kernel은 다시 카드와 통신하는 방식으로 동작합니다.

리더기와의 통신

리더기에 명령을 전송하는 방법에는 두 가지가 있습니다.

  1. USB 또는 RS-232 등을 통해 리더기와 연결을 확립한 후, 펌웨어 명령을 직접 전송합니다. 또는 다음과 같은 방법도 있습니다.
  2. 고급 언어 SDK를 활용하여 C/C++, C#, Objective-C, Java, 또는 Swift로 코드를 작성하고, 적절한 ID TECH SDK 라이브러리를 통해 기반 펌웨어 명령을 실행합니다.

일반적으로 두 번째 방법이 더 간편합니다. ID TECH의 Universal SDK가 제공하는 고급 언어 API는 비교적 단시간에 숙달할 수 있으며, 활용 가능한 풍부한 샘플 코드도 제공됩니다. 다만 단점으로는 두 번째 방법은 앱이 특정 개발 언어 및 운영 체제에 종속되는 경향이 있다는 점입니다. 반면 첫 번째 방법은 언어와 OS를 자유롭게 선택할 수 있지만, 대상 디바이스의 (바이트 수준) 펌웨어 명령 API를 직접 학습하고 모든 연결 문제를 직접 처리해야 합니다.

직렬 연결을 통해 원시 펌웨어 명령으로 카드 리더기와 직접 통신하든, Universal SDK의 내장 연결 기능과 고급 명령을 사용하든 관계없이, EMV 거래(여기서는 비접촉식이 아닌 전통적인 접촉식 EMV를 의미합니다)가 세 단계로 이루어진다는 점을 이해하는 것이 중요합니다. Universal SDK에서는 이 세 단계를 각각 Start Transaction, Authenticate Transaction, Complete Transaction으로 지칭하며, USDK 내에 각 단계에 대응하는 메서드 또는 함수가 존재합니다. 프로그램 흐름 관점에서 보면, 커널은 거래 흐름 중 두 번에 걸쳐 제어권을 호출자에게 반환합니다. 첫 번째는 Start Transaction 반환 후이며, 두 번째는 Authenticate Transaction 이후(Complete Transaction 이전)입니다. 이러한 중단 지점은 데이터 흐름에 중요한 영향을 미칩니다. 거래 단계별로 반환되는 TLV(태그-길이-값 트리플렛)가 서로 다르기 때문에, 필요한 TLV는 해당 단계에서 반드시 수집해야 합니다. 이후 단계에서는 해당 TLV를 더 이상 사용할 수 없을 수 있기 때문입니다. 대표적인 예로, 태그 57(트랙 2 데이터)은 Start Transaction 종료 시점에 제공되지만 Complete Transaction 종료 시점에는 제공되지 않습니다.

EMV의 암호문(Cryptogram)

모든 EMV 거래에서 가장 중요한 데이터 항목 중 하나는 태그 9F26접촉식 EMV 세션에서는 일반적으로 두 개의 암호문(9F26이 두 번 반환됨)이 생성됩니다. 하나는 거래 완료(Complete Transaction) 이전에, 다른 하나는 이후에 생성됩니다. 카드가 암호문을 생성하도록 유도하는 이벤트를 Gen AC(Generate Application Cryptogram) 요청이라고 합니다.

이 암호문이 중요한 이유는, 특정 거래에 실제 정품 칩 카드가 물리적으로 존재했다는 사실을 부인할 수 없는 증거로서 기능하기 때문입니다. (또한 해당 거래 중 발생한 특정 데이터 값을 인증하는 역할도 합니다.) Gen AC 시점에 L2 커널은 칩 카드에 데이터 객체 목록 (현재 거래에 특화된 데이터를 포함)을 제시하며, 칩 카드는 칩만이 알고 있는 개인 키를 사용하여 해당 데이터에 서명함으로써 카드와 데이터의 정당성을 증명하는 위조 불가능한 디지털 결과물(8바이트 암호문)을 생성합니다. 이 암호문의 유효성은 궁극적으로 거래를 승인(또는 상황에 따라 거부)하는 온라인 기관에 의해 검증될 수 있습니다. 바로 이것이 칩 카드가 개발된 이유이자 EMV가 존재하는 이유입니다. MagStripe 데이터는 위조하기 쉽습니다. 반면 칩이 즉석에서 생성하는 암호문은 위조가 매우 어렵습니다.

다음 포스트에서는 카드가 생성할 수 있는 암호문의 종류, 각 암호문의 의미, 결제 앱 개발자가 이를 어떻게 처리해야 하는지, 그리고 암호문이 거래 성공 또는 실패에 어떤 영향을 미치는지에 대해 계속 살펴보겠습니다. Part II를 놓치지 마세요!

EMV 거래, 카드 리더기, 비접촉식 기술, 디지털 지갑에 대해 궁금한 점이 있으신가요? 전문가에게 문의하세요:

수신자 부담 전화번호
1-800-984-1010