Assinatura digital
Assinatura digital garante que uma mensagem ou documento foi criado por quem afirma ter criado — e que não foi alterado depois. Diferente da criptografia, o objetivo não é sigilo, mas autenticidade e não-repúdio.
Como funciona
ASSINAR
1. Calcula hash do documento (SHA-256)
2. Cifra o hash com a chave PRIVADA do autor
3. O resultado é a assinatura digital
VERIFICAR
1. Calcula hash do documento recebido
2. Decifra a assinatura com a chave PÚBLICA do autor
3. Compara os dois hashes — iguais = válido
A chave privada assina. A chave pública verifica. Apenas o dono da chave privada pode gerar uma assinatura válida.
Na prática com OpenSSL
# Gerar par de chaves RSA
openssl genrsa -out privada.pem 4096
openssl rsa -in privada.pem -pubout -out publica.pem
# Assinar arquivo
openssl dgst -sha256 -sign privada.pem -out assinatura.bin documento.txt
# Verificar assinatura
openssl dgst -sha256 -verify publica.pem \
-signature assinatura.bin documento.txt
# Saída esperada: Verified OK
Algoritmos
| Algoritmo | Base matemática | Tamanho típico | Observação |
|---|---|---|---|
| RSA-PSS | Fatoração | 2048-4096 b | Padrão atual para RSA |
| ECDSA | Curva elíptica | 256-384 b | Compacto, usado em TLS |
| Ed25519 | Curva Curve25519 | 256 b | Moderno, rápido, seguro |
Não-repúdio
Se Alice assina um contrato com sua chave privada, ela não pode negar depois — a assinatura é prova criptográfica de autoria. A chave privada é, por definição, exclusiva dela.
Isso é diferente de HMAC: HMAC usa chave compartilhada, então ambas as partes poderiam ter gerado o MAC. Assinatura digital usa par assimétrico — apenas o dono da privada assina.
Assinatura em código (JWT como exemplo)
JWTs (JSON Web Tokens) usam assinaturas digitais para garantir que o payload não foi adulterado:
Header.Payload.Assinatura
Header: {"alg": "RS256", "typ": "JWT"}
Payload: {"sub": "usuario@example.com", "role": "admin"}
Assinatura: RSA-SHA256(Base64(Header) + "." + Base64(Payload), chave_privada)
O servidor verifica com a chave pública. Se o payload for alterado, a assinatura não bate.
Certificados digitais e assinaturas
Um certificado X.509 é, essencialmente, um arquivo assinado digitalmente pela CA. A CA assina os dados do certificado com sua chave privada. O browser verifica com a chave pública da CA (presente no trust store do sistema).