Hoe magneetstripgegevens te decoderen

Tot voor kort was het lezen van creditcardgegevens zo eenvoudig als het vegen van een kaart door een lezer (zoals een van de vele lezers gemaakt door ID TECH) en een virtuele terminal-app (of andere apps) de trackgegevens te laten opslurpen als ze rechtstreeks uit de lezer komen. De gegevens in kwestie zouden eenvoudig te zien zijn als toetsaanslagen op een scherm, onversleuteld.

Dat waren de dagen!

Het zij gezegd, de dingen zijn veranderd. Vandaag de dag geven magstripe-lezers over het algemeen versleutelde gegevens door, via USB (vaak in HID-modus, in plaats van toetsenbordmodus), en de meeste kaartlezers moeten tegenwoordig naast magneetstripe-kaarten ook chipkaarten verwerken. Chipkaartgegevens nemen de vorm aan van TLV’s (tags, length, values) en kunnen er heel anders uitzien dan de “gewone oude magstripe-gegevens” van jaren geleden. Bovendien zijn ze altijd versleuteld.

In recente berichten heb ik laten zien hoe je creditcardgegevens kunt ontsleutelen met TDES- en AES-decryptiealgoritmen volgens de industrienorm in combinatie met DUKPT-sleutelafleidingstechnieken volgens de industrienorm (ANSI X9.24), maar we hebben het niet gehad over hoe je gedecodeerde magstripe-gegevens in de eerste plaats kunt verkrijgen. Hoe zien “magstripe gegevens van kredietkaarten” er nu uit? Hoe kun je ze verkrijgen en decoderen? Hoe weet je welke delen gecodeerd zijn?

Het antwoord op de eerste vraag (hoe zien magstripe-gegevens eruit?) varieert sterk, niet alleen afhankelijk van het merk en model van de kaartleesapparatuur die u gebruikt, maar ook van de vraag of de transactie in kwestie werd gedaan via mag swipe, dip (contact EMV), of contactloze/NFC-interactie. In het algemeen doe je veel meer dan alleen het lezen van ruwe track data. U verkrijgt ook een KSN (Key Serial Number), dat nodig is voor de decodering, en verzamelt verschillende soorten metadata met betrekking tot de transactie. Het is waar, je zou alleen geïnteresseerd kunnen zijn in het verkrijgen van (zeg) ruwe track 2 gegevens, maar in het proces van het verkrijgen van het, je gaat te maken hebben met veel andere gegevens, ook.

Laten we eens een snelle blik op een real-world voorbeeld met behulp van een Starbucks gift card gegeven aan mij door een schuldgevoel barista als een goedmakertje na onverwacht opraken van Mesopotamian Kumquat-Absinthe Latte. Als we de Starbucks-kaart door de Augusta-kaartlezer van ID TECH halen in de toetsenbordmodus, met het Kladblok-venster open (en de cursor in het tekstvenster), krijgen we de volgende gegevens in Kladblok:

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

Dit is veel meer dan “ruwe trackgegevens”. Je kunt de gemaskeerde trackgegevens herkennen (die beginnen met B% en vele sterretjes bevatten, en uiteindelijk eindigen op ?*), maar dat verbergt het Primary Account Number (PAN), dat eigenlijk gecodeerd is. Het meeste van wat je hier ziet is een hexadecimale voorstelling van de binaire gegevens die uit de lezer komen.

Parseren van dit grote blok is gemakkelijk als je er verstand van hebt. De snelste manier om het te decoderen is door de gegevens door de gratis Parsomatic tool van ID TECH te halen. Dit is een HTML-formulier dat alle gegevens op een begrijpelijke manier kan weergeven.

Iedere kaartlezer heeft zijn eigen manier om kaartgegevens weer te geven. ID TECH geeft magstripe-gegevens weer in een formaat dat bekend staat als Enhanced Encrypted MSR-formaat. Het formaat omvat 26 gegevensvelden; alle 26 velden worden in detail beschreven in document P/N 80000502-001, ID TECH Encrypted Data Output.

Om u een idee te geven van wat er op de kaart staat, laten we de eerste 5 bytes van de gegevens eens bekijken (02 ED 01 80 1F). Volgens Parsomatic bevatten deze 5 bytes de volgende informatie:

STX 02
LENGTE ED 01
Card Encode Type 80
Track Status (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)

