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

기술 포스트

MagStripe 데이터 해독 방법

최근까지만 해도 신용카드 데이터를 읽는 것은 카드 리더기(ID TECH에서 제조한 다양한 리더기 중 하나 포함)에 카드를 긁고, 가상 단말기 앱(또는 기타 앱)이 리더기에서 바로 출력되는 트랙 데이터를 받아들이는 것만큼 간단했습니다. 해당 데이터는 암호화되지 않은 채로 화면의 키 입력 형태로 그대로 나타났습니다.

그때가 좋았죠!

한마디로, 상황이 많이 달라졌습니다. 오늘날 마그네틱 리더기는 일반적으로 USB를 통해(키보드 모드가 아닌 HID 모드로) 암호화된 데이터를 출력하며, 대부분의 카드 리더기는 마그네틱 카드뿐만 아니라 IC 칩 카드도 처리해야 합니다. 칩 카드 데이터는 TLV(태그, 길이, 값) 형식으로 구성되며, 과거의 '단순 MagStripe 데이터'와는 상당히 다른 형태를 띨 수 있습니다. 또한 이 데이터는 예외 없이 암호화되어 있습니다.

이전 최근 게시물에서는 업계 표준인 TDES 및 AES 복호화 알고리즘과 업계 표준(ANSI X9.24) DUKPT 키 파생 기법을 활용하여 신용카드 데이터를 복호화하는 방법을 소개했습니다. 그러나 애초에 디코딩된 마그네틱 데이터를 어떻게 획득하는지에 대해서는 다루지 않았습니다. 현재 '신용카드 MagStripe 데이터'는 어떤 형태인가요? 어떻게 획득하고 디코딩할 수 있을까요? 어느 부분이 암호화되어 있는지는 어떻게 알 수 있을까요?

오늘날 카드 리더기는 일반적으로 USB를 통해(키보드 모드가 아닌 HID 모드로) 암호화된 데이터를 출력하며, 대부분의 카드 리더기는 마그네틱 카드뿐만 아니라 IC 칩 카드도 처리해야 합니다.

첫 번째 질문(MagStripe 데이터의 형태)에 대한 답변은, 사용 중인 카드 리더기의 제조사 및 모델뿐만 아니라 해당 거래가 마그네틱 스와이프, 딥(접촉식 EMV), 또는 비접촉/NFC 방식으로 이루어졌는지에 따라 크게 달라집니다. 일반적으로 단순히 원시 트랙 데이터를 읽는 것 이상의 작업이 필요합니다. 복호화에 필요한 KSN(Key Serial Number)을 획득하고, 거래와 관련된 다양한 메타데이터를 수집해야 합니다. 예를 들어 원시 Track 2 데이터만 필요한 경우라도, 이를 획득하는 과정에서 다양한 부가 데이터를 함께 처리해야 합니다.

메소포타미아 금귤-압생트 라떼가 갑자기 품절되는 바람에 미안함을 느낀 바리스타가 보상으로 건네준 스타벅스 기프트 카드를 이용한 실제 사례를 간략히 살펴보겠습니다. 이 스타벅스 카드를 키보드 모드로 동작 중인 ID TECH의 Augusta 카드 리더기에 긁고, 메모장 창을 열어 텍스트 창에 커서를 둔 상태에서 다음과 같은 데이터가 메모장에 출력됩니다.

02ED01801F4C2800839B%*6010********8765^0254/SERVICERECOVERYUSD^*******************************?*;6010********8765=********************?*95025C86987E4F7DD07D58730EB79FDFB90AB7F23E6ECA6F4F04A67BF511EE13F950903BDE77624680C460E9C36C4F9136256BB93A38CB98F95626DCFAF9335CE0A213074CC1CD84CC911398E06756C464AB036B694228ADA7EC018F495A013AF8A04C976288FE2F80271E6E53D987DE19ACA2707BFF2C78000000000000000000000000000000000000000000000000000000000000000000000000000000003631335435333536313862994900750002A00308108E03

이는 단순한 '원시 트랙 데이터' 그 이상입니다. B%로 시작하고 다수의 별표를 포함하며 ?*로 끝나는 마스킹된 트랙 데이터를 확인할 수 있지만, 실제로 암호화되어 있는 PAN(Primary Account Number)은 이 마스킹 처리로 인해 가려져 있습니다. 여기서 보이는 대부분의 데이터는 리더기에서 출력되는 바이너리 데이터의 16진수 표현입니다.

이 방대한 데이터 블록을 파싱하는 방법을 알면 어렵지 않습니다. 가장 빠른 디코딩 방법은 ID TECH의 무료 Parsomatic 도구는 HTML 폼 형식으로, 모든 데이터 항목을 알기 쉬운 방식으로 표시할 수 있습니다.

