Skip to content

Glossary

Assinatura (criptográfica)

Prova criptográfica de autoria

By Published Updated

Uma assinatura criptográfica é uma pequena sequência de bytes que prova que uma mensagem específica foi produzida por alguém em posse de uma chave privada, sem revelar a chave privada. A verificação da assinatura requer apenas a chave pública correspondente (para algoritmos assimétricos) ou o segredo compartilhado (para simétricos).

O fluxo assimétrico básico (usando RSA, ECDSA ou Ed25519):

  1. O assinante faz o hash da mensagem (tipicamente SHA-256).
  2. O assinante criptografa o hash com sua chave privada. Saída: a assinatura.
  3. O verificador faz o hash da mensagem recebida com a mesma função de hash.
  4. O verificador descriptografa a assinatura com a chave pública. Saída: um hash.
  5. Se os dois hashes coincidirem, a assinatura é válida e a mensagem não foi adulterada.

Assinaturas simétricas (HMAC) usam um segredo compartilhado em vez de um par de chaves. O assinante e o verificador têm o segredo; ambos calculam HMAC(segredo, mensagem) e comparam. Mais rápido que o assimétrico; útil apenas quando as partes já confiam umas nas outras (não se usa HMAC para verificação por terceiros, pois qualquer um com o segredo pode forjar assinaturas).

Onde as assinaturas aparecem na pilha de trabalho: tokens JWT (o terceiro segmento), cadeias de certificados TLS, assinatura de código (notarização da Apple, Windows Authenticode), commits e tags do Git (assinados com GPG), transações do Bitcoin, distribuição de pacotes de software (gerenciadores de pacotes Linux, fórmulas do Homebrew). Cada contexto agrupa a assinatura com um algoritmo específico e uma gestão de chaves própria; o primitivo subjacente é o mesmo.

Assinaturas pós-quânticas e a migração à frente: RSA, ECDSA e Ed25519 são vulneráveis ao algoritmo de Shor em um computador quântico suficientemente grande. O programa de criptografia pós-quântica do NIST selecionou três esquemas de assinatura em 2024 — ML-DSA (Dilithium), SLH-DSA (SPHINCS+) e FN-DSA (Falcon) — como substitutos padronizados. Máquinas quânticas reais grandes o suficiente para quebrar RSA de 2048 bits ainda não existem, mas sistemas criptográficos com longa vida útil (certificados raiz, chaves de assinatura de código para software arquivado, backups criptografados destinados a permanecer confidenciais por décadas) estão migrando preventivamente. Assinaturas híbridas (clássicas + pós-quânticas) são a estratégia de transição típica. Referência: NIST — Padronização de Criptografia Pós-Quântica.

Exemplo prático

Assine a mensagem "transfer $100 to alice" com uma chave Ed25519. Primeiro passo: fazer o hash da mensagem com SHA-512, produzindo um digest de 64 bytes. Segundo passo: o algoritmo Ed25519 combina esse digest com o escalar de 32 bytes da chave privada via geração de nonce determinístico (RFC 8032), produzindo uma assinatura de 64 bytes (R, s). Terceiro passo: qualquer pessoa com a chave pública de 32 bytes pode verificar recomputando o ponto da curva e verificando que a equação sB = R + H(R, A, M) · A é válida. A assinatura é curta (64 bytes) e a verificação é rápida (~50 µs em uma CPU moderna). Ed25519 é determinístico — assinar a mesma mensagem com a mesma chave duas vezes produz bytes idênticos. Assinar a mesma mensagem com RSA-2048 produziria uma assinatura de 256 bytes; ECDSA sobre P-256 produziria ~71 bytes codificados em DER. A escolha do algoritmo equilibra tamanho da assinatura, velocidade de verificação e compacidade da chave.

Quando e por que isso importa

O uso incorreto de assinaturas é a vulnerabilidade criptográfica mais comum depois do hash de senhas. Os erros clássicos: assinar um blob JSON cuja forma canônica é ambígua (reorganizar chaves muda os bytes e quebra a assinatura, ou pior, permite que um atacante crie duas mensagens semanticamente diferentes com os mesmos bytes), usar um nonce ECDSA determinístico repetido em duas mensagens (o que vaza a chave privada — assim a chave mestra do PlayStation 3 foi extraída em 2010), e aceitar assinaturas sem verificar se o campo de algoritmo corresponde ao esperado (a classe de vulnerabilidade “alg: none” nas primeiras bibliotecas JWT). As regras defensivas: fixe o algoritmo no verificador, canonicalize a mensagem antes do hash (use COSE/JOSE, não JSON ad-hoc), prefira Ed25519 em vez de ECDSA para código novo, e armazene chaves privadas em HSMs ou enclaves com suporte de hardware quando o modelo de ameaça justificar. Referência: RFC 8032 — Algoritmo de Assinatura Digital de Curva Edwards (EdDSA).

Experimente a calculadora

Desmonte um token para ver os bytes brutos da assinatura junto com o header e o payload assinados.

Abrir o decodificador JWT →

Frequently asked questions

O que é uma assinatura criptográfica?
Uma assinatura criptográfica é uma prova matemática gerada com uma chave privada que permite que qualquer pessoa com a chave pública correspondente verifique que uma mensagem específica foi assinada pelo portador dessa chave e não foi alterada desde a assinatura.
Como as assinaturas criptográficas são usadas na prática?
Certificados TLS são assinados por autoridades certificadoras para que os navegadores possam confiar neles. Versões de software são assinadas para que os usuários possam verificar a autenticidade antes de instalar. JWTs carregam uma assinatura no terceiro segmento para que as APIs possam verificar que os tokens foram emitidos por uma autoridade conhecida e não foram adulterados.
Qual é a diferença entre uma assinatura digital e um MAC (código de autenticação de mensagem)?
Um MAC (ex.: HMAC) usa uma chave secreta compartilhada e prova integridade e autenticação apenas para as partes que possuem a mesma chave. Uma assinatura digital usa pares de chaves assimétricas — qualquer pessoa com a chave pública pode verificá-la, tornando-a adequada para afirmações públicas como certificados TLS ou software assinado.

Related

Published May 16, 2026 · Last reviewed May 31, 2026