Pular para o conteúdo
ecdsa.com

Verificação de assinatura

A checagem com chave pública de que uma assinatura foi gerada sobre exatamente esta mensagem pela chave privada que corresponde a uma dada chave pública, com um algoritmo escolhido de antemão pelo verificador.
Também escrito comosignature verificationverify signature

As entradas são a chave pública, a mensagem (ou o digest dela), a assinatura e o algoritmo com seus parâmetros; a saída diz se a assinatura é válida ou inválida. Um verificador estrito também rejeita entradas malformadas: DER não mínimo, r ou s fora de 1…n−1, um S de EdDSA que não seja menor que a ordem do grupo, assinaturas brutas com o comprimento errado, pontos que não estão na curva e chaves do tipo errado.

A maioria dos erros “invalid signature” em produção não é criptográfica: foram assinados bytes diferentes (JSON reserializado, espaços em branco ou finais de linha alterados, falta da quebra de linha final), foi usado outro hash, uma assinatura DER chegou a um verificador de formato bruto ou vice-versa, a curva ou o comprimento do salt do PSS diferem, ou a chave errada foi selecionada. Verifique cada entrada separadamente; o verificador de assinaturas mostra qual curva, hash e codificação usou.

Regras de segurança que evitam quebras reais: fixe o algoritmo no lado do verificador em vez de lê-lo da mensagem (o alg do JWT, RFC 8725 §3.1); verifique antes de interpretar o payload ou de agir com base nele; verifique o vínculo entre chave e identidade (validação do caminho de certificados, kid do JWKS, known_hosts); e, em sistemas de consenso, fixe um único conjunto de regras de verificação, pois as bibliotecas divergem em casos-limite, como as verificações com cofator do EdDSA.

Padrões e referências

Todos os termos