카드 리더기마다 카드 데이터를 표현하는 고유한 방식이 있습니다. ID TECH는 마그네틱 선조 데이터를 Enhanced Encrypted MSR 형식으로 표현합니다. 이 형식은 26개의 데이터 필드를 포함하며, 26개 필드 모두 문서 P/N 80000502-001에 상세히 설명되어 있습니다. ID TECH Encrypted Data Output.

카드에 어떤 정보가 담겨 있는지 이해하기 위해, 처음 5바이트(02 ED 01 80 1F)를 살펴보겠습니다. Parsomatic에 따르면, 이 5바이트에는 다음과 같은 정보가 포함되어 있습니다:

첫 번째 바이트(02)는 단순히 STX, 즉 "시작" 바이트입니다. 다음 두 바이트(ED 01)는 전체 데이터 페이로드의 길이를 16진수로 나타냅니다(리틀 엔디언 방식으로 ED 01은 실제로 0x01ED, 즉 493바이트를 의미합니다). Card Encode 유형은 0x80으로, 리더기가 해당 카드를 금융 카드로 인식함을 의미합니다. Track Status(값: 0x1F)는 8비트 플래그로 구성된 상태 바이트로, 마그네틱 선조에 존재하는 트랙(최대 3개)과 성공적으로 읽힌 트랙을 나타냅니다. 이 경우 물리적 트랙 3개 모두 성공적으로 읽혔으나, 실제 데이터는 트랙 1과 트랙 2에만 존재합니다.

다음 5바이트를 간략히 살펴보겠습니다. Parsomatic에 따르면, 해당 바이트와 그 의미는 다음과 같습니다:

금융 카드의 경우, 트랙 1은 최대 79바이트, 트랙 2는 최대 40바이트, 트랙 3은 최대 107바이트까지 저장할 수 있습니다. 이 경우 트랙 1에는 76바이트(16진수 0x4C), 트랙 2에는 40바이트(0x28)의 데이터가 있습니다. (트랙 3은 0바이트입니다.) 이 길이 정보는 마스킹된 트랙 데이터를 파싱하는 것뿐만 아니라, 암호화된 트랙 데이터의 길이를 산출하는 데도 중요합니다. 암호화된 길이는 실제 트랙 길이와 다른데, 이는 TDES 암호화 시 8의 배수, AES 암호화 시 16의 배수로 맞추기 위해 트랙 데이터에 패딩을 적용하기 때문입니다.

데이터가 TDES 암호화인지 AES 암호화인지는 어떻게 알 수 있을까요? 이 정보는 Clear/Mask Data Sent Status 바이트의 비트 4에 포함되어 있습니다(위 참조). 또한 Encrypted/Hash Data Sent 상태 바이트(위 참조)를 통해 암호화된 트랙 데이터(및 검증 해시)의 존재 여부와 KSN 유무를 확인할 수 있습니다.

다음으로 트랙 1과 트랙 2의 마스킹된 데이터가 나오고, 이어서 각 트랙의 암호화된 데이터, 해시 데이터(이 경우 모두 0), 그리고 기타 데이터(아래 설명 참조)가 차례로 나옵니다. 참고로 Parsomatic 아래에서 ASCII 트랙 데이터를 16진수(hex) 형식으로 변환한 결과를 확인할 수 있습니다:

참고하세요: Parsomatic 암호화된 데이터 옆에 "이 데이터 복호화" 링크를 삽입합니다(위 참조). 해당 링크를 클릭하면 ID TECH의 암호화/복호화 도구로 이동하며, 해당 데이터를 복호화된 형태로 확인할 수 있습니다.

데이터의 마지막 필드에는 리더 일련번호, 키 일련번호(KSN), LRC, 체크섬, ETX(전송 종료)가 포함됩니다. LRC는 모든 페이로드 데이터 바이트의 XOR(배타적 논리합)을 나타내는 단순 바이트 값이며, 체크섬은 페이로드 내 모든 바이트의 1바이트 산술 합계(오버플로우 무시)입니다. LRC와 체크섬은 데이터 페이로드의 무결성을 검증하는 데 활용할 수 있으며, 정식 CRC 방식보다 계산이 간편하고 빠르다는 장점이 있습니다.

결론

이처럼 마그네틱 카드 데이터에는 단순한 "트랙 데이터" 이상의 훨씬 많은 정보가 담겨 있습니다. 일부 데이터 필드의 의미에 대해서는 아직 다루지 않았으며(향후 포스팅에서 살펴볼 수 있기를 바랍니다), EMV 데이터에 관해서도 언급하지 않았습니다(이 주제는 분명 별도의 포스팅이 필요할 것입니다). 그러나 ID TECH 신용카드 리더에서 출력되는 데이터를 파싱하려는 분들께는 이 글이 좋은 출발점이 될 것입니다.

보다 자세한 내용은 앞서 안내한 바와 같이 Enhanced Encrypted MSR 데이터 형식에 관한 당사 기술 문서를 참조하시기 바랍니다: ID TECH Encrypted Data Output. 또는 아래 링크를 클릭하여 간편한 결제 환경 구축의 첫걸음을 내딛으세요!

시작하기