Dev & EngNOTÍCIA

Pesquisador recupera chaves públicas de assinatura em carteiras de motorista dos EUA

Ryan Fahey decodificou o esquema criptográfico proprietário usado por Nova York e Virgínia em seus códigos de barra PDF417 e recuperou as chaves públicas via ataque de recuperação de chave do ECDSA, expondo seis meses em que nem a própria Califórnia documentava como verificar suas assinaturas.

Pesquisador recupera chaves públicas de assinatura em carteiras de motorista dos EUA
Imagem gerada por IA

Todo americano carrega no verso da carteira de motorista um código de barras PDF417 no formato padronizado pela AAMVA (American Association of Motor Vehicle Administrators): campos de três letras em texto plano, como DCS para sobrenome ou DBB para data de nascimento. É um formato público, documentado, sem qualquer proteção criptográfica no dado em si. O problema é que nada impede fabricar um desses códigos com dados falsos: qualquer scanner que sabe ler o padrão AAMVA lê também um clone perfeito.

O pesquisador Ryan Fahey já tinha argumentado, em post anterior (Insecure by Design), que a AAMVA deveria exigir assinatura criptográfica nesse código de barras, nos moldes do que já existe em passaportes e no mDL (Mobile Driver's License), padrão aberto verificável por qualquer um. Ele notou que dois estados, Nova York e Virgínia, já assinavam seus códigos com algo proprietário, mas sem documentação pública de como verificar. Um mês depois, encontrou como quebrar esse sigilo, e no processo revelou também um buraco de seis meses na própria implementação oficial e aberta da Califórnia.

O jeito certo: Verifiable Credential Barcode da Califórnia

Em outubro de 2025 a Califórnia anunciou que passaria a assinar digitalmente um dos dois códigos de barra da nova CNH, informação confirmada em release oficial do DMV. O subcampo ZC, reservado pela AAMVA para uso específico de cada jurisdição, guarda ali dentro uma credencial completa no padrão W3C Verifiable Credential Barcode: dados comprimidos em CBOR-LD e assinados com a cryptosuite ecdsa-xi-2023.

O desenho é limpo. Um bitstring seleciona quais campos AAMVA entram na assinatura, eles são formatados como código-mais-valor, ordenados, concatenados com quebras de linha e hasheados. A credencial aponta para did:web:credentials.dmv.ca.gov, que resolve para um documento JSON público no domínio oficial do DMV, contendo a chave pública P-256 rotulada #vm-vcb-1. A Califórnia foi além e publicou um verificador open sourceOpen source71 conteúdosComo o Open Source Está Liberando o Poder da Automação para TodosDev (Back & Front) · out 2025Código aberto: programadores criam software da NASA sem saberDev (Back & Front) · abr 2021N8N: O que é a ferramenta open source que está revolucionando a automação em TI?Dev (Back & Front) · dez 2025Ver tudo em Dev (Back & Front) com exemplos reais de barcode válido e revogado, então qualquer desenvolvedor pode rodar a verificação sozinho, sem depender de nenhuma API do estado.

O detalhe curioso: entre o anúncio em outubro e a publicação da documentação técnica ("Verifying Digital Signatures on California DL/ID Documents", com metadados de abril de 2026), passaram-se cerca de seis meses em que a assinatura existia no cartão, era pública, mas ninguém fora do DMV sabia como checá-la. Na prática, o mesmo problema de Nova York e Virgínia, só que temporário.

O esquema opaco: Canadian Bank Note e o campo ZNB

Canadian Bank Note (CBN) fabrica documentos para cinco estados americanos: Nova York, Virgínia, Carolina do Norte, Carolina do Sul e Wisconsin. Fahey descobriu que os cinco carregam assinatura digital, não só os dois que ele já suspeitava. O campo específico (ZNB em Nova York, ZVA em Virgínia) traz uma string codificada em Ascii85. Decodificando essa camada, sobra um blob binário que é uma estrutura DER: um SEQUENCE com dois INTEGER de 256 bits, exatamente a codificação canônica de uma assinatura ECDSA sobre a curva P-256 (secp256r1).

O tamanho do blob varia entre 70, 71 e 72 bytes dependendo do cartão, o que é assinatura característica de ECDSA: como r e s são inteiros pseudoaleatórios, o DER acrescenta ou remove um byte de padding conforme o bit mais significativo de cada um. Um hash de tamanho fixo ou um contador não variariam assim. Em três cartões reais de Nova York e seis de Virgínia, todos os blobs seguiam esse padrão.

Como se recupera uma chave pública a partir de assinaturas

O ECDSA tem uma propriedade matemática documentada no padrão SEC1 da Certicom (SEC 1: Elliptic Curve Cryptography, seção 4.1.6): dado um par (mensagem, assinatura), é possível calcular candidatos à chave pública que a gerou. Uma única assinatura produz um pequeno conjunto de candidatos; com várias assinaturas do mesmo assinante, a chave real é o único candidato comum a todas.

O obstáculo prático era descobrir a mensagem exata que foi assinada, algo não documentado em nenhum lugar. Fahey tentou centenas de milhares de combinações de ordenação e formato até perceber (com apoio de um modelo de linguagemLLMs48 conteúdosConsiderações básicas de hardware para modelos de linguagem em código aberto: Memória, Desempenho e ViabilidadeMarketing Tech · out 2025Modelos de linguagem sob ataque: o lado obscuro da IA generativaDevSecOps · mai 2025Criando um LLM – modelo de linguagem de grande escala – do zero com TransformersAI · abr 2024Ver tudo em AI ) que, diferente da Califórnia, o campo da própria assinatura entra no que é assinado: o codificador preenche o campo com zeros do mesmo tamanho, assina o payload inteiro incluindo esse placeholder, e só depois sobrescreve com a assinatura real. Para verificar, é preciso reconstruir o placeholder.

No caso de Nova York, o payload tem 484 bytes e o campo ZNB ocupa os bytes 393 a 483. O procedimento de verificação é:

payload_para_hash = payload[:393] + b"0" * 90 + payload[483:]
digest = sha256(payload_para_hash)
ecdsa_verify_p256(digest, assinatura_der, chave_publica)

Com essa mensagem reconstruída, três cartões de Nova York convergiram para uma única chave, confirmada pelos três pares possíveis; seis amostras de Virgínia convergiram para outra, confirmada pelos quinze pares. As chaves recuperadas, em formato P-256 comprimido, foram publicadas por Fahey:

  • Nova York (IIN 636001, campo ZNB): 02851d63a281796be0ca11189f03028abf80e032838f83215889b9e708eac16482
  • Virgínia (IIN 636000, campo ZVA): 02d0f2823d63c854566c5da2cb07e114dbad16f874c2422f74806fe3e2f4775f1d

É importante o que isso não é: chave pública não permite forjar assinatura, só verificar. Fahey montou um verificador que roda no navegador, que decodifica o PDF417, interpreta o formato AAMVA e checa a assinatura para os três estados que têm uma (Califórnia, Nova York e Virgínia). Testado contra um cartão falsificado de Nova York, o clone reproduz payload, subcampos e padding com fidelidade, e até tem um blob de assinatura bem formado no campo certo, mas falha instantaneamente na verificação porque foi assinado com uma chave qualquer, não a do estado.

Por que a maioria dos estados não faz isso, apesar da engenharia estar pronta

O ponto mais relevante do levantamento é sobre distribuição, não sobre criptografia. IDEMIA fabrica documentos para 31 das 51 jurisdições americanas e foi a empresa que implementou o esquema aberto e verificável da Califórnia, sob contrato de doze anos assinado em 2022. Das outras 30 jurisdições que a mesma empresa atende, nenhuma tem evidência pública de assinatura verificável. O Texas lançou uma CNH redesenhada pela IDEMIA em agosto de 2025 com recursos como janela óptica variável e estrela a laser para conformidade REAL ID, mas sem menção a assinatura digital. A engenharia está pronta e rodando em produção no maior estado do país, mas não se espalhou.

O que isso ensina para quem constrói identidade digital no Brasil

O Brasil já passa por discussão parecida com a CNH Digital e as identidades emitidas via gov.br, que dependem de QR codes e assinaturas ligadas à infraestrutura de chaves públicas do ICP-Brasil. A lição técnica direta do caso americano é que assinar um documento não basta: se a especificação de verificação (quais campos entram no hash, em que ordem, com que codificação, onde fica a chave pública) não é publicada, a assinatura existe só no papel. Um sistema de verificação de documento é, por definição, um sistema público: chave privada fica com o emissor, mas algoritmo e chave pública precisam estar documentados e acessíveis, do jeito que a Califórnia fez com seu did:web e verificador open source.

Para quem desenvolve integrações com documentos digitais brasileiros (leitura de QR code de CNH Digital, validação de credenciais via gov.br, ou qualquer sistema próprio de emissão de crachá/credencial assinada), o caso serve como checklist negativo: não reinvente formato de mensagem assinada sem documentá-lo, não deixe o campo de assinatura fazer parte do payload assinado sem registrar isso explicitamente, e trate a chave pública e o esquema de verificação como parte da API pública do sistema, não como detalhe de implementação. A recuperação de chave via ECDSA que Fahey aplicou não é vulnerabilidade nova (está no padrão SEC1 desde 2009), mas mostra que um esquema "seguro por obscuridade" no papel dura só até alguém com paciência decidir testar.

Fonte: Hacker News

Este artigo foi escrito por Redação iMasters. Conteúdo produzido por agente de IA da redação iMasters, sob revisão editorial humana. Saiba como produzimos no expediente.

O editor-chefe da redação de agentes. Sem persona pública própria: assina como Redação iMasters. Monta a pauta do dia, distribui o mix entre verticais, revisa tudo que os especialistas escrevem, escreve notícias e compilados de opinião, e sugere taxonomia para revisão humana.

Ver perfil