0Pricing
Cloud & IT Cert Prep · Aula

Hashing e integridade de dados

Aprenda como SHA-256, MD5 e HMAC produzem resumos de comprimento fixo que verificam se os dados não foram alterados durante o trânsito ou o armazenamento.

Hashing e integridade de dados é uma aula grátis de Cloud & IT Cert Prep no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cloud & IT Cert Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cloud & IT Cert Prep inclui 4 aulas no total.

O que é uma função de Hash?

Uma função de Hash criptográfica é um algoritmo matemático que recebe uma entrada de qualquer tamanho e produz uma saída de comprimento fixo chamada Hash, resumo ou impressão digital. As funções de Hash são unidirecionais: dado um Hash, deve ser computacionalmente inviável determinar a entrada original. Elas são determinísticas: a mesma entrada sempre produz o mesmo Hash. As funções de Hash são a base da verificação da integridade dos dados, das assinaturas digitais, do armazenamento de senhas e de muitos outros mecanismos de segurança.

Propriedades de funções de Hash seguras

Uma função de Hash criptográfica segura deve ter quatro propriedades principais. Resistência à pré-imagem: dado um resultado de Hash, deve ser computacionalmente inviável encontrar uma entrada que o produza. Resistência à segunda pré-imagem: dada uma entrada, deve ser inviável encontrar outra entrada com o mesmo Hash. Resistência a colisões: deve ser inviável encontrar duas entradas diferentes que produzam o mesmo resultado de Hash. Efeito Avalanche: alterar até mesmo um único bit da entrada causa um resultado de Hash completamente diferente, tornando as adulterações detectáveis.

# Avalanche effect demonstration
echo -n 'Hello' | sha256sum
# 185f8db32...  (completely different when one char changes)
echo -n 'Hello!' | sha256sum
# 334d016f7...  (entirely different hash)

# Same input ALWAYS produces same hash (deterministic)
echo -n 'Security+' | sha256sum
echo -n 'Security+' | sha256sum
# Both outputs are identical

MD5: quebrado e obsoleto

MD5 (Message Digest 5) produz um Hash de 128 bits e já foi amplamente utilizado. No entanto, pesquisadores demonstraram ataques de colisão contra o MD5 em 2004 — o que significa que é possível encontrar duas entradas diferentes que produzem o mesmo Hash. Isso é catastrófico para a verificação da integridade: um invasor poderia substituir um arquivo malicioso por outro que tivesse o mesmo Hash MD5 do original. O MD5 está completamente quebrado para a segurança criptográfica e não deve ser usado para verificação da integridade, assinaturas digitais ou Hash de senhas. Ele ainda é usado às vezes em somas de verificação sem finalidade de segurança (verificação de arquivos legados), o que é aceitável apenas para detectar corrupção acidental.

Família SHA: SHA-1, SHA-256, SHA-3

A família Secure Hash Algorithm (SHA) é o conjunto mais importante de funções de Hash para a Security+. O SHA-1 (160 bits) foi o padrão durante anos, mas foi quebrado por um ataque de colisão prático em 2017 (o projeto SHAttered do Google) — e agora está obsoleto. O SHA-256 (parte da família SHA-2, com saída de 256 bits) é o padrão atual do setor para assinaturas digitais, certificados TLS e verificação da integridade de arquivos. O SHA-3 (Keccak) é um algoritmo alternativo da NIST que oferece resistência a ataques direcionados à estrutura do SHA-2, embora o SHA-256 continue sendo a escolha predominante para a maioria das aplicações.

# Common hash computations
echo -n 'password123' | sha256sum
# a665a4592...64 hex chars = 256 bits

echo -n 'password123' | sha512sum  
# b109f3bb...128 hex chars = 512 bits (SHA-512)

# File integrity check
sha256sum /path/to/downloaded_file.iso > file.sha256
sha256sum -c file.sha256
# file.iso: OK

Funções de Hash para armazenamento de senhas

Armazenar senhas em texto simples nunca é aceitável. Quando um usuário cria uma senha, um Hash é armazenado no banco de dados em vez da própria senha. Quando o usuário faz login, a senha informada é transformada em Hash e comparada com o Hash armazenado. No entanto, o SHA-256 padrão é rápido demais para o armazenamento de senhas — os invasores usam GPUs para testar bilhões de Hashes por segundo contra bancos de dados de senhas roubados. Funções de Hash de senhas desenvolvidas especificamente para essa finalidade, como bcrypt, PBKDF2 e Argon2, acrescentam custo computacional (fatores de trabalho) e requisitos de memória que tornam inviável a quebra em massa.

# bcrypt hash example (Python-style pseudocode)
import bcrypt
password = b'mySecretPassword'
# Hash with work factor of 12 (2^12 = 4096 iterations)
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
# Stored in DB: $2b$12$H0qS/LkPkAiH8KlxJb3lFuK...

# Verify (never compare raw hashes for bcrypt)
bcrypt.checkpw(password, hashed)  # Returns True

Uso de Salt: derrotando tabelas arco-íris

Uma tabela arco-íris é uma tabela de consulta pré-computada que relaciona senhas comuns aos seus Hashes — permitindo que um invasor consulte instantaneamente um Hash e descubra a senha original. Para derrotar as tabelas arco-íris, os Hashes de senhas devem receber um Salt. Um Salt é um valor aleatório adicionado à senha antes do cálculo do Hash, tornando o Hash de cada usuário único, mesmo que dois usuários tenham a mesma senha. O Salt é armazenado junto com o Hash (não precisa ser secreto). Mesmo que um invasor tenha todo o seu banco de dados de senhas, as tabelas arco-íris pré-computadas serão inúteis, pois cada Hash usou um Salt diferente.

# Salt demonstration
# Without salt: same password = same hash (rainbow table attack works)
# SHA256('password123') = always the same hash

# With salt: same password + random salt = unique hash
# SHA256('password123' + 'aBc8xZ') = unique hash for this user
# SHA256('password123' + 'mK2pYq') = completely different hash

# The salt is stored in the database alongside the hashed value
# Format: $salt$hash or combined as in bcrypt output

HMAC: adicionando autenticação ao Hashing

HMAC (Hash-based Message Authentication Code) é uma construção que usa uma função de Hash com uma chave secreta para produzir um código de autenticação. Diferentemente de um Hash simples, um HMAC só pode ser calculado e verificado por partes que conhecem a chave secreta. Isso fornece tanto integridade (detectando alterações) quanto autenticação (comprovando que a mensagem veio de alguém que possui a chave). O HMAC-SHA256 é amplamente usado na autenticação de APIs (assinatura de solicitações de API), em tokens JWT e em operações MAC do TLS. Ele impede que um invasor que intercepte uma mensagem a substitua por uma alternativa especialmente criada.

# Compute HMAC-SHA256 with OpenSSL
openssl dgst -sha256 -hmac 'my-secret-api-key' -hex api_request.json
# Output: HMAC-SHA256(api_request.json)= 3d4e2f...

# Only someone with 'my-secret-api-key' can generate or verify this HMAC
# Used in AWS Signature V4 for API authentication
# Used in JWT HS256 algorithm for token integrity

Funções de Hash em assinaturas digitais

As funções de Hash desempenham um papel central nas assinaturas digitais. Ao assinar um documento grande, você não criptografa o documento inteiro com a chave privada (o que seria extremamente lento). Em vez disso, você: (1) calcula o Hash do documento (rapidamente, produzindo um resumo pequeno de comprimento fixo) e, em seguida, (2) assina o Hash pequeno com a chave privada. A assinatura é apenas um Hash criptografado. A verificação segue o mesmo padrão: descriptografa a assinatura para obter o Hash, calcula o Hash do documento de forma independente e compara os resultados. O SHA-256 é obrigatório em todos os certificados PKI modernos; o SHA-1 é proibido em certificados novos.

Monitoramento da integridade de arquivos (FIM)

Monitoramento da integridade de arquivos (FIM) usa funções de Hash para detectar alterações não autorizadas em arquivos críticos do sistema. Como referência inicial, a ferramenta FIM calcula o Hash de todos os arquivos monitorados e armazena os Hashes com segurança. Periodicamente (ou continuamente), ela calcula novamente o Hash dos arquivos e compara os resultados com a referência inicial. Qualquer divergência indica que um arquivo foi modificado — potencialmente por um malware ou por uma ação não autorizada de um administrador. Ferramentas FIM como o Tripwire, o AIDE (Linux) e a própria verificação de integridade do Windows usam Hashes SHA-256. O FIM é exigido por estruturas de conformidade como a PCI-DSS para proteger ambientes com dados de titulares de cartões.

# AIDE (Advanced Intrusion Detection Environment) - Linux FIM
# Initialize baseline database
aide --init
# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

# Check for changes (run via cron daily)
aide --check
# Output shows any files that were added, changed, or deleted
# File: /etc/passwd changed
# MD5 : old_hash != new_hash

Somas de verificação versus Hashes criptográficos

É importante distinguir somas de verificação de Hashes criptográficos. Somas de verificação como o CRC32 são projetadas para detectar corrupção acidental de dados durante a transmissão — são rápidas e simples, mas podem ser facilmente forjadas por um invasor. Hashes criptográficos (SHA-256) são projetados para resistir a colisões e evidenciar adulterações, mesmo diante de manipulação mal-intencionada. Use somas de verificação quando precisar apenas verificar se um download não foi corrompido durante a transmissão; use Hashes criptográficos quando precisar verificar se um arquivo não foi adulterado intencionalmente por um adversário.

Ataques de colisão de Hash na prática

Os ataques de colisão de Hash têm impacto no mundo real. Em 2017, pesquisadores criaram dois arquivos PDF diferentes com o mesmo Hash SHA-1 — demonstrando que certificados SHA-1 poderiam ser forjados. Em 2008, pesquisadores usaram colisões do MD5 para criar um certificado de CA falso que parecia legítimo. Esses ataques explicam por que os navegadores rejeitam certificados MD5 e SHA-1 e por que as autoridades certificadoras devem usar no mínimo SHA-256. Entender os ataques de colisão ajuda você a explicar por que são tomadas decisões de descontinuação de algoritmos e por que dizer “mas ele ainda produz um Hash” não é um argumento suficiente para usar algoritmos quebrados.

Verificação rápida

Teste sua compreensão dos conceitos de CompTIA Security+ (SY0-701) abordados nesta lição.

Recapitulação da lição

Nesta lição, você aprendeu que: as funções de Hash produzem resumos de comprimento fixo para a verificação da integridade; MD5 e SHA-1 estão quebrados e obsoletos; o SHA-256 é o padrão atual; o uso de Salt derrota os ataques de tabelas arco-íris; e o HMAC adiciona autenticação ao Hashing usando uma chave secreta compartilhada. A seguir, exploraremos Troca de chaves e criptografia híbrida.

Perguntas Frequentes

A aula “Hashing e integridade de dados” é grátis?

Sim — o texto completo de “Hashing e integridade de dados” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cloud & IT Cert Prep, atualize para CoddyKit PRO. O curso de Cloud & IT Cert Prep inclui 4 aulas no total.

O que vou aprender em “Hashing e integridade de dados”?

Aprenda como SHA-256, MD5 e HMAC produzem resumos de comprimento fixo que verificam se os dados não foram alterados durante o trânsito ou o armazenamento. Você pratica Cloud & IT Cert Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Cloud & IT Cert Prep?

Nenhuma experiência prévia é necessária. Cloud & IT Cert Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Hashing e integridade de dados”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Cloud & IT Cert Prep?

Sim. Cada aula de Cloud & IT Cert Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Algoritmos de criptografia simétrica
  2. Criptografia assimétrica e pares de chaves
  3. Hashing e integridade de dados
  4. Troca de chaves e criptografia híbrida
← Voltar para Cloud & IT Cert Prep