Resumo

  • Um Internet-Draft individual publicado em 5 de setembro de 2026 combinou seis escolhas binárias de codificação CBOR sobre um objeto COSE_Sign1 de 165 octetos.
  • As 64 combinações produziram 64 sequências e 64 data-hash distintos, sem colisões, mas uma única Sig_structure de 109 octetos; por isso a mesma assinatura foi válida em todas.
  • O decodificador comum não rejeitou nenhuma entrada. Trinta e uma foram silenciosamente reemitidas como a representação inicial num ciclo de leitura e escrita.
  • Uma execução independente do script e dos artefatos publicados confirmou o hash de A, os 64 hashes, zero rejeições e 31 normalizações.
  • Não houve quebra criptográfica nem incidente de produção. A decisão pendente é qual sequência o identificador nomeia e como preservar a capacidade de reproduzi-la.

O objeto lógico não guarda a sua embalagem

Na verificação de COSE_Sign1, a assinatura cobre uma construção definida. RFC 9052 inclui na Sig_structure o contexto, o cabeçalho protegido, os dados autenticados externos e a carga. Várias escolhas de enquadramento do recipiente CBOR ficam fora dessa construção.

Já o data-hash examinado no rascunho de medição resume todos os octetos transmitidos. Ele pode servir como endereço exato de um statement. Assim, uma parte que preserva a entrada e outra que preserva apenas o valor decodificado podem concordar sobre a assinatura e discordar sobre o identificador.

As duas operações funcionam como projetadas. A assinatura afirma integridade dentro de seu domínio. O hash distingue a forma binária inteira. O erro começa quando o sistema registra apenas “verificado” e omite qual forma foi usada para emitir o nome público.

Seis decisões, 64 preimagens

O objeto A começa com 165 octetos. O experimento alterna a presença da tag CBOR 18, array externo de comprimento definido ou indefinido e mapa de cabeçalhos desprotegidos também definido ou indefinido. Cabeçalho protegido, payload e assinatura são emitidos, cada um, como cadeia inteira ou fragmentada.

Nenhum valor interno muda. O artefato público registra 64 sequências entre 164 e 170 octetos. Todas têm SHA-256 diferente, sem colisão. Todas produzem a mesma Sig_structure de 109 octetos e aceitam a mesma assinatura.

O resultado é um piso. Larguras alternativas de inteiros e ordem de chaves de mapas ficaram fora do ensaio. O contexto de RFC 8949 deixa claro que CBOR comporta outras representações. Uma regra baseada apenas numa lista de enquadramentos proibidos não demonstra cobertura do espaço restante.

Quando o sucesso do parser apaga a entrada

As 64 entradas passaram pelo decodificador. Em 31 casos, decodificar e codificar novamente produziu exatamente A. Não apareceu erro, porque para a biblioteca o objeto semântico permaneceu válido.

Considere um serviço que recebe B, calcula hash(B) e guarda apenas A, a saída de sua biblioteca. O serviço consegue verificar a assinatura amanhã, mas não consegue recalcular hash(B) a partir do que reteve. Se o hash indexa um recibo, deduplica registros ou recebe outra atestação, a trilha documental deixa de fechar.

“Silencioso” não significa hostil. Tampouco há prova de que algum Transparency Service em produção descarte os bytes dessa maneira. O teste mostra apenas que uma resposta de parser não funciona como evidência de custódia.

Reproduzir a contagem sem inflar a conclusão

O autor publicou o vetor, os resultados e o script. Como o endpoint raw do GitHub falhou, o mesmo arquivo foi obtido pela Contents API e executado num diretório temporário com cópias dos JSON cujos hashes coincidiam com a publicação.

A saiu idêntico, com SHA-256 8595e4a4c8b93e7b1b7b798dc302a2b7d2890021f7eff372d79b32f78867e4ac. O programa encontrou novamente 64 data-hash, zero rejeições e 31 normalizações. A réplica usou cbor2 5.7.1; o texto relata 6.1.3 sobre CPython 3.13 e macOS arm64. A concordância sustenta a medida central, não uma alegação universal sobre implementações.

O Datatracker registra o documento como submissão individual, sem endosso da IETF, situação formal, fluxo RFC ou Area Director responsável. O próprio rascunho não especifica requisito. Não há assinatura forjada, colisão de hash, falha de primitiva ou incidente implantado.

A solução proposta ainda não é norma

O assunto entrou na Last Call do CCF Profile for COSE Receipts. Em mensagem de 5 de setembro, Nicholas Templeman apoiou o avanço do perfil e sugeriu que data-hash cobrisse os octetos como registrados, não uma reserialização. Ele chamou a observação de não bloqueante.

Trata-se de contribuição individual, não consenso nem redação adotada. O SCRAPI e o perfil CCF seguem como rascunhos do Working Group. RFC 9943 define a arquitetura SCITT, mas não transforma uma mensagem posterior em obrigação.

O Internet-Draft individual Canonical Payload Binding já descrevia as-transmitted: nenhuma canonicalização e a sequência exata como preimagem. jcs-n e cde-n aparecem como Withdrawn. A medição quantifica uma classe que essa opção procura fechar; não aprova a opção.