De eerste byte (02) is eenvoudig STX, de “start”-byte. De volgende twee bytes (ED 01) vertegenwoordigen de lengte, in hex, van de totale gegevenslading (little-endian: ED 01 betekent in feite 0x01ED of 493 bytes aan gegevens). De Card Encode type is 0x80, wat (in het Engels) betekent dat onze lezer denkt dat dit een financiële kaart is. Track Status (waarde: 0x1F) is een statusbyte met acht-bits vlaggen, om je te laten weten welke sporen op de magneetstrip aanwezig waren (dat kunnen er maximaal 3 zijn) en welke met succes gelezen zijn. In dit geval zijn alle 3 de fysieke sporen succesvol gelezen, maar bestaat de data alleen op spoor 1 en 2.

Laten we eens snel kijken naar de volgende 5 bytes. Volgens Parsomatic, zijn deze bytes, en hun betekenissen als volgt:

Track 1 Lengte 4C
Track 2 Lengte 28
Track 3 Lengte 00
Clear/Mask Data Sent Status (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
Encrypted/Hash Data Sent Status (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

Op een financiële kaart, kan spoor 1 maximaal 79 bytes lang zijn; Spoor 2 kan tot 40 bytes lang zijn; Spoor 3 kan tot 107 bytes lang zijn. In dit geval hebben we 76 bytes (hex 0x4C) aan gegevens voor spoor 1 en 40 bytes (0x28) aan gegevens voor spoor 2. (Track 3 had nul bytes.) Deze lengtes zijn belangrijk om te weten, niet alleen voor het ontcijferen van de gemaskeerde track data, maar ook voor het bepalen van de lengtes van de versleutelde versies van de tracks. De versleutelde lengte is anders dan de werkelijke lengte van de track, omdat de track data moet worden opgevuld tot een uiteindelijke lengte die een veelvoud is van 8 voor TDES encryptie, of een veelvoud van 16 voor AES.

Hoe weten we of de data TDES-encrypted is of AES-encrypted? Die informatie staat in bit 4 van de Clear/Mask Data Sent Status byte (zoals hierboven getoond). Er is ook een Encrypted/Hash Data Sent status byte (zoals hierboven getoond) om je te laten weten of versleutelde track data (en validatie hashes) aanwezig zijn en of er een KSN bestaat.

Nu krijgen we gemaskeerde track 1 en track 2 data, gevolgd door de versleutelde versies daarvan, gevolgd door wat hash data (in dit geval, allemaal nullen), en wat andere data (hieronder beschreven). Merk op dat Parsomatic de ASCII-spoorgegevens heeft geconverteerd naar een hex-representatie hieronder:

Track1 Data 25 2A 36 30 31 30 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 44 5E 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 3F 2A
Track1 Gecodeerde gegevens 95 02 5C 86 98 7E 4F 7D D0 7D 58 73 0E B7 9F DF B9 0A B7 F2 3E 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 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 Decodeer deze gegevens
Track2 Versleutelde gegevens 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 Ontcijfer deze gegevens
Track 1 Hashed 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Track 2 Hashed 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Serienummer lezer 36 31 33 54 35 35 36 31 38
KSN 62 99 49 00 75 00 02 A0 03 08
LRC 10
Checksum 8E
ETX 03

Merk op dat Parsomatic een “Decrypt this data” link invoegt naast versleutelde gegevens (zie hierboven). Als u op deze link klikt, gaat u naar de Encrypt/Decrypt Tool van ID TECH, waar de gegevens in kwestie in gedecodeerde vorm kunnen worden bekeken.

De laatste gegevensvelden omvatten het Reader-serienummer, het Key-serienummer (KSN), een LRC, een controlesom, en ETX (einde van de transmissie). De LRC is eenvoudigweg een bytewaarde die de XOR (exclusieve OR) van alle bytes van de payload weergeeft, terwijl de checksum een één byte rekenkundige som is (uiteraard zonder overflow) van alle bytes van de payload. De LRC en de controlesom kunnen worden gebruikt om de integriteit van de gegevenslading te controleren. (Ze zijn iets gemakkelijker en sneller te berekenen dan een echte CRC.)

Conclusie

Zoals u kunt zien, zit er in een magstripe data veel meer dan “track data”. We hebben het zelfs nog niet gehad over de betekenis van sommige van de gegevensvelden (misschien kunnen we daar in een toekomstige post op ingaan). Evenmin hebben we iets gezegd over EMV gegevens (wat zeker nog een post zal vergen). Maar dit zou u op weg moeten helpen als u probeert gegevens te decoderen die uit een ID TECH credit card reader komen.

Voor meer informatie kunt u (zoals ik al eerder zei) onze technische documentatie over het Enhanced Encrypted MSR dataformaat raadplegen: ID TECH Encrypted Data Output. OF klik op de onderstaande link om de eerste stap te zetten naar gestroomlijnde betalingen!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.