Post Técnico
Ferramentas para Integração de Dispositivos de Pagamento: Ferramenta Encrypt/Decrypt
A ID TECH disponibiliza uma série de excelentes utilitários gratuitos para todos os envolvidos no desenvolvimento de aplicações de pagamento utilizando os nossos produtos. Em posts recentes, falei sobre Parsomatic, o nosso analisador 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 incentivá-lo também a experimentar a nossa Ferramenta de Encriptação/Desencriptação, que pode ser carregada no seu navegador clicando em este link.
A Ferramenta de Encriptação/Desencriptação é uma poderosa aplicação HTML autónoma de página única, com uma implementação nativa em JavaScript de encriptação AES, Triple DES, derivação de chaves DUKPT, hash SHA, HMAC e muito mais. Toda a lógica está contida numa única página (sem componentes do lado do servidor), o que significa que pode transferir o ficheiro HTML e inspecionar a lógica diretamente no seu navegador (utilizando, por exemplo, as excelentes ferramentas de desenvolvimento do Chrome).
Como pode ver na captura de ecrã acima, o botão superior da Ferramenta de Encriptação/Desencriptação apresenta um menu suspenso com algumas das operações disponíveis na ferramenta. Um pedido comum que recebemos dos nossos clientes é: "Como posso desencriptar os dados de faixa provenientes do meu leitor?" (referindo-se às informações de faixa de cartões de crédito que podem surgir em dados de MagStripe ou como parte de uma tag EMV). Esses dados são normalmente encriptados com AES ou com encriptação Triple DES (embora a ID TECH também suporte outros algoritmos). O processo de desencriptação 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ões de crédito utilizados na indústria, o leitor encripta os dados sensíveis do cartão com uma chave de uso único exclusiva para cada transação. Este é 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 utilizada duas vezes (prevenindo assim ataques de repetição). O leitor começa com uma chave única de 128 bits e, a cada leitura de cartão, um contador é incrementado. Esse contador está contido num valor denominado Número de Série de Chave (KSN). Importa referir que o próprio KSN é público — será enviado juntamente com os dados encriptados para a entidade responsável pela desencriptação, num cenário real. No momento da transação, o KSN é combinado, através de um algoritmo especial, com a chave do leitor original chave de criptografia de forma a derivar uma nova chave exclusiva (usando hashes unidirecionais, de modo que, se uma chave específica for roubada, ela não possa ser utilizada para calcular nenhuma outra chave). O algoritmo em questão é definido pela norma ANSI X.9-24. Trata-se de um esquema bastante sofisticado de gerenciamento de chaves simétricas, porém um pouco complexo de implementar — e é exatamente por isso que já fizemos isso por você. (Observação: o programa UDemo mencionado em minha última publicação também conta com um recurso de descriptografia capaz de executar a lógica DUKPT, embora não inclua o código-fonte.)
Para descriptografar dados de trilha criptografados, você precisará do KSN da transação, de uma BDK e dos dados criptografados. Usando a ferramenta Encrypt/Decrypt Tool, selecione "Encrypt or decrypt data" conforme exibido na captura de tela acima e, em seguida, clique no botão Derive . . . que será exibido. Isso abre uma pequena caixa de diálogo na qual você insere o KSN (dez bytes em hexadecimal) e uma Base Derivation Key de 16 bytes (que representa a chave original utilizada para criar a Initial PIN Encryption Key, ou IPEK, injetada no leitor no momento de sua inicialização). 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 Encrypt/Decrypt Tool (embora possa ser facilmente substituído).
Após inserir um KSN de 10 bytes (como bytes hexadecimais, com ou sem espaços), você pode selecionar a variante de chave que deseja gerar (PIN, Data ou MAC) e, em seguida, clicar no botão Derive Key Uma chave de 16 bytes será calculada (e aparecerá na tela principal). Caso queira acompanhar o processo, você pode inserir um KSN igual a 62 99 49 01 19 00 00 00 00 02 (mantendo a BDK padrão) e, em seguida, clicar em Derive Key e verifique se você obteve um valor de chave de dados derivada de 1A994C3E09D9ACEF3EA9BD4381EFA334.
Com a chave assim obtida, é possível descriptografar um bloco de dados brutos de:
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 Saída, 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 certo 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ões 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.
