Pular para conteúdo

Aula 07 – Assinaturas Digitais e Certificados (PKI) 📜

Como provar, digitalmente, que um documento foi realmente criado por você — e não por um impostor? Nesta aula você vai conhecer o mecanismo que dá validade jurídica a documentos eletrônicos e sustenta a confiança em toda a Internet.


✍️ Assinatura Digital: o Inverso da Cifragem Assimétrica

Lembra que na Aula 05 cifrávamos com a chave pública do destinatário e decifrávamos com a chave privada? A assinatura digital inverte esse fluxo:

graph LR
    A["Documento"] --> H["Hash do Documento (SHA-256)"]
    H -- "Cifra o HASH com a Chave PRIVADA do autor" --> S["Assinatura Digital"]
    S -- "Verifica com a Chave PÚBLICA do autor" --> V{"Hash bate?"}
    V -- Sim --> OK["Documento autêntico e íntegro"]
    V -- Não --> FAIL["Documento adulterado ou assinatura falsa"]

Uma assinatura digital garante três propriedades ao mesmo tempo:

  1. Autenticidade: só quem tem a chave privada poderia ter gerado aquela assinatura.
  2. Integridade: se o documento mudar 1 bit, o hash muda, e a assinatura deixa de bater.
  3. Não-repúdio: o autor não pode alegar depois que "não foi ele" — só ele tinha a chave privada.

🎫 O Problema da Confiança: quem garante que a chave pública é sua mesmo?

Se eu te mando minha "chave pública", como você sabe que ela realmente é minha, e não de um atacante fingindo ser eu? É aqui que entram os certificados digitais.

Um certificado digital é um documento que amarra uma chave pública a uma identidade (pessoa, empresa, servidor), assinado por uma terceira parte confiável.


🏛️ PKI: Infraestrutura de Chave Pública

PKI (Public Key Infrastructure) é o sistema completo que sustenta certificados digitais em escala global.

Componente Função
Autoridade Certificadora (CA) Emite e assina certificados, atestando identidades
Certificado Digital Documento (padrão X.509) com chave pública + identidade + assinatura da CA
Cadeia de Confiança CA raiz → CA intermediária → certificado do site
graph TD
    Root["CA Raiz (confiada pelo SO/navegador)"] --> Inter["CA Intermediária"]
    Inter --> Cert["Certificado de example.com"]
    Cert --> Site["Site https://example.com"]

Por que o cadeado verde no navegador aparece?

O navegador verifica se o certificado do site foi assinado por uma CA que ele já confia nativamente (essa lista de CAs raiz confiáveis vem pré-instalada no sistema operacional ou no navegador).


💻 Inspecionando um Certificado Real

$ # Verificando o certificado de um site real $ openssl s_client -connect example.com:443 -servername example.com < /dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates $ subject=CN = example.com $ issuer=C = US, O = DigiCert Inc, CN = DigiCert Global CA $ notBefore=Jan 1 00:00:00 2026 GMT $ notAfter=Dec 31 23:59:59 2026 GMT

📝 Exercícios de Fixação

  1. Básico: Quais três propriedades uma assinatura digital garante?
  2. Básico: Por que a assinatura digital cifra o hash do documento, e não o documento inteiro?
  3. Intermediário: Explique com suas palavras o papel de uma Autoridade Certificadora (CA).
  4. Intermediário: O que aconteceria se um site apresentasse um certificado autoassinado (não emitido por uma CA confiável)?
  5. Desafio: Pesquise o que é "certificate pinning" e por que aplicativos móveis às vezes o utilizam como camada extra de segurança.

🚀 Mini-Projeto: Assinando e Verificando um Documento

Objetivo: Usar OpenSSL para assinar digitalmente um arquivo e depois verificar a assinatura.

  1. Reaproveite o par de chaves RSA gerado na Aula 05 (privada.pem/publica.pem).
  2. Assine um arquivo: openssl dgst -sha256 -sign privada.pem -out arquivo.sig arquivo.txt.
  3. Verifique a assinatura: openssl dgst -sha256 -verify publica.pem -signature arquivo.sig arquivo.txt.
  4. Modifique 1 caractere do arquivo.txt e tente verificar de novo — confirme que a verificação falha.

Ir para Aula 08