Sådan afkoder du Magstripe-data

Indtil for nylig var det lige så nemt at læse kreditkortdata som at trække et kort gennem en læser (f.eks. en af de mange læsere fra ID TECH) og få en virtuel terminal-app (eller andre apps) til at opsuge sporoplysningerne, når de kommer direkte ud af læseren. De pågældende data ville simpelthen blive vist som tastetryk på en skærm, ukrypteret.

Det var dengang!

Det skal siges, at tingene har ændret sig. I dag udsender magnetstribe-læsere generelt krypterede data via USB (ofte i HID-tilstand i stedet for tastaturtilstand), og de fleste kortlæsere skal i dag håndtere chipkort ud over magnetstribe-kort. Chipkortdata har form af TLV’er (tags, length, values) og kan se helt anderledes ud end tidligere tiders “almindelige gamle magnetkortdata”. Desuden er de uvægerligt krypterede.

I de seneste indlæg viste jeg, hvordan man dekrypterer kreditkortdata ved hjælp af branchestandard TDES- og AES-dekrypteringsalgoritmer i forbindelse med branchestandard (ANSI X9.24) DUKPT-nøgleafledningsteknikker, men vi talte ikke om, hvordan man overhovedet får dekodede magnetstripedata. Hvordan ser “magstripe-kreditkortdata” ud nu? Hvordan kan man få fat i dem og afkode dem? Hvordan ved man, hvilke dele der er krypteret?

Svaret på det første spørgsmål (hvordan ser magstripe-data ud?) varierer meget, ikke kun afhængigt af mærket og modellen af det kortlæsningsudstyr, man bruger, men også afhængigt af, om den pågældende transaktion blev foretaget via mag swipe, dip (kontakt EMV) eller kontaktløs/NFC-interaktion. Generelt set gør du meget mere end blot at læse rå trackdata. Du indhenter også et KSN (Key Serial Number), som er nødvendigt for dekryptering, og du høster forskellige former for metadata vedrørende transaktionen. Det er rigtigt, at du måske kun er interesseret i at få fat i (lad os sige) rå Track 2-data, men i processen med at få fat i dem, skal du også håndtere mange andre data.

Lad os tage et hurtigt kig på et eksempel fra den virkelige verden, hvor vi bruger et Starbucks-gavekort, som jeg fik af en barista med dårlig samvittighed, som en make-good, efter at jeg uventet løb tør for Mesopotamian Kumquat-Absinthe Latte. Hvis vi trækker Starbucks-kortet gennem ID TECH’s Augusta-kortlæser i tastaturtilstand med Notepad-vinduet åbent (og markøren i tekstvinduet), får vi følgende data i Notepad:

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

Dette er meget mere end “rå trackdata”. Du kan genkende de maskerede spordata (som begynder med B% og indeholder mange stjerner, der til sidst ender med ?*), men det skjuler det primære kontonummer (Primary Account Number (PAN)), som faktisk er krypteret. Det meste af det, du ser her, er en hexadecimal repræsentation af de binære data, der kommer ud af læseren.

Det er nemt at fortolke denne store blok af ting, hvis du har know-how. Den hurtigste måde at afkode det på er at køre dataene gennem ID TECHs gratis Parsomatic-værktøj, som er en HTML-formular, der kan gengive alle datastykkerne på en forståelig måde.

Hver kortlæser har sin egen proprietære måde at repræsentere kortdata på. ID TECH repræsenterer magstripe-data i et format, der er kendt som Enhanced Encrypted MSR-format. Formatet omfatter 26 datafelter; alle 26 felter er beskrevet i detaljer i dokument P/N 80000502-001, ID TECH Encrypted Data Output.

For at give dig en idé om, hvad der er på kortet, skal vi se på de første 5 bytes af data (02 ED 01 80 80 1F). Ifølge Parsomatic indeholder disse 5 bytes følgende oplysninger:

STX 02
LENGTH ED 01
Card Encode Type 80
Sporstatus (1F)
0------- 0 Reserved for future use-0------ 1: Field 10 optional bytes length exists (0: No Field 10)--0----- 1: Track 3 sampling data exists (0: Track 3 sampling data does not exist)---1---- 1: Track 2 sampling data exists (0: Track 2 sampling data does not exist)----1--- 1: Track 1 sampling data exists (0: Track 1 sampling data does not exist)-----1-- 1: Track 3 decode success (0: Track 3 decode fail)------1- 1: Track 2 decode success (0: Track 2 decode fail)-------1 1: Track 1 decode success (0: Track 1 decode fail)

Den første byte (02) er simpelthen STX, “start”-byte. De næste to bytes (ED 01) repræsenterer længden i hexadecimaler af den samlede data payload (little-endian: ED 01 betyder faktisk 0x01ED eller 493 bytes data). Card Encode-typen er 0x80, hvilket (på engelsk) betyder, at vores læser mener, at der er tale om et betalingskort. Track Status (værdi: 0x1F) er en statusbyte, der indeholder otte-bit flag, så du ved, hvilke spor der var til stede på magnetstriben (der kan være op til 3), og hvilke der blev læst med succes. I dette tilfælde blev alle 3 fysiske spor læst med succes, men der findes kun data på spor 1 og 2.

Lad os hurtigt se på de næste 5 bytes. I henhold til Parsomatic er disse bytes og deres betydninger som følger

