O Stack Criptográfico do PIX
O PIX é um sistema de liquidação bruta em tempo real (LBTR) operado pelo Banco Central do Brasil desde novembro de 2020. Embora a experiência do usuário final seja simples — escaneie um QR Code, transfira em segundos — por trás de cada transação existe uma sequência rígida de operações criptográficas exigidas pelo manual técnico do BACEN.
O sistema é dividido em três módulos principais, cada um com seu próprio modelo de assinatura: o SPI (Sistema de Pagamentos Instantâneos) carrega as mensagens de transferência em si e usa JWS com ES256 ou RS256; o DICT (Diretório de Identificadores de Contas Transacionais) gere o cadastro de chaves PIX e usa XMLDSig RSA-SHA256; e o STR (Sistema de Transferência de Reservas) — o sistema legado de liquidação interbancária — também usa XMLDSig. Todas as assinaturas devem usar certificados ICP-Brasil A1 ou A3 emitidos por Autoridades Certificadoras credenciadas.
JWS no SPI
Cada mensagem SPI é um objeto JSON serializado de forma canônica, hasheado com SHA-256 e assinado com a chave privada da instituição. O envelope JWS resultante segue o RFC 7515 com header JOSE indicando o algoritmo ("alg": "ES256" ou "alg": "RS256") e referenciando o certificado X.509 da instituição via x5c (cadeia completa em Base64) ou x5t (thumbprint SHA-1).
O BACEN fortemente recomenda ES256 (ECDSA P-256) desde 2022. As assinaturas ECDSA têm ~64 bytes contra ~256 bytes do RSA 2048, o que importa em um sistema processando bilhões de mensagens por dia. A verificação também é mais rápida, e a curva P-256 (também conhecida como secp256r1 ou prime256v1) é o padrão NIST mais amplamente implementado em libs de qualquer linguagem.
Cuidados práticos: serialização JSON canônica (RFC 8785 JCS) é obrigatória para que o hash bata entre quem assina e quem verifica. Qualquer reordenação de chaves, espaço em branco extra ou variação de escape em strings produz um digest diferente e a assinatura falha. Use uma lib que implemente JCS corretamente — não tente fazer manualmente.
XMLDSig no DICT e no STR
XMLDSig (XML Digital Signature, recomendação W3C) é o padrão para assinatura de mensagens XML usado no DICT (operações sobre chaves PIX) e no STR (liquidação interbancária legada). A assinatura é embutida na mensagem XML como elemento <Signature> dentro do envelope.
O processo: cada elemento referenciado é canonicalizado (Canonical XML 1.0 ou Exclusive C14N), hasheado com SHA-256, e o DigestValue resultante é colocado no bloco <SignedInfo>. O bloco SignedInfo inteiro é então canonicalizado e assinado com RSA-SHA256 (algoritmo identificado por http://www.w3.org/2001/04/xmldsig-more#rsa-sha256). O certificado X.509 do assinante vai no <KeyInfo>.
A canonicalização XML é a parte mais traiçoeira. Diferenças sutis (ordem de atributos, namespaces declarados vs herdados, espaços em branco entre tags) podem produzir DigestValues diferentes para XMLs visualmente idênticos. Use bibliotecas maduras (xmldsigjs no Node, xmlsec1 em C, signxml em Python, Apache Santuario em Java) e nunca tente implementar C14N manualmente.
Certificados ICP-Brasil — A1 vs A3
Toda assinatura SPI/DICT/STR deve usar um certificado emitido por uma Autoridade Certificadora credenciada pela ICP-Brasil. Há dois tipos relevantes para PSPs:
A1 é um certificado em arquivo PKCS#12 (.pfx) com chave privada exportável, validade de 1 ano, instalável em qualquer servidor. É o padrão para integrações server-to-server de alto volume — a chave privada fica em um HSM ou em disco protegido por chave de criptografia separada.
A3 é um certificado em hardware (token USB, smart card, ou HSM FIPS 140-2 nível 3+) com chave privada não-exportável e validade de até 5 anos. Operações criptográficas acontecem dentro do dispositivo. É exigido para operações de alto valor por algumas instituições e oferece proteção forte contra exfiltração da chave.
Para PIX em produção, a maioria dos PSPs usa A1 em HSMs Thales payShield, Atos Atalla ou Futurex Excrypt, com a chave gerada e mantida dentro do HSM. A ICP-Brasil credencia o HSM como dispositivo equivalente a token A3 nesse cenário.
Ambientes de Homologação e Produção
O BACEN expõe dois ambientes distintos. Homologação (também chamado de sandbox) aceita certificados ICP-Brasil válidos OU, em alguns casos, certificados auto-assinados explicitamente registrados via portal de homologação. Use este ambiente para todo desenvolvimento e testes — ele tem o mesmo contrato técnico que produção mas opera sobre dados sintéticos.
Produção exige certificado ICP-Brasil válido registrado no DIRETORIO do BACEN no momento da habilitação da instituição como PSP. A rotação de certificados (anual para A1) requer atualização do DIRETORIO com pelo menos 30 dias de antecedência. Falhar nessa rotação derruba a integração inteira — todos os pagamentos pendentes a partir do instante da expiração são rejeitados.
Perguntas Frequentes
O que é JWS no contexto do PIX?▾
Qual a diferença entre SPI, STR e DICT?▾
Por que o PIX usa ES256 ao invés de RS256?▾
O que é XMLDSig e como ele difere de JWS?▾
Como obter um certificado ICP-Brasil para PIX em sandbox?▾
O que é uma chave PIX EVP?▾
Ferramentas KeyLab para PIX
KeyLab inclui ferramentas dedicadas ao SPB brasileiro na categoria SPB do Calculator:
- SPB — STR (TED): assinatura e verificação de mensagens RSFN STR com XMLDSig RSA-SHA256.
- SPB — SPI (PIX): assinatura e verificação JWS com ES256 (ECDSA) ou RS256 (RSA) para PIX.
- SPB — DICT: operações sobre o diretório de chaves PIX com XMLDSig RSA-SHA256.
Acesse em /calculator e navegue até a categoria SPB.