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!