Spor 1 Længde 4C
Spor 2 Længde 28
Spor 3 Længde 00
Spor 3 Længde 00
Status for afsendte data (83)
1------- Bit 7: 1 Serial Number present; 0 not present-0------ Bit 6: 1 PIN Encryption Key; 0 Data Encryption Key--0----- Bit 5: 1 Chip present on card. (First byte of service code was '2' or '6'.) Use EMV transaction if possible.---0---- Bit 4: 0 TDES; 1 AES----0--- Bit 3: 1 if fixed key; 0 DUKPT Key Management-----0-- Bit 2: 1 if Track3 clear/mask data present------1- Bit 1: 1 if Track2 clear/mask data present-------1 Bit 0: 1 if Track1 clear/mask data present
Status for afsendte krypterede/hash-data (9B)
1------- Bit 7: if 1, KSN present-0------ Bit 6: if 1, session ID present --0----- Bit 5: if 1, track3 hash data (SHA digest) present---1---- Bit 4: if 1, track2 hash data (SHA digest) present----1--- Bit 3: if 1, track1 hash data (SHA digest) present-----0-- Bit 2: if 1, track3 encrypted data present------1- Bit 1: if 1, track2 encrypted data present-------1 Bit 0: if 1, track1 encrypted data present

På et betalingskort, kan spor 1 være op til 79 bytes langt; Spor 2 kan være op til 40 bytes langt, og Spor 3 kan være op til 107 bytes langt. I dette tilfælde har vi 76 bytes (hex 0x4C) data til spor 1 og 40 bytes (0x28) data til spor 2. (Spor 3 havde nul bytes.) Disse længder er vigtige at kende, ikke kun for at analysere de maskerede spordata, men også for at bestemme længderne af de krypterede versioner af sporene. Den krypterede længde er forskellig fra den faktiske oprindelige sporlængde, fordi spildata skal polstres til en slutlængde, der er et multiplum af 8 for TDES-kryptering eller et multiplum af 16 for AES.

Hvordan ved vi, om dataene er TDES-krypterede kontra AES-krypterede? Den oplysning findes i bit 4 i Clear/Mask Data Sent Status-byte (som vist ovenfor). Der er også en Encrypted/Hash Data Sent-statusbyte (vist ovenfor) for at fortælle, om der er krypterede spordata (og valideringshashes) til stede, og om der findes en KSN.

Nu kommer vi til spor 1- og spor 2-maskerede data, efterfulgt af de krypterede versioner af disse, efterfulgt af nogle hash-data (i dette tilfælde alle nuller) og nogle andre data (beskrevet nedenfor). Bemærk, at Parsomatic har konverteret ASCII-spordataene til en hex-repræsentation nedenfor:

Spor1 Data 25 2A 36 30 31 30 30 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 38 37 36 35 5E 30 32 35 34 2F 53 45 52 56 49 43 45 52 45 43 4F 56 45 52 59 55 53 53 44 5E 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 3F 2A
Track2 Data 3B 36 30 30 31 30 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 38 37 36 36 35 3D 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 3F 2A
Spor1 Krypterede data 95 02 5C 86 98 7E 4F 7D D0 7D 58 73 0E B7 9F DF B9 0A B7 F2 3E 6E 6E CA 6F 4F 04 A6 7B F5 11 EE 13 F9 50 90 3B DE 77 62 46 80 C4 60 E9 C3 6C 4F 91 36 36 25 6B B9 3A 38 CB 98 F9 56 26 DC FA F9 33 5C E0 A2 13 07 4C C1 CD 84 CC 91 13 98 E0 67 56 C4 Dekrypter disse data
Track2 Krypterede data 64 AB 03 6B 69 42 28 AD A7 EC 01 8F 49 5A 01 3A F8 A0 4C 97 62 88 FE 2F 80 27 1E 6E 53 D9 87 DE 19 AC A2 70 7B FF 2C 78 Dekrypterer disse data
Spor 1 Hashed 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000
Spor 2 Hashed 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Reader Serial Number 36 31 33 54 35 33 33 35 36 36 31 38
KSN 62 99 49 00 75 00 02 A0 03 08
LRC 10
Checksum 8E
ETX 03

Bemærk, at Parsomatic indsætter et “Dekrypter disse data”-link ved siden af krypterede data (se ovenfor). Hvis du klikker på linket, fører det dig til ID TECHs Encrypt/Decrypt Tool, hvor de pågældende data kan ses i dekrypteret form.

De sidste datafelter omfatter Læserens serienummer, Key Serial Number (KSN), et LRC, en kontrolsum og ETX (end of transmission). LRC er ganske enkelt en byteværdi, der repræsenterer XOR (eksklusiv OR) af alle payload data-bytes, mens checksummen er en aritmetisk sum på én byte (naturligvis uden overløb) af alle bytes i payload. LRC og checksummen kan bruges til at kontrollere integriteten af dataene i nyttelasten. (De er noget nemmere og hurtigere at beregne end en rigtig CRC.)

Slutning

Så som du kan se, er der meget mere i en magstripe-data end “track data”. Vi har ikke engang berørt betydningen af nogle af datafelterne (måske kan vi komme ind på det i et fremtidigt indlæg). Vi har heller ikke sagt noget om EMV-data (hvilket helt sikkert vil kræve et andet indlæg). Men dette skulle kunne hjælpe dig i gang, hvis du forsøger at afkode data, der kommer ud af en ID TECH-kreditkortlæser.

For yderligere oplysninger skal du (som jeg sagde tidligere) sørge for at konsultere vores tekniske dokumentation om Enhanced Encrypted MSR-dataformatet: ID TECH Encrypted Data Output. ELLER klik på linket nedenfor for at tage det første skridt mod strømlinede betalinger!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.