Iniciante Criptografia

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

AlgoritmoBase matemáticaTamanho típicoObservação
RSA-PSSFatoração2048-4096 bPadrão atual para RSA
ECDSACurva elíptica256-384 bCompacto, usado em TLS
Ed25519Curva Curve25519256 bModerno, 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).