Voltar para todos os artigos
PIN Blocks Explicados: Formatos 0 a 4 da ISO 9564

PIN Blocks Explicados: Formatos 0 a 4 da ISO 9564

Um PIN nunca viaja como quatro dígitos em claro. Ele é empacotado num PIN block — vinculado ao PAN, preenchido e cifrado — e o empacotamento exato é um de cinco formatos da ISO 9564. Um percurso byte a byte pelo Formato 0, por que ele faz XOR com o PAN, o que os Formatos 1 a 3 corrigem, e por que o Formato 4 existe para AES.

Pesquisa técnica projetada por humanos, sintetizada com assistência de personas de IA.
11 min de leitura

TL;DR / Sumário Executivo

Um PIN nunca viaja como quatro dígitos em claro. Ele é empacotado num PIN block — vinculado ao PAN, preenchido e cifrado — e o empacotamento exato é um de cinco formatos da ISO 9564. Um percurso byte a byte pelo Formato 0, por que ele faz XOR com o PAN, o que os Formatos 1 a 3 corrigem, e por que o Formato 4 existe para AES.

💡 TL;DR (Too Long; Didn't Read)

PIN blocks em 90 segundos:

  • Um PIN nunca é enviado como dígitos nus. Ele é empacotado num PIN block de 64 bits (ou 128 bits) e então cifrado. As regras de empacotamento são a ISO 9564, e existem cinco formatos.
  • O Formato 0 monta um campo de PIN e um campo de PAN e faz XOR entre eles — vinculando o PIN cifrado à conta, para que o mesmo PIN sob dois PANs produza cifras diferentes.
  • O Formato 1 não carrega PAN (usa preenchimento de transação/aleatório) para quando o PAN não está disponível; o Formato 2 é para verificação offline em smartcard; o Formato 3 endurece o preenchimento do Formato 0 com dados aleatórios.
  • O Formato 4 é o moderno: um bloco de 128 bits baseado em AES com preenchimento aleatório e um bloco de PAN separado, desenhado para hierarquias de chave AES.
  • Como sempre nesta série: criptografia de PIN block roda onde a chave vive — o pinpad, o HSM — nunca com uma chave de produção no servidor de outra pessoa.

Quando você digita um PIN, quatro dígitos, a última coisa que deveria acontecer é esses quatro dígitos viajarem para qualquer lugar como eles mesmos. Em vez disso são empacotados num PIN block de tamanho fixo, vinculados à conta, preenchidos e cifrados sob uma chave que vive em hardware resistente a violação. O empacotamento — como os dígitos, o preenchimento e o número da conta são arranjados num bloco antes da cifragem — é padronizado pela ISO 9564, e o formato que você usa determina as propriedades de segurança do bloco. Este artigo percorre os formatos, gasta tempo real no Formato 0 porque ele ensina a ideia inteira, e explica por que o Formato 4 precisou existir. Segue a ISO 9564-1/-3; cito a estrutura, não o texto da especificação. E a disciplina do artigo do ARQC vale aqui também: mostro a construção, não uma cifra fabricada, e todo passo com chave roda onde a chave já está.

Por que não simplesmente cifrar o PIN?

Comece pelo desenho ingênuo e veja-o falhar. Se você simplesmente cifrasse os quatro dígitos do PIN sob uma chave fixa, dois problemas aparecem imediatamente. Primeiro, o bloco é minúsculo e de baixa entropia — quatro dígitos são dez mil possibilidades — então padrões vazam e ataques de dicionário são baratos. Segundo, e pior, o mesmo PIN sempre produz a mesma cifra sob a mesma chave, então um atacante que vê muitos PINs cifrados pode agrupá-los, e um PIN capturado para um cartão pode ser repetido para outro com o mesmo PIN. O formato de PIN block existe para matar os dois problemas: preencher o PIN até um bloco completo por tamanho e estrutura, e vinculá-lo ao PAN para que o mesmo PIN em contas diferentes cifre de forma diferente.

Formato 0, byte a byte

O Formato 0 (também chamado ISO-0, historicamente ANSI X9.8) é o que você precisa saber de cor, porque todo outro formato é uma variação de suas ideias. Ele monta dois campos de 8 bytes e faz XOR entre eles.

O campo de PIN. Dezesseis nibbles (8 bytes):

text
[ 0 ][ L ][ P P P P (P..) ][ F F F ... ]
  │    │     │                │
  │    │     │                └─ preenchimento 'F' até completar 16 nibbles
  │    │     └─ os dígitos do PIN (4 a 12 deles)
  │    └─ L = comprimento do PIN (um nibble, ex.: 4 para um PIN de 4 dígitos)
  └─ campo de controle = 0 (indica Formato 0)

Então um PIN de 4 dígitos 1234 se torna os nibbles 0 4 1 2 3 4 F F F F F F F F F F — controle 0, comprimento 4, os dígitos, e então preenchimento F.

O campo de PAN. Também 16 nibbles: quatro nibbles 0 seguidos dos 12 dígitos mais à direita do PAN, excluindo o dígito verificador:

text
[ 0 0 0 0 ][ 12 dígitos mais à direita do PAN (menos o verificador) ]

O bloco. Faça XOR do campo de PIN com o campo de PAN, byte a byte. O resultado é o PIN block em claro; ele é então cifrado (historicamente com 3DES) sob a chave de cifragem de PIN. O XOR é o truque inteiro: como o PAN é misturado antes da cifragem, o mesmo PIN em duas contas diferentes gera dois blocos em claro diferentes e portanto duas cifras diferentes, e um atacante não pode levantar um PIN block de um cartão e usá-lo em outro. A decifragem reverte: decifre, faça XOR do campo de PAN de volta, leia o nibble de comprimento, extraia essa quantidade de dígitos de PIN.

Note o que o campo de PAN não inclui: os dígitos mais à esquerda e o dígito verificador. Usar os doze mais à direita (menos o verificador) é uma escolha deliberada da ISO para que o vínculo com a conta seja estável e não ambíguo. Erre essa seleção — inclua o dígito verificador, ou pegue os dígitos mais à esquerda — e seu PIN block será estruturalmente válido e não vai verificar em lugar nenhum, a mesma assinatura de falha silenciosa que encontramos repetidamente na criptografia de pagamentos.

O que os Formatos 1, 2 e 3 mudam

Os outros formatos clássicos são o Formato 0 com uma decisão de desenho alterada.

Formato 1 remove o PAN. Alguns contextos não têm o PAN disponível no momento da cifragem do PIN, então o Formato 1 preenche os nibbles não-PIN com um número de transação ou dados aleatórios em vez de fazer XOR com um campo de PAN. Ele obtém unicidade do preenchimento aleatório/de transação em vez do vínculo com a conta — mais fraco por não amarrar o PIN à conta, então é usado apenas onde o PAN genuinamente não está disponível.

Formato 2 é para verificação offline dentro de um smartcard — quando o PIN é checado pelo próprio chip em vez de enviado online. Usa preenchimento F e nenhum XOR de PAN, porque o bloco nunca deixa a fronteira cartão-e-leitora e o vínculo com a conta é implícito. Este é o formato por trás do PIN offline no fluxo de CVM.

Formato 3 é o Formato 0 com preenchimento aleatório. Onde o Formato 0 preenche o campo de PIN com nibbles F fixos, o Formato 3 preenche com nibbles aleatórios na faixa AF, adicionando entropia ao bloco para que PINs idênticos sob PANs idênticos ainda variem. É um endurecimento da região mais previsível do Formato 0.

Formato 4: a era AES

Os formatos 0 a 3 são construídos em torno de blocos de 8 bytes (64 bits) e do mundo 3DES. Conforme a indústria migra para AES, o tamanho do bloco mudou, e o Formato 4 é a resposta: um PIN block de 128 bits desenhado para AES.

O Formato 4 mantém a boa ideia — vincular ao PAN, adicionar entropia — mas em escala maior. O PIN block tem 16 bytes: um nibble de controle marcando Formato 4, o comprimento do PIN, os dígitos do PIN e um preenchimento aleatório para o espaço restante, dando a todo bloco entropia forte. O PAN é tratado num bloco de PAN separado de 16 bytes, e a construção combina os dois através de operações AES em vez de um único XOR-e-3DES. O resultado é um PIN block dimensionado e estruturado para hierarquias de chave modernas, sem o teto de tamanho de bloco de 64 bits. Se você está construindo tratamento de PIN novo, você está construindo Formato 4; os formatos anteriores são com o que você interopera, não o que você escolhe.

A regra que governa tudo isso

Tudo acima descreve construção, e construção é seguro aprender e rodar num navegador com chaves de teste. O que nunca é seguro é fazê-lo com uma chave real em infraestrutura que você não controla. Uma chave de cifragem de PIN de produção vive no processador seguro de um pinpad ou num HSM, e o PIN block em claro existe apenas por microssegundos dentro dessa fronteira antes de ser cifrado; ele nunca é montado na memória de aplicação de um servidor de propósito geral, e nunca é enviado a um terceiro para "processamento". Quando o gsstk construir uma ferramenta de PIN block, ela vai rodar no cliente com chaves de teste que nunca deixam seu navegador — porque uma ferramenta de pagamentos que pede uma chave de PIN real não é uma ferramenta, é um passivo. A construção determinística, checada contra vetores de teste conhecidos, é a fonte da verdade; uma explicação de IA fica em cima dela, nunca por baixo.

Cicatrizes de batalha

O campo de PAN são os 12 dígitos mais à direita menos o dígito verificador. Não o PAN inteiro, não incluindo o verificador, não os dígitos mais à esquerda. Este é o bug de implementação de Formato 0 mais comum e produz PIN blocks perfeitamente bem formados que não verificam em lugar nenhum.

Formato incompatível é uma recusa silenciosa. Se o terminal monta um bloco Formato 0 e o HSM do emissor espera Formato 4 (ou vice-versa), a decifragem produz lixo e o PIN "falha" sem diagnóstico útil. Durante uma migração para AES, a negociação de formato é exatamente onde as coisas quebram; determine com precisão qual formato cada salto espera.

PIN blocks em claro não podem viver em logs ou dumps de memória. O ponto inteiro do formato é que o PIN só está em claro dentro de hardware seguro. Um build de depuração que monta o bloco na memória de aplicação, ou uma linha de log que o despeja "só para ver", reintroduz precisamente a exposição que o desenho elimina. Trate o PIN block em claro como o próprio PIN.

Onde isto se encaixa

PIN blocks são o caminho de verificação do portador que a CVM List seleciona quando escolhe PIN online ou offline, e viajam na mensagem ISO 8583 como DE 52. Compartilham seu mundo de gerenciamento de chaves com o DUKPT, que é como a chave de cifragem de PIN é derivada unicamente por transação em primeiro lugar.

Leitura Relacionada no gsstk

Ferramentas: o Dicionário de Tags EMV cobre as tags de transporte; PIN blocks viajam como DE 52 no Parser ISO 8583. (Um Formatador de PIN Block no cliente está no roadmap.)

Arquivado em: Payment Crypto · Payments · EMV · Acquiring · Card Issuing

Este artigo foi arquitetado por humanos e sintetizado com assistência de IA sob a persona Athena (AI).

Receba novos artigos

Cadastre-se para receber notificações sobre novos artigos direto no seu email

Não enviaremos spam. Você pode cancelar a inscrição a qualquer momento.