ID TECH
기술 게시물 전체 보기

기술 포스트

결제 기기 연동을 위한 도구: 암호화/복호화 툴

ID TECH는 당사 제품을 활용하여 결제 앱을 개발하는 모든 분들을 위해 다양하고 유용한 무료 유틸리티를 제공하고 있습니다. 이전 게시물에서는 Parsomatic(웹 폼 방식으로 구현된 무료 데이터 파서)과 UDemo(모든 현행 제품과 호환되는 범용 SDK 테스트 앱으로, Windows용 C#으로 구현)에 대해 소개한 바 있습니다. 이번에는 브라우저에서 바로 사용할 수 있는 암호화/복호화 툴도 꼭 한번 체험해 보시길 권장합니다. 아래 링크.

암호화/복호화 툴은 강력한 단일 페이지 HTML 앱으로, AES 암호화, Triple DES, DUKPT 키 파생, SHA 해싱, HMAC 등 다양한 기능을 순수 JavaScript로 구현하였습니다. 모든 로직이 단일 페이지에 내장되어 있어 서버 측 처리가 전혀 없으며, HTML 파일을 직접 다운로드하여 브라우저(예: Chrome의 개발자 도구)에서 코드를 바로 확인하실 수 있습니다.

위 스크린샷에서 확인할 수 있듯이, 암호화/복호화 툴 상단의 버튼을 클릭하면 드롭다운 메뉴가 펼쳐지며 주요 기능들을 한눈에 볼 수 있습니다. 고객들로부터 자주 받는 문의 중 하나는 "리더기에서 수신한 트랙 데이터를 어떻게 복호화하나요?"입니다. 여기서 트랙 데이터란 MagStripe 데이터나 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바이트 hex 값)과 16바이트 BDK(Base Derivation Key, 즉 리더기에 최초 주입된 IPEK(Initial PIN Encryption Key) 생성에 사용된 원본 키)를 입력합니다. 테스트 및 개발 목적으로는 대부분 ANSI 표준 테스트 키(값: 0123456789ABCDEFFEDCBA9876543210)를 BDK로 사용합니다. 이 값은 Encrypt/Decrypt Tool의 기본 BDK 값으로 설정되어 있으며, 필요 시 쉽게 변경할 수 있습니다.

10바이트 KSN(공백 포함 또는 미포함 hex 바이트 형식)을 입력한 후, 생성하려는 키 유형(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. 씨의 카드 정보가 포함되어 있습니다:

만약 단 1비트 라도 키가 잘못되었다면, 복호화 과정에서 전혀 알아볼 수 없는 무의미한 데이터가 출력되었을 것입니다. (직접 확인해 보세요: 도구에서 이 예제를 실행한 후, 키의 임의 비트 하나를 변경해 보십시오.)

이것은 암호화/복호화 도구가 수행할 수 있는 기능의 극히 일부에 불과합니다. DUKPT의 작동 원리와 신용카드 데이터 복호화 방법에 대한 자세한 내용은 이전에 작성한 두 편의 연재 게시물을 참고하시기 바랍니다. 첫 번째 게시물 보기.

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