Glossary
Assinatura (criptográfica)
Prova criptográfica de autoria
By Buğra SözeriPublished 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):
- O assinante faz o hash da mensagem (tipicamente SHA-256).
- O assinante criptografa o hash com sua chave privada. Saída: a assinatura.
- O verificador faz o hash da mensagem recebida com a mesma função de hash.
- O verificador descriptografa a assinatura com a chave pública. Saída: um hash.
- 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