ID TECH
문의
기술 게시물 전체 보기

기술 포스트

EMV 개발 가이드, 1부

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는 개발자들이 "EMV 호환성"을 손쉽게 달성할 수 있도록 다양한 무료 툴, SDK, 데모 및 기타 리소스를 제공하여 POS 통합 업체 등이 신속하게 시장에 진출할 수 있도록 지원합니다. 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에 명령을 전송하게 되며, reader가 kernel과의 필요한 하위 수준 상호작용을 처리하고, kernel은 다시 카드와 상호작용합니다.

리더기와의 통신

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

  1. 리더기와의 연결을 설정(일반적으로 USB 또는 RS-232 사용)하고, 펌웨어 명령을 직접 전송합니다. 또는 다음 방법을 사용할 수 있습니다.
  2. 고수준 언어 SDK를 사용하여 C/C++, C#, Objective-C, Java 또는 Swift로 코드를 작성하고, 적절한 ID TECH SDK 라이브러리를 활용해 기반이 되는 펌웨어 명령을 실행합니다.

일반적으로 두 번째 방법이 더 간편합니다. ID TECH의 Universal SDK가 제공하는 고수준 언어 API를 익히는 데 비교적 적은 시간이 소요되며, 참고할 수 있는 다양한 샘플 코드도 제공됩니다. 다만, 단점 으로는 두 번째 방법을 선택하면 애플리케이션이 특정 개발 언어와 운영체제에 종속되는 경향이 있다는 점입니다. 첫 번째 방법은 언어와 운영체제를 자유롭게 선택할 수 있지만, 해당 디바이스의 (바이트 수준) 펌웨어 명령 API를 직접 습득해야 하며, 모든 연결 문제도 직접 처리해야 합니다.

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

EMV의 암호문(Cryptogram)

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

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

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

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

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