Post Técnico
Ferramentas para Integração de Dispositivos de Pagamento: Ferramenta de Criptografia/Descriptografia
A ID TECH disponibiliza uma série de excelentes utilitários gratuitos para todos os envolvidos no desenvolvimento de aplicações de pagamento com nossos produtos. Em posts recentes, falei sobre Parsomatic, nosso parser de dados gratuito (implementado como um formulário web), e o UDemo, o aplicativo de teste do SDK universal que funciona com todos os nossos produtos não legados (implementado em C# para Windows). Seria uma omissão da minha parte não recomendar também nossa Ferramenta de Criptografia/Descriptografia, que você pode acessar no seu navegador clicando em este link.
A Ferramenta de Criptografia/Descriptografia é um poderoso aplicativo HTML de página única e autossuficiente, com uma implementação nativa em JavaScript de criptografia AES, Triple DES, derivação de chaves DUKPT, hash SHA, HMAC e muito mais. Toda a lógica está contida em uma única página (sem componentes do lado do servidor), o que significa que você pode baixar o arquivo HTML e inspecionar a lógica diretamente no seu navegador (usando, por exemplo, as excelentes ferramentas de desenvolvedor do Chrome).
Como é possível observar na captura de tela acima, o botão superior da Ferramenta de Criptografia/Descriptografia exibe um menu suspenso com algumas das operações disponíveis. Uma solicitação comum que recebemos de clientes é: "Como posso descriptografar os dados de trilha provenientes do meu leitor?" (referindo-se às informações de trilha de cartão de crédito que podem aparecer em dados MagStripe ou como parte de uma tag EMV). Esses dados geralmente são criptografados com AES ou com Triple DES (embora a ID TECH também ofereça suporte a outros algoritmos). O processo de descriptografia pode ser um pouco complexo — não pela operação em si, mas pela forma como as chaves são geradas e utilizadas.
Na maioria dos cenários de cartão de crédito no setor, o leitor criptografa os dados sensíveis do cartão utilizando uma chave única e exclusiva para cada transação. Esse é o chamado esquema DUKPT . No DUKPT (Derived Unique Key Per Transaction), uma nova chave é derivada para cada transação, de modo que nenhuma chave possa ser usada duas vezes (evitando assim ataques de repetição). O leitor começa sua vida com uma chave única de 128 bits e, a cada vez que um cartão é lido, um contador é incrementado. Esse contador está em um valor chamado Número de Série da Chave (KSN). Vale ressaltar que o próprio KSN é público. (Ele será enviado, juntamente com os dados criptografados, para a parte responsável pela descriptografia, em um cenário real de descriptografia.) No momento da transação, o KSN é combinado, por meio de um algoritmo especial, com a chave de criptografia original do leitor, de forma a derivar uma nova chave exclusiva (utilizando funções hash unidirecionais, de modo que, se uma chave específica for comprometida, ela não possa ser usada para calcular outras chaves). O algoritmo em questão é definido pela norma ANSI X.9-24. Trata-se de um esquema bastante inteligente de gerenciamento de chaves simétricas, porém sua implementação pode ser um pouco complexa. Por isso, já fizemos isso por você. (Observação: o programa UDemo mencionado em minha última publicação também conta com um recurso de descriptografia que executa a operação DUKPT, embora não acompanhe o código-fonte.)
Para descriptografar dados de trilha criptografados, você precisará do KSN da transação, de um BDK e dos dados criptografados. Usando a Ferramenta de Criptografia/Descriptografia, selecione "Criptografar ou descriptografar dados" conforme mostrado na captura de tela acima e, em seguida, clique no pequeno botão Derivar . . . que será exibido. Isso abre uma pequena caixa de diálogo onde você insere o KSN (dez bytes em hexadecimal) e uma Chave de Derivação Base (BDK) de 16 bytes (representando a chave original utilizada para criar a Chave de Criptografia de PIN Inicial, ou IPEK, que foi injetada no leitor de fábrica). Para fins de teste e desenvolvimento, a maioria dos usuários utiliza a chamada chave de teste padrão ANSI (com o valor 0123456789ABCDEFFEDCBA9876543210) como BDK. Esse valor é o padrão da Ferramenta de Criptografia/Descriptografia (embora possa ser facilmente substituído).
Após inserir um KSN de 10 bytes (em bytes hexadecimais, com ou sem espaços), você pode selecionar a variante de chave que deseja gerar (PIN, Dados ou MAC) e, em seguida, clicar no botão Derive Key . Uma chave de 16 bytes será calculada (e aparecerá na tela principal). Se você estiver acompanhando em casa, talvez queira inserir um KSN de 62 99 49 01 19 00 00 00 00 02 (e aceitar o BDK padrão) e clicar em Derive Key e verificar se o valor da chave de dados derivada obtido foi 1A994C3E09D9ACEF3EA9BD4381EFA334.
Com a chave assim obtida, é possível descriptografar um bloco de dados brutos:
DA 7F 2A 52 BD 3F 6D D8 B9 6C 50 FC 39 C7 E6 AF 22 F0 6E D1 F0 33 BE 0F B2 3D 6B D3 3D C5 A1 F8 08 51 2F 7A E1 8D 47 A6 0C C3 F4 55 9B 1B 09 35 63 BE 7E 07 45 90 72 AB F8 FA AB 53 38 C6 CC 88 15 FF 87 79 7A E3 A7 BE
Conforme mostrado abaixo em Output, os dados descriptografados começam com '%B42' (observe o tooltip, que contém uma leitura ASCII dos dados descriptografados) e contêm os dados do cartão de um Sr. George W. Bush, Jr.:
Se mesmo um único bit da chave estivesse incorreto, teríamos obtido dados irreconhecíveis durante a descriptografia. (Experimente: execute este exemplo na ferramenta você mesmo e altere aleatoriamente um bit na chave.)
Isso é apenas uma pequena amostra do que a ferramenta Encrypt/Decrypt pode fazer. Para mais detalhes sobre como o DUKPT funciona (e como descriptografar dados de cartão de crédito), não deixe de conferir minha publicação anterior em duas partes sobre o assunto, começando aqui.
Tem dúvidas sobre injeção de chaves? Criptografia? MSR ou EMV? Entre em contato com nossos especialistas. Ligue para nós a qualquer momento pelo número 1-800-984-1010.
