기술 포스트
MagStripe 데이터 디코딩 방법
얼마 전까지만 해도 신용카드 데이터를 읽는 것은 매우 간단했습니다. ID TECH에서 제조한 다양한 리더기 중 하나에 카드를 긁으면, 가상 단말기 앱(또는 다른 앱)이 리더기에서 바로 출력되는 트랙 데이터를 수신하는 방식이었습니다. 해당 데이터는 암호화되지 않은 상태로 화면에 키 입력값 형태로 그대로 나타났습니다.
참으로 좋은 시절이었습니다!
하지만 상황은 많이 달라졌습니다. 오늘날 MagStripe 리더기는 일반적으로 암호화된 데이터를 USB(키보드 모드가 아닌 HID 모드로)를 통해 출력하며, 대부분의 카드 리더기는 마그네틱 카드뿐만 아니라 칩 카드도 처리할 수 있어야 합니다. 칩 카드 데이터는 TLV(태그, 길이, 값) 형식으로 구성되어 있어 과거의 단순한 MagStripe 데이터와는 상당히 다른 형태를 띠며, 예외 없이 암호화되어 있습니다.
이전 최근 게시물이전 글에서는 업계 표준인 TDES 및 AES 복호화 알고리즘과 업계 표준(ANSI X9.24) DUKPT 키 파생 기법을 활용하여 신용카드 데이터를 복호화하는 방법을 설명했습니다. 하지만 디코딩된 MagStripe 데이터를 처음부터 어떻게 얻는지에 대해서는 다루지 않았습니다. 현재 "신용카드 MagStripe 데이터"는 어떤 형태로 존재할까요? 이를 어떻게 수집하고 디코딩할 수 있을까요? 또한 어떤 부분이 암호화되어 있는지는 어떻게 알 수 있을까요?
오늘날 카드 리더기는 일반적으로 암호화된 데이터를 USB(키보드 모드가 아닌 HID 모드로)를 통해 출력하며, 대부분의 카드 리더기는 마그네틱 카드뿐만 아니라 칩 카드도 처리할 수 있어야 합니다.
첫 번째 질문(MagStripe 데이터는 어떤 형태인가?)에 대한 답변은 사용 중인 카드 리더기의 제조사와 모델에 따라 다를 뿐만 아니라, 해당 거래가 마그네틱 스와이프, 딥(접촉식 EMV), 또는 비접촉/NFC 방식으로 이루어졌는지에 따라서도 크게 달라집니다. 일반적으로 단순히 원시 트랙 데이터를 읽는 것 이상의 작업이 수반됩니다. 복호화에 필요한 KSN(Key Serial Number)을 획득하고, 거래와 관련된 다양한 메타데이터도 수집해야 합니다. 물론 원시 Track 2 데이터만 필요할 수도 있지만, 이를 얻는 과정에서 다양한 부가 데이터도 함께 처리해야 합니다.
실제 사례를 간략히 살펴보겠습니다. 메소포타미아 금귤 압생트 라떼가 갑자기 품절되자 미안한 마음에 바리스타가 건네준 스타벅스 기프트 카드를 활용해 보겠습니다. 키보드 모드로 작동 중인 ID TECH의 Augusta 카드 리더기에 이 스타벅스 카드를 긁고, 메모장 창을 열어 텍스트 창에 커서를 위치시키면 메모장에 다음과 같은 데이터가 나타납니다.
02ED01801F4C2800839B%*6010********8765^0254/SERVICERECOVERYUSD^*******************************?*;6010********8765=********************?*95025C86987E4F7DD07D58730EB79FDFB90AB7F23E6ECA6F4F04A67BF511EE13F950903BDE77624680C460E9C36C4F9136256BB93A38CB98F95626DCFAF9335CE0A213074CC1CD84CC911398E06756C464AB036B694228ADA7EC018F495A013AF8A04C976288FE2F80271E6E53D987DE19ACA2707BFF2C78000000000000000000000000000000000000000000000000000000000000000000000000000000003631335435333536313862994900750002A00308108E03
이는 단순한 "원시 트랙 데이터"를 훨씬 뛰어넘는 정보량입니다. B%로 시작하여 수많은 별표(*)를 포함하다가 ?*로 끝나는 마스킹 처리된 트랙 데이터를 확인할 수 있지만, 실제로 암호화되어 있는 기본 계좌 번호(PAN)는 그 안에 숨겨져 있습니다. 여기서 보이는 대부분의 데이터는 리더기에서 출력되는 바이너리 데이터의 16진수(헥사데시말) 표현입니다.
이 대용량 데이터 블록을 파싱하는 방법을 알면 어렵지 않습니다. 가장 빠른 디코딩 방법은 ID TECH의 무료 Parsomatic 툴을 활용하는 것입니다. 이 HTML 폼 기반 도구는 모든 데이터 항목을 알기 쉬운 형식으로 표시해 줍니다.
카드 리더기마다 카드 데이터를 표현하는 고유한 방식이 있습니다. ID TECH는 마그네틱 스트라이프 데이터를 Enhanced Encrypted MSR 형식으로 표현합니다. 이 형식은 총 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의 데이터는 없습니다. 이러한 길이 정보는 마스킹된 트랙 데이터를 파싱할 때뿐만 아니라, 암호화된 트랙 데이터의 길이를 산출할 때도 중요합니다. 암호화된 데이터의 길이는 원본 트랙 데이터의 길이와 다를 수 있는데, 이는 TDES 암호화의 경우 8의 배수로, AES 암호화의 경우 16의 배수로 패딩 처리해야 하기 때문입니다.
데이터가 TDES 암호화 방식인지 AES 암호화 방식인지는 어떻게 알 수 있을까요? 해당 정보는 위에 표시된 Clear/Mask Data Sent Status 바이트의 비트 4에 포함되어 있습니다. 또한 암호화된 트랙 데이터(및 검증 해시)의 존재 여부와 KSN 포함 여부를 확인할 수 있는 Encrypted/Hash Data Sent 상태 바이트도 위에 표시되어 있습니다.
이제 Track 1과 Track 2의 마스킹된 데이터, 그 뒤를 잇는 암호화된 버전의 데이터, 해시 데이터(이 경우 모두 0), 그리고 기타 데이터(아래에 설명)가 나옵니다. 참고로 Parsomatic 는 아래에서 ASCII 트랙 데이터를 16진수(hex) 형식으로 변환하였습니다.
주목할 점은, Parsomatic 가 암호화된 데이터 옆에 "이 데이터 복호화" 링크를 삽입한다는 것입니다(위 참조). 해당 링크를 클릭하면 ID TECH의 암호화/복호화 도구페이지로 이동하여, 해당 데이터를 복호화된 형태로 확인할 수 있습니다.
데이터의 마지막 필드에는 리더 일련번호(Reader Serial Number), 키 일련번호(KSN), LRC, 체크섬, 그리고 ETX(전송 종료)가 포함됩니다. LRC는 모든 페이로드 데이터 바이트의 XOR(배타적 논리합) 값을 나타내는 단순 바이트 값이며, 체크섬은 페이로드 내 모든 바이트의 1바이트 산술 합계(오버플로우 무시)입니다. LRC와 체크섬은 데이터 페이로드의 무결성을 검증하는 데 활용할 수 있습니다. (정식 CRC보다 계산이 다소 간단하고 빠릅니다.)
결론
이처럼 마그스트라이프 데이터에는 단순한 '트랙 데이터' 이상의 훨씬 많은 정보가 담겨 있습니다. 일부 데이터 필드의 의미에 대해서는 아직 다루지 않았으며(향후 포스트에서 살펴볼 예정입니다), EMV 데이터에 대해서도 별도의 포스트가 필요할 것입니다. 하지만 ID TECH 신용카드 리더기에서 출력되는 데이터를 디코딩하려는 분들께는 이 내용이 좋은 출발점이 될 것입니다.
보다 자세한 내용은 앞서 말씀드린 바와 같이, Enhanced Encrypted MSR 데이터 형식에 관한 기술 문서를 참고하시기 바랍니다. ID TECH Encrypted Data Output. 또는 아래 링크를 클릭하여 간편한 결제 환경 구축의 첫걸음을 내딛어 보세요!
