No description
Find a file
2026-09-01 13:16:29 +02:00
.woodpecker chore: migrate CI to .woodpecker/{push,branch}.yml 2026-09-01 13:16:29 +02:00
src feat: add dependencies and fix signatures for security lesson 2026-09-01 13:16:29 +02:00
tests feat: add dependencies and fix signatures for security lesson 2026-09-01 13:16:29 +02:00
.gitignore Initial commit 2026-09-01 11:16:07 +00:00
Cargo.lock feat: add dependencies and fix signatures for security lesson 2026-09-01 13:16:29 +02:00
Cargo.toml feat: add dependencies and fix signatures for security lesson 2026-09-01 13:16:29 +02:00
LICENSE chore: add AGPL-3.0 license and standard .gitignore 2026-09-01 13:16:29 +02:00
README.md feat: add dependencies and fix signatures for security lesson 2026-09-01 13:16:29 +02:00

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

  1. Implementar calcular_hash com algoritmo DJB2 (hash * 33 + byte)
  2. Implementar verificar_hash comparando hash calculado com esperado
  3. Implementar criptografar_cesar deslocando caracteres no alfabeto
  4. Implementar descriptografar_cesar revertendo o deslocamento
  5. Implementar validar_senha verificando cada requisito da política
  6. Implementar analisar_vulnerabilidades detectando padrões suspeitos
  7. Implementar classificar_ameaca usando o nível mais grave encontrado
  8. Implementar gerar_relatorio_seguranca e sanitizar_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 + base para 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