Resumo

  • Anunciado em 5 de setembro de 2026, draft-templeman-scitt-framing-space-00 é um rascunho Informational individual. Não é RFC, consenso da IETF nem proposta de linguagem normativa.
  • Seis escolhas binárias de framing geraram 64 sequências de bytes, todas aceitas pelo decoder. Houve 64 data-hash diferentes, mas um único Sig_structure e a mesma assinatura válida.
  • Em 31 casos, decodificar e recodificar trocou silenciosamente os bytes pela forma canônica A. Se o serviço guardou apenas a recodificação, perdeu a preimage necessária para reproduzir o identificador já divulgado.

Dois operadores podem concordar que uma assinatura é válida e ainda assim procurar o registro em endereços diferentes. Um usa o hash do corpo recebido. Outro decodifica o corpo, emite novamente a mesma informação e calcula o hash dessa nova emissão. A semântica coincide; os bytes, não.

O rascunho de Nicholas Templeman, tornado público no anúncio de 5 de setembro, mede essa distância. O próprio documento evita uma conclusão maior: não define requisitos, não propõe redação e não fala pela IETF. Ele oferece um resultado reprodutível para trabalhos SCITT ainda em curso.

A assinatura vê uma fronteira menor

RFC 9052 manda construir um Sig_structure para assinar e verificar COSE. No COSE_Sign1, entram o contexto, atributos protegidos, dados externos autenticados e payload. Nem toda escolha usada para enquadrar o container CBOR exterior participa desse input.

RFC 8949 permite que o mesmo valor tenha mais de uma serialização. Arrays e maps podem usar comprimentos definidos ou indefinidos. Byte strings podem ser inteiras ou divididas em chunks. Um profile pode aceitar a presença ou ausência de uma tag. O decoder chega ao mesmo item, embora a rede tenha carregado outra sequência.

O objeto inicial A tem 165 octetos. O teste alterna seis eixos: tag 18; forma de comprimento do array exterior; forma do map de header não protegido; e codificação inteira ou fragmentada das byte strings de header protegido, payload e assinatura.

As 64 combinações variam entre 164 e 170 octetos. O cbor2 6.1.3 aceitou todas. Todas produziram o mesmo Sig_structure de 109 octetos. Por isso, a mesma assinatura pôde ser verificada 64 vezes.

Quando o SHA-256 foi aplicado aos bytes transmitidos, surgiram 64 data-hash distintos, sem colisão. É exatamente o que se espera de inputs diferentes. A assinatura também se comportou como esperado sobre seu input invariável. O risco nasce quando um painel resume as duas provas como “objeto válido”.

Uma operação sem erro pode destruir a evidência

Trinta e uma entradas retornaram exatamente aos bytes de A em um ciclo de leitura e nova emissão. O decoder não recusou nenhuma. A transformação, portanto, pode ocorrer como efeito normal de uma biblioteca.

Imagine que a API devolva o data-hash dos bytes recebidos e envie ao banco somente um valor parseado. O banco serializa esse valor quando precisa armazená-lo. Mais tarde, o serviço tenta auditar o ID usando o material salvo. Nos casos medidos, pode calcular o hash de A, não o da requisição original.

Se data-hash for chave de busca, deduplicação, registro, receipt ou segunda attestation, a perda deixa de ser interna. O mesmo conteúdo assinado aparece com duas identidades práticas. Um registro existente parece ausente. Uma segunda cópia passa por uma deduplicação que só comparava hashes.

O artefato de framing publica o procedimento e os resultados; o vetor de data-hash fornece o objeto inicial. A versão do decoder e a plataforma estão registradas, e um dos eixos foi recomputado independentemente em outra pilha.

Isso sustenta a observação técnica, não uma estatística sobre produção. O experimento também não varia largura de integers nem ordem de map keys. Portanto, 64 é uma demonstração do crescimento combinatório, não o limite do universo possível.

A fronteira correta vem antes do decoder

Listar framings proibidos é uma defesa fraca. Proibir tag ausente não resolve chunks nem comprimentos indefinidos; cada liberdade nova multiplica as combinações. A organização precisa definir a preimage, não apenas colecionar casos ruins.

Se a identidade é “como transmitido”, o serviço receptor deve preservar o corpo recebido em armazenamento imutável antes de decodificar. O hash é calculado sobre essa cópia e ligado a uma produção de bytes nomeada. A forma parseada e qualquer versão normalizada ficam como derivados com proveniência própria.

Se a identidade é uma forma determinística, o protocolo deve especificá-la e o receptor precisa rejeitar o que estiver fora dela. A seção 4.2 de RFC 8949 oferece uma base. O fato de um encoder emitir a preferred serialization não prova que o decoder aplicou uma política determinística à entrada.

O projeto as-transmitted, anterior à medição, usa nenhuma canonicalização e exige um seletor para a sequência exata definida pelo formato. Ele também é individual. O novo teste quantifica uma razão para essa precisão, mas não o transforma em padrão.

O hash não decide a autoridade de uso

RFC 9943 separa Signed Statement, Transparency Service, Receipt e avaliação. Os trabalhos atuais das APIs SCITT e do perfil CCF mostram por que data-hash pode se tornar coordenada real de inclusão e recuperação.

Ainda assim, cada prova tem voz limitada. Raw bytes registram o que um componente recebeu. A assinatura válida demonstra integridade do Sig_structure sob uma chave; a aplicação precisa verificar identidade e autorização. Receipt demonstra uma inclusão segundo regras do serviço. Nenhuma dessas etapas sozinha prova verdade semântica, atualidade ou permissão para agir.

Heng Lu pede realidade antes de narrativa. Aqui, a realidade não exige acusar uma empresa: decoder tolerante e encoder normalizador podem estar corretos isoladamente. A falha é tratá-los como conservadores da mesma evidência.

Sua primazia do código em execução leva o teste por gateway, fila, banco e API de leitura. A distinção entre capacidade técnica e autoridade impede que uma biblioteca, apenas porque consegue recodificar, ganhe o poder de renomear a prova fornecida ao cliente.

Canonicalização e wire hash não são respostas universais rivais. São escolhas de identidade. O erro é fazer uma escolha pública e destruir, no primeiro parse, a evidência que a justificava.

Sources