No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 55: Segurança Avançada (Cryptography, Secure Coding)
1. Narrativa
Na guerra cibernética, os mechas inimigos tentam interceptar comunicações, corromper dados e invadir sistemas. Segurança Avançada é o escudo digital da Academia Æther — criptografia protege mensagens, hashing garante integridade, e práticas de código seguro bloqueiam vulnerabilidades. O piloto que domina segurança não apenas sobrevive — ele garante que a esquadra inteira permaneça impenetrável.
2. Conceito
Segurança em Rust combina a segurança de memória da linguagem com práticas de criptografia:
- Hashing: Função unidirecional que gera fingerprint dos dados (DJB2, SHA-256)
- Criptografia simétrica: Mesma chave para cifrar e decifrar (César simplificado)
- Validação de senha: Verificação contra políticas de complexidade
- Sanitização: Remoção de caracteres perigosos de entrada do usuário
- Análise de vulnerabilidades: Detecção de SQL Injection, Buffer Overflow, etc.
3. Requisitos
- Implementar hash DJB2 para verificação de integridade
- Implementar cifra de César para criptografia simplificada
- Validar senhas contra políticas configuráveis
- Detectar vulnerabilidades em entradas
- Sanitizar entradas removendo padrões perigosos
4. Design de Dados
graph LR
A[Dados] --> B[calcular_hash]
B --> C[u64: fingerprint]
A --> D[criptografar_cesar]
D --> E[String cifrada]
E --> F[descriptografar_cesar]
F --> A
G[Entrada] --> H[sanitizar_entrada]
H --> I[Entrada segura]
G --> J[analisar_vulnerabilidades]
J --> K[Vec de Vulnerabilidade]
5. Diagrama de Fluxo
flowchart TD
A[Entrada Recebida] --> B[Analisar Vulnerabilidades]
B --> C{Vulnerabilidades?}
C -->|Sim| D[Classificar Ameaça]
D --> E[Gerar Relatório]
E --> F{Ameaça Critica?}
F -->|Sim| G[Bloquear + Alertar]
F -->|Não| H[Sanitizar + Prosseguir]
C -->|Não| I[Processar Normalmente]
6. Funções
| Função | Descrição |
|---|---|
calcular_hash |
Calcula hash DJB2 de uma string |
verificar_hash |
Verifica se dados correspondem ao hash |
criptografar_cesar |
Cifra de César para criptografia |
descriptografar_cesar |
Inverte a cifra de César |
validar_senha |
Valida senha contra política |
analisar_vulnerabilidades |
Detecta padrões perigosos |
classificar_ameaca |
Classifica nível de ameaça |
gerar_relatorio_seguranca |
Gera relatório completo |
sanitizar_entrada |
Remove caracteres perigosos |
7. Exemplo
let hash = calcular_hash("dados_secretos");
assert!(verificar_hash("dados_secretos", hash));
let cifrada = criptografar_cesar("MENSAGEM", 3);
assert_eq!(cifrada, "PHQVDJHP");
let decifrada = descriptografar_cesar(&cifrada, 3);
assert_eq!(decifrada, "MENSAGEM");
let relatorio = gerar_relatorio_seguranca(&["DROP TABLE users"]);
assert_eq!(relatorio.nivel_ameaca, NivelAmeaca::Alta);
Hashing criptográfico com SHA-256
Para integridade criptográfica, o crate sha2 fornece SHA-256 — um hash
unidirecional de 32 bytes, muito mais forte que o DJB2 (que serve apenas
para verificação rápida):
use sha2::{Digest, Sha256};
let digest = Sha256::digest(b"dados_secretos");
assert_eq!(digest.len(), 32);
// O mesmo dado sempre produz o mesmo digest
assert_eq!(Sha256::digest(b"dados_secretos"), digest);
// Dados diferentes produzem digests diferentes
assert_ne!(Sha256::digest(b"dados_alterados"), digest);
8. Missão
- Implementar
calcular_hashcom algoritmo DJB2 (hash * 33 + byte) - Implementar
verificar_hashcomparando hash calculado com esperado - Implementar
criptografar_cesardeslocando caracteres no alfabeto - Implementar
descriptografar_cesarrevertendo o deslocamento - Implementar
validar_senhaverificando cada requisito da política - Implementar
analisar_vulnerabilidadesdetectando padrões suspeitos - Implementar
classificar_ameacausando o nível mais grave encontrado - Implementar
gerar_relatorio_segurancaesanitizar_entrada
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- DJB2:
let mut hash = 5381u64; for byte in dados.bytes() { hash = hash * 33 + byte as u64; } - Cifra de César:
(ch - base + deslocamento) % 26 + basepara wrap-around - Para sanitização: use
.replace()múltiplas vezes ou um loop - SQL Injection: detecte
DROP,DELETE,INSERT,UPDATE,;,-- - Buffer overflow: dados maiores que 1024 bytes são suspeitos