🔑 Fernet — Criptografia Simétrica
Fernet é a solução mais segura e simples para criptografia de dados em repouso em Python. AES-128-CBC para cifrar, HMAC-SHA256 para autenticar — você não pode descriptografar sem também verificar a integridade.
📌 Por que Fernet é a Escolha Certa
Comparação com alternativas:
- •Texto plano: chave visível em qualquer editor de texto — inaceitável
- •Base64: não é criptografia, é apenas encoding — ainda exposto
- •AES puro: requer gerenciar IV, padding, modo de operação — error-prone
- •Fernet: uma linha de código, semanticamente seguro, autenticado — ideal
💡 Dica Prática
Sempre use from cryptography.fernet import Fernet. Nunca implemente criptografia própria — a biblioteca cryptography foi auditada por especialistas de segurança.
🔗 PBKDF2 — Derivação de Chave
PBKDF2 transforma qualquer valor (como o UUID do hardware) em uma chave criptográfica robusta. As muitas iterações tornam brute-force computacionalmente inviável.
📌 Parâmetros de PBKDF2
Configurações recomendadas para 2026:
- •Hash: SHA-256 (o padrão mais seguro disponível)
- •Iterations: mínimo 600.000 para uso em hardware moderno
- •Salt: 32 bytes aleatórios, armazenado junto com o hash
- •Length: 32 bytes (256 bits) para usar como chave AES-256
- •Library: hashlib.pbkdf2_hmac() — nativo do Python
💡 Dica Prática
Use 600.000+ iterações (recomendação OWASP 2024). Parece alto mas leva ~0.3 segundos no hardware moderno — aceitável para unlock de chave.
💻 UUID do Hardware como Chave
O UUID do hardware é único por máquina e imutável durante a vida útil do hardware. Usá-lo como material para PBKDF2 cria criptografia ligada à máquina específica.
📌 Como Obter o UUID do Hardware
Método multiplataforma para obter UUID:
- •Linux: cat /sys/class/dmi/id/product_uuid ou dmidecode -s system-uuid
- •macOS: ioreg -rd1 -c IOPlatformExpertDevice | grep UUID
- •Windows: wmic csproduct get UUID
- •Fallback: gerar UUID determinístico baseado em múltiplos identificadores de hardware
💡 Dica Prática
Teste o UUID antes de criptografar dados importantes. Se o UUID mudar após uma atualização de BIOS ou troca de hardware, seus segredos ficarão inacessíveis sem backup da chave original.
📁 Armazenamento em ~/.intelecto/.secrets
O arquivo ~/.intelecto/.secrets é onde as chaves cifradas vivem. Formato JSON simples, permissões restritivas e localização oculta por convenção.
📌 Estrutura do .secrets
Formato do arquivo de segredos:
- •{"OPENROUTER_API_KEY": "gAAA...token_fernet..."}
- •Cada chave: nome do segredo
- •Cada valor: token Fernet cifrado (começa com gAAA)
- •chmod 600: apenas o dono pode ler e escrever
- •.gitignore: ~/.intelecto/ deve estar no gitignore global
💡 Dica Prática
Configure um gitignore global (~/.gitignore_global) que exclui ~/.intelecto/ de qualquer repositório. Um acidente de git add . não deve vazar seus segredos.
📋 audit.log — Registro Imutável
O audit.log é a memória forense do INTELECTO. Cada ação significativa é registrada de forma append-only — o log só cresce, nunca tem linhas deletadas ou alteradas.
📌 Formato do Audit Log
Cada linha do log é um JSON estruturado:
- •{"ts": "2026-04-28T10:30:00Z", "user": "telegram:123", "action": "exec", "tool": "shell", "cmd": "ls -la", "result": "ok"}
- •ts: timestamp ISO 8601 com timezone
- •user: identificador do canal e usuário
- •action: tipo de ação (read, exec, deny, error)
- •tool: qual tool foi chamada (se aplicável)
- •result: ok, denied, error
💡 Dica Prática
Configure logrotate para o audit.log com a opção nocreate — preserva o arquivo original. Comprima logs antigos mas nunca delete. São evidência forense.
🔄 Rotação de Chaves
Chaves de API devem ser rotacionadas periodicamente. O secrets.py suporta múltiplas chaves com precedência para permitir rotação sem downtime.
📌 Processo de Rotação
Rotação sem interrupção de serviço:
- •1. Gerar nova chave Fernet
- •2. Re-criptografar segredos com a nova chave
- •3. Configurar: current_key = nova, fallback_key = antiga
- •4. Testar que serviço funciona com nova chave
- •5. Após 24h de estabilidade: remover fallback_key
- •6. Registrar a rotação no audit.log
💡 Dica Prática
Agende rotação automática de chaves com cron: uma vez por trimestre para uso pessoal, mensalmente para uso com dados sensíveis. O INTELECTO tem o script rotate_keys.py pronto.
✅ Resumo do Módulo 3.3
Próximo:
3.4 — IronClaw Zero-Trust