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

기술 포스트

결제 단말기 통합을 위한 도구: 암호화/복호화 툴

ID TECH는 당사 제품을 활용하여 결제 앱을 개발하는 모든 분들을 위해 다양한 무료 유틸리티를 제공하고 있습니다. 최근 게시물에서는 Parsomatic(웹 폼 형태로 구현된 무료 데이터 파서)과 UDemo(Windows용 C#으로 구현된 범용 SDK 테스트 앱으로, 레거시 제품을 제외한 모든 당사 제품과 호환)에 대해 소개했습니다. 아울러 브라우저에서 바로 사용할 수 있는 Encrypt/Decrypt Tool도 꼭 한번 사용해 보시기를 권장합니다. 이 링크.

Encrypt/Decrypt Tool은 강력한 독립형 단일 페이지 HTML 앱으로, AES 암호화, Triple DES, DUKPT 키 파생, SHA 해싱, HMAC 등 다양한 기능을 네이티브 JavaScript로 구현하고 있습니다. 모든 로직이 단일 페이지 내에 포함되어 있어 서버 측 구성 요소가 전혀 없으므로, HTML 파일을 다운로드한 후 Chrome의 개발자 도구 등을 활용하여 브라우저에서 직접 로직을 확인할 수 있습니다.

위 스크린샷에서 볼 수 있듯이, Encrypt/Decrypt Tool 상단의 버튼을 클릭하면 도구에서 수행 가능한 다양한 기능이 드롭다운 메뉴로 표시됩니다. 고객들로부터 자주 받는 문의 중 하나는 "리더기에서 전송되는 트랙 데이터를 어떻게 복호화할 수 있나요?"입니다. 여기서 트랙 데이터란 마그네틱 선 데이터 또는 EMV 태그에 포함될 수 있는 신용카드 트랙 정보를 의미합니다. 이러한 데이터는 일반적으로 AES 또는 Triple DES 암호화 방식으로 암호화되며, ID TECH는 그 외의 알고리즘도 지원합니다. 데이터 복호화 자체보다는 키 생성 및 사용 방식이 다소 복잡하게 느껴질 수 있습니다.

업계 내 대부분의 신용카드 처리 환경에서는, 리더기가 거래별로 고유한 일회용 키를 사용하여 민감한 카드 데이터를 암호화합니다. 이것이 바로 DUKPT 방식입니다. DUKPT(Derived Unique Key Per Transaction)는 거래마다 새로운 키 를 파생시켜 동일한 키가 재사용되지 않도록 함으로써 재전송 공격을 방지합니다. 리더기는 초기에 고유한 128비트 키를 보유하며, 카드를 읽을 때마다 카운터가 증가합니다. 이 카운터 값은 KSN(Key Serial Number)이라는 값에 저장됩니다. KSN 자체는 공개 정보라는 점을 유의하시기 바랍니다. (실제 복호화 시나리오에서는 암호화된 데이터와 함께 복호화 당사자에게 전송됩니다.) 거래 시점에 KSN은 특수 알고리즘을 통해 리더기의 원본 암호화 키를 활용하여 고유한 신규 키를 파생시킵니다(단방향 해시를 사용하므로, 특정 키가 탈취되더라도 다른 키를 계산하는 데 활용할 수 없습니다). 해당 알고리즘은 ANSI X.9-24에 의해 정의되어 있습니다. 이는 매우 정교한 대칭 키 관리 방식이지만, 구현하기가 다소 까다롭기도 합니다. 바로 그 이유로 저희가 대신 구현해 드렸습니다. (참고: 이전 포스트에서 언급된 UDemo 프로그램에도 DUKPT 기능을 수행하는 복호화 기능이 포함되어 있으나, 소스 코드는 제공되지 않습니다.) 이전 포스트 에도 DUKPT 기능을 수행하는 복호화 기능이 포함되어 있으나, 소스 코드는 제공되지 않습니다.

암호화된 트랙 데이터를 복호화하려면 해당 거래의 KSN, BDK, 그리고 암호화된 데이터가 필요합니다. Encrypt/Decrypt Tool을 사용할 경우, 위 스크린샷과 같이 "Encrypt or decrypt data"를 선택한 후 작은 Derive . . . 버튼을 클릭합니다. 그러면 소형 대화 상자가 열리며, 여기서 KSN(10바이트 16진수)과 16바이트 Base Derivation Key(리더기 초기화 시 주입된 Initial PIN Encryption Key, 즉 IPEK를 생성하는 데 사용된 원본 키)를 입력합니다. 테스트 및 개발 목적으로는 대부분 이른바 ANSI 표준 테스트 키(값: 0123456789ABCDEFFEDCBA9876543210)를 BDK로 사용합니다. 이 값은 Encrypt/Decrypt Tool의 기본 BDK 값으로 설정되어 있으며, 필요 시 손쉽게 변경할 수 있습니다.

10바이트 KSN(공백 포함 또는 미포함 16진수 형식)을 입력한 후, 생성할 키 변형 유형(PIN, Data, 또는 MAC)을 선택하고 큰 Derive Key 버튼을 클릭합니다. 그러면 16바이트 키가 산출되어 메인 화면에 표시됩니다. 직접 따라 해보고자 하신다면, KSN으로 62 99 49 01 19 00 00 00 00 02를 입력하고(기본 BDK 값 유지), 해당 버튼을 클릭해 보시기 바랍니다. Derive Key 파생 데이터 키 값이 1A994C3E09D9ACEF3EA9BD4381EFA334인지 확인하십시오.

이렇게 얻은 키를 사용하면 다음의 원시 데이터 블록을 복호화할 수 있습니다:

DA 7F 2A 52 BD 3F 6D D8 B9 6C 50 FC 39 C7 E6 AF 22 F0 6E D1 F0 33 BE 0F B2 3D 6B D3 3D C5 A1 F8 08 51 2F 7A E1 8D 47 A6 0C C3 F4 55 9B 1B 09 35 63 BE 7E 07 45 90 72 AB F8 FA AB 53 38 C6 CC 88 15 FF 87 79 7A E3 A7 BE

아래 출력 결과에서 볼 수 있듯이, 복호화된 데이터는 '%B42'로 시작하며(툴팁에 복호화된 데이터의 ASCII 값이 표시됨), George W. Bush Jr.의 카드 정보를 포함하고 있습니다:

만약 키의 비트 하나라도 잘못되었다면, 복호화 결과는 알아볼 수 없는 오류 데이터로 나타났을 것입니다. (직접 확인해 보세요: 도구에서 이 예제를 실행하고 키의 비트 하나를 임의로 바꿔보십시오.)

이것은 암호화/복호화 도구가 수행할 수 있는 기능 중 일부에 불과합니다. DUKPT의 작동 원리와 신용카드 데이터 복호화 방법에 대한 자세한 내용은 이 주제를 다룬 이전의 2부작 게시물을 참조하십시오. 여기서 시작하기.

키 주입, 암호화, MSR 또는 EMV에 관해 궁금한 점이 있으신가요? 전문가에게 문의하십시오. 언제든지 다음 번호로 연락해 주세요: 1-800-984-1010.