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.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com