Fino a poco tempo fa, leggere i dati della carta di credito era facile come far scorrere una carta attraverso un lettore (come uno dei tanti lettori prodotti da ID TECH) e avere un’applicazione terminale virtuale (o altre applicazioni) per assorbire i dati della traccia mentre esce direttamente dal lettore. I dati in questione apparirebbero semplicemente come battute su uno schermo, non criptati.
Questi erano i tempi!
Basta dire che le cose sono cambiate. Oggi, i lettori a banda magnetica generalmente emettono dati criptati, su USB (spesso in modalità HID, piuttosto che in modalità tastiera), e la maggior parte dei lettori di carte oggi deve gestire carte a chip oltre alle carte a banda magnetica. I dati delle carte con chip assumono la forma di TLV (tag, lunghezza, valori) e possono avere un aspetto molto diverso dai “semplici vecchi dati a banda magnetica” degli anni passati. Inoltre, sono invariabilmente criptati.
Nei post recenti, ho mostrato come decriptare i dati delle carte di credito utilizzando gli algoritmi di decriptazione standard del settore TDES e AES insieme alle tecniche di derivazione delle chiavi standard del settore (ANSI X9.24) DUKPT, ma non abbiamo parlato di come ottenere i dati della banda magnetica decodificati. Che aspetto hanno ora i “dati della banda magnetica delle carte di credito”? Come potete ottenerli e decodificarli? Come si fa a sapere quali parti sono criptate?
La risposta alla prima domanda (che aspetto hanno i dati della striscia magnetica?) varia molto, a seconda non solo della marca e del modello dell’apparecchiatura di lettura della carta che si sta usando, ma anche se la transazione in questione è stata fatta tramite strisciata magnetica, dip (contatto EMV), o interazione senza contatto/NFC. In generale, state facendo molto di più che leggere i dati grezzi della traccia. State anche ottenendo un KSN (Key Serial Number), che è necessario per la decrittazione, e raccogliendo vari tipi di metadati relativi alla transazione. È vero, potreste essere interessati solo ad ottenere (diciamo) i dati grezzi della traccia 2, ma nel processo di ottenerli, avrete a che fare anche con molti altri dati.
Diamo una rapida occhiata ad un esempio del mondo reale usando una carta regalo di Starbucks datami da un barista in preda ai sensi di colpa come rimedio dopo aver inaspettatamente finito il Mesopotamian Kumquat-Absinthe Latte. Se passiamo la carta di Starbucks attraverso il lettore di carte Augusta di ID TECH in modalità tastiera, con la finestra Notepad aperta (e il cursore nella finestra di testo), otteniamo i seguenti dati in Notepad:
02ED01801F4C2800839B%*6010********8765^0254/SERVICERECOVERYUSD^*******************************?*;6010********8765=********************?*95025C86987E4F7DD07D58730EB79FDFB90AB7F23E6ECA6F4F04A67BF511EE13F950903BDE77624680C460E9C36C4F9136256BB93A38CB98F95626DCFAF9335CE0A213074CC1CD84CC911398E06756C464AB036B694228ADA7EC018F495A013AF8A04C976288FE2F80271E6E53D987DE19ACA2707BFF2C78000000000000000000000000000000000000000000000000000000000000000000000000000000003631335435333536313862994900750002A00308108E03
Questo è molto più che “dati di traccia grezzi”. Potete riconoscere i dati di traccia mascherati (che iniziano con B% e contengono molti asterischi, finendo infine in ?*), ma questo nasconde il Primary Account Number (PAN), che è effettivamente criptato. La maggior parte di ciò che vedete qui è una rappresentazione esadecimale dei dati binari che escono dal lettore.
Parlare di questo grosso blocco di roba è facile se si ha il know-how. Il modo più veloce per decodificarlo è eseguire i dati attraverso lo strumento gratuito Parsomatic di ID TECH, che è un modulo HTML che può rendere tutti i pezzi di dati in modo comprensibile.
Ogni lettore di carte ha il suo modo proprietario di rappresentare i dati della carta. ID TECH rappresenta i dati magstripe in un formato noto come Enhanced Encrypted MSR format. Il formato include 26 campi di dati; tutti i 26 campi sono descritti in dettaglio nel documento P/N 80000502-001, ID TECH Encrypted Data Output.
Per darvi un’idea di ciò che è sulla carta, consideriamo i primi 5 byte di dati (02 ED 01 80 1F). Secondo Parsomatic, questi 5 byte contengono le seguenti informazioni:
STX | 02 |
LENGTH | ED 01 |
Card Encode Tipo | 80 |
Stato della traccia (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) |
Il primo byte (02) è semplicemente STX, il byte di “inizio”. I due byte successivi (ED 01) rappresentano la lunghezza, in hex, del carico complessivo di dati (little-endian: ED 01 significa effettivamente 0x01ED o 493 byte di dati). Il tipo di Card Encode è 0x80, che (in inglese) significa che il nostro lettore considera questa una carta finanziaria. Track Status (valore: 0x1F) è un byte di stato che contiene dei flag a otto bit, per farvi sapere quali tracce erano presenti sulla banda magnetica (ce ne possono essere fino a 3) e quali sono state lette con successo. In questo caso, tutte e 3 le tracce fisiche sono state lette con successo, ma i dati esistono solo sulle tracce 1 e 2.
Guardiamo velocemente i prossimi 5 byte. Secondo Parsomatic, questi byte e il loro significato sono i seguenti:
Track 1 Length | 4C |
Track 2 Length | 28 |
Track 3 Length | 00 |
Stato invio dati cancellati/maschera (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 |
Stato invio dati criptati/Hash (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 |
Su una carta finanziaria, La traccia 1 può essere lunga fino a 79 byte; La traccia 2 può essere lunga fino a 40 byte; la traccia 3 può essere lunga fino a 107 byte. In questo caso, abbiamo 76 byte (hex 0x4C) di dati per la traccia 1 e 40 byte (0x28) di dati per la traccia 2. (Queste lunghezze sono importanti da sapere, non solo per analizzare i dati della traccia mascherata ma per determinare le lunghezze delle versioni criptate delle tracce. La lunghezza criptata è diversa dall’effettiva lunghezza della traccia nativa perché i dati della traccia devono essere imbottiti fino a una lunghezza finale che è un multiplo di 8 per la crittografia TDES, o un multiplo di 16 per AES.
Come facciamo a sapere se i dati sono criptati TDES o AES? Questa informazione è nel bit 4 del byte Clear/Mask Data Sent Status (come mostrato sopra). C’è anche un byte di stato Encrypted/Hash Data Sent (mostrato sopra) per farti sapere se sono presenti dati di traccia criptati (e hash di convalida) e se esiste un KSN.
Ora arriviamo ai dati mascherati di traccia 1 e traccia 2, seguiti dalle versioni criptate di questi, seguiti da alcuni dati hash (in questo caso, tutti zeri), e alcuni altri dati (descritti di seguito). Notate che Parsomatic ha convertito i dati ASCII delle tracce in una rappresentazione esadecimale qui sotto:
Dati traccia1 | 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 2A 2A 2A 2A 2A 2A 2A 2A 3F 2A |
Track2 Data | 3B 36 30 31 31 30 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 3F 2A |
Track1 Dati cifrati | 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 Decifra questi dati |
Track2 Dati crittografati | 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 Decifra questi dati |
Track 1 Hashed | 00 00 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 |
Numero di serie del lettore | 36 31 33 54 35 33 35 36 31 38 |
KSN | 62 99 49 00 75 00 02 A0 03 08 |
LRC | 10 |
Checksum | 8E |
ETX | 03 |
Nota che Parsomatic inserisce un link “Decrypt this data” accanto ai dati criptati (vedi sopra). Se clicchi il link, ti porta al Encrypt/Decrypt Tool di ID TECH, dove i dati in questione possono essere visualizzati in forma decriptata.
I campi finali dei dati includono il Reader Serial Number, il Key Serial Number (KSN), un LRC, un checksum, e ETX (fine della trasmissione). L’LRC è semplicemente un valore di byte che rappresenta lo XOR (OR esclusivo) di tutti i byte di dati del payload, mentre il checksum è una somma aritmetica a un byte (trascurando l’overflow, ovviamente) di tutti i byte del payload. L’LRC e il checksum possono essere usati per controllare l’integrità del carico di dati. (Sono un po’ più facili e veloci da calcolare di un vero CRC.)
Conclusione
Così, come potete vedere, c’è molto di più nei dati di una striscia magnetica che i “dati di traccia”. Non abbiamo nemmeno toccato il significato di alcuni dei campi di dati (forse possiamo andarci in un futuro post). Né abbiamo detto nulla sui dati EMV (che sicuramente richiederà un altro post). Ma questo dovrebbe farvi iniziare se state cercando di decodificare i dati che escono da un lettore di carte di credito ID TECH.
Per maggiori informazioni, assicuratevi (come ho detto prima) di consultare la nostra documentazione tecnica sul formato dati Enhanced Encrypted MSR: ID TECH Encrypted Data Output. OPPURE cliccate sul link qui sotto per fare il primo passo verso pagamenti più efficienti!