Pular para o conteúdo
ecdsa.com

Canonicalização

A transformação de dados em uma única representação em bytes acordada antes de calcular o hash ou assinar, para que entradas semanticamente iguais (com diferenças de espaços em branco, ordem das chaves, prefixos de namespace ou dobramento de cabeçalhos) produzam a mesma entrada para a assinatura.
Também escrito comoc14nJCSRFC 8785JSON Canonicalization Scheme

As assinaturas cobrem bytes, enquanto formatos como XML, JSON e e-mail admitem muitas codificações em bytes do mesmo conteúdo. Os esquemas de canonicalização fixam uma delas: a Exclusive XML Canonicalization para XML-DSig e SAML; o JSON Canonicalization Scheme (JCS, RFC 8785: chaves ordenadas, formatação de números do ECMAScript, sem espaços em branco) para JSON; os algoritmos simple e relaxed do DKIM para cabeçalhos e corpos de e-mail (RFC 6376 §3.4); o DER como forma canônica do ASN.1.

Toda canonicalização é uma superfície de ataque, porque o signatário e o verificador precisam implementá-la de forma idêntica e a aplicação precisa agir sobre o conteúdo canônico, e não sobre a entrada bruta; o encapsulamento de assinaturas XML (XSW) e os truques com o tamanho do corpo no DKIM exploram justamente essas brechas. Formatos como JWS e COSE contornam o problema assinando exatamente os bytes transmitidos (base64url(header).base64url(payload)), e por isso é mais fácil implementá-los corretamente.

Padrões e referências

Todos os termos