Aplicações Práticas da Criptografia
Objetivo: Explorar implementações práticas de criptografia em cenários reais, com foco em utilidades como JWT, OAuth e desafios de CTF.
1. JWT em APIs para Autenticação Stateless
Exemplo com Flask (Python)
from flask import Flask, request, jsonify
import jwt
import datetime
app = Flask(__name__)
SECRET_KEY = "chave_secreta"
@app.route('/login', methods=['POST'])
def login():
# Simular autenticação
user = {"id": 1, "username": "user"}
token = jwt.encode({
"user_id": user["id"],
"exp": datetime.datetime.utcnow() + datetime.timedelta(hours=1)
}, SECRET_KEY, algorithm="HS256")
return jsonify({"token": token})
@app.route('/protected', methods=['GET'])
def protected():
token = request.headers.get('Authorization').split()[1]
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
return jsonify({"message": "Acesso permitido", "user_id": payload["user_id"]})
except:
return jsonify({"error": "Token inválido"}), 401
if __name__ == '__main__':
app.run()
Utilidade: Implementar autenticação sem estado em APIs web, comum em microserviços.
2. OAuth 2.0 com Google para Login Social
Fluxo Básico
- Registrar app no Google Developer Console.
- Redirecionar usuário para:
https://accounts.google.com/oauth/authorize?client_id=YOUR_ID&redirect_uri=YOUR_URI&scope=email&response_type=code - Trocar código por token: POST para
https://oauth2.googleapis.com/token - Usar token para acessar APIs.
Exemplo em Python (requests)
import requests
# Trocar código por token
data = {
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_SECRET",
"code": "AUTH_CODE",
"grant_type": "authorization_code",
"redirect_uri": "YOUR_URI"
}
response = requests.post("https://oauth2.googleapis.com/token", data=data)
token = response.json()["access_token"]
# Acessar API
headers = {"Authorization": f"Bearer {token}"}
user_info = requests.get("https://www.googleapis.com/oauth2/v2/userinfo", headers=headers)
print(user_info.json())
Utilidade: Integrar login social em aplicações web, delegando autenticação a provedores confiáveis.
3. Desafio CTF: Quebrando um Hash Simples
Cenário
Você encontrou um hash MD5 em um CTF: 5d41402abc4b2a76b9719d911017c592 (corresponde a "hello").
Solução com hashcat
# Instalar hashcat se necessário
# Usar wordlist rockyou.txt
hashcat -m 0 -a 0 5d41402abc4b2a76b9719d911017c592 /path/to/rockyou.txt
Utilidade: Prática em quebra de hashes fracos para entender vulnerabilidades em CTFs de segurança.
4. Análise de Tráfego Criptografado com Wireshark
Wireshark é essencial para inspecionar protocolos criptografados como TLS.
Exemplo: Capturar Handshake TLS
- Abra Wireshark e selecione interface de rede.
- Filtre por
tls.handshakepara ver negociações. - Acesse um site HTTPS; veja Client Hello, Server Hello, troca de certificados.
Exemplo: Decriptar TLS (se tiver chave privada)
- Configure Wireshark: Edit > Preferences > Protocols > TLS > (Pre)-Master-Secret log filename.
- Use
SSLKEYLOGFILEno navegador para log de chaves. - Filtre por
httppara ver tráfego decriptado.
Utilidade: Depurar conexões seguras, detectar ataques como downgrade.
5. Obtendo Certificado SSL de um Site
Certificados SSL garantem identidade e encriptação em HTTPS.
Usando OpenSSL
# Obter certificado do site
openssl s_client -connect example.com:443 -servername example.com < /dev/null | openssl x509 -text -noout
Usando Navegador
- Clique no cadeado na barra de endereço.
- Selecione "Certificado" ou "Ver certificado".
- Veja detalhes: emissor, válido até, algoritmo.
Verificação
- Use
openssl verifypara checar cadeia de confiança. - Sites como SSL Labs (ssllabs.com) para análise completa.
Utilidade: Verificar segurança de sites, detectar certificados expirados ou fraudulentos.
Resumo
Foque em utilidades práticas como autenticação (JWT/OAuth) e desafios (CTF). Evite hashes quebrados em produção e sempre use bibliotecas atualizadas.