Post Técnico
Como Decodificar Dados de MagStripe
Até recentemente, ler dados de cartão de crédito era tão simples quanto passar um cartão por um leitor (como um dos muitos leitores fabricados pela ID TECH) e deixar um aplicativo de terminal virtual (ou outros aplicativos) absorver os dados de trilha diretamente da saída do leitor. Os dados em questão simplesmente apareciam como pressionamentos de tecla na tela, sem criptografia.
Eram outros tempos!
Basta dizer que as coisas mudaram. Hoje, os leitores de MagStripe geralmente produzem dados criptografados via USB (frequentemente no modo HID, em vez do modo de teclado), e a maioria dos leitores de cartão atualmente precisa suportar cartões com chip, além dos cartões com tarja magnética. Os dados de cartões com chip assumem a forma de TLVs (tags, comprimento, valores) e podem ser bastante diferentes dos "dados de tarja magnética simples" de anos atrás. Além disso, são invariavelmente criptografados.
Em publicações recentes, demonstrei como descriptografar dados de cartão de crédito utilizando os algoritmos de criptografia padrão do setor TDES e AES em conjunto com as técnicas de derivação de chaves DUKPT (ANSI X9.24), também padrão do setor. No entanto, não abordamos como obter os dados decodificados de tarja magnética em primeiro lugar. Como são os "dados de tarja magnética de cartão de crédito" atualmente? Como obtê-los e decodificá-los? Como identificar quais partes estão criptografadas?
Hoje, os leitores de cartão geralmente produzem dados criptografados via USB (frequentemente no modo HID, em vez do modo de teclado), e a maioria dos leitores de cartão atualmente precisa suportar cartões com chip, além dos cartões com tarja magnética.
A resposta à primeira pergunta (como são os dados de tarja magnética?) varia bastante, dependendo não apenas da marca e do modelo do equipamento leitor de cartão utilizado, mas também se a transação em questão foi realizada por leitura de tarja, inserção (EMV por contato) ou interação sem contato/NFC. Em geral, o processo vai muito além da simples leitura de dados de trilha brutos. Também é necessário obter um KSN (Número de Série da Chave), indispensável para a descriptografia, e coletar diversos tipos de metadados relacionados à transação. É verdade que você pode estar interessado apenas em obter, por exemplo, os dados brutos da Trilha 2, mas no processo de obtê-los, será necessário lidar com muitos outros dados também.
Vejamos rapidamente um exemplo do mundo real usando um cartão-presente da Starbucks que me foi dado por um barista arrependido como compensação após ficarem inesperadamente sem o Latte de Kumquat-Absinto da Mesopotâmia. Se passarmos o cartão da Starbucks pelo leitor de cartão Augusta da ID TECH operando no modo de teclado, com o Bloco de Notas aberto (e o cursor na janela de texto), obteremos os seguintes dados no Bloco de Notas:
02ED01801F4C2800839B%*6010********8765^0254/SERVICERECOVERYUSD^*******************************?*;6010********8765=********************?*95025C86987E4F7DD07D58730EB79FDFB90AB7F23E6ECA6F4F04A67BF511EE13F950903BDE77624680C460E9C36C4F9136256BB93A38CB98F95626DCFAF9335CE0A213074CC1CD84CC911398E06756C464AB036B694228ADA7EC018F495A013AF8A04C976288FE2F80271E6E53D987DE19ACA2707BFF2C78000000000000000000000000000000000000000000000000000000000000000000000000000000003631335435333536313862994900750002A00308108E03
Isso é muito mais do que simples "dados de trilha brutos." É possível reconhecer os dados de trilha mascarados (que começam com B% e contêm muitos asteriscos, terminando em ?*), mas eles ocultam o Número da Conta Principal (PAN), que está de fato criptografado. A maior parte do que você vê aqui é uma representação hexadecimal dos dados binários provenientes do leitor.
Analisar esse grande bloco de dados é fácil quando se sabe como fazê-lo. A maneira mais rápida de decodificá-los é processá-los pela ferramenta gratuita da ID TECH Parsomatic ferramenta, que é um formulário HTML capaz de exibir todos os dados de forma inteligível.
Cada leitura de cartão tem sua própria forma proprietária de representar os dados do cartão. O ID TECH representa os dados de MagStripe em um formato conhecido como Enhanced Encrypted MSR format. Esse formato inclui 26 campos de dados; todos os 26 campos são descritos detalhadamente no documento P/N 80000502-001, ID TECH Encrypted Data Output.
Para dar uma ideia do que está contido no cartão, vamos analisar os primeiros 5 bytes de dados (02 ED 01 80 1F). De acordo com Parsomatic, esses 5 bytes contêm as seguintes informações:
O primeiro byte (02) é simplesmente o STX, o byte de "início". Os dois bytes seguintes (ED 01) representam o comprimento, em hexadecimal, do payload de dados geral (little-endian: ED 01 equivale a 0x01ED, ou seja, 493 bytes de dados). O tipo de codificação do cartão é 0x80, o que significa que nosso leitor identifica este cartão como um cartão financeiro. O Track Status (valor: 0x1F) é um byte de status contendo sinalizadores de oito bits, que indicam quais trilhas estavam presentes na faixa magnética (podendo haver até 3) e quais foram lidas com sucesso. Neste caso, todas as 3 trilhas físicas foram lidas com êxito, mas os dados existem apenas nas trilhas 1 e 2.
Vejamos rapidamente os próximos 5 bytes. De acordo com Parsomatic, esses bytes e seus significados são os seguintes:
Em um cartão financeiro, a Trilha 1 pode ter até 79 bytes; a Trilha 2, até 40 bytes; e a Trilha 3, até 107 bytes. Neste caso, temos 76 bytes (hex 0x4C) de dados para a Trilha 1 e 40 bytes (0x28) para a Trilha 2. (A Trilha 3 não apresentou bytes.) Esses comprimentos são importantes não apenas para o parsing dos dados mascarados da trilha, mas também para determinar o comprimento das versões criptografadas das trilhas. O comprimento criptografado difere do comprimento nativo original da trilha porque os dados da trilha devem ser preenchidos até um comprimento final que seja múltiplo de 8 para a criptografia TDES, ou múltiplo de 16 para AES.
Como saber se os dados estão criptografados com TDES ou AES? Essa informação está no bit 4 do byte de status Clear/Mask Data Sent Status (conforme mostrado acima). Há também um byte de status Encrypted/Hash Data Sent (mostrado acima) para indicar se os dados de trilha criptografados (e os hashes de validação) estão presentes e se existe um KSN.
Agora chegamos aos dados mascarados da Trilha 1 e da Trilha 2, seguidos pelas versões criptografadas dessas trilhas, alguns dados de hash (neste caso, todos zeros) e outros dados (descritos abaixo). Observe que Parsomatic converteu os dados de trilha ASCII para uma representação hexadecimal abaixo:
Observe que Parsomatic insere um link "Descriptografar estes dados" ao lado dos dados criptografados (veja acima). Ao clicar no link, você é direcionado ao Ferramenta de Criptografia/Descriptografiada ID TECH, onde os dados em questão podem ser visualizados em formato descriptografado.
Os campos finais de dados incluem o Número de Série do Leitor, o Número de Série da Chave (KSN), um LRC, um checksum e ETX (fim de transmissão). O LRC é simplesmente um valor de byte que representa o XOR (OU exclusivo) de todos os bytes de dados da carga útil, enquanto o checksum é uma soma aritmética de um byte (desconsiderando o overflow, obviamente) de todos os bytes da carga útil. O LRC e o checksum podem ser usados para verificar a integridade da carga útil de dados. (São um pouco mais fáceis e rápidos de calcular do que um CRC convencional.)
Conclusão
Como você pode ver, há muito mais em dados de tarja magnética do que simplesmente "dados de trilha". Nem chegamos a abordar a importância de alguns dos campos de dados (talvez possamos explorar isso em uma postagem futura). Tampouco falamos sobre dados EMV (o que definitivamente vai exigir outra postagem). Mas este conteúdo deve ser um bom ponto de partida se você estiver tentando decodificar dados provenientes de um leitor de cartão de crédito ID TECH.
Para mais informações, consulte (como mencionei anteriormente) nossa documentação técnica sobre o formato de dados MSR Criptografado Aprimorado: ID TECH Encrypted Data Output. OU clique no link abaixo para dar o primeiro passo rumo a pagamentos mais ágeis!
