Intill helt nyligen var det lika enkelt att läsa kreditkortsdata som att dra kortet genom en läsare (t.ex. en av de många läsare som tillverkas av ID TECH) och låta en virtuell terminalapp (eller andra appar) ta upp spårdata som kommer direkt från läsaren. Uppgifterna i fråga skulle helt enkelt visas som tangenttryckningar på en skärm, okrypterade.
Det var på den tiden!
Det räcker med att säga att saker och ting har förändrats. I dag ger magnetremsläsare i allmänhet ut krypterade data via USB (ofta i HID-läge snarare än tangentbordsläge), och de flesta kortläsare måste i dag hantera chipkort utöver magnetremsor. Chipkortsdata har formen av TLV:er (tags, length, values) och kan se ganska annorlunda ut än ”vanlig gammal magstripe-data” från förr i tiden. Dessutom är de alltid krypterade.
I de senaste inläggen visade jag hur man dekrypterar kreditkortsdata med hjälp av industristandardiserade TDES- och AES-dekrypteringsalgoritmer i kombination med industristandardiserade (ANSI X9.24) DUKPT-nyckelavledningstekniker, men vi har inte talat om hur man får tag på avkodade magstripe-data i första hand. Hur ser ”magstripe-data för kreditkort” ut nu? Hur kan man få tag på dem och avkoda dem? Hur vet man vilka delar som är krypterade?
Svaret på den första frågan (hur ser magstripe-data ut?) varierar mycket, inte bara beroende på vilket märke och vilken modell av kortläsningsutrustningen du använder, utan också beroende på om transaktionen i fråga gjordes via mag swipe, dip (kontakt EMV) eller kontaktlös/NFC-interaktion. I allmänhet gör du mycket mer än att bara läsa råa spårdata. Du får också ett KSN (Key Serial Number), som behövs för dekryptering, och samlar in olika typer av metadata om transaktionen. Det är sant att du kanske bara är intresserad av att få (låt oss säga) råa spår 2-data, men i processen för att få fram dem måste du också hantera många andra data.
Låt oss ta en snabb titt på ett exempel från verkligheten där vi använder ett Starbucks-presentkort som jag fick av en barista med skuldkänslor som en lösning efter att oväntat ha fått slut på Mesopotamian Kumquat-Absinthe Latte. Om vi drar Starbucks-kortet genom ID TECHs Augusta-kortläsare i tangentbordsläge, med Notepad-fönstret öppet (och markören i textfönstret), får vi följande data i Notepad:
02ED01801F4C2800839B%*6010********8765^0254/SERVICERECOVERYUSD^*******************************?*;6010********8765=********************?*95025C86987E4F7DD07D58730EB79FDFB90AB7F23E6ECA6F4F04A67BF511EE13F950903BDE77624680C460E9C36C4F9136256BB93A38CB98F95626DCFAF9335CE0A213074CC1CD84CC911398E06756C464AB036B694228ADA7EC018F495A013AF8A04C976288FE2F80271E6E53D987DE19ACA2707BFF2C78000000000000000000000000000000000000000000000000000000000000000000000000000000003631335435333536313862994900750002A00308108E03
Detta är mycket mer än ”råa spårdata”. Du kan känna igen de maskerade spårdata (som börjar med B% och innehåller många asterisker, som slutligen slutar med ?*), men det döljer det primära kontonumret (Primary Account Number, PAN), som faktiskt är krypterat. Det mesta av det du ser här är en hexadecimal representation av de binära data som kommer ut från läsaren.
Det är lätt att tolka detta stora block av saker om du har kunskap. Det snabbaste sättet att avkoda det är att köra data genom ID TECHs kostnadsfria Parsomatic-verktyg, som är ett HTML-formulär som kan återge alla delar av data på ett begripligt sätt.
Varje kortläsare har sitt eget sätt att representera kortdata. ID TECH representerar magstripe-data i ett format som kallas Enhanced Encrypted MSR-format. Formatet omfattar 26 datafält; alla 26 fält beskrivs i detalj i dokument P/N 80000502-001, ID TECH Encrypted Data Output.
För att ge dig en uppfattning om vad som finns på kortet kan vi betrakta de första 5 bytesna av data (02 ED 01 80 80 1F). Enligt Parsomatic innehåller dessa 5 bytes följande information:
STX | 02 |
LENGTH | ED 01 |
Card Encode Typ | 80 |
Spårstatus (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örsta byte (02) är helt enkelt STX, ”start” byte. De två följande bytena (ED 01) representerar längden, i hexagram, på den totala datanyttolasten (little-endian: ED 01 betyder egentligen 0x01ED eller 493 byte data). Card Encode type är 0x80, vilket (på engelska) innebär att vår läsare anser att detta är ett finansiellt kort. Spårstatus (värde: 0x1F) är en statusbyte som innehåller åtta bitars flaggor för att informera dig om vilka spår som fanns på magnetremsan (det kan finnas upp till tre) och vilka som lästes framgångsrikt. I det här fallet lästes alla tre fysiska spår framgångsrikt, men data finns bara på spår 1 och 2.
Vi tittar snabbt på nästa 5 byte. Enligt Parsomatic är dessa bytes och deras betydelser följande:
Spår 1 Längd | 4C |
Spår 2 Längd | 28 |
Spår 3 Längd | 00 |
Klar/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 |
Krypterad/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 |
På ett finansiellt kort, Spår 1 kan vara upp till 79 byte långt; Spår 2 kan vara upp till 40 byte långt och spår 3 kan vara upp till 107 byte långt. I det här fallet har vi 76 byte (hex 0x4C) data för spår 1 och 40 byte (0x28) data för spår 2. (Spår 3 hade noll byte.) Dessa längder är viktiga att känna till, inte bara för att analysera de maskerade spårdata utan också för att bestämma längderna på de krypterade versionerna av spåren. Den krypterade längden skiljer sig från den faktiska ursprungliga spårlängden eftersom spårdata måste fyllas på till en slutlängd som är en multipel av 8 för TDES-kryptering, eller en multipel av 16 för AES.
Hur vet vi om data är TDES-krypterade respektive AES-krypterade? Den informationen finns i bit 4 i Clear/Mask Data Sent Status byte (som visas ovan). Det finns också en Encrypted/Hash Data Sent status byte (som visas ovan) för att låta dig veta om krypterade spårdata (och valideringshashar) finns och om ett KSN existerar.
Nu kommer vi till Spår 1 och Spår 2 maskerade data, följt av de krypterade versionerna av dessa, följt av några hashdata (i det här fallet alla nollor) och några andra data (beskrivs nedan). Observera att Parsomatic har konverterat ASCII-spårdata till en hexadekvat representation nedan:
Spår1 Data | 25 2A 36 30 31 30 30 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 3F 2A |
Track2 Data | 3B 36 30 31 30 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 38 37 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 3F 2A |
Track1 krypterade 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 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 Avkryptera denna data |
Track2 Krypterade 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 Dekryptera dessa data |
Spår 1 Hashed | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
Spår 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 00 00 00 |
Läsarens serienummer | 36 31 33 54 35 33 35 35 36 31 38 |
KSN | 62 99 49 00 75 00 02 A0 03 08 |
LRC | 10 |
Kontrollsumma | 8E |
ETX | 03 |
Bemärk att Parsomatic infogar en länk ”Avkryptera dessa data” bredvid krypterade data (se ovan). Om du klickar på länken kommer du till ID TECH:s verktyg för kryptering och dekryptering, där uppgifterna i fråga kan ses i dekrypterad form.
De sista datafälten omfattar läsarens serienummer, nyckelns serienummer (KSN), en LRC, en kontrollsumma och ETX (sändningens slut). LRC är helt enkelt ett bytevärde som representerar XOR (exclusive OR) av alla byte av data i nyttolasten, medan kontrollsumman är en aritmetisk summa på en byte (utan hänsyn till överflöd, naturligtvis) av alla byte i nyttolasten. LRC- och kontrollsumman kan användas för att kontrollera integriteten hos nyttolasten. (De är något enklare och snabbare att beräkna än en riktig CRC.)
Slutsats
Så som du kan se finns det mycket mer i en magstripe-data än ”spårdata”. Vi har inte ens berört betydelsen av vissa av datafälten (vi kanske kan gå in på det i ett framtida inlägg). Vi har inte heller sagt något om EMV-data (vilket definitivt kommer att kräva ett annat inlägg). Men detta borde hjälpa dig att komma igång om du försöker avkoda data som kommer från en ID TECH-kreditkortsläsare.
För mer information, se till (som jag sa tidigare) att konsultera vår tekniska dokumentation om Enhanced Encrypted MSR-dataformatet: ID TECH Encrypted Data Output. ELLER klicka på länken nedan för att ta det första steget mot effektiviserade betalningar!