Assinatura Digital (Digital Signature)
Definição
Assinatura Digital (Digital Signature) é um mecanismo baseado em criptografia assimétrica usado para garantir a autenticidade, a integridade e o não-repúdio de informações digitais.
Ela funciona como uma versão eletrônica de uma assinatura manuscrita, mas muito mais segura e confiável.
Para gerar uma assinatura digital:
- A mensagem é primeiro processada por uma função de hash, gerando um resumo compacto;
- Esse resumo (hash) é então criptografado com a chave privada do emissor.
Para verificar uma assinatura:
- O receptor gera o hash da mensagem recebida;
- Descriptografa a assinatura usando a chave pública do remetente;
- Compara o hash gerado com o hash extraído da assinatura.
Se coincidirem, a mensagem é considerada autêntica e íntegra.
Por que usar
- Autenticidade: garante que a mensagem foi realmente enviada pelo autor.
- Integridade: assegura que a mensagem não foi alterada durante a transmissão.
- Não-repúdio: impede que o autor negue a autoria da mensagem.
- Compliance: é exigida em diversos processos legais e certificados digitais.
- Segurança: base para sistemas como assinatura de contratos eletrônicos e certificados SSL/TLS.
Exemplo prático (Python) — Criar e verificar assinatura digital
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization
# Gerar chave privada e pública
chave_privada = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
)
chave_publica = chave_privada.public_key()
# Mensagem original
mensagem = b"Programício é incrível!"
# Criar assinatura
assinatura = chave_privada.sign(
mensagem,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
# Verificar assinatura
try:
chave_publica.verify(
assinatura,
mensagem,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Assinatura válida!")
except Exception:
print("Assinatura inválida!")
Saída
Assinatura válida!
(Se a mensagem for alterada ou a assinatura inválida, a verificação falha)
O ciclo da assinatura digital
Assinatura:
[Mensagem Original] --> (Hash da Mensagem) --> (Criptografia com Chave Privada) --> [Assinatura Digital]
Verificação:
[Mensagem Original] --> (Hash da Mensagem)
[Assinatura Digital] --> (Descriptografia com Chave Pública) --> (Hash Extraído)
Comparação dos dois hashes
O emissor gera o hash e assina com sua chave privada.
O receptor recalcula o hash e verifica com a chave pública.