Hashes e CTFs
Objetivos da Aula
- Entender o que é uma função hash e suas principais propriedades.
- Conhecer os algoritmos de hash mais usados.
- Explorar por que hashes aparecem com frequência em desafios de CTF.
- Praticar geração e quebra de hashes em cenários simples.
1. O que é um Hash?
Um hash é o resultado de uma função matemática que mapeia dados de tamanho arbitrário (texto, arquivo, senha) para um valor de tamanho fixo (cadeia de bytes ou hexadecimal).
Exemplo:
1.1 Função Hash vs. Hash Criptográfico
- Hash genérico (ex.: CRC) detecta erros de transmissão.
- Hash criptográfico (ex.: MD5, SHA-256, bcrypt) oferece segurança contra inversão e colisões.
2. Propriedades de uma Função Hash Criptográfica
- Determinística: mesma entrada gera sempre o mesmo hash.
- Rápida de computar: eficiente para entradas grandes.
- Resistência a colisões: difícil encontrar duas entradas diferentes com o mesmo hash.
- Resistência a pré-imagem: dado o hash, difícil descobrir a entrada original.
- Avalanche Effect: pequena mudança na entrada altera drasticamente o hash.
3. Algoritmos de Hash Comuns
Algoritmo | Tamanho (bits) | Uso Típico |
---|---|---|
MD5 | 128 | Verificação geral (não seguro) |
SHA-1 | 160 | Histórico (desaconselhado hoje) |
SHA-256 | 256 | Assinaturas digitais, SSL/TLS |
bcrypt | variável | Armazenamento seguro de senhas |
Argon2 | variável | Password hashing moderno |
4. Exemplos de Uso do Hash no Dia a Dia
- Armazenamento de senhas: servidores guardam só o hash.
- Verificação de integridade: confirma download correto de arquivos.
- Blockchain: encadeamento de blocos via hashes.
5. Importância em CTFs
- Desafios de Cracking: fornecem hashes de flags ou senhas para quebrar com ferramentas.
- Forense Digital: validação de evidências e integridade forense.
- Verificação de Arquivos: organizadores exibem hash oficial para checar downloads.
- Protocolos e Autenticação: implementação de mecanismos seguros em desafios.
6. Demonstração Prática
import hashlib
texto = "CTF{exemplo_de_flag}"
print("MD5: ", hashlib.md5(texto.encode()).hexdigest())
print("SHA256:", hashlib.sha256(texto.encode()).hexdigest())
Exercício: modifique para ler
arquivo.txt
e imprimir seus hashes MD5 e SHA-256.
7. Ferramentas de Cracking
- John the Ripper: suporte a vários formatos e regras.
- hashcat: aceleração via GPU.
- hash-identifier: identifica tipo de hash.
8. Exercícios Propostos
- Gere hashes MD5 e SHA-1 de diferentes senhas.
- Quebre um hash MD5 de até 6 caracteres com John the Ripper.
- Compartilhe um arquivo com hash SHA-256 para verificação de colegas.
- Crie um mini-CTF: gere o hash de uma flag e desafie um amigo.
9. Recapitulação
- Hash: valor fixo de dados de qualquer tamanho.
- Propriedades criptográficas: segurança contra inversão e colisões.
- CTFs: hash em cracking, integridade e